AI-Generated Maths SolverRoshan Gehlot2025-12-31T03:55:56+00:00
PGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0iVVRGLTgiIC8+CiAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAsIG1heGltdW0tc2NhbGU9MS4wLCB1c2VyLXNjYWxhYmxlPW5vIiAvPgoKPHRpdGxlPkFJLUdlbmVyYXRlZCBNYXRocyBTb2x2ZXIgfCBJbnN0YW50IFN0ZXAtYnktU3RlcCBNYXRoIFNvbHV0aW9uczwvdGl0bGU+CjxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJTb2x2ZSBhbnkgbWF0aCBwcm9ibGVtIGluc3RhbnRseSB3aXRoIEFJLiBHZXQgYWNjdXJhdGUsIHN0ZXAtYnktc3RlcCBzb2x1dGlvbnMgZm9yIGFsZ2VicmEsIGNhbGN1bHVzLCBnZW9tZXRyeSwgdHJpZ29ub21ldHJ5LCBhbmQgbW9yZSB1c2luZyBvdXIgQUkgTWF0aCBTb2x2ZXIuIiAvPgo8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0iQUkgbWF0aCBzb2x2ZXIsIHN0ZXAtYnktc3RlcCBtYXRoIHNvbHV0aW9ucywgc29sdmUgZXF1YXRpb25zIG9ubGluZSwgQUkgYWxnZWJyYSBzb2x2ZXIsIEFJIGNhbGN1bHVzIHNvbHZlciwgbWF0aCBwcm9ibGVtIGdlbmVyYXRvciwgaW5zdGFudCBtYXRoIGFuc3dlcnMsIG9ubGluZSBtYXRoIHRvb2wsIEFJIGhvbWV3b3JrIHNvbHZlciIgLz4KPG1ldGEgbmFtZT0iYXV0aG9yIiBjb250ZW50PSJBSSBNYXRocyBTb2x2ZXIiIC8+CiAgPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJpbmRleCwgZm9sbG93LCBtYXgtc25pcHBldDotMSwgbWF4LWltYWdlLXByZXZpZXc6bGFyZ2UsIG1heC12aWRlby1wcmV2aWV3Oi0xIiAvPgogIDxtZXRhIG5hbWU9Imxhbmd1YWdlIiBjb250ZW50PSJFbmdsaXNoIiAvPgogIDxtZXRhIG5hbWU9ImRpc3RyaWJ1dGlvbiIgY29udGVudD0iZ2xvYmFsIiAvPgogIAogIDxtZXRhIG5hbWU9InJhdGluZyIgY29udGVudD0iR2VuZXJhbCIgLz4KICA8bWV0YSBuYW1lPSJyZXZpc2l0LWFmdGVyIiBjb250ZW50PSI3IGRheXMiIC8+CjxtZXRhIG5hbWU9InRoZW1lLWNvbG9yIiBjb250ZW50PSIjNEY0NkU1IiAvPgo8bWV0YSBuYW1lPSJhcHBsaWNhdGlvbi1uYW1lIiBjb250ZW50PSJBSSBHZW5lcmF0ZWQgTWF0aHMgU29sdmVyIiAvPgoKPCEtLSBDYW5vbmljYWwgLS0+CjxsaW5rIHJlbD0iY2Fub25pY2FsIiBocmVmPSJodHRwczovL3d3dy53cml0ZWNyZWFtLmNvbS9haS1tYXRocy1zb2x2ZXIvIiAvPgoKICA8IS0tIEZhdmljb25zIC0tPgogIDxsaW5rIHJlbD0iaWNvbiIgaHJlZj0iL2Zhdmljb24uaWNvIiAvPgogIDxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgc2l6ZXM9IjE4MHgxODAiIGhyZWY9Ii9hcHBsZS10b3VjaC1pY29uLnBuZyIgLz4KICA8bGluayByZWw9Imljb24iIHR5cGU9ImltYWdlL3BuZyIgc2l6ZXM9IjMyeDMyIiBocmVmPSIvZmF2aWNvbi0zMngzMi5wbmciIC8+CiAgPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS9wbmciIHNpemVzPSIxNngxNiIgaHJlZj0iL2Zhdmljb24tMTZ4MTYucG5nIiAvPgoKPCEtLSBPcGVuIEdyYXBoIC8gRmFjZWJvb2sgLS0+CjxtZXRhIHByb3BlcnR5PSJvZzp0eXBlIiBjb250ZW50PSJ3ZWJzaXRlIiAvPgo8bWV0YSBwcm9wZXJ0eT0ib2c6dXJsIiBjb250ZW50PSJodHRwczovL3d3dy53cml0ZWNyZWFtLmNvbS9haS1tYXRocy1zb2x2ZXIvIiAvPgo8bWV0YSBwcm9wZXJ0eT0ib2c6dGl0bGUiIGNvbnRlbnQ9IkFJLUdlbmVyYXRlZCBNYXRocyBTb2x2ZXIgfCBJbnN0YW50IE1hdGggU29sdXRpb25zIiAvPgo8bWV0YSBwcm9wZXJ0eT0ib2c6ZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkdldCBmYXN0LCBhY2N1cmF0ZSwgQUktZ2VuZXJhdGVkIHNvbHV0aW9ucyBmb3IgYW55IG1hdGggcHJvYmxlbS4gSWRlYWwgZm9yIHN0dWRlbnRzLCB0ZWFjaGVycywgYW5kIGxlYXJuZXJzIHByZXBhcmluZyBmb3IgZXhhbXMuIiAvPgo8bWV0YSBwcm9wZXJ0eT0ib2c6aW1hZ2UiIGNvbnRlbnQ9Imh0dHBzOi8vd3d3LndyaXRlY3JlYW0uY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzAzL2FpLW1hdGgtc29sdmVyLXNob3djYXNlLnBuZyIgLz4KPG1ldGEgcHJvcGVydHk9Im9nOnNpdGVfbmFtZSIgY29udGVudD0iQUkgTWF0aHMgU29sdmVyIiAvPgo8bWV0YSBwcm9wZXJ0eT0ib2c6bG9jYWxlIiBjb250ZW50PSJlbl9VUyIgLz4KCjwhLS0gVHdpdHRlciBDYXJkcyAtLT4KPG1ldGEgbmFtZT0idHdpdHRlcjpjYXJkIiBjb250ZW50PSJzdW1tYXJ5X2xhcmdlX2ltYWdlIiAvPgo8bWV0YSBuYW1lPSJ0d2l0dGVyOnVybCIgY29udGVudD0iaHR0cHM6Ly93d3cud3JpdGVjcmVhbS5jb20vYWktbWF0aHMtc29sdmVyLyIgLz4KPG1ldGEgbmFtZT0idHdpdHRlcjp0aXRsZSIgY29udGVudD0iQUkgTWF0aHMgU29sdmVyIOKAkyBHZXQgU3RlcC1ieS1TdGVwIE1hdGggU29sdXRpb25zIiAvPgo8bWV0YSBuYW1lPSJ0d2l0dGVyOmRlc2NyaXB0aW9uIiBjb250ZW50PSJTb2x2ZSBtYXRoIGluc3RhbnRseSB3aXRoIEFJLiBHZW5lcmF0ZSBkZXRhaWxlZCBzdGVwcyBmb3IgZXF1YXRpb25zLCBjYWxjdWx1cywgYWxnZWJyYSwgZ2VvbWV0cnksIGFuZCBtb3JlLiIgLz4KPG1ldGEgbmFtZT0idHdpdHRlcjppbWFnZSIgY29udGVudD0iaHR0cHM6Ly93d3cud3JpdGVjcmVhbS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMDMvYWktbWF0aC1zb2x2ZXItc2hvd2Nhc2UucG5nIiAvPgo8bWV0YSBuYW1lPSJ0d2l0dGVyOmNyZWF0b3IiIGNvbnRlbnQ9IkBXcml0ZUNyZWFtQUkiIC8+Cgo8IS0tIEluc3RhZ3JhbSAtLT4KPG1ldGEgcHJvcGVydHk9Im9nOnNlZV9hbHNvIiBjb250ZW50PSJodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL3dyaXRlY3JlYW1haS8iIC8+CjxtZXRhIG5hbWU9Imluc3RhZ3JhbTpzaXRlIiBjb250ZW50PSJAd3JpdGVjcmVhbWFpIiAvPgo8bWV0YSBuYW1lPSJpbnN0YWdyYW06aW1hZ2UiIGNvbnRlbnQ9Imh0dHBzOi8vd3d3LndyaXRlY3JlYW0uY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzAzL2FpLW1hdGgtc29sdmVyLXNob3djYXNlLnBuZyIgLz4KCiAgPCEtLSBBZGRpdGlvbmFsIFNFTyBNZXRhIFRhZ3MgLS0+CiAgPG1ldGEgbmFtZT0iZ2VvLnJlZ2lvbiIgY29udGVudD0iVVMiIC8+CiAgPG1ldGEgbmFtZT0iZ2VvLnBsYWNlbmFtZSIgY29udGVudD0iTmV3IFlvcmssIFVTQSIgLz4KICA8bWV0YSBuYW1lPSJnZW8ucG9zaXRpb24iIGNvbnRlbnQ9IjQwLjcxMjg7LTc0LjAwNjAiIC8+CiAgPG1ldGEgbmFtZT0iSUNCTSIgY29udGVudD0iNDAuNzEyOCwgLTc0LjAwNjAiIC8+CiAgPG1ldGEgbmFtZT0ibW9iaWxlLXdlYi1hcHAtY2FwYWJsZSIgY29udGVudD0ieWVzIiAvPgogIDxtZXRhIG5hbWU9IkhhbmRoZWxkRnJpZW5kbHkiIGNvbnRlbnQ9InRydWUiIC8+CiAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlIiAvPgoKPCEtLSBTY2hlbWEgTWFya3VwIChKU09OLUxEKSAtLT4KPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIj4KewogICJAY29udGV4dCI6ICJodHRwczovL3NjaGVtYS5vcmciLAogICJAdHlwZSI6ICJTb2Z0d2FyZUFwcGxpY2F0aW9uIiwKICAibmFtZSI6ICJBSSBHZW5lcmF0ZWQgTWF0aHMgU29sdmVyIiwKICAidXJsIjogImh0dHBzOi8vd3d3LndyaXRlY3JlYW0uY29tL2FpLW1hdGhzLXNvbHZlci8iLAogICJkZXNjcmlwdGlvbiI6ICJBSS1wb3dlcmVkIG1hdGggc29sdmVyIHRoYXQgaW5zdGFudGx5IGdlbmVyYXRlcyBzdGVwLWJ5LXN0ZXAgc29sdXRpb25zIGZvciBhbGdlYnJhLCBjYWxjdWx1cywgZ2VvbWV0cnksIHN0YXRpc3RpY3MsIGFuZCBtb3JlLiIsCiAgImFwcGxpY2F0aW9uQ2F0ZWdvcnkiOiAiRWR1Y2F0aW9uYWxBcHBsaWNhdGlvbiIsCiAgIm9wZXJhdGluZ1N5c3RlbSI6ICJBbGwiLAogICJvZmZlcnMiOiB7CiAgICAiQHR5cGUiOiAiT2ZmZXIiLAogICAgInByaWNlIjogIjAuMDAiLAogICAgInByaWNlQ3VycmVuY3kiOiAiVVNEIgogIH0sCiAgInB1Ymxpc2hlciI6IHsKICAgICJAdHlwZSI6ICJPcmdhbml6YXRpb24iLAogICAgIm5hbWUiOiAiV3JpdGVjcmVhbSBBSSBNYXRocyBTb2x2ZXIiLAogICAgInVybCI6ICJodHRwczovL3d3dy53cml0ZWNyZWFtLmNvbS8iCiAgfSwKICAiYWdncmVnYXRlUmF0aW5nIjogewogICAgIkB0eXBlIjogIkFnZ3JlZ2F0ZVJhdGluZyIsCiAgICAicmF0aW5nVmFsdWUiOiAiNC45IiwKICAgICJyZXZpZXdDb3VudCI6ICIyMDAwIgogIH0sCiAgImZlYXR1cmVMaXN0IjogWwogICAgIkFJLXBvd2VyZWQgbWF0aCBzb2x2aW5nIiwKICAgICJTdGVwLWJ5LXN0ZXAgc29sdXRpb25zIiwKICAgICJFcXVhdGlvbiBzb2x2ZXIiLAogICAgIkdyYXBoaW5nIGFuZCB2aXN1YWxpemF0aW9uIiwKICAgICJBbGdlYnJhLCBjYWxjdWx1cywgZ2VvbWV0cnkgc3VwcG9ydCIsCiAgICAiSG9tZXdvcmsgaGVscCIsCiAgICAiTWF0aCBleHBsYW5hdGlvbnMgYW5kIGJyZWFrZG93biIsCiAgICAiSW50ZXJhY3RpdmUgbGVhcm5pbmcgdG9vbHMiLAogICAgIk1hdGggcHJvYmxlbSBnZW5lcmF0b3IiCiAgXSwKICAib3BlcmF0aW5nU3lzdGVtIjogIldlYi1iYXNlZCIsCiAgInBlcm1pc3Npb25zIjogIkZyZWUgdG8gdXNlIgp9Cjwvc2NyaXB0PgoKICA8IS0tIEZvbnRzIGFuZCBDU1MgLS0+CiAgPCEtLSA8bGluayByZWw9InByZWNvbm5lY3QiIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20iIC8+CiAgPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tIiBjcm9zc29yaWdpbiAvPgogIDxsaW5rIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9T3V0Zml0OndnaHRANDAwOzUwMDs2MDA7NzAwJmZhbWlseT1TcGFjZStHcm90ZXNrOndnaHRANDAwOzUwMDs2MDA7NzAwJmRpc3BsYXk9c3dhcCIgcmVsPSJzdHlsZXNoZWV0IiAvPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvZm9udC1hd2Vzb21lLzYuMC4wL2Nzcy9hbGwubWluLmNzcyIgLz4gLS0+CiAgICA8c2NyaXB0IHR5cGU9ImltcG9ydG1hcCI+CiAgICAgIHsKICAgICAgICAiaW1wb3J0cyI6IHsKICAgICAgICAgICJyZWFjdCI6ICJodHRwczovL2VzbS5zaC9yZWFjdEAxOC4yLjAiLAogICAgICAgICAgInJlYWN0LWRvbSI6ICJodHRwczovL2VzbS5zaC9yZWFjdC1kb21AMTguMi4wIiwKICAgICAgICAgICJyZWFjdC1kb20vIjogImh0dHBzOi8vZXNtLnNoL3JlYWN0LWRvbUAxOC4yLjAvIiwKICAgICAgICAgICJAY29kZXNhbmRib3gvc2FuZHBhY2stcmVhY3QiOiAiaHR0cHM6Ly9lc20uc2gvQGNvZGVzYW5kYm94L3NhbmRwYWNrLXJlYWN0QDIuOC4wP2RlcHM9cmVhY3RAMTguMi4wJmRlcHM9cmVhY3QtZG9tQDE4LjIuMCIKICAgICAgICB9CiAgICAgIH0KICAgIDwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8va2l0LmZvbnRhd2Vzb21lLmNvbS9iYzA4MTc5MmQ0LmpzIiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIj48L3NjcmlwdD4KICAgIAogICAgPHN0eWxlPgo6cm9vdCB7CiAgICAtLXByaW1hcnktY29sb3I6ICMyZDJkMmQ7CiAgICAtLWFjY2VudC1jb2xvcjogIzRhOTBlMjsKICAgIC0tYmx1ZS1jb2xvcjogIzRhOTBlMjsKICAgIAogICAgLyogRGFyayB0aGVtZSBjb2xvcnMgKGRlZmF1bHQgYW5kIG9ubHkgdGhlbWUpICovCiAgICAtLWJnLWNvbG9yOiAjMDAwMDAwOwogICAgLS1zdXJmYWNlLWNvbG9yOiAjMmQyZDJkOwogICAgLS10ZXh0LWNvbG9yOiAjZTBlMGUwOwogICAgLS1ib3JkZXItY29sb3I6ICM0MDQwNDA7CiAgICAtLWlucHV0LWJnOiAjMmQyZDJkOwogICAgLS1pbnB1dC1ib3JkZXI6ICM0MDQwNDA7CiAgICAtLXBpbGwtYmc6ICMzMzMzMzM7CiAgICAtLWJ1dHRvbi1iZzogIzQwNDA0MDsKICAgIC0tc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICAtLWhlYWRlci1ib3JkZXI6ICM0MDQwNDA7CiAgICAtLWZvb3Rlci1iZzogIzJkMmQyZDsKICAgIC0tY2FyZC1iZzogIzMzMzMzMzsKICAgIC0tYmctc2Vjb25kYXJ5OiAjNDQ0NDQ0OwogICAgLS10ZXh0LXNlY29uZGFyeTogI2NjY2NjYzsKICAgIC0tYmx1ZS1ob3ZlcjogIzNhN2JjODsKfQoKLyogU2Nyb2xsYmFyIHdpZHRoICovCjo6LXdlYmtpdC1zY3JvbGxiYXIgewogIHdpZHRoOiAxMnB4Owp9CgovKiBUcmFjayAoYmFja2dyb3VuZCkgKi8KOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgYmFja2dyb3VuZDogIzFhMWExYTsgLyogZGFyayBiYWNrZ3JvdW5kICovCn0KCi8qIEhhbmRsZSAodGh1bWIpICovCjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogIGJhY2tncm91bmQ6ICM1NTU7IC8qIGRhcmsgZ3JheSAqLwogIGJvcmRlci1yYWRpdXM6IDZweDsKfQoKLyogSGFuZGxlIG9uIGhvdmVyICovCjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogIGJhY2tncm91bmQ6ICM3Nzc7Cn0KLyogQmFzZSBjaGF0IGJ1YmJsZSBzdHlsZXMgZm9yIGRhcmsgdGhlbWUgKi8KLmNoYXQtYnViYmxlLmFpIHsKICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2EzYTNhOyAvKiBNb3JlIHNwZWNpZmljIHRoYW4gLS1zdXJmYWNlLWNvbG9yICovCiAgICBjb2xvcjogdmFyKC0tdGV4dC1jb2xvcik7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjNTA1MDUwOyAvKiBNb3JlIHNwZWNpZmljIHRoYW4gLS1ib3JkZXItY29sb3IgKi8KICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDRweDsKICAgIG1hcmdpbi1sZWZ0OiAxNXB4OwogICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKfQoKLmNoYXQtYnViYmxlLmFpOjpiZWZvcmUgewogICAgY29udGVudDogJyc7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBib3R0b206IDA7CiAgICBsZWZ0OiAtOHB4OwogICAgd2lkdGg6IDhweDsKICAgIGhlaWdodDogOHB4OwogICAgYmFja2dyb3VuZC1jb2xvcjogIzNhM2EzYTsgLyogTWF0Y2hlcyB0aGUgYnViYmxlIGJhY2tncm91bmQgKi8KICAgIGNsaXAtcGF0aDogcG9seWdvbigxMDAlIDAsIDAlIDEwMCUsIDEwMCUgMTAwJSk7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgZWFzZTsKfQoKLmdpdGh1Yi1zdGFycywKLmdpdGh1Yi1sYWJlbCB7CiAgICBjb2xvcjogdmFyKC0tdGV4dC1jb2xvcik7Cn0KCi5iYWRnZS10b2dldGhlciB7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOwogICAgZm9udC1zaXplOiAwLjk1cmVtOwogICAgb3BhY2l0eTogMC44Owp9CgoqIHsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgUm9ib3RvLCBzYW5zLXNlcmlmOwp9CgovKiBXb3JkUHJlc3MgVGhlbWUgQ29tcGF0aWJpbGl0eSAtIEZ1bGwgUGFnZSBCYWNrZ3JvdW5kICovCmJvZHksIGh0bWwgewogICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50OwogICAgb3ZlcmZsb3cteDogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiAjMDAwMDAwICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwICFpbXBvcnRhbnQ7Cn0KCi8qIFdvcmRQcmVzcyBjb250YWluZXIgYWRqdXN0bWVudHMgLSBGdWxsIHdpZHRoICovCi5jb250YWluZXIsIC5jb250YWluZXItZmx1aWQsIC53cmFwcGVyLCAuY29udGVudCwgLm1haW4sIAouc2l0ZS1jb250ZW50LCAuZW50cnktY29udGVudCwgLnBhZ2UtY29udGVudCB7CiAgICBtYXgtd2lkdGg6IG5vbmUgIWltcG9ydGFudDsKICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6ICMwMDAwMDAgIWltcG9ydGFudDsKfQoKLyogRW5zdXJlIG91ciBjb250ZW50IHdvcmtzIHdpdGhpbiBXb3JkUHJlc3MgKi8KI2xhbmRpbmdTZWN0aW9uIHsKICAgIGJhY2tncm91bmQ6ICMwMDAwMDA7CiAgICBjb2xvcjogI2UwZTBlMDsKfQoKLyogRml4IGhlcm8gc2VjdGlvbiBjb250ZW50IGNlbnRlcmluZyAtIGtlZXAgY29udGVudCBjZW50ZXJlZCBidXQgYmFja2dyb3VuZCBmdWxsLXdpZHRoICovCi5oZXJvLXNlY3Rpb24gewogICAgdGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7CiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uICFpbXBvcnRhbnQ7CiAgICBhbGlnbi1pdGVtczogY2VudGVyICFpbXBvcnRhbnQ7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlciAhaW1wb3J0YW50Owp9CgouaGVyby1jb250ZW50LCAuaGVyby10ZXh0IHsKICAgIHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50OwogICAgbWFyZ2luLWxlZnQ6IGF1dG8gIWltcG9ydGFudDsKICAgIG1hcmdpbi1yaWdodDogYXV0byAhaW1wb3J0YW50OwogICAgbWF4LXdpZHRoOiA4MDBweCAhaW1wb3J0YW50OwogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDAgMjBweCAhaW1wb3J0YW50Owp9CgovKiBGaXggc3RhciBsb2dvIHBvc2l0aW9uaW5nIC0ga2VlcCBpdCBjZW50ZXJlZCAqLwouaGVyby1zZWN0aW9uIGgxIHsKICAgIHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50OwogICAgbWFyZ2luOiAwIGF1dG8gIWltcG9ydGFudDsKICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXIgIWltcG9ydGFudDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7CiAgICBnYXA6IDE1cHggIWltcG9ydGFudDsKfQoKLmhlcm8tc2VjdGlvbiBwIHsKICAgIHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50OwogICAgbWFyZ2luOiAwIGF1dG8gIWltcG9ydGFudDsKfQoKLyogRml4IHRoZSBhY3R1YWwgaW5wdXQgY29udGFpbmVyIGNsYXNzZXMgZnJvbSBIVE1MICovCi5pbnB1dC1vdXRlci1jb250YWluZXIgewogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAxMHB4ICFpbXBvcnRhbnQ7Cn0KCi5pbnB1dC1pbm5lci1jb250YWluZXIgewogICAgd2lkdGg6IDUwJSAhaW1wb3J0YW50OwogICAgbWF4LXdpZHRoOiA1MCUgIWltcG9ydGFudDsKICAgIG1hcmdpbjogMCBhdXRvICFpbXBvcnRhbnQ7Cn0KCi5pbnB1dC1pbm5lci1jb250YWluZXIudmVydGljYWwgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KSAhaW1wb3J0YW50OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpICFpbXBvcnRhbnQ7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCkgIWltcG9ydGFudDsKICAgIGJvcmRlci1yYWRpdXM6IDE2cHggIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDsKICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4gIWltcG9ydGFudDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50OwogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50Owp9CgouaW5wdXQtY29udHJvbHMtcm93IHsKICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXIgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkgIWltcG9ydGFudDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgIWltcG9ydGFudDsKICAgIGJvcmRlci10b3A6IG5vbmUgIWltcG9ydGFudDsKICAgIGJvcmRlci1yYWRpdXM6IDAgMCAxMnB4IDEycHggIWltcG9ydGFudDsKICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94ICFpbXBvcnRhbnQ7CiAgICBtaW4taGVpZ2h0OiA1MHB4ICFpbXBvcnRhbnQ7CiAgICBnYXA6IDEycHggIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDZweCAxMHB4ICFpbXBvcnRhbnQ7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kICFpbXBvcnRhbnQ7Cn0KCi8qIEZpeCBwcm9tcHQgaW5wdXQgc3R5bGluZyB0byBtYXRjaCBvcmlnaW5hbCAqLwoucHJvbXB0LWlucHV0IHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkgIWltcG9ydGFudDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgIWltcG9ydGFudDsKICAgIGNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7CiAgICBib3JkZXItcmFkaXVzOiAxMnB4IDEycHggMCAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAxcmVtIDEuNXJlbSAhaW1wb3J0YW50OwogICAgZm9udC1zaXplOiAxcmVtICFpbXBvcnRhbnQ7CiAgICBib3JkZXItYm90dG9tOiBub25lICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7CiAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50OwogICAgYm94LXNpemluZzogYm9yZGVyLWJveCAhaW1wb3J0YW50OwogICAgcmVzaXplOiBub25lICFpbXBvcnRhbnQ7CiAgICBtaW4taGVpZ2h0OiA2MHB4ICFpbXBvcnRhbnQ7CiAgICBtYXgtaGVpZ2h0OiAyMDBweCAhaW1wb3J0YW50OwogICAgb3V0bGluZTogbm9uZSAhaW1wb3J0YW50OwogICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKfQoKCgovKiBGaXggc3VnZ2VzdGVkIGFwcHMgc2VjdGlvbiAtIGNlbnRlcmVkIHdpdGggcHJvcGVyIHdpZHRoICovCi5zdWdnZXN0ZWQtYXBwcyB7CiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlciAhaW1wb3J0YW50OwogICAgYWxpZ24taXRlbXM6IGNlbnRlciAhaW1wb3J0YW50OwogICAgZmxleC13cmFwOiB3cmFwICFpbXBvcnRhbnQ7CiAgICBnYXA6IDEwcHggIWltcG9ydGFudDsKICAgIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50OwogICAgbWFyZ2luOiAwIGF1dG8gIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDIwcHggIWltcG9ydGFudDsKfQoKLnN1Z2dlc3RlZC1hcHAgewogICAgbWFyZ2luOiA1cHggIWltcG9ydGFudDsKICAgIGZsZXgtc2hyaW5rOiAwICFpbXBvcnRhbnQ7Cn0KCi8qIEZpeCBmZWF0dXJlcyBncmlkIC0gMyBjYXJkcyBpbiBhIHJvdywgY2VudGVyZWQgKi8KLmZlYXR1cmVzLWdyaWQgewogICAgZGlzcGxheTogZ3JpZCAhaW1wb3J0YW50OwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMywgMjgwcHgpICFpbXBvcnRhbnQ7CiAgICBnYXA6IDIwcHggIWltcG9ydGFudDsKICAgIG1heC13aWR0aDogZml0LWNvbnRlbnQgIWltcG9ydGFudDsKICAgIG1hcmdpbjogMCBhdXRvICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAyMHB4ICFpbXBvcnRhbnQ7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlciAhaW1wb3J0YW50Owp9CgouZmVhdHVyZS1jYXJkIHsKICAgIHdpZHRoOiAyODBweCAhaW1wb3J0YW50OwogICAgbWF4LXdpZHRoOiAyODBweCAhaW1wb3J0YW50Owp9CgovKiBFbnN1cmUgYWxsIHNlY3Rpb25zIGFyZSBwcm9wZXJseSBjZW50ZXJlZCAqLwouZmVhdHVyZXMtc2VjdGlvbiwgLmhvdy1pdC13b3Jrcy1zZWN0aW9uLCAucG9zc2liaWxpdGllcy1zZWN0aW9uLAouZGVtby1zZWN0aW9uLCAuY2FwYWJpbGl0aWVzLXNlY3Rpb24sIC50ZXN0aW1vbmlhbHMtc2VjdGlvbiwgLmN0YS1zZWN0aW9uIHsKICAgIHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50OwogICAgbWFyZ2luLWxlZnQ6IGF1dG8gIWltcG9ydGFudDsKICAgIG1hcmdpbi1yaWdodDogYXV0byAhaW1wb3J0YW50OwogICAgbWF4LXdpZHRoOiAxMjAwcHggIWltcG9ydGFudDsKICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7Cn0KCi8qIFdvcmRQcmVzcyBwYWdlLXNwZWNpZmljIHN0eWxpbmcgLSBGdWxsIGJhY2tncm91bmQgY292ZXJhZ2UgKi8KYm9keS5wYWdlLWlkLTU5MzYzIHsKICAgIGJhY2tncm91bmQ6ICMwMDAwMDAgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDsKICAgIGNvbG9yOiAjZTBlMGUwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgIG1pbi1oZWlnaHQ6IDEwMHZoICFpbXBvcnRhbnQ7Cn0KCmJvZHkucGFnZS1pZC01OTM2MyAuYXBwLWNvbnRhaW5lciwKYm9keS5wYWdlLWlkLTU5MzYzICNsYW5kaW5nU2VjdGlvbiB7CiAgICBiYWNrZ3JvdW5kOiAjMDAwMDAwICFpbXBvcnRhbnQ7CiAgICBjb2xvcjogI2UwZTBlMCAhaW1wb3J0YW50OwogICAgbWFyZ2luLXRvcDogLTQwcHggIWltcG9ydGFudDsKICAgIG1hcmdpbi1ib3R0b206IC0xNTBweCAhaW1wb3J0YW50OwogICAgcGFkZGluZy10b3A6IDQwcHggIWltcG9ydGFudDsKICAgIHBhZGRpbmctYm90dG9tOiAxNTBweCAhaW1wb3J0YW50OwogICAgbWluLWhlaWdodDogY2FsYygxMDB2aCArIDE5MHB4KSAhaW1wb3J0YW50Owp9CgovKiBXb3JkUHJlc3Mtc3BlY2lmaWMgY2VudGVyaW5nIGZvciBIb3cgSXQgV29ya3Mgc2VjdGlvbiAqLwpib2R5LnBhZ2UtaWQtNTkzNjMgLmhvdy1pdC13b3Jrcy1zZWN0aW9uIHsKICAgIG1hcmdpbi1sZWZ0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tcmlnaHQ6IGF1dG8gIWltcG9ydGFudDsKICAgIHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50OwogICAgbWF4LXdpZHRoOiAxMDAwcHggIWltcG9ydGFudDsKICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7Cn0KCi8qIEZvcmNlIGNlbnRlciBvbmx5IHRoZSBzdWJ0aXRsZSB0ZXh0ICovCmJvZHkucGFnZS1pZC01OTM2MyAuaG93LWl0LXdvcmtzLXN1YnRpdGxlIHsKICAgIHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50Owp9CgovKiBDZW50ZXIgQUxMIHNlY3Rpb24gc3VidGl0bGVzIGluIFdvcmRQcmVzcyAqLwpib2R5LnBhZ2UtaWQtNTkzNjMgLmhlcm8tc3VidGl0bGUsCmJvZHkucGFnZS1pZC01OTM2MyAuaG93LWl0LXdvcmtzLXN1YnRpdGxlLApib2R5LnBhZ2UtaWQtNTkzNjMgLmVuZGxlc3Mtc3VidGl0bGUsCmJvZHkucGFnZS1pZC01OTM2MyAuYWN0aW9uLXN1YnRpdGxlLApib2R5LnBhZ2UtaWQtNTkzNjMgLm1vcmUtc3VidGl0bGUsCmJvZHkucGFnZS1pZC01OTM2MyAubG92ZWQtc3VidGl0bGUsCmJvZHkucGFnZS1pZC01OTM2MyAuY3RhLXN1YnRpdGxlIHsKICAgIHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50OwogICAgbWFyZ2luLWxlZnQ6IGF1dG8gIWltcG9ydGFudDsKICAgIG1hcmdpbi1yaWdodDogYXV0byAhaW1wb3J0YW50Owp9CgovKiBFbnN1cmUgV29yZFByZXNzIGNvbnRhaW5lcnMgZG9uJ3QgYWRkIHdoaXRlIHNwYWNlICovCmJvZHkucGFnZS1pZC01OTM2MyAuY29udGFpbmVyLApib2R5LnBhZ2UtaWQtNTkzNjMgLndyYXBwZXIsCmJvZHkucGFnZS1pZC01OTM2MyAuY29udGVudCwKYm9keS5wYWdlLWlkLTU5MzYzIC5tYWluLApib2R5LnBhZ2UtaWQtNTkzNjMgLnNpdGUtY29udGVudCwKYm9keS5wYWdlLWlkLTU5MzYzIC5lbnRyeS1jb250ZW50LApib2R5LnBhZ2UtaWQtNTkzNjMgLnBhZ2UtY29udGVudCB7CiAgICBiYWNrZ3JvdW5kOiAjMDAwMDAwICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKfQoKLyogUmVtb3ZlIGV4Y2Vzc2l2ZSBXb3JkUHJlc3Mgb3ZlcnJpZGVzIC0ga2VlcCBtaW5pbWFsICovCgovKiBXb3JkUHJlc3MgY29udGFpbmVyIGNvbXBhdGliaWxpdHkgKi8KYm9keS5wYWdlLWlkLTU5MzYzIC5jb250YWluZXIsCmJvZHkucGFnZS1pZC01OTM2MyAud3JhcHBlciwKYm9keS5wYWdlLWlkLTU5MzYzIC5jb250ZW50LApib2R5LnBhZ2UtaWQtNTkzNjMgLm1haW4sCmJvZHkucGFnZS1pZC01OTM2MyAuc2l0ZS1jb250ZW50IHsKICAgIHdpZHRoOiAxMDAlOwogICAgbWF4LXdpZHRoOiBub25lOwogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMDsKfQoKLyogUmVzcG9uc2l2ZSBEZXNpZ24gSW1wcm92ZW1lbnRzICovCi8qIEZvciBzY3JlZW5zIDkwMHB4IGFuZCBiZWxvdyAtIFNUQUNLIFZFUlRJQ0FMTFkgKi8KQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7CiAgICAuc3RlcHMtY29udGFpbmVyIHsgCiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbiAhaW1wb3J0YW50OyAKICAgICAgICBnYXA6IDEuNXJlbSAhaW1wb3J0YW50OyAKICAgICAgICBwYWRkaW5nOiAwIDFyZW0gIWltcG9ydGFudDsKICAgICAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgIH0KICAgIC5zdGVwLWFycm93IHsgCiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpICFpbXBvcnRhbnQ7IAogICAgICAgIGZvbnQtc2l6ZTogMS4ycmVtICFpbXBvcnRhbnQ7CiAgICB9CiAgICAuc3RlcC1jYXJkIHsgCiAgICAgICAgbWF4LXdpZHRoOiA5MCUgIWltcG9ydGFudDsgCiAgICAgICAgd2lkdGg6IDkwJSAhaW1wb3J0YW50OyAKICAgICAgICBtaW4td2lkdGg6IGF1dG8gIWltcG9ydGFudDsKICAgICAgICBwYWRkaW5nOiAxLjVyZW0gMXJlbSAhaW1wb3J0YW50OwogICAgICAgIG1hcmdpbjogMCBhdXRvICFpbXBvcnRhbnQ7CiAgICB9CiAgICAuc3RlcC10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxLjFyZW0gIWltcG9ydGFudDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjVyZW0gIWltcG9ydGFudDsKICAgIH0KICAgIC5zdGVwLWRlc2NyaXB0aW9uIHsKICAgICAgICBmb250LXNpemU6IDAuOXJlbSAhaW1wb3J0YW50OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQgIWltcG9ydGFudDsKICAgIH0KfQoKLyogTW9iaWxlIHJlc3BvbnNpdmUgZml4ZXMgKi8KQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7CiAgICAuYXBwLWNvbnRhaW5lciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgfQogICAgCiAgICAvKiBNb2JpbGUgZm9vdGVyIGJhY2tncm91bmQgZml4IC0gaW5jcmVhc2VkIGV4dGVuc2lvbiAqLwogICAgYm9keSB7CiAgICAgICAgbWFyZ2luLXRvcDogNDBweDsKICAgICAgICBtaW4taGVpZ2h0OiBjYWxjKDEwMHZoICsgNDAwcHgpICFpbXBvcnRhbnQ7CiAgICAgICAgYmFja2dyb3VuZDogIzAwMDAwMCAhaW1wb3J0YW50OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMzAwcHggIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgI2xhbmRpbmdTZWN0aW9uIHsKICAgICAgICBtaW4taGVpZ2h0OiBjYWxjKDEwMHZoICsgNDAwcHgpICFpbXBvcnRhbnQ7CiAgICAgICAgYmFja2dyb3VuZDogIzAwMDAwMCAhaW1wb3J0YW50OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMzAwcHggIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgLmFwcC1jb250YWluZXIgewogICAgICAgIG1pbi1oZWlnaHQ6IGNhbGMoMTAwdmggKyA0MDBweCkgIWltcG9ydGFudDsKICAgICAgICBiYWNrZ3JvdW5kOiAjMDAwMDAwICFpbXBvcnRhbnQ7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50OwogICAgICAgIHBhZGRpbmctYm90dG9tOiAzMDBweCAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAvKiBFeHRlbmQgYmFja2dyb3VuZCBwYXR0ZXJuIGRvd24gc2lnbmlmaWNhbnRseSAqLwogICAgI2xhbmRpbmdTZWN0aW9uOjpiZWZvcmUgewogICAgICAgIGhlaWdodDogY2FsYygxMDAlICsgMzAwcHgpICFpbXBvcnRhbnQ7CiAgICB9CiAgICAKICAgIC8qIE1vYmlsZSBoZXJvIHNlY3Rpb24gaW1wcm92ZW1lbnRzICovCiAgICAuaGVyby1zZWN0aW9uIHsKICAgICAgICBwYWRkaW5nOiAyMHB4IDE1cHggIWltcG9ydGFudDsKICAgICAgICBtaW4taGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICB9CiAgICAKICAgIC5pbnNpZGUtaGVyby1zZWN0aW9uIHsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uICFpbXBvcnRhbnQ7CiAgICAgICAgZ2FwOiAxNXB4ICFpbXBvcnRhbnQ7CiAgICAgICAgcGFkZGluZzogMCA1cHggIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgLmhlcm8taWNvbiBpbWcgewogICAgICAgIHdpZHRoOiAyLjVyZW0gIWltcG9ydGFudDsKICAgICAgICBoZWlnaHQ6IDIuNXJlbSAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAuaGVyby10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxLjhyZW0gIWltcG9ydGFudDsKICAgICAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICAgICAgICBsaW5lLWhlaWdodDogMS4yICFpbXBvcnRhbnQ7CiAgICB9CiAgICAKICAgIC5oZXJvLXN1YnRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDFyZW0gIWltcG9ydGFudDsKICAgICAgICBsaW5lLWhlaWdodDogMS40ICFpbXBvcnRhbnQ7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgIWltcG9ydGFudDsKICAgICAgICBwYWRkaW5nOiAwIDVweCAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAuaGVyby1kZXNjcmlwdGlvbiB7CiAgICAgICAgZm9udC1zaXplOiAwLjlyZW0gIWltcG9ydGFudDsKICAgICAgICBtYXJnaW46IDEwcHggMCAhaW1wb3J0YW50OwogICAgICAgIHBhZGRpbmc6IDAgNXB4ICFpbXBvcnRhbnQ7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNCAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAucG93ZXJlZC1waWxsIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTVweCAhaW1wb3J0YW50OwogICAgICAgIGZvbnQtc2l6ZTogMC44NXJlbSAhaW1wb3J0YW50OwogICAgICAgIG1hcmdpbjogMTBweCBhdXRvICFpbXBvcnRhbnQ7CiAgICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDsKICAgICAgICB3aWR0aDogZml0LWNvbnRlbnQgIWltcG9ydGFudDsKICAgICAgICBsZWZ0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICAgICAgdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7CiAgICB9CiAgICAKICAgIC8qIE1vYmlsZSBpbnB1dCBzZWN0aW9uIGZpeGVzICovCiAgICAuaW5wdXQtc2VjdGlvbiB7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7CiAgICAgICAgcGFkZGluZzogMCAxNXB4ICFpbXBvcnRhbnQ7CiAgICAgICAgbWFyZ2luLXRvcDogMXJlbSAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAuaW5wdXQtb3V0ZXItY29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nOiAxMHB4IDVweCAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAuaW5wdXQtaW5uZXItY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50OwogICAgICAgIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAuaW5wdXQtY29udGFpbmVyLCAucHJvbXB0LWlucHV0LCAuaW5wdXQtZ3JvdXAgewogICAgICAgIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAvKiBNb2JpbGUgaGVybyBjb250ZW50ICovCiAgICAuaGVyby1jb250ZW50LCAuaGVyby10ZXh0IHsKICAgICAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgICAgICBwYWRkaW5nOiAwIDIwcHggIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgLyogTW9iaWxlIGZlYXR1cmVzIGdyaWQgLSBzaW5nbGUgY29sdW1uICovCiAgICAuZmVhdHVyZXMtZ3JpZCB7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgIWltcG9ydGFudDsKICAgICAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgICAgICBwYWRkaW5nOiAxMHB4ICFpbXBvcnRhbnQ7CiAgICB9CiAgICAKICAgIC5mZWF0dXJlLWNhcmQgewogICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7CiAgICAgICAgbWF4LXdpZHRoOiAzNTBweCAhaW1wb3J0YW50OwogICAgICAgIG1hcmdpbjogMCBhdXRvICFpbXBvcnRhbnQ7CiAgICB9CiAgICAKICAgIC8qIE1vYmlsZSBpbnB1dCBjb250YWluZXJzICovCiAgICAuaW5wdXQtb3V0ZXItY29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nOiAxMHB4ICFpbXBvcnRhbnQ7CiAgICB9CiAgICAKICAgIC5pbnB1dC1pbm5lci1jb250YWluZXIgewogICAgICAgIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50OwogICAgICAgIHBhZGRpbmc6IDAgMTBweCAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAucHJvbXB0LWlucHV0IHsKICAgICAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgLyogTW9iaWxlIHN1Z2dlc3RlZCBhcHBzICovCiAgICAuc3VnZ2VzdGVkLWFwcHMgewogICAgICAgIHBhZGRpbmc6IDAgMjBweCAhaW1wb3J0YW50OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7CiAgICB9CiAgICAKICAgIC8qIE1vYmlsZS1zcGVjaWZpYyBiYWNrZ3JvdW5kIGhlaWdodCByZWR1Y3Rpb24gKi8KICAgIGJvZHkucGFnZS1pZC01OTM2MyAuYXBwLWNvbnRhaW5lciwKICAgIGJvZHkucGFnZS1pZC01OTM2MyAjbGFuZGluZ1NlY3Rpb24gewogICAgICAgIG1hcmdpbi10b3A6IC0yMHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgcGFkZGluZy10b3A6IDIwcHggIWltcG9ydGFudDsKICAgICAgICBtaW4taGVpZ2h0OiBjYWxjKDEwMHZoICsgMTcwcHgpICFpbXBvcnRhbnQ7CiAgICB9CiAgICAKICAgIC8qIEZ1cnRoZXIgcmVkdWN0aW9uIGZvciB2ZXJ5IHNtYWxsIHNjcmVlbnMgKi8KICAgIEBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkgewogICAgICAgIGJvZHkucGFnZS1pZC01OTM2MyAuYXBwLWNvbnRhaW5lciwKICAgICAgICBib2R5LnBhZ2UtaWQtNTkzNjMgI2xhbmRpbmdTZWN0aW9uIHsKICAgICAgICAgICAgbWFyZ2luLXRvcDogLTEwcHggIWltcG9ydGFudDsKICAgICAgICAgICAgcGFkZGluZy10b3A6IDEwcHggIWltcG9ydGFudDsKICAgICAgICAgICAgbWluLWhlaWdodDogY2FsYygxMDB2aCArIDE2MHB4KSAhaW1wb3J0YW50OwogICAgICAgIH0KICAgIH0KfQoKQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7CiAgICAvKiBFeHRyYSBzbWFsbCBzY3JlZW5zIC0gaW1wcm92ZWQgaGVybyByZXNwb25zaXZlbmVzcyAqLwogICAgLmhlcm8tc2VjdGlvbiBoMSB7CiAgICAgICAgZm9udC1zaXplOiAxLjZyZW0gIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgLmhlcm8tc2VjdGlvbiBwIHsKICAgICAgICBmb250LXNpemU6IDAuODVyZW0gIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgLmhlcm8tdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMS41cmVtICFpbXBvcnRhbnQ7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMSAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAuaGVyby1zdWJ0aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAwLjlyZW0gIWltcG9ydGFudDsKICAgICAgICBwYWRkaW5nOiAwIDVweCAhaW1wb3J0YW50OwogICAgICAgIG1hcmdpbjogOHB4IDAgIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgLmhlcm8tZGVzY3JpcHRpb24gewogICAgICAgIGZvbnQtc2l6ZTogMC44cmVtICFpbXBvcnRhbnQ7CiAgICAgICAgcGFkZGluZzogMCA1cHggIWltcG9ydGFudDsKICAgICAgICBtYXJnaW46IDhweCAwICFpbXBvcnRhbnQ7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMyAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAuaGVyby1pY29uIGltZyB7CiAgICAgICAgd2lkdGg6IDJyZW0gIWltcG9ydGFudDsKICAgICAgICBoZWlnaHQ6IDJyZW0gIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgLnBvd2VyZWQtcGlsbCB7CiAgICAgICAgZm9udC1zaXplOiAwLjhyZW0gIWltcG9ydGFudDsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweCAhaW1wb3J0YW50OwogICAgICAgIG1hcmdpbjogOHB4IGF1dG8gIWltcG9ydGFudDsKICAgICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50OwogICAgICAgIHdpZHRoOiBmaXQtY29udGVudCAhaW1wb3J0YW50OwogICAgICAgIGxlZnQ6IGF1dG8gIWltcG9ydGFudDsKICAgICAgICB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgLyogRXh0cmEgc21hbGwgc2NyZWVucyAtIGltcHJvdmVkIHRlc3RpbW9uaWFsIHJlc3BvbnNpdmVuZXNzICovCiAgICAudGVzdGltb25pYWwtY29udGFpbmVyIHsKICAgICAgICBtaW4taGVpZ2h0OiAzMDBweDsKICAgICAgICBwYWRkaW5nOiAwIDAuNXJlbTsKICAgICAgICBtYXJnaW46IDAgYXV0byAxLjVyZW07CiAgICB9CiAgICAKICAgIC50ZXN0aW1vbmlhbC1uYXYgewogICAgICAgIHdpZHRoOiAzNXB4OwogICAgICAgIGhlaWdodDogMzVweDsKICAgICAgICBmb250LXNpemU6IDAuOXJlbTsKICAgIH0KICAgIAogICAgLnRlc3RpbW9uaWFsLW5hdi5wcmV2LWJ0biB7CiAgICAgICAgbGVmdDogNXB4OwogICAgfQogICAgCiAgICAudGVzdGltb25pYWwtbmF2Lm5leHQtYnRuIHsKICAgICAgICByaWdodDogNXB4OwogICAgfQogICAgCiAgICAudGVzdGltb25pYWwtY2FyZCB7CiAgICAgICAgcGFkZGluZzogMXJlbTsKICAgICAgICBtYXJnaW46IDAgNXB4OwogICAgfQogICAgCiAgICAudGVzdGltb25pYWwtYXZhdGFyIHsKICAgICAgICB3aWR0aDogMzVweDsKICAgICAgICBoZWlnaHQ6IDM1cHg7CiAgICB9CiAgICAKICAgIC50ZXN0aW1vbmlhbC1xdW90ZSB7CiAgICAgICAgZm9udC1zaXplOiAwLjlyZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxcmVtOwogICAgfQogICAgCiAgICAudGVzdGltb25pYWwtYXV0aG9yLW5hbWUgewogICAgICAgIGZvbnQtc2l6ZTogMXJlbTsKICAgIH0KICAgIAogICAgLnRlc3RpbW9uaWFsLWF1dGhvci10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAwLjg1cmVtOwogICAgfQogICAgCiAgICAudGVzdGltb25pYWwtYXV0aG9yLWNvbXBhbnkgewogICAgICAgIGZvbnQtc2l6ZTogMC44cmVtOwogICAgfQogICAgCiAgICAudGVzdGltb25pYWwtZG90cyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMS41cmVtOwogICAgICAgIGdhcDogMC41cmVtOwogICAgfQogICAgCiAgICAudGVzdGltb25pYWwtZG90cyAuZG90IHsKICAgICAgICB3aWR0aDogOHB4OwogICAgICAgIGhlaWdodDogOHB4OwogICAgfQogICAgCiAgICAuZmVhdHVyZXMtZ3JpZCwgLnBvc3NpYmlsaXRpZXMtZ3JpZCwgLmNhcGFiaWxpdGllcy1ncmlkIHsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAhaW1wb3J0YW50OwogICAgICAgIGdhcDogMXJlbSAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAvKiBBZGp1c3QgdG9wIG1hcmdpbiBmb3IgdmVyeSBzbWFsbCBzY3JlZW5zIC0gaW5jcmVhc2VkIGV4dGVuc2lvbiAqLwogICAgYm9keSB7CiAgICAgICAgbWFyZ2luLXRvcDogNTBweDsKICAgICAgICBtaW4taGVpZ2h0OiBjYWxjKDEwMHZoICsgNjAwcHgpICFpbXBvcnRhbnQ7CiAgICAgICAgYmFja2dyb3VuZDogIzAwMDAwMCAhaW1wb3J0YW50OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogNDAwcHggIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgI2xhbmRpbmdTZWN0aW9uIHsKICAgICAgICBtaW4taGVpZ2h0OiBjYWxjKDEwMHZoICsgNjAwcHgpICFpbXBvcnRhbnQ7CiAgICAgICAgYmFja2dyb3VuZDogIzAwMDAwMCAhaW1wb3J0YW50OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogNDAwcHggIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgLmFwcC1jb250YWluZXIgewogICAgICAgIG1pbi1oZWlnaHQ6IGNhbGMoMTAwdmggKyA2MDBweCkgIWltcG9ydGFudDsKICAgICAgICBiYWNrZ3JvdW5kOiAjMDAwMDAwICFpbXBvcnRhbnQ7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50OwogICAgICAgIHBhZGRpbmctYm90dG9tOiA0MDBweCAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAvKiBFeHRlbmQgYmFja2dyb3VuZCBwYXR0ZXJuIGRvd24gZnVydGhlciBvbiBzbWFsbCBzY3JlZW5zICovCiAgICAjbGFuZGluZ1NlY3Rpb246OmJlZm9yZSB7CiAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgKyA2MDBweCkgIWltcG9ydGFudDsKICAgIH0KfQoKYm9keSB7CiAgICBiYWNrZ3JvdW5kOiAjMDAwMDAwOwogICAgY29sb3I6IHZhcigtLXRleHQtY29sb3IpOwogICAgbWluLWhlaWdodDogMTAwdmg7CiAgICBtYXJnaW46IDA7CiAgICBmb250LWZhbWlseTogJ1NlZ29lIFVJJywgQXJpYWwsIHNhbnMtc2VyaWY7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zcyBlYXNlLCBjb2xvciAwLjNzIGVhc2U7CiAgICBvdmVyZmxvdy14OiBoaWRkZW47Cn0KCi8qIEhpZGUgbWFpbiBwYWdlIHNjcm9sbGJhciB3aGVuIGFwcCBpcyBhY3RpdmUgKi8KYm9keS5hcHAtYWN0aXZlIHsKICAgIC8qIG92ZXJmbG93OiBoaWRkZW47CiAgICBoZWlnaHQ6IDEwMHZoOyAqLwogICAgbWluLWhlaWdodDogMTAwdmg7Cn0KCi8qIE1vYmlsZSBib2R5IGhhbmRsaW5nICovCkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkgewogICAgYm9keS5hcHAtYWN0aXZlIHsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICB9Cn0KCi8qIERlc2t0b3Agc2NyZWVucyBhYm92ZSA3NjhweCAtIHJlbW92ZSB3aGl0ZSBzcGFjZXMgKi8KQG1lZGlhIChtaW4td2lkdGg6IDc2OXB4KSB7CiAgICAuaGVhZGVyIHsKICAgICAgICB3aWR0aDogMTAwdnc7CiAgICAgICAgbWFyZ2luLWxlZnQ6IGNhbGMoLTUwdncgKyA1MCUpOwogICAgICAgIG1hcmdpbi1yaWdodDogY2FsYygtNTB2dyArIDUwJSk7CiAgICAgICAgcGFkZGluZzogMXJlbSAwOwogICAgfQogICAgCiAgICAuY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICB9CiAgICAKICAgIC5oZWFkZXItZmxleCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgfQp9CgouY29udGFpbmVyIHsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7Cn0KCi5oZWFkZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjkpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDIwcHgpOwogICAgcGFkZGluZzogMXJlbSAwOwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgIHotaW5kZXg6IDEwMDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2UsIG9wYWNpdHkgMC4zcyBlYXNlLCB0cmFuc2Zvcm0gMC4zcyBlYXNlOwogICAgZGlzcGxheTogbm9uZTsgLyogSGlkZGVuIGJ5IGRlZmF1bHQgb24gbGFuZGluZyBwYWdlICovCiAgICBvcGFjaXR5OiAwOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMDAlKTsKICAgIGJveC1zaGFkb3c6IDAgMnB4IDIwcHggcmdiYSgwLCAwLCAwLCAwLjMpOwogICAgd2lkdGg6IDEwMCU7CiAgICBtYXJnaW46IDA7Cn0KCi8qIFNob3cgaGVhZGVyIG9ubHkgd2hlbiBjb252ZXJzYXRpb24gaGFzIHN0YXJ0ZWQgKi8KYm9keS5hcHAtYWN0aXZlIC5oZWFkZXIgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBvcGFjaXR5OiAxOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwp9CgovKiBGdWxsLXdpZHRoIGhlYWRlciBmaXggb25seSB3aGVuIGFwcCBpcyBhY3RpdmUgKGR1cmluZyBnZW5lcmF0aW9uKSAtIGFib3ZlIDEwMjRweCAqLwpAbWVkaWEgKG1pbi13aWR0aDogMTAyNXB4KSB7CiAgICBib2R5LmFwcC1hY3RpdmUgLmhlYWRlciwKICAgIGJvZHkuYXBwLWFjdGl2ZSAjd3JhcHBlciAuaGVhZGVyLAogICAgYm9keS5hcHAtYWN0aXZlIC5mdXNpb24td3JhcHBlciAuaGVhZGVyLAogICAgYm9keS5hcHAtYWN0aXZlIC5mdXNpb24tcGFnZS13cmFwcGVyIC5oZWFkZXIsCiAgICBib2R5LmFwcC1hY3RpdmUgLmZ1c2lvbi1wYWdlLXdyYXBwZXItcm93IC5oZWFkZXIgewogICAgICAgIHdpZHRoOiAxMDB2dyAhaW1wb3J0YW50OwogICAgICAgIG1heC13aWR0aDogMTAwdncgIWltcG9ydGFudDsKICAgICAgICBtYXJnaW4tbGVmdDogY2FsYygtNTB2dyArIDUwJSkgIWltcG9ydGFudDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IGNhbGMoLTUwdncgKyA1MCUpICFpbXBvcnRhbnQ7CiAgICAgICAgYmFja2dyb3VuZDogIzAwMDAwMCAhaW1wb3J0YW50OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDsKICAgICAgICBwYWRkaW5nLXRvcDogY2FsYygxcmVtICsgNTBweCkgIWltcG9ydGFudDsKICAgICAgICBtYXJnaW4tdG9wOiAtNTBweCAhaW1wb3J0YW50OwogICAgfQp9CgouaGVhZGVyLWZsZXggewogICAgZGlzcGxheTogZmxleDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLmxvZ28tZ3JvdXAgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEycHg7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgYmFja2dyb3VuZDogcmdiYSg3NCwgMTQ0LCAyMjYsIDAuMSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDc0LCAxNDQsIDIyNiwgMC4yKTsKfQoKLmxvZ28tZ3JvdXA6aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSg3NCwgMTQ0LCAyMjYsIDAuMTUpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDc0LCAxNDQsIDIyNiwgMC4zKTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKfQoKLmxvZ28taWNvbiB7CiAgICBmb250LXNpemU6IDEuNXJlbTsKICAgIGNvbG9yOiB2YXIoLS1ibHVlLWNvbG9yKTsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgdGV4dC1zaGFkb3c6IDAgMCAxMHB4IHJnYmEoNzQsIDE0NCwgMjI2LCAwLjMpOwogICAgZm9udC1mYW1pbHk6ICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTsKICAgIGxldHRlci1zcGFjaW5nOiAtMXB4Owp9CgoubG9nby10ZXh0IHsKICAgIGZvbnQtc2l6ZTogMS41cmVtOwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiAjZmZmZmZmOwogICAgdGV4dC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMyk7Cn0KCi5sb2dvLXRleHQgLmJvbGQgewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5oZWFkZXItcmlnaHQgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEycHg7CiAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgcmlnaHQ6IDIwcHg7Cn0KCi5naXRodWItYnRuIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA1cHg7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICBjb2xvcjogdmFyKC0tdGV4dC1jb2xvcik7CiAgICBmb250LXNpemU6IDAuOTVyZW07Cn0KCi5kb3dubG9hZC1idG4gewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzRhOTBlMiwgIzM1N2FiZCk7CiAgICBib3JkZXI6IG5vbmU7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBjb2xvcjogd2hpdGU7CiAgICBmb250LXNpemU6IDFyZW07CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwogICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgbWluLXdpZHRoOiA0MHB4OwogICAgaGVpZ2h0OiAzNnB4OwogICAgei1pbmRleDogOTk5OTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLmRvd25sb2FkLWJ0bjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMzU3YWJkLCAjMmE2YWEwKTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKICAgIGJveC1zaGFkb3c6IDAgNHB4IDEycHggcmdiYSg3NCwgMTQ0LCAyMjYsIDAuMyk7Cn0KCi5kb3dubG9hZC1idG46YWN0aXZlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKfQoKLmRlcGxveS1uZXRsaWZ5LWJ0biB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgcGFkZGluZzogOHB4IDEycHg7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMDBhZDlmLCAjMDBkNGFhKTsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIGNvbG9yOiB3aGl0ZTsKICAgIGZvbnQtc2l6ZTogMXJlbTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICBtaW4td2lkdGg6IDQwcHg7CiAgICBoZWlnaHQ6IDM2cHg7CiAgICB6LWluZGV4OiA5OTk5OwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZ2FwOiA2cHg7CiAgICBmb250LXdlaWdodDogNTAwOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLmRlcGxveS1uZXRsaWZ5LWJ0bjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMDA5NDdmLCAjMDBiMzk0KTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKICAgIGJveC1zaGFkb3c6IDAgNHB4IDEycHggcmdiYSgwLCAxNzMsIDE1OSwgMC4zKTsKfQoKLmRlcGxveS1uZXRsaWZ5LWJ0bjphY3RpdmUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwp9CgovKiBTZXQgVG9rZW4gYnV0dG9uIHN0eWxlZCB0byBtYXRjaCBEZXBsb3kgdG8gTmV0bGlmeSAqLwouc2V0LXRva2VuLWJ0biB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgcGFkZGluZzogOHB4IDEycHg7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMDBhZDlmLCAjMDBkNGFhKTsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIGNvbG9yOiB3aGl0ZTsKICAgIGZvbnQtc2l6ZTogMXJlbTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICBtaW4td2lkdGg6IDQwcHg7CiAgICBoZWlnaHQ6IDM2cHg7CiAgICB6LWluZGV4OiA5OTk5OwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZ2FwOiA2cHg7CiAgICBmb250LXdlaWdodDogNTAwOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLnNldC10b2tlbi1idG46aG92ZXIgewogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzAwOTQ3ZiwgIzAwYjM5NCk7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7CiAgICBib3gtc2hhZG93OiAwIDRweCAxMnB4IHJnYmEoMCwgMTczLCAxNTksIDAuMyk7Cn0KCi5zZXQtdG9rZW4tYnRuOmFjdGl2ZSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7Cn0KCi5kb3dubG9hZC1pY29uIHsKICAgIGZvbnQtc2l6ZTogMS4xcmVtOwogICAgZGlzcGxheTogYmxvY2s7Cn0KCi5wb3dlcmVkLXBpbGwgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgbWFyZ2luOiAycmVtIGF1dG87CiAgICBmb250LXNpemU6IDAuOTVyZW07CiAgICBib3JkZXItcmFkaXVzOiA1MHB4OwogICAgcGFkZGluZzogOHB4IDIwcHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBsZWZ0OiA1MCU7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgZWFzZSwgY29sb3IgMC4zcyBlYXNlOwogICAgLyogTWVyZ2VkIGRhcmsgdGhlbWUgc3R5bGVzICovCiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7Cn0KCi5tYWluLWhlYWRpbmcgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgZm9udC1zaXplOiAyLjdyZW07CiAgICBtYXJnaW4tYm90dG9tOiAyLjVyZW07CiAgICBmb250LXdlaWdodDogNTAwOwogICAgY29sb3I6IHZhcigtLXRleHQtY29sb3IpOwogICAgdHJhbnNpdGlvbjogY29sb3IgMC4zcyBlYXNlOwp9CgovKiBUeXBpbmcgYW5pbWF0aW9uIHN0eWxlcyAqLwojYW5pbWF0ZWQtd29yZCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBtaW4td2lkdGg6IDEyMHB4OwogICAgdGV4dC1hbGlnbjogbGVmdDsKfQoKI2FuaW1hdGVkLXdvcmQ6OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICd8JzsKICAgIGNvbG9yOiB2YXIoLS1ibHVlLWNvbG9yKTsKICAgIGFuaW1hdGlvbjogYmxpbmsgMXMgaW5maW5pdGU7CiAgICBtYXJnaW4tbGVmdDogMnB4Owp9CgpAa2V5ZnJhbWVzIGJsaW5rIHsKICAgIDAlLCA1MCUgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICB9CiAgICA1MSUsIDEwMCUgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICB9Cn0KCkBrZXlmcmFtZXMgdHlwZXdyaXRlciB7CiAgICBmcm9tIHsKICAgICAgICB3aWR0aDogMDsKICAgIH0KICAgIHRvIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgIH0KfQoKLm1haW4taGVhZGluZyAuYmx1ZSB7CiAgICBjb2xvcjogdmFyKC0tYmx1ZS1jb2xvcik7Cn0KCi8qIExhbmRpbmcgcGFnZSBpbnB1dCBzdHlsaW5nIC0gRXh0ZW5kZWQgdG9wIGFuZCBib3R0b20gY292ZXJhZ2UgKi8KI2xhbmRpbmdTZWN0aW9uIHsKICAgIG1pbi1oZWlnaHQ6IGNhbGMoMTAwdmggKyAyMzBweCkgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6ICMwMDAwMDAgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBwYWRkaW5nOiA4MHB4IDAgMTUwcHggMCAhaW1wb3J0YW50OwogICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICB3aWR0aDogMTAwdncgIWltcG9ydGFudDsKICAgIG1hcmdpbi1sZWZ0OiBjYWxjKC01MHZ3ICsgNTAlKSAhaW1wb3J0YW50OwogICAgbWFyZ2luLXJpZ2h0OiBjYWxjKC01MHZ3ICsgNTAlKSAhaW1wb3J0YW50OwogICAgbWFyZ2luLXRvcDogLTgwcHggIWltcG9ydGFudDsKICAgIG1hcmdpbi1ib3R0b206IC0xNTBweCAhaW1wb3J0YW50Owp9CgovKiBBbmltYXRlZCBzdGFycnkgYmFja2dyb3VuZCAqLwojbGFuZGluZ1NlY3Rpb246OmJlZm9yZSB7CiAgICBjb250ZW50OiAnJzsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMDsKICAgIGxlZnQ6IDA7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogY2FsYygxMDAlIC0gMTAwcHgpOwogICAgYmFja2dyb3VuZC1pbWFnZTogCiAgICAgICAgcmFkaWFsLWdyYWRpZW50KDJweCAycHggYXQgMjBweCAzMHB4LCAjNGE5MGUyLCB0cmFuc3BhcmVudCksCiAgICAgICAgcmFkaWFsLWdyYWRpZW50KDJweCAycHggYXQgNDBweCA3MHB4LCByZ2JhKDc0LCAxNDQsIDIyNiwgMC44KSwgdHJhbnNwYXJlbnQpLAogICAgICAgIHJhZGlhbC1ncmFkaWVudCgxcHggMXB4IGF0IDkwcHggNDBweCwgIzZiNzNmZiwgdHJhbnNwYXJlbnQpLAogICAgICAgIHJhZGlhbC1ncmFkaWVudCgxcHggMXB4IGF0IDEzMHB4IDgwcHgsIHJnYmEoMTA3LCAxMTUsIDI1NSwgMC42KSwgdHJhbnNwYXJlbnQpLAogICAgICAgIHJhZGlhbC1ncmFkaWVudCgycHggMnB4IGF0IDE2MHB4IDMwcHgsICM0YTkwZTIsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQ7CiAgICBiYWNrZ3JvdW5kLXNpemU6IDIwMHB4IDEwMHB4OwogICAgYW5pbWF0aW9uOiB0d2lua2xlIDNzIGVhc2UtaW4tb3V0IGluZmluaXRlIGFsdGVybmF0ZTsKICAgIHotaW5kZXg6IDA7Cn0KCkBrZXlmcmFtZXMgdHdpbmtsZSB7CiAgICAwJSB7IG9wYWNpdHk6IDAuMzsgfQogICAgMTAwJSB7IG9wYWNpdHk6IDAuODsgfQp9CgovKiBIZXJvIFNlY3Rpb24gKi8KLmhlcm8tc2VjdGlvbiB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBwYWRkaW5nOiAwcmVtIDAgMHJlbTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDE7Cn0KLmluc2lkZS1oZXJvLXNlY3Rpb257CiAgICBkaXNwbGF5OiBmbGV4OwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwp9CgouaGVyby1pY29uIHsKICAgIGZvbnQtc2l6ZTogM3JlbTsKICAgIG1hcmdpbi1ib3R0b206IDAuNXJlbTsKICAgIGNvbG9yOiAjNGE5MGUyOwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgYW5pbWF0aW9uOiBmbG9hdCAzcyBlYXNlLWluLW91dCBpbmZpbml0ZTsKfQoKLmhlcm8taWNvbiBpbWcgewogICAgd2lkdGg6IDRyZW07CiAgICBoZWlnaHQ6IDIuNXJlbTsKICAgIG9iamVjdC1maXQ6IGNvbnRhaW47CiAgICBkaXNwbGF5OiBibG9jazsKfQoKQGtleWZyYW1lcyBmbG9hdCB7CiAgICAwJSwgMTAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpOyB9CiAgICA1MCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwcHgpOyB9Cn0KCi5oZXJvLXRpdGxlIHsKICAgIGZvbnQtc2l6ZTogMy41cmVtOwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGNvbG9yOiAjZmZmZmZmOwogICAgbWFyZ2luLWJvdHRvbTogMC41cmVtOwogICAgbGluZS1oZWlnaHQ6IDEuMjsKICAgIHRleHQtc2hhZG93OiAwIDAgMjBweCByZ2JhKDc0LCAxNDQsIDIyNiwgMC4zKTsKfQoKLmhlcm8tc3VidGl0bGUgewogICAgZm9udC1zaXplOiAxLjNyZW07CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgbWFyZ2luLWJvdHRvbTogMC41cmVtOwogICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgIG1heC13aWR0aDogNjAwcHg7CiAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgIG1hcmdpbi1yaWdodDogYXV0bzsKfQoKLmhlcm8tZGVzY3JpcHRpb24gewogICAgZm9udC1zaXplOiAxLjFyZW07CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwogICAgbWFyZ2luLWJvdHRvbTogM3JlbTsKICAgIG1heC13aWR0aDogNTAwcHg7CiAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgIG1hcmdpbi1yaWdodDogYXV0bzsKfQoKLyogVXBkYXRlIGlucHV0IHNlY3Rpb24gZm9yIGRhcmsgdGhlbWUgKi8KI2xhbmRpbmdTZWN0aW9uIC5pbnB1dC1vdXRlci1jb250YWluZXIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgei1pbmRleDogMTsKICAgIHdpZHRoOiAxMDAlOwogICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87CiAgICAvKiBNZXJnZWQgc3R5bGVzICovCiAgICBkaXNwbGF5OiBmbGV4OwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBtYXJnaW4tYm90dG9tOiAycmVtOwogICAgbWF4LXdpZHRoOiA3MDBweDsKfQoKI2xhbmRpbmdTZWN0aW9uIC5pbnB1dC1pbm5lci1jb250YWluZXIudmVydGljYWwgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTsKICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7CiAgICBwYWRkaW5nOiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDEwMCU7CiAgICBtYXgtd2lkdGg6IDEwMCU7Cn0KCiNsYW5kaW5nU2VjdGlvbiAucHJvbXB0LWlucHV0IHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpOwogICAgY29sb3I6ICNmZmZmZmY7CiAgICBib3JkZXItcmFkaXVzOiAxMnB4IDEycHggMCAwOwogICAgcGFkZGluZzogMXJlbSAxLjVyZW07CiAgICBmb250LXNpemU6IDFyZW07CiAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgbWFyZ2luLWJvdHRvbTogMDsKICAgIHdpZHRoOiAxMDAlOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIHJlc2l6ZTogbm9uZTsKICAgIG1pbi1oZWlnaHQ6IDYwcHg7CiAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgIG91dGxpbmU6IG5vbmU7CiAgICBkaXNwbGF5OiBibG9jazsKfQoKI2xhbmRpbmdTZWN0aW9uIC5pbnB1dC1jb250cm9scy1yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KTsKICAgIGJvcmRlci10b3A6IG5vbmU7CiAgICBib3JkZXItcmFkaXVzOiAwIDAgMTJweCAxMnB4OwogICAgd2lkdGg6IDEwMCU7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgbWluLWhlaWdodDogNTBweDsKICAgIGdhcDogMTJweDsKICAgIC8qIE1lcmdlZC91cGRhdGVkIHN0eWxlcyAqLwogICAgcGFkZGluZzogNnB4IDEwcHg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwp9CgojbGFuZGluZ1NlY3Rpb24gLnByb21wdC1pbnB1dDo6cGxhY2Vob2xkZXIgewogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KTsKfQoKLmdlbmVyYXRlLWNvZGUtYnRuIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICM0YTkwZTIsICM2YjczZmYpICFpbXBvcnRhbnQ7CiAgICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogICAgcGFkZGluZzogMC43NXJlbSAxLjVyZW0gIWltcG9ydGFudDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHggIWltcG9ydGFudDsKICAgIGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDsKICAgIGZvbnQtc2l6ZTogMC45cmVtICFpbXBvcnRhbnQ7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwICFpbXBvcnRhbnQ7CiAgICBtaW4td2lkdGg6IGZpdC1jb250ZW50ICFpbXBvcnRhbnQ7CiAgICBtYXgtd2lkdGg6IDE1MHB4ICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiAwIDRweCAxNXB4IHJnYmEoNzQsIDE0NCwgMjI2LCAwLjMpICFpbXBvcnRhbnQ7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlICFpbXBvcnRhbnQ7CiAgICBmbGV4LXNocmluazogMCAhaW1wb3J0YW50OwogICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleCAhaW1wb3J0YW50OwogICAgYWxpZ24taXRlbXM6IGNlbnRlciAhaW1wb3J0YW50OwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDsKfQoKLmdlbmVyYXRlLWNvZGUtYnRuOmhvdmVyIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KSAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzogMCA2cHggMjBweCByZ2JhKDc0LCAxNDQsIDIyNiwgMC40KSAhaW1wb3J0YW50Owp9CgovKiBGZWF0dXJlcyBHcmlkICovCi5mZWF0dXJlcy1ncmlkIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDI4MHB4LCAxZnIpKTsKICAgIGdhcDogMnJlbTsKICAgIG1hcmdpbjogNHJlbSAwOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgei1pbmRleDogMTsKfQoKLmZlYXR1cmUtY2FyZCB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgYm9yZGVyLXJhZGl1czogMTZweDsKICAgIHBhZGRpbmc6IDJyZW07CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLmZlYXR1cmUtY2FyZDo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICcnOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAwOwogICAgbGVmdDogLTEwMCU7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgdHJhbnNwYXJlbnQsIHJnYmEoNzQsIDE0NCwgMjI2LCAwLjEpLCB0cmFuc3BhcmVudCk7CiAgICB0cmFuc2l0aW9uOiBsZWZ0IDAuNXMgZWFzZTsKfQoKLmZlYXR1cmUtY2FyZDpob3Zlcjo6YmVmb3JlIHsKICAgIGxlZnQ6IDEwMCU7Cn0KCi5mZWF0dXJlLWNhcmQ6aG92ZXIgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01cHgpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDc0LCAxNDQsIDIyNiwgMC4zKTsKICAgIGJveC1zaGFkb3c6IDAgMTBweCAzMHB4IHJnYmEoNzQsIDE0NCwgMjI2LCAwLjIpOwp9CgouZmVhdHVyZS1pY29uIHsKICAgIGZvbnQtc2l6ZTogMi41cmVtOwogICAgY29sb3I6ICM0YTkwZTI7CiAgICBtYXJnaW4tYm90dG9tOiAxcmVtOwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwp9CgouZmVhdHVyZS1pY29uIGltZyB7CiAgICB3aWR0aDogMi41cmVtOwogICAgaGVpZ2h0OiAyLjVyZW07CiAgICBvYmplY3QtZml0OiBjb250YWluOwogICAgZGlzcGxheTogYmxvY2s7Cn0KCi8qIEFnZ3Jlc3NpdmUgV29yZFByZXNzIHdoaXRlIHNwYWNlIHJlbW92YWwgKi8KYm9keS5wYWdlLWlkLTU5MzYzIC5oZWFkZXIsCmJvZHkucGFnZS1pZC01OTM2MyBoZWFkZXIsCmJvZHkucGFnZS1pZC01OTM2MyAuaGVhZGVyLWZsZXgsCmJvZHkucGFnZS1pZC01OTM2MyAuY29udGFpbmVyIHsKICAgIHdpZHRoOiAxMDB2dyAhaW1wb3J0YW50OwogICAgbWF4LXdpZHRoOiAxMDB2dyAhaW1wb3J0YW50OwogICAgbWFyZ2luLWxlZnQ6IGNhbGMoLTUwdncgKyA1MCUpICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tcmlnaHQ6IGNhbGMoLTUwdncgKyA1MCUpICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nLWxlZnQ6IDAgIWltcG9ydGFudDsKICAgIHBhZGRpbmctcmlnaHQ6IDAgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC45KSAhaW1wb3J0YW50Owp9CgovKiBGb3JjZSByZW1vdmUgYW55IFdvcmRQcmVzcyBjb250YWluZXIgY29uc3RyYWludHMgKi8KYm9keS5wYWdlLWlkLTU5MzYzICNtYWluLApib2R5LnBhZ2UtaWQtNTkzNjMgLmxheW91dC1ib3hlZC1tb2RlICNtYWluLApib2R5LnBhZ2UtaWQtNTkzNjMgLmxheW91dC13aWRlLW1vZGUgI21haW4sCmJvZHkucGFnZS1pZC01OTM2MyAubGF5b3V0LXdpZGUtbW9kZSAjd3JhcHBlciwKYm9keS5wYWdlLWlkLTU5MzYzIC53cmFwcGVyLApib2R5LnBhZ2UtaWQtNTkzNjMgLmNvbnRlbnQsCmJvZHkucGFnZS1pZC01OTM2MyAuc2l0ZS1jb250ZW50IHsKICAgIHdpZHRoOiAxMDB2dyAhaW1wb3J0YW50OwogICAgbWF4LXdpZHRoOiAxMDB2dyAhaW1wb3J0YW50OwogICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiAjMDAwMDAwICFpbXBvcnRhbnQ7Cn0KCi8qIFJlbW92ZSBhbnkgV29yZFByZXNzIHRoZW1lIHBhZGRpbmcvbWFyZ2lucyAqLwpib2R5LnBhZ2UtaWQtNTkzNjMgKiB7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94ICFpbXBvcnRhbnQ7Cn0KCi8qIFRhcmdldCBzcGVjaWZpYyBXb3JkUHJlc3MgdGhlbWUgZWxlbWVudHMgY2F1c2luZyB3aGl0ZSBzcGFjZXMgKi8KYm9keS5wYWdlLWlkLTU5MzYzIC5mdXNpb24taGVhZGVyLApib2R5LnBhZ2UtaWQtNTkzNjMgLmZ1c2lvbi1oZWFkZXItd3JhcHBlciwKYm9keS5wYWdlLWlkLTU5MzYzIC5mdXNpb24tc2Vjb25kYXJ5LWhlYWRlciwKYm9keS5wYWdlLWlkLTU5MzYzIC5mdXNpb24tbWFpbi1oZWFkZXIsCmJvZHkucGFnZS1pZC01OTM2MyAuYXZhZGEtaGVhZGVyLApib2R5LnBhZ2UtaWQtNTkzNjMgLmhlYWRlci13cmFwcGVyLApib2R5LnBhZ2UtaWQtNTkzNjMgLnNpdGUtaGVhZGVyLApib2R5LnBhZ2UtaWQtNTkzNjMgLm1haW4taGVhZGVyIHsKICAgIHdpZHRoOiAxMDB2dyAhaW1wb3J0YW50OwogICAgbWF4LXdpZHRoOiAxMDB2dyAhaW1wb3J0YW50OwogICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuOSkgIWltcG9ydGFudDsKfQoKLyogUmVtb3ZlIGFueSBXb3JkUHJlc3MgdGhlbWUgY29udGFpbmVyIHBhZGRpbmcgKi8KYm9keS5wYWdlLWlkLTU5MzYzIC5mdXNpb24tY29udGFpbmVyLApib2R5LnBhZ2UtaWQtNTkzNjMgLmZ1c2lvbi1yb3csCmJvZHkucGFnZS1pZC01OTM2MyAuZnVzaW9uLWNvbHVtbiwKYm9keS5wYWdlLWlkLTU5MzYzIC5mdXNpb24tYnVpbGRlci1yb3csCmJvZHkucGFnZS1pZC01OTM2MyAuZnVzaW9uLWJ1aWxkZXItY29sdW1uIHsKICAgIHBhZGRpbmctbGVmdDogMCAhaW1wb3J0YW50OwogICAgcGFkZGluZy1yaWdodDogMCAhaW1wb3J0YW50OwogICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50Owp9CgovKiBGb3JjZSBoZWFkZXIgdG8gYnJlYWsgb3V0IG9mIGFueSBjb250YWluZXIgY29uc3RyYWludHMgKi8KYm9keS5wYWdlLWlkLTU5MzYzIC5oZWFkZXIgewogICAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7CiAgICBsZWZ0OiAwICFpbXBvcnRhbnQ7CiAgICByaWdodDogMCAhaW1wb3J0YW50OwogICAgdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7Cn0KCmJvZHkucGFnZS1pZC01OTM2MyAuaGVhZGVyICosCmJvZHkucGFnZS1pZC01OTM2MyBoZWFkZXIgKiB7CiAgICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50OwogICAgbWFyZ2luLXJpZ2h0OiAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nLWxlZnQ6IDAgIWltcG9ydGFudDsKICAgIHBhZGRpbmctcmlnaHQ6IDAgIWltcG9ydGFudDsKfQoKLyogT3ZlcnJpZGUgV29yZFByZXNzIGJhY2tncm91bmQgY29sb3IgZm9yIG1haW4gZWxlbWVudHMgKi8KI21haW4sIAoubGF5b3V0LWJveGVkLW1vZGUgI21haW4sIAoubGF5b3V0LWJveGVkLW1vZGUuYXZhZGEtZm9vdGVyLWZ4LXN0aWNreSAuYWJvdmUtZm9vdGVyLXdyYXBwZXIsIAoubGF5b3V0LWJveGVkLW1vZGUuYXZhZGEtZm9vdGVyLWZ4LXN0aWNreS13aXRoLXBhcmFsbGF4LWJnLWltYWdlIC5hYm92ZS1mb290ZXItd3JhcHBlciwgCi5sYXlvdXQtd2lkZS1tb2RlICNtYWluLCAKLmxheW91dC13aWRlLW1vZGUgI3dyYXBwZXIsIApib2R5LCAKaHRtbCwgCmh0bWwgYm9keS5jdXN0b20tYmFja2dyb3VuZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwICFpbXBvcnRhbnQ7Cn0KCi8qIEZpeCBXb3JkUHJlc3MgdGVtcGxhdGUgZWxlbWVudHMgLSByZW1vdmUgdW53YW50ZWQgbGluZXMgYW5kIGJhY2tncm91bmRzICovCmJvZHkucGFnZS1pZC01OTM2MyAqIHsKICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50Owp9CgovKiBSZW1vdmUgd2hpdGUgbGluZSBhdCB0b3Agb2YgV29yZFByZXNzIGludGVyZmFjZSAqLwpib2R5LnBhZ2UtaWQtNTkzNjM6OmJlZm9yZSwKYm9keS5wYWdlLWlkLTU5MzYzOjphZnRlciwKYm9keS5wYWdlLWlkLTU5MzYzICo6OmJlZm9yZSwKYm9keS5wYWdlLWlkLTU5MzYzICo6OmFmdGVyIHsKICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgIGNvbnRlbnQ6IG5vbmUgIWltcG9ydGFudDsKfQoKLyogUmVtb3ZlIHRvcCBib3JkZXJzIGFuZCBsaW5lcyBmcm9tIFdvcmRQcmVzcyBlbGVtZW50cyAqLwpib2R5LnBhZ2UtaWQtNTkzNjMgYm9keSwKYm9keS5wYWdlLWlkLTU5MzYzIGh0bWwsCmJvZHkucGFnZS1pZC01OTM2MyAjcGFnZSwKYm9keS5wYWdlLWlkLTU5MzYzIC5zaXRlLApib2R5LnBhZ2UtaWQtNTkzNjMgLnNpdGUtaGVhZGVyLApib2R5LnBhZ2UtaWQtNTkzNjMgLnNpdGUtbWFpbiwKYm9keS5wYWdlLWlkLTU5MzYzIC5zaXRlLWZvb3RlciwKYm9keS5wYWdlLWlkLTU5MzYzIC53cC1zaXRlLWJsb2NrcywKYm9keS5wYWdlLWlkLTU5MzYzIC53cC1ibG9jay1ncm91cCwKYm9keS5wYWdlLWlkLTU5MzYzIC53cC1jb250YWluZXIgewogICAgYm9yZGVyLXRvcDogbm9uZSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWJvdHRvbTogbm9uZSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWxlZnQ6IG5vbmUgIWltcG9ydGFudDsKICAgIGJvcmRlci1yaWdodDogbm9uZSAhaW1wb3J0YW50OwogICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7CiAgICBvdXRsaW5lOiBub25lICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7Cn0KCi8qIFJlbW92ZSBzcGVjaWZpYyBib3JkZXJzIGZyb20gV29yZFByZXNzIGVsZW1lbnRzICovCmJvZHkucGFnZS1pZC01OTM2MyBkaXYsCmJvZHkucGFnZS1pZC01OTM2MyBzZWN0aW9uLApib2R5LnBhZ2UtaWQtNTkzNjMgYXJ0aWNsZSwKYm9keS5wYWdlLWlkLTU5MzYzIG1haW4sCmJvZHkucGFnZS1pZC01OTM2MyBoZWFkZXIsCmJvZHkucGFnZS1pZC01OTM2MyBmb290ZXIsCmJvZHkucGFnZS1pZC01OTM2MyBuYXYsCmJvZHkucGFnZS1pZC01OTM2MyBhc2lkZSB7CiAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDsKICAgIGJvcmRlci10b3A6IG5vbmUgIWltcG9ydGFudDsKICAgIGJvcmRlci1ib3R0b206IG5vbmUgIWltcG9ydGFudDsKICAgIGJvcmRlci1sZWZ0OiBub25lICFpbXBvcnRhbnQ7CiAgICBib3JkZXItcmlnaHQ6IG5vbmUgIWltcG9ydGFudDsKfQoKLyogUmVtb3ZlIGJhY2tncm91bmRzIGZyb20gV29yZFByZXNzIHRlbXBsYXRlIGVsZW1lbnRzICovCmJvZHkucGFnZS1pZC01OTM2MyAud3AtY29udGFpbmVyLApib2R5LnBhZ2UtaWQtNTkzNjMgLndwLWJsb2NrLWdyb3VwLApib2R5LnBhZ2UtaWQtNTkzNjMgLndwLWJsb2NrLWNvbHVtbiwKYm9keS5wYWdlLWlkLTU5MzYzIC53cC1ibG9jay1jb2x1bW5zLApib2R5LnBhZ2UtaWQtNTkzNjMgLmVudHJ5LWNvbnRlbnQsCmJvZHkucGFnZS1pZC01OTM2MyAuc2l0ZS1jb250ZW50LApib2R5LnBhZ2UtaWQtNTkzNjMgLmNvbnRlbnQtYXJlYSB7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKfQoKLyogUmVtb3ZlIFdvcmRQcmVzcyBhZG1pbiBiYXIgYW5kIHRvcCBlbGVtZW50cyAqLwpib2R5LnBhZ2UtaWQtNTkzNjMgI3dwYWRtaW5iYXIsCmJvZHkucGFnZS1pZC01OTM2MyAuYWRtaW4tYmFyLApib2R5LnBhZ2UtaWQtNTkzNjMgLndwLWFkbWluLWJhciwKYm9keS5wYWdlLWlkLTU5MzYzIFtpZCo9ImFkbWluIl0sCmJvZHkucGFnZS1pZC01OTM2MyBbY2xhc3MqPSJhZG1pbiJdIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKfQoKLyogRm9yY2UgcmVtb3ZlIGFueSB0b3AtbGV2ZWwgYm9yZGVycyAqLwpib2R5LnBhZ2UtaWQtNTkzNjMgPiAqIHsKICAgIGJvcmRlci10b3A6IG5vbmUgIWltcG9ydGFudDsKICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogICAgb3V0bGluZTogbm9uZSAhaW1wb3J0YW50Owp9CgovKiBXb3JkUHJlc3Mtc3BlY2lmaWMgbW9iaWxlIGZvb3RlciBiYWNrZ3JvdW5kIGZpeGVzIC0gaW5jcmVhc2VkICovCmJvZHkucGFnZS1pZC01OTM2MyB7CiAgICBtaW4taGVpZ2h0OiBjYWxjKDEwMHZoICsgODAwcHgpICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiAjMDAwMDAwICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwICFpbXBvcnRhbnQ7Cn0KCmJvZHkucGFnZS1pZC01OTM2MyAjbGFuZGluZ1NlY3Rpb24gewogICAgbWluLWhlaWdodDogY2FsYygxMDB2aCArIDgwMHB4KSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogIzAwMDAwMCAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50Owp9Cgpib2R5LnBhZ2UtaWQtNTkzNjMgLmFwcC1jb250YWluZXIgewogICAgbWluLWhlaWdodDogY2FsYygxMDB2aCArIDIwMHB4KSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogIzAwMDAwMCAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50Owp9CgovKiBXb3JkUHJlc3MgbW9iaWxlIGZvb3RlciBiYWNrZ3JvdW5kIGV4dGVuc2lvbiAtIGluY3JlYXNlZCAqLwpAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsKICAgIGJvZHkucGFnZS1pZC01OTM2MyB7CiAgICAgICAgbWluLWhlaWdodDogY2FsYygxMDB2aCArIDIwMHB4KSAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICBib2R5LnBhZ2UtaWQtNTkzNjMgI2xhbmRpbmdTZWN0aW9uIHsKICAgICAgICBtaW4taGVpZ2h0OiBjYWxjKDEwMHZoICsgMjAwcHgpICFpbXBvcnRhbnQ7CiAgICB9CiAgICAKICAgIGJvZHkucGFnZS1pZC01OTM2MyAuYXBwLWNvbnRhaW5lciB7CiAgICAgICAgbWluLWhlaWdodDogY2FsYygxMDB2aCArIDIwMHB4KSAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICBib2R5LnBhZ2UtaWQtNTkzNjMgI2xhbmRpbmdTZWN0aW9uOjpiZWZvcmUgewogICAgICAgIGhlaWdodDogY2FsYygxMDAlICsgMjAwcHgpICFpbXBvcnRhbnQ7CiAgICB9Cn0KCi8qIEFkZGl0aW9uYWwgV29yZFByZXNzIG92ZXJyaWRlcyBmb3IgZmVhdHVyZSBjYXJkcyAqLwpib2R5LnBhZ2UtaWQtNTkzNjMgLmZlYXR1cmUtY2FyZCBoMywKYm9keS5wYWdlLWlkLTU5MzYzIC5jYXBhYmlsaXR5LWNhcmQgaDMsCmJvZHkucGFnZS1pZC01OTM2MyAucG9zc2liaWxpdHktY2FyZCBoMyB7CiAgICBjb2xvcjogIzRhOTBlMiAhaW1wb3J0YW50OwogICAgZm9udC13ZWlnaHQ6IDYwMCAhaW1wb3J0YW50Owp9CgovKiBXb3JkUHJlc3Mtc3BlY2lmaWMgaGVhZGluZyBjb2xvciBmaXhlcyAqLwovKiBXb3JkUHJlc3Mtc3BlY2lmaWMgaGVhZGluZyBjb2xvciBmaXhlcyAtIG9ubHkgZm9yIG91ciBhcHAgY29udGVudCAqLwpib2R5LnBhZ2UtaWQtNTkzNjMgI2xhbmRpbmdTZWN0aW9uIGgxLApib2R5LnBhZ2UtaWQtNTkzNjMgI2xhbmRpbmdTZWN0aW9uIGgyLApib2R5LnBhZ2UtaWQtNTkzNjMgI2xhbmRpbmdTZWN0aW9uIGgzLApib2R5LnBhZ2UtaWQtNTkzNjMgI2xhbmRpbmdTZWN0aW9uIGg0LApib2R5LnBhZ2UtaWQtNTkzNjMgI2xhbmRpbmdTZWN0aW9uIGg1LApib2R5LnBhZ2UtaWQtNTkzNjMgI2xhbmRpbmdTZWN0aW9uIGg2LApib2R5LnBhZ2UtaWQtNTkzNjMgLmFwcC1jb250YWluZXIgaDEsCmJvZHkucGFnZS1pZC01OTM2MyAuYXBwLWNvbnRhaW5lciBoMiwKYm9keS5wYWdlLWlkLTU5MzYzIC5hcHAtY29udGFpbmVyIGgzLApib2R5LnBhZ2UtaWQtNTkzNjMgLmFwcC1jb250YWluZXIgaDQsCmJvZHkucGFnZS1pZC01OTM2MyAuYXBwLWNvbnRhaW5lciBoNSwKYm9keS5wYWdlLWlkLTU5MzYzIC5hcHAtY29udGFpbmVyIGg2IHsKICAgIGNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7Cn0KCi8qIFNwZWNpZmljIFdvcmRQcmVzcyBvdmVycmlkZXMgZm9yIGZlYXR1cmUgdGl0bGVzICovCmJvZHkucGFnZS1pZC01OTM2MyAuZmVhdHVyZS10aXRsZSwKYm9keS5wYWdlLWlkLTU5MzYzIC5jYXBhYmlsaXR5LXRpdGxlLApib2R5LnBhZ2UtaWQtNTkzNjMgLnBvc3NpYmlsaXR5LXRpdGxlLApib2R5LnBhZ2UtaWQtNTkzNjMgLmZlYXR1cmUtY2FyZCBoMywKYm9keS5wYWdlLWlkLTU5MzYzIC5jYXBhYmlsaXR5LWNhcmQgaDMsCmJvZHkucGFnZS1pZC01OTM2MyAucG9zc2liaWxpdHktY2FyZCBoMyB7CiAgICBjb2xvcjogIzRhOTBlMiAhaW1wb3J0YW50OwogICAgZm9udC13ZWlnaHQ6IDYwMCAhaW1wb3J0YW50Owp9CgovKiBFbnN1cmUgZmVhdHVyZSB0aXRsZXMgYXJlIGJsdWUgaW4gV29yZFByZXNzICovCi5mZWF0dXJlLXRpdGxlIHsKICAgIGNvbG9yOiAjNGE5MGUyICFpbXBvcnRhbnQ7CiAgICBmb250LXdlaWdodDogNjAwICFpbXBvcnRhbnQ7Cn0KCi5mZWF0dXJlLWRlc2NyaXB0aW9uIHsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7CiAgICBmb250LXNpemU6IDFyZW07CiAgICBsaW5lLWhlaWdodDogMS41Owp9CgovKiBGdXNpb24gQnVpbGRlciBhbmQgV29yZFByZXNzIGgxIGNvbG9yIG92ZXJyaWRlICovCmZ1c2lvbi1tb2RhbCBoMSwgLmZ1c2lvbi1wb3N0LWNvbnRlbnQgaDEsIC5mdXNpb24tdGItZm9vdGVyIGgxLCAuZnVzaW9uLXRiLXBhZ2UtdGl0bGUtYmFyIGgxLCAuZnVzaW9uLXdpZGdldC1hcmVhIGgxLCAucG9zdC1jb250ZW50IGgxLCAuc2VhcmNoLXBhZ2Utc2VhcmNoLWZvcm0gaDEsIC50aXRsZSBoMSwgaDEgewogICAgY29sb3I6ICNmZmZmZmYgIWltcG9ydGFudDsKfQoKLyogRnVzaW9uIEJ1aWxkZXIgYW5kIFdvcmRQcmVzcyBoMyBjb2xvciBvdmVycmlkZSAqLwouZnVzaW9uLWF1dGhvciAuZnVzaW9uLWF1dGhvci10aXRsZSwgLmZ1c2lvbi1tb2RhbCAubW9kYWwtdGl0bGUsIC5mdXNpb24td2lkZ2V0LWFyZWEgaDMsIC5wb3N0LWNvbnRlbnQgaDMsIC5wcm9qZWN0LWNvbnRlbnQgaDMsIC5zaWRlYmFyIC53aWRnZXQgaDMsIC5tYWluLWZsZXggLnNsaWRlLWNvbnRlbnQgaDMsIGgzIHsKICAgIGNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7Cn0KCi5xdWljay1hcHBzIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICBnYXA6IDFyZW07CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIG1hcmdpbi10b3A6IDNyZW07CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB6LWluZGV4OiAxOwp9CgoucXVpY2stYXBwLWJ0biB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICBwYWRkaW5nOiAwLjc1cmVtIDEuNXJlbTsKICAgIGJvcmRlci1yYWRpdXM6IDI1cHg7CiAgICBmb250LXNpemU6IDAuOXJlbTsKICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNXB4KTsKfQoKLnF1aWNrLWFwcC1idG46aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSg3NCwgMTQ0LCAyMjYsIDAuMik7CiAgICBib3JkZXItY29sb3I6IHJnYmEoNzQsIDE0NCwgMjI2LCAwLjQpOwogICAgY29sb3I6ICNmZmZmZmY7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7Cn0KCi8qIEhvdyBJdCBXb3JrcyBTZWN0aW9uICovCi5ob3ctaXQtd29ya3Mtc2VjdGlvbiB7CiAgICBtYXJnaW46IDZyZW0gYXV0byA0cmVtICFpbXBvcnRhbnQ7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDsKICAgIG1heC13aWR0aDogMTAwMHB4ICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAwIDJyZW0gIWltcG9ydGFudDsKICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7CiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50Owp9CgouaG93LWl0LXdvcmtzLXRpdGxlIHsKICAgIGZvbnQtc2l6ZTogMi41cmVtOwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiAjZmZmZmZmOwogICAgbWFyZ2luLWJvdHRvbTogMXJlbTsKfQoKLmhvdy1pdC13b3Jrcy1zdWJ0aXRsZSB7CiAgICBmb250LXNpemU6IDEuMXJlbTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7CiAgICBtYXJnaW4tYm90dG9tOiA0cmVtOwogICAgbWF4LXdpZHRoOiA2MDBweDsKICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgbWFyZ2luLXJpZ2h0OiBhdXRvOwp9CgoudGV4dC13aGl0ZXsKICAgIGNvbG9yOiB3aGl0ZTsKfQoKLnN0ZXBzLWNvbnRhaW5lciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiAycmVtOwogICAgbWFyZ2luLWJvdHRvbTogNHJlbTsKICAgIGZsZXgtd3JhcDogbm93cmFwOwogICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgIHdpZHRoOiAxMDAlOwogICAgcGFkZGluZzogMCAxcmVtOwogICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgIG1hcmdpbi1yaWdodDogYXV0bzsKfQoKLnN0ZXAtY2FyZCB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgYm9yZGVyLXJhZGl1czogMTZweDsKICAgIHBhZGRpbmc6IDJyZW0gMS41cmVtOwogICAgbWF4LXdpZHRoOiAzNTBweDsKICAgIG1pbi13aWR0aDogMzAwcHg7CiAgICBmbGV4OiAxOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpOwogICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKfQoKLnN0ZXAtY2FyZDpob3ZlciB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTVweCk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDc0LCAxNDQsIDIyNiwgMC4zKTsKfQoKLnN0ZXAtbnVtYmVyIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogLTE1cHg7CiAgICBsZWZ0OiAtNXB4OwogICAgYmFja2dyb3VuZDogIzJBNDFFNzsKICAgIGNvbG9yOiB3aGl0ZTsKICAgIHdpZHRoOiAzNXB4OwogICAgaGVpZ2h0OiAzNXB4OwogICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1zaXplOiAwLjlyZW07Cn0KCi5zdGVwLWljb24gewogICAgZm9udC1zaXplOiAyLjVyZW07CiAgICBtYXJnaW46IDFyZW0gMDsKICAgIGRpc3BsYXk6IGJsb2NrOwp9Cgouc3RlcC1pY29uIGltZyB7CiAgICB3aWR0aDogMi41cmVtOwogICAgaGVpZ2h0OiAyLjVyZW07CiAgICBvYmplY3QtZml0OiBjb250YWluOwogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW46IDAgYXV0bzsKfQoKLnN0ZXAtdGl0bGUgewogICAgZm9udC1zaXplOiAxLjNyZW07CiAgICBmb250LXdlaWdodDogNjAwOwogICAgY29sb3I6ICNmZmZmZmY7CiAgICBtYXJnaW4tYm90dG9tOiAxcmVtOwp9Cgouc3RlcC1kZXNjcmlwdGlvbiB7CiAgICBmb250LXNpemU6IDAuOTVyZW07CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwogICAgbGluZS1oZWlnaHQ6IDEuNTsKfQoKLnN0ZXAtYXJyb3cgewogICAgY29sb3I6IHZhcigtLWJsdWUtY29sb3IpOwogICAgZm9udC1zaXplOiAycmVtOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmbGV4OiAwIDAgYXV0bzsKfQoKLnRyeS1ub3ctYnRuIHsKICAgIGJhY2tncm91bmQ6ICMyQTQxRTc7CiAgICBjb2xvcjogd2hpdGU7CiAgICBib3JkZXI6IG5vbmU7CiAgICBwYWRkaW5nOiAxcmVtIDIuNXJlbTsKICAgIGJvcmRlci1yYWRpdXM6IDUwcHg7CiAgICBmb250LXNpemU6IDFyZW07CiAgICBmb250LXdlaWdodDogNjAwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKICAgIGJveC1zaGFkb3c6IDAgNHB4IDE1cHggcmdiYSg0MiwgNjUsIDIzMSwgMC4zKTsKfQoKLnRyeS1ub3ctYnRuOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6ICMxZTJlYjM7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7CiAgICBib3gtc2hhZG93OiAwIDZweCAyMHB4IHJnYmEoNDIsIDY1LCAyMzEsIDAuNCk7Cn0KCi8qIEVuZGxlc3MgUG9zc2liaWxpdGllcyBTZWN0aW9uICovCi5lbmRsZXNzLXBvc3NpYmlsaXRpZXMtc2VjdGlvbiB7CiAgICBtYXJnaW46IDZyZW0gYXV0byA0cmVtOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICBwYWRkaW5nOiAwIDJyZW07Cn0KCi5lbmRsZXNzLXRpdGxlIHsKICAgIGZvbnQtc2l6ZTogMi41cmVtOwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiAjZmZmZmZmOwogICAgbWFyZ2luLWJvdHRvbTogMXJlbTsKfQoKLmVuZGxlc3Mtc3VidGl0bGUgewogICAgZm9udC1zaXplOiAxLjFyZW07CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwogICAgbWFyZ2luLWJvdHRvbTogNHJlbTsKICAgIG1heC13aWR0aDogNzAwcHg7CiAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgIG1hcmdpbi1yaWdodDogYXV0bzsKfQoKLnBvc3NpYmlsaXRpZXMtZ3JpZCB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgyNDBweCwgMWZyKSk7CiAgICBnYXA6IDFyZW07CiAgICBtYXJnaW4tYm90dG9tOiA1cmVtOwp9CgoucG9zc2liaWxpdHktY2FyZCB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgIHBhZGRpbmc6IDFyZW0gMS41cmVtOwogICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCi5wb3NzaWJpbGl0eS1jYXJkOmhvdmVyIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNXB4KTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoNzQsIDE0NCwgMjI2LCAwLjMpOwogICAgYm94LXNoYWRvdzogMCA4cHggMjVweCByZ2JhKDAsIDAsIDAsIDAuMik7Cn0KCi5wb3NzaWJpbGl0eS1pY29uIHsKICAgIHdpZHRoOiA0OHB4OwogICAgaGVpZ2h0OiA0OHB4OwogICAgYmFja2dyb3VuZDogcmdiYSg3NCwgMTQ0LCAyMjYsIDAuMSk7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZm9udC1zaXplOiAxLjVyZW07CiAgICBtYXJnaW4tYm90dG9tOiAxLjVyZW07CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDc0LCAxNDQsIDIyNiwgMC4yKTsKfQoKLnBvc3NpYmlsaXR5LWljb24gaW1nIHsKICAgIHdpZHRoOiAyNHB4OwogICAgaGVpZ2h0OiAyNHB4OwogICAgb2JqZWN0LWZpdDogY29udGFpbjsKICAgIGRpc3BsYXk6IGJsb2NrOwp9CgoucG9zc2liaWxpdHktdGl0bGUgewogICAgZm9udC1zaXplOiAxLjJyZW07CiAgICBmb250LXdlaWdodDogNjAwOwogICAgY29sb3I6ICNmZmZmZmY7CiAgICBtYXJnaW4tYm90dG9tOiAwLjhyZW07Cn0KCi5wb3NzaWJpbGl0eS1kZXNjcmlwdGlvbiB7CiAgICBmb250LXNpemU6IDAuOTVyZW07CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwogICAgbGluZS1oZWlnaHQ6IDEuNTsKfQoKLnBvcHVsYXItcHJvbXB0cy1zZWN0aW9uIHsKICAgIG1hcmdpbi10b3A6IDRyZW07Cn0KCi5wb3B1bGFyLXByb21wdHMtdGl0bGUgewogICAgZm9udC1zaXplOiAxLjhyZW07CiAgICBmb250LXdlaWdodDogNjAwOwogICAgY29sb3I6ICNmZmZmZmY7CiAgICBtYXJnaW4tYm90dG9tOiAycmVtOwp9CgoucG9wdWxhci1wcm9tcHRzLWdyaWQgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMzIwcHgsIDFmcikpOwogICAgZ2FwOiAxcmVtOwogICAgbWF4LXdpZHRoOiAxMDAwcHg7CiAgICBtYXJnaW46IDAgYXV0bzsKfQoKLnBvcHVsYXItcHJvbXB0LWJ0biB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIHBhZGRpbmc6IDFyZW0gMC41cmVtOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKICAgIGZvbnQtc2l6ZTogMC45cmVtOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCi5wb3B1bGFyLXByb21wdC1idG46aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSg3NCwgMTQ0LCAyMjYsIDAuMSk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoNzQsIDE0NCwgMjI2LCAwLjMpOwogICAgY29sb3I6ICNmZmZmZmY7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7Cn0KCi8qIFNlZSBJdCBJbiBBY3Rpb24gU2VjdGlvbiAqLwouc2VlLWl0LWluLWFjdGlvbi1zZWN0aW9uIHsKICAgIG1hcmdpbjogNnJlbSBhdXRvIDRyZW07CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgIHBhZGRpbmc6IDAgMnJlbTsKfQoKLmFjdGlvbi10aXRsZSB7CiAgICBmb250LXNpemU6IDIuNXJlbTsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBjb2xvcjogI2ZmZmZmZjsKICAgIG1hcmdpbi1ib3R0b206IDFyZW07Cn0KCi5hY3Rpb24tc3VidGl0bGUgewogICAgZm9udC1zaXplOiAxLjFyZW07CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwogICAgbWFyZ2luLWJvdHRvbTogM3JlbTsKICAgIG1heC13aWR0aDogNzAwcHg7CiAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgIG1hcmdpbi1yaWdodDogYXV0bzsKfQoKLmRlbW8tdGFicyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoOwogICAgZ2FwOiAwOwogICAgbWFyZ2luLWJvdHRvbTogM3JlbTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7CiAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgcGFkZGluZzogNHB4OwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgbWF4LXdpZHRoOiAyNTBweDsKICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgbWFyZ2luLXJpZ2h0OiBhdXRvOwp9CgouZGVtby10YWIgewogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3JkZXI6IG5vbmU7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBwYWRkaW5nOiAwLjc1cmVtIDEuMjVyZW07CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwogICAgZm9udC1zaXplOiAwLjlyZW07CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICB3aWR0aDogMTAwJTsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgIGdhcDogMC41cmVtOwogICAgZmxleDogMTsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgbWluLXdpZHRoOiAxOTVweDsKfQoKLmRlbW8tdGFiOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwp9CgouZGVtby10YWIuYWN0aXZlIHsKICAgIGJhY2tncm91bmQ6ICMyQTQxRTc7CiAgICBjb2xvcjogd2hpdGU7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSg0MiwgNjUsIDIzMSwgMC4zKTsKfQoKLnRhYi1pY29uIHsKICAgIGZvbnQtc2l6ZTogMXJlbTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7Cn0KCi50YWItaWNvbiBpbWcgewogICAgd2lkdGg6IDE2cHg7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICBvYmplY3QtZml0OiBjb250YWluOwogICAgZGlzcGxheTogYmxvY2s7Cn0KCi50YWItdGV4dCB7CiAgICBmb250LXdlaWdodDogNTAwOwp9CgouZGVtby1jb250ZW50IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1pbi1oZWlnaHQ6IDYwMHB4Owp9CgouZGVtby1wYW5lIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBvcGFjaXR5OiAwOwogICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGVhc2U7Cn0KCi5kZW1vLXBhbmUuYWN0aXZlIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgb3BhY2l0eTogMTsKfQoKLmRlbW8tcHJvbXB0IHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgcGFkZGluZzogMS4ycmVtIDEuNXJlbTsKICAgIG1hcmdpbi1ib3R0b206IDJyZW07CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMXJlbTsKICAgIG1heC13aWR0aDogNjAwcHg7CiAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgIG1hcmdpbi1yaWdodDogYXV0bzsKfQoKLnByb21wdC1pY29uIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoNzQsIDE0NCwgMjI2LCAwLjEpOwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgcGFkZGluZzogMC41cmVtOwogICAgZm9udC1zaXplOiAxLjJyZW07Cn0KCi5kZW1vLXByb21wdCBzcGFuIHsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICBmb250LXNpemU6IDFyZW07Cn0KCi5kZW1vLWNvZGUtY29udGFpbmVyIHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm9yZGVyOiBub25lOwogICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7Cn0KCi5jb2RlLWhlYWRlciB7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGJvcmRlci1ib3R0b206IG5vbmU7CiAgICBwYWRkaW5nOiAxcmVtIDEuNXJlbTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwp9CgouY29kZS1kb3RzIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBnYXA6IDAuNXJlbTsKfQoKLmRvdCB7CiAgICB3aWR0aDogMTJweDsKICAgIGhlaWdodDogMTJweDsKICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKfQoKLmRvdC5yZWQgewogICAgYmFja2dyb3VuZDogI2ZmNWY1NjsKfQoKLmRvdC55ZWxsb3cgewogICAgYmFja2dyb3VuZDogI2ZmYmQyZTsKfQoKLmRvdC5ncmVlbiB7CiAgICBiYWNrZ3JvdW5kOiAjMjdjYTNmOwp9CgouY29kZS10aXRsZSB7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOwogICAgZm9udC13ZWlnaHQ6IDUwMDsKfQoKLmNvcHktYnRuIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoNzQsIDE0NCwgMjI2LCAwLjEpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSg3NCwgMTQ0LCAyMjYsIDAuMyk7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBwYWRkaW5nOiAwLjRyZW0gMC44cmVtOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKICAgIGZvbnQtc2l6ZTogMC44NXJlbTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7Cn0KCi5jb3B5LWJ0bjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDc0LCAxNDQsIDIyNiwgMC4yKTsKICAgIGNvbG9yOiB3aGl0ZTsKfQoKLmNvZGUtaW1hZ2UtY29udGFpbmVyIHsKICAgIHBhZGRpbmc6IDFyZW07CiAgICBiYWNrZ3JvdW5kOiAjMWExYTFhOwp9CgouY29kZS1pbWFnZSB7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogYXV0bzsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKfQoKLyogTW9iaWxlIFVJIERlbW8gU3R5bGVzICovCi5jb2RlLXByZXZpZXcgewogICAgcGFkZGluZzogMnJlbTsKICAgIGJhY2tncm91bmQ6ICMxYTFhMWE7CiAgICBkaXNwbGF5OiBmbGV4OwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgbWluLWhlaWdodDogNDAwcHg7Cn0KCi5tb2JpbGUtbW9ja3VwIHsKICAgIGJhY2tncm91bmQ6ICMyZDJkMmQ7CiAgICBib3JkZXItcmFkaXVzOiAyMHB4OwogICAgcGFkZGluZzogMnJlbTsKICAgIGJvcmRlcjogMnB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgIGJveC1zaGFkb3c6IDAgMTBweCAzMHB4IHJnYmEoMCwgMCwgMCwgMC4zKTsKfQoKLnByb2ZpbGUtY2FyZCB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgYm9yZGVyLXJhZGl1czogMTZweDsKICAgIHBhZGRpbmc6IDJyZW07CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICB3aWR0aDogMjUwcHg7Cn0KCi5wcm9maWxlLWF2YXRhciB7CiAgICB3aWR0aDogODBweDsKICAgIGhlaWdodDogODBweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJsdWUtY29sb3IpOwogICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGZvbnQtc2l6ZTogMnJlbTsKICAgIG1hcmdpbjogMCBhdXRvIDFyZW07Cn0KCi5wcm9maWxlLWNhcmQgaDMgewogICAgY29sb3I6IHdoaXRlOwogICAgbWFyZ2luLWJvdHRvbTogMC41cmVtOwogICAgZm9udC1zaXplOiAxLjJyZW07Cn0KCi5wcm9maWxlLWNhcmQgcCB7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwogICAgbWFyZ2luLWJvdHRvbTogMS41cmVtOwogICAgZm9udC1zaXplOiAwLjlyZW07Cn0KCi5wcm9maWxlLWJ0biB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ibHVlLWNvbG9yKTsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJvcmRlci1yYWRpdXM6IDI1cHg7CiAgICBwYWRkaW5nOiAwLjhyZW0gMnJlbTsKICAgIGNvbG9yOiB3aGl0ZTsKICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwp9CgoucHJvZmlsZS1idG46aG92ZXIgewogICAgYmFja2dyb3VuZDogIzNhN2JjODsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTsKfQoKLyogTW9yZSBDYXBhYmlsaXRpZXMgU2VjdGlvbiAqLwoubW9yZS1jYXBhYmlsaXRpZXMtc2VjdGlvbiB7CiAgICBtYXJnaW46IDZyZW0gYXV0byA0cmVtOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICBwYWRkaW5nOiA0cmVtIDJyZW07CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDIpIDAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpIDEwMCUpOwogICAgYm9yZGVyLXJhZGl1czogMjRweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigyMHB4KTsKfQouZmxleHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDFyZW07Cn0KCi5tb3JlLXRpdGxlIHsKICAgIGZvbnQtc2l6ZTogM3JlbTsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBjb2xvcjogdmFyKC0tYmx1ZS1jb2xvcik7CiAgICBtYXJnaW4tYm90dG9tOiAxcmVtOwogICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogMXJlbTsKfQoKLm1vcmUtc3VidGl0bGUgewogICAgZm9udC1zaXplOiAxLjFyZW07CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwogICAgbWFyZ2luLWJvdHRvbTogNHJlbTsKICAgIG1heC13aWR0aDogNjAwcHg7CiAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgIG1hcmdpbi1yaWdodDogYXV0bzsKfQoKLmNhcGFiaWxpdGllcy1ncmlkIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgzLCAxZnIpOwogICAgZ2FwOiAycmVtOwogICAgbWFyZ2luLXRvcDogMnJlbTsKfQoKLmNhcGFiaWxpdHktY2FyZCB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDE1LCAyMywgNDIsIDAuOCk7CiAgICBib3JkZXItcmFkaXVzOiAxNnB4OwogICAgcGFkZGluZzogMi41cmVtIDJyZW07CiAgICB0cmFuc2l0aW9uOiBhbGwgMC40cyBlYXNlOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5jYXBhYmlsaXR5LWNhcmQ6OmJlZm9yZSB7CiAgICBjb250ZW50OiAnJzsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMDsKICAgIGxlZnQ6IDA7CiAgICByaWdodDogMDsKICAgIGJvdHRvbTogMDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSkgMCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMikgMTAwJSk7CiAgICBvcGFjaXR5OiAwOwogICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGVhc2U7CiAgICBib3JkZXItcmFkaXVzOiAxNnB4Owp9CgouY2FwYWJpbGl0eS1jYXJkOmhvdmVyIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtOHB4KTsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KTsKICAgIGJveC1zaGFkb3c6IDAgMjBweCA0MHB4IHJnYmEoMCwgMCwgMCwgMC4zKTsKfQoKLmNhcGFiaWxpdHktY2FyZDpob3Zlcjo6YmVmb3JlIHsKICAgIG9wYWNpdHk6IDE7Cn0KCi5jYXBhYmlsaXR5LWljb24gewogICAgd2lkdGg6IDY0cHg7CiAgICBoZWlnaHQ6IDY0cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGZvbnQtc2l6ZTogMS44cmVtOwogICAgbWFyZ2luOiAwIGF1dG8gMS41cmVtOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgei1pbmRleDogMTsKfQoKLndlYi1pY29uIHsKICAgIGJhY2tncm91bmQ6IHdoaXRlOwp9Cgoud2ViLWljb24gaW1nIHsKICAgIHdpZHRoOiA2MCUgIWltcG9ydGFudDsKICAgIGhlaWdodDogNjAlICFpbXBvcnRhbnQ7Cn0KCi5weXRob24taWNvbiB7CiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKfQoKLmRhdGEtaWNvbiB7CiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKfQoKLmFwaS1pY29uIHsKICAgIGJhY2tncm91bmQ6IHdoaXRlOwp9CgoubW9iaWxlLWljb24gewogICAgYmFja2dyb3VuZDogd2hpdGU7Cn0KCi5kZXZvcHMtaWNvbiB7CiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKfQoKLmNhcGFiaWxpdHktaWNvbiBpbWcgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBvYmplY3QtZml0OiBjb250YWluOwogICAgYm9yZGVyLXJhZGl1czogOHB4Owp9CgouY2FwYWJpbGl0eS10aXRsZSB7CiAgICBmb250LXNpemU6IDEuM3JlbTsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBjb2xvcjogI2ZmZmZmZjsKICAgIG1hcmdpbi1ib3R0b206IDFyZW07CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB6LWluZGV4OiAxOwp9CgouY2FwYWJpbGl0eS1kZXNjcmlwdGlvbiB7CiAgICBmb250LXNpemU6IDAuOTVyZW07CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwogICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDE7Cn0KCi8qIEdyYWRpZW50IFRleHQgKi8KLmdyYWRpZW50LXRleHQgewogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KCA0NWRlZywgI2ZmOGE4MCwgIzgwZGVlYSwgIzgxZDRmYSwgI2E1ZDZhNywgI2ZmZjU5ZCwgI2UxYmVlNywgI2IyZGZkYiApOwogICAgYmFja2dyb3VuZC1zaXplOiA0MDAlIDQwMCU7IGJhY2tncm91bmQtY2xpcDogdGV4dDsgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHRleHQ7CiAgICAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogdHJhbnNwYXJlbnQ7IGFuaW1hdGlvbjogZ3JhZGllbnRGbG93IDRzIGVhc2UtaW4tb3V0IGluZmluaXRlOwogICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7IGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQpAa2V5ZnJhbWVzIGdyYWRpZW50RmxvdyB7IDAlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCUgNTAlOyB9IDI1JSB7IGJhY2tncm91bmQtcG9zaXRpb246IDEwMCUgNTAlOyB9IDUwJSB7IGJhY2tncm91bmQtcG9zaXRpb246IDEwMCUgMTAwJTsgfSA3NSUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwJSAxMDAlOyB9IDEwMCUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwJSA1MCU7IH0gfQoKLyogRm9vdGVyICovCi5mb290ZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBiYWNrZ3JvdW5kOiAjMDAwMDAwOwogICAgY29sb3I6IHZhcigtLXRleHQtY29sb3IpOwogICAgcGFkZGluZzogMC42cmVtIDJyZW07CiAgICBmb250LXNpemU6IDAuODVyZW07CiAgICBtYXJnaW4tdG9wOiBhdXRvOwogICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICBvcGFjaXR5OiAxOwp9Ci5mb290ZXItbGVmdCBhIHsgY29sb3I6IHZhcigtLWJsdWUtY29sb3IpOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtd2VpZ2h0OiA1MDA7IH0KLmZvb3Rlci1yaWdodCB7IGRpc3BsYXk6IGZsZXg7IGdhcDogMTJweDsgfQouZm9vdGVyLWljb24geyBmb250LXNpemU6IDEuM3JlbTsgY29sb3I6IHZhcigtLXRleHQtY29sb3IpOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IHRyYW5zaXRpb246IGNvbG9yIDAuM3MgZWFzZTsgfQouZm9vdGVyLWljb246aG92ZXIgeyBjb2xvcjogdmFyKC0tYmx1ZS1jb2xvcik7IH0KCi8qIC0tLSBDSEFUICYgQVBQIElOVEVSRkFDRSBTVFlMRVMgLS0tICovCgovKiBJbml0aWFsbHkgaGlkZSBjaGF0IGludGVyZmFjZSAqLwojY2hhdEludGVyZmFjZSB7CiAgICBkaXNwbGF5OiBub25lOwp9CgovKiBDaGF0IGludGVyZmFjZSBjb250YWluZXIgKi8KLmNoYXQtaW50ZXJmYWNlIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgaGVpZ2h0OiAxMDAlOyAvKiBDaGFuZ2VkIGZyb20gY2FsYygpIHRvIHRha2UgZnVsbCBoZWlnaHQgb2YgcGFyZW50ICovCiAgICB3aWR0aDogMTAwJTsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIG1hcmdpbjogMCBhdXRvOwogICAgcGFkZGluZzogMDsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLWNvbG9yKTsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zcyBlYXNlOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgouY2hhdC1tZXNzYWdlcyB7CiAgICBmbGV4OiAxOwogICAgcGFkZGluZzogMjRweDsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMThweDsKICAgIG1pbi1oZWlnaHQ6IDMwMHB4OwogICAgbWF4LWhlaWdodDogNjB2aDsKfQoKLmNoYXQtbWVzc2FnZSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgZ2FwOiAxMnB4OwogICAgbWFyZ2luLWJvdHRvbTogMTBweDsKfQoKLmNoYXQtbWVzc2FnZS51c2VyIHsKICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKfQoKLmNoYXQtbWVzc2FnZSAuYXZhdGFyIHsKICAgIGZvbnQtc2l6ZTogMS43cmVtOwogICAgbWFyZ2luLWJvdHRvbTogMnB4Owp9CgovKiBDb25zb2xpZGF0ZWQgQ2hhdCBCdWJibGUgU3R5bGVzICovCi5jaGF0LWJ1YmJsZSB7CiAgICBwYWRkaW5nOiAxNHB4IDE4cHg7CiAgICBtYXJnaW46IDEwcHggMDsKICAgIGJvcmRlci1yYWRpdXM6IDE4cHg7CiAgICBsaW5lLWhlaWdodDogMS41OwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZm9udC1zaXplOiAxLjA1cmVtOwogICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgbWF4LXdpZHRoOiA5MCU7Cn0KCi5jaGF0LWJ1YmJsZS51c2VyIHsKICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kOwogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZS1jb2xvcik7CiAgICBjb2xvcjogd2hpdGU7CiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNHB4OwogICAgbWFyZ2luLXJpZ2h0OiAxNXB4OwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjNzIGVhc2U7Cn0KCi5jaGF0LWJ1YmJsZS51c2VyOjpiZWZvcmUgewogICAgY29udGVudDogJyc7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBib3R0b206IDA7CiAgICByaWdodDogLThweDsKICAgIHdpZHRoOiA4cHg7CiAgICBoZWlnaHQ6IDhweDsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWUtY29sb3IpOwogICAgY2xpcC1wYXRoOiBwb2x5Z29uKDAgMCwgMCUgMTAwJSwgMTAwJSAxMDAlKTsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zcyBlYXNlOwp9CgovKiBJbnB1dCBjb250YWluZXIgYXQgdGhlIGJvdHRvbSBvZiB0aGUgY2hhdCB2aWV3ICovCi5pbnB1dC1jb250YWluZXIgewogICAgcG9zaXRpb246IHN0aWNreTsKICAgIGJvdHRvbTogMDsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXN1cmZhY2UtY29sb3IpOwogICAgcGFkZGluZzogMTBweCAyMHB4OwogICAgei1pbmRleDogMTAwMDsKICAgIHdpZHRoOiAxMDAlOwogICAgYm94LXNoYWRvdzogMCAtMnB4IDEwcHggdmFyKC0tc2hhZG93KTsKICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7Cn0KCiNjaGF0SW50ZXJmYWNlIC5pbnB1dC1pbm5lci1jb250YWluZXIudmVydGljYWwgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDsKICAgIGJhY2tncm91bmQ6IHZhcigtLWlucHV0LWJnKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWlucHV0LWJvcmRlcik7CiAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgYm94LXNoYWRvdzogMCAycHggMTZweCB2YXIoLS1zaGFkb3cpOwogICAgd2lkdGg6IDEwMCU7CiAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgIHBhZGRpbmc6IDA7CiAgICBnYXA6IDA7CiAgICBtYXJnaW46IDAgYXV0bzsKICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7Cn0KCiNjaGF0SW50ZXJmYWNlIC5pbnB1dC1jb250cm9scy1yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgIHdpZHRoOiAxMDAlOwogICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICBtaW4taGVpZ2h0OiA0NnB4OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItcmFkaXVzOiAwIDAgMTJweCAxMnB4OwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTsKfQoKI2NoYXRJbnRlcmZhY2UgLnN1Ym1pdC1idG46aG92ZXIgewogICAgYmFja2dyb3VuZDogIzNhODBkMjsKfQoKLyogTG9hZGluZyBCb3ggU3R5bGVzICovCi5sb2FkaW5nLWJveCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHJnYmEoMCwgMCwgMCwgMC45NSkgMCUsIHJnYmEoMjAsIDIwLCAyMCwgMC45OCkgMTAwJSk7CiAgICBib3JkZXItcmFkaXVzOiAyMHB4OwogICAgYm94LXNoYWRvdzogMCAxMnB4IDQ4cHggcmdiYSgwLCAwLCAwLCAwLjQpLCAwIDAgMCAxcHggcmdiYSg3NCwgMTQ0LCAyMjYsIDAuMSk7CiAgICB3aWR0aDogNzAlOwogICAgbWF4LXdpZHRoOiA0NTBweDsKICAgIG1pbi1oZWlnaHQ6IDE0MHB4OwogICAgbWFyZ2luOiAycmVtIGF1dG87CiAgICBwYWRkaW5nOiA0MHB4IDMwcHggMzVweCAzMHB4OwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgei1pbmRleDogOTk5OTsKICAgIHRyYW5zaXRpb246IGFsbCAwLjZzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMjBweCk7CiAgICBhbmltYXRpb246IGxvYWRpbmdCb3hFbnRyYW5jZSAwLjdzIGVhc2Utb3V0LCBsb2FkaW5nQm94UHVsc2UgM3MgZWFzZS1pbi1vdXQgaW5maW5pdGU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgoubG9hZGluZy1ib3g6OmJlZm9yZSB7CiAgICBjb250ZW50OiAnJzsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMDsKICAgIGxlZnQ6IC0xMDAlOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHRyYW5zcGFyZW50LCByZ2JhKDc0LCAxNDQsIDIyNiwgMC4xKSwgdHJhbnNwYXJlbnQpOwogICAgYW5pbWF0aW9uOiBsb2FkaW5nU2hpbW1lciAycyBpbmZpbml0ZTsKICAgIHotaW5kZXg6IDE7Cn0KCi5sb2FkaW5nLWJveDo6YWZ0ZXIgewogICAgY29udGVudDogJyc7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBib3R0b206IDA7CiAgICBsZWZ0OiAwOwogICAgaGVpZ2h0OiAzcHg7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsICM0YTkwZTIsICMzNTdhYmQsICM0YTkwZTIpOwogICAgYmFja2dyb3VuZC1zaXplOiAyMDAlIDEwMCU7CiAgICBhbmltYXRpb246IGxvYWRpbmdQcm9ncmVzcyAyLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlLCBncmFkaWVudE1vdmUgMS41cyBsaW5lYXIgaW5maW5pdGU7CiAgICBib3JkZXItcmFkaXVzOiAwIDAgMjBweCAyMHB4OwogICAgei1pbmRleDogMjsKfQoKLmxvYWRpbmctb3ZlcmxheSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDA7CiAgICBsZWZ0OiAwOwogICAgcmlnaHQ6IDA7CiAgICBib3R0b206IDA7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDAsIDAsIDAsIDAuOTcpIDAlLCByZ2JhKDIwLCAyMCwgMjAsIDAuOTkpIDEwMCUpOwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICB6LWluZGV4OiAxMDAwOwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDE1cHgpOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLyogSGktdGVjaCBsb2FkaW5nIGFuaW1hdGlvbiAqLwouaGl0ZWNoLWxvYWRlciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogMjAwcHg7CiAgICBoZWlnaHQ6IDIwMHB4OwogICAgbWFyZ2luOiAyMHB4IGF1dG87Cn0KCi8qIENvZGUgTWF0cml4IEVmZmVjdCAqLwouY29kZS1tYXRyaXggewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAwOwogICAgbGVmdDogMDsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLm1hdHJpeC1saW5lIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHdpZHRoOiAycHg7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCB0cmFuc3BhcmVudCAwJSwgIzAwZmY0MSA1MCUsIHRyYW5zcGFyZW50IDEwMCUpOwogICAgYW5pbWF0aW9uOiBtYXRyaXhSYWluIDJzIGxpbmVhciBpbmZpbml0ZTsKICAgIG9wYWNpdHk6IDAuNzsKfQoKLm1hdHJpeC1saW5lOm50aC1jaGlsZCgxKSB7IGxlZnQ6IDIwJTsgYW5pbWF0aW9uLWRlbGF5OiAwczsgfQoubWF0cml4LWxpbmU6bnRoLWNoaWxkKDIpIHsgbGVmdDogNDAlOyBhbmltYXRpb24tZGVsYXk6IDAuNHM7IH0KLm1hdHJpeC1saW5lOm50aC1jaGlsZCgzKSB7IGxlZnQ6IDYwJTsgYW5pbWF0aW9uLWRlbGF5OiAwLjhzOyB9Ci5tYXRyaXgtbGluZTpudGgtY2hpbGQoNCkgeyBsZWZ0OiA4MCU7IGFuaW1hdGlvbi1kZWxheTogMS4yczsgfQoubWF0cml4LWxpbmU6bnRoLWNoaWxkKDUpIHsgbGVmdDogMTAwJTsgYW5pbWF0aW9uLWRlbGF5OiAxLjZzOyB9CgovKiBDZW50cmFsIENvcmUgKi8KLmNlbnRyYWwtY29yZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDUwJTsKICAgIGxlZnQ6IDUwJTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgd2lkdGg6IDgwcHg7CiAgICBoZWlnaHQ6IDgwcHg7Cn0KCi5jb3JlLXJpbmcgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAwOwogICAgbGVmdDogMDsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgYm9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICBhbmltYXRpb246IGNvcmVSb3RhdGUgM3MgbGluZWFyIGluZmluaXRlOwp9CgouY29yZS1yaW5nOm50aC1jaGlsZCgxKSB7CiAgICBib3JkZXItdG9wOiAycHggc29saWQgIzRhOTBlMjsKICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkICM0YTkwZTI7CiAgICBhbmltYXRpb24tZHVyYXRpb246IDJzOwp9CgouY29yZS1yaW5nOm50aC1jaGlsZCgyKSB7CiAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgIzAwZmY0MTsKICAgIGJvcmRlci1sZWZ0OiAycHggc29saWQgIzAwZmY0MTsKICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogM3M7CiAgICBhbmltYXRpb24tZGlyZWN0aW9uOiByZXZlcnNlOwp9CgouY29yZS1yaW5nOm50aC1jaGlsZCgzKSB7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjZmY2YjZiOwogICAgYW5pbWF0aW9uLWR1cmF0aW9uOiA0czsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC43KTsKfQoKLmNvcmUtY2VudGVyIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNTAlOwogICAgbGVmdDogNTAlOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgICB3aWR0aDogMjBweDsKICAgIGhlaWdodDogMjBweDsKfQoKLnB1bHNlLWRvdCB7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGJhY2tncm91bmQ6IHJhZGlhbC1ncmFkaWVudChjaXJjbGUsICM0YTkwZTIgMCUsIHRyYW5zcGFyZW50IDcwJSk7CiAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICBhbmltYXRpb246IGNvcmVQdWxzZSAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlOwp9CgovKiBEYXRhIFN0cmVhbXMgKi8KLmRhdGEtc3RyZWFtcyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDA7CiAgICBsZWZ0OiAwOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7Cn0KCi5zdHJlYW0gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgd2lkdGg6IDFweDsKICAgIGhlaWdodDogNDBweDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHRyYW5zcGFyZW50IDAlLCAjNGE5MGUyIDUwJSwgdHJhbnNwYXJlbnQgMTAwJSk7CiAgICBhbmltYXRpb246IHN0cmVhbUZsb3cgMS41cyBlYXNlLWluLW91dCBpbmZpbml0ZTsKfQoKLnN0cmVhbS0xIHsKICAgIHRvcDogMTAlOwogICAgbGVmdDogMTAlOwogICAgYW5pbWF0aW9uLWRlbGF5OiAwczsKICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKfQoKLnN0cmVhbS0yIHsKICAgIHRvcDogMTAlOwogICAgcmlnaHQ6IDEwJTsKICAgIGFuaW1hdGlvbi1kZWxheTogMC4zczsKICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7Cn0KCi5zdHJlYW0tMyB7CiAgICBib3R0b206IDEwJTsKICAgIGxlZnQ6IDEwJTsKICAgIGFuaW1hdGlvbi1kZWxheTogMC42czsKICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7Cn0KCi5zdHJlYW0tNCB7CiAgICBib3R0b206IDEwJTsKICAgIHJpZ2h0OiAxMCU7CiAgICBhbmltYXRpb24tZGVsYXk6IDAuOXM7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7Cn0KCi8qIEdlb21ldHJpYyBQYXR0ZXJucyAqLwouZ2VvbWV0cmljLXBhdHRlcm5zIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMDsKICAgIGxlZnQ6IDA7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgouaGV4LXBhdHRlcm4gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgd2lkdGg6IDMwcHg7CiAgICBoZWlnaHQ6IDMwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjNGE5MGUyOwogICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpOwogICAgYW5pbWF0aW9uOiBoZXhGbG9hdCA0cyBlYXNlLWluLW91dCBpbmZpbml0ZTsKICAgIG9wYWNpdHk6IDAuMzsKfQoKLmhleC1wYXR0ZXJuOm50aC1jaGlsZCgxKSB7CiAgICB0b3A6IDIwJTsKICAgIGxlZnQ6IDIwJTsKICAgIGFuaW1hdGlvbi1kZWxheTogMHM7Cn0KCi5oZXgtcGF0dGVybjpudGgtY2hpbGQoMikgewogICAgdG9wOiA2MCU7CiAgICByaWdodDogMjAlOwogICAgYW5pbWF0aW9uLWRlbGF5OiAxLjNzOwogICAgYm9yZGVyLWNvbG9yOiAjMDBmZjQxOwp9CgouaGV4LXBhdHRlcm46bnRoLWNoaWxkKDMpIHsKICAgIGJvdHRvbTogMjAlOwogICAgbGVmdDogNTAlOwogICAgYW5pbWF0aW9uLWRlbGF5OiAyLjZzOwogICAgYm9yZGVyLWNvbG9yOiAjZmY2YjZiOwp9Cgouc2FuZHBhY2std3JhcHBlci5sb2FkaW5nIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLnNhbmRwYWNrLXdyYXBwZXIubG9hZGluZyAubG9hZGluZy1vdmVybGF5IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbmltYXRpb246IGxvYWRpbmdPdmVybGF5RmFkZUluIDAuNXMgZWFzZS1vdXQ7Cn0KCi5zYW5kcGFjay13cmFwcGVyLmxvYWRpbmcgLnNhbmRwYWNrLWNvbnRhaW5lciB7CiAgICBvcGFjaXR5OiAwLjI7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC41cyBlYXNlOwp9CgoubG9hZGluZy1tZXNzYWdlIHsKICAgIGNvbG9yOiB2YXIoLS10ZXh0LWNvbG9yKTsKICAgIG9wYWNpdHk6IDAuOTU7CiAgICBmb250LXNpemU6IDEuMnJlbTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG1hcmdpbi1ib3R0b206IDI1cHg7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC40cyBlYXNlOwogICAgYW5pbWF0aW9uOiB0ZXh0RmFkZUluIDFzIGVhc2Utb3V0LCB0ZXh0QnJlYXRoIDRzIGVhc2UtaW4tb3V0IGluZmluaXRlOwogICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjhweDsKICAgIHRleHQtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjMpOwogICAgei1pbmRleDogMzsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLmxvYWRpbmctc3Bpbm5lciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogNTBweDsKICAgIGhlaWdodDogNTBweDsKICAgIG1hcmdpbjogMCBhdXRvOwogICAgei1pbmRleDogMzsKfQoKLmxvYWRpbmctc3Bpbm5lcjo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICcnOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAwOwogICAgbGVmdDogMDsKICAgIHdpZHRoOiA1MHB4OwogICAgaGVpZ2h0OiA1MHB4OwogICAgYm9yZGVyOiA0cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItdG9wOiA0cHggc29saWQgIzRhOTBlMjsKICAgIGJvcmRlci1yaWdodDogNHB4IHNvbGlkICM0YTkwZTI7CiAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICBhbmltYXRpb246IHNwaW5NYWluIDEuNHMgY3ViaWMtYmV6aWVyKDAuNjgsIC0wLjU1LCAwLjI2NSwgMS41NSkgaW5maW5pdGU7CiAgICBib3gtc2hhZG93OiAwIDAgMjBweCByZ2JhKDc0LCAxNDQsIDIyNiwgMC4zKTsKfQoKLmxvYWRpbmctc3Bpbm5lcjo6YWZ0ZXIgewogICAgY29udGVudDogJyc7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDhweDsKICAgIGxlZnQ6IDhweDsKICAgIHdpZHRoOiAzNHB4OwogICAgaGVpZ2h0OiAzNHB4OwogICAgYm9yZGVyOiAzcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItYm90dG9tOiAzcHggc29saWQgIzM1N2FiZDsKICAgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgIzM1N2FiZDsKICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgIGFuaW1hdGlvbjogc3BpblJldmVyc2UgMXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuNDYsIDAuNDUsIDAuOTQpIGluZmluaXRlOwogICAgb3BhY2l0eTogMC44Owp9CgoubG9hZGluZy1ib3ggLnBhcnRpY2xlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHdpZHRoOiA2cHg7CiAgICBoZWlnaHQ6IDZweDsKICAgIGJhY2tncm91bmQ6ICM0YTkwZTI7CiAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICBvcGFjaXR5OiAwLjc7CiAgICB6LWluZGV4OiAyOwp9Ci5sb2FkaW5nLWJveCAucGFydGljbGU6bnRoLWNoaWxkKDEpIHsgdG9wOiAxNSU7IGxlZnQ6IDEwJTsgYW5pbWF0aW9uOiBmbG9hdFBhcnRpY2xlMSA0cyBlYXNlLWluLW91dCBpbmZpbml0ZTsgfQoubG9hZGluZy1ib3ggLnBhcnRpY2xlOm50aC1jaGlsZCgyKSB7IHRvcDogMjAlOyByaWdodDogMTUlOyBhbmltYXRpb246IGZsb2F0UGFydGljbGUyIDMuNXMgZWFzZS1pbi1vdXQgaW5maW5pdGUgMC41czsgYmFja2dyb3VuZDogIzM1N2FiZDsgfQoubG9hZGluZy1ib3ggLnBhcnRpY2xlOm50aC1jaGlsZCgzKSB7IGJvdHRvbTogMjUlOyBsZWZ0OiAyMCU7IGFuaW1hdGlvbjogZmxvYXRQYXJ0aWNsZTMgNXMgZWFzZS1pbi1vdXQgaW5maW5pdGUgMXM7IGJhY2tncm91bmQ6ICM1YmEzZjU7IH0KLmxvYWRpbmctYm94IC5wYXJ0aWNsZTpudGgtY2hpbGQoNCkgeyBib3R0b206IDMwJTsgcmlnaHQ6IDI1JTsgYW5pbWF0aW9uOiBmbG9hdFBhcnRpY2xlNCAzLjhzIGVhc2UtaW4tb3V0IGluZmluaXRlIDEuNXM7IH0KCi8qIExvYWRpbmcgQW5pbWF0aW9ucyAqLwpAa2V5ZnJhbWVzIGxvYWRpbmdCb3hFbnRyYW5jZSB7CiAgICAwJSB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMzBweCkgc2NhbGUoMC44KSByb3RhdGVYKDE1ZGVnKTsgYm94LXNoYWRvdzogMCAwIDAgcmdiYSgwLCAwLCAwLCAwKTsgfQogICAgNTAlIHsgb3BhY2l0eTogMC44OyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTVweCkgc2NhbGUoMS4wMikgcm90YXRlWCgwZGVnKTsgfQogICAgMTAwJSB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKSBzY2FsZSgxKSByb3RhdGVYKDBkZWcpOyBib3gtc2hhZG93OiAwIDEycHggNDhweCByZ2JhKDAsIDAsIDAsIDAuNCk7IH0KfQpAa2V5ZnJhbWVzIGxvYWRpbmdCb3hQdWxzZSB7CiAgICAwJSwgMTAwJSB7IGJveC1zaGFkb3c6IDAgMTJweCA0OHB4IHJnYmEoMCwgMCwgMCwgMC40KSwgMCAwIDAgMXB4IHJnYmEoNzQsIDE0NCwgMjI2LCAwLjEpOyB0cmFuc2Zvcm06IHNjYWxlKDEpOyB9CiAgICA1MCUgeyBib3gtc2hhZG93OiAwIDE2cHggNTZweCByZ2JhKDc0LCAxNDQsIDIyNiwgMC4xNSksIDAgMCAwIDFweCByZ2JhKDc0LCAxNDQsIDIyNiwgMC4zKTsgdHJhbnNmb3JtOiBzY2FsZSgxLjAxKTsgfQp9CkBrZXlmcmFtZXMgbG9hZGluZ1NoaW1tZXIgeyAwJSB7IGxlZnQ6IC0xMDAlOyB9IDEwMCUgeyBsZWZ0OiAxMDAlOyB9IH0KQGtleWZyYW1lcyBsb2FkaW5nUHJvZ3Jlc3MgeyAwJSB7IHdpZHRoOiAwJTsgfSA1MCUgeyB3aWR0aDogNzAlOyB9IDEwMCUgeyB3aWR0aDogMTAwJTsgfSB9CkBrZXlmcmFtZXMgZ3JhZGllbnRNb3ZlIHsgMCUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwJSAwJTsgfSAxMDAlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMjAwJSAwJTsgfSB9CkBrZXlmcmFtZXMgbG9hZGluZ092ZXJsYXlGYWRlSW4geyAwJSB7IG9wYWNpdHk6IDA7IGJhY2tkcm9wLWZpbHRlcjogYmx1cigwcHgpOyB9IDEwMCUgeyBvcGFjaXR5OiAxOyBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTVweCk7IH0gfQpAa2V5ZnJhbWVzIHRleHRGYWRlSW4geyAwJSB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxNXB4KTsgdGV4dC1zaGFkb3c6IDAgMCAwIHJnYmEoMCwgMCwgMCwgMCk7IH0gMTAwJSB7IG9wYWNpdHk6IDAuOTU7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgdGV4dC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMyk7IH0gfQpAa2V5ZnJhbWVzIHRleHRCcmVhdGggeyAwJSwgMTAwJSB7IG9wYWNpdHk6IDAuOTU7IHRyYW5zZm9ybTogc2NhbGUoMSk7IH0gNTAlIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiBzY2FsZSgxLjAyKTsgfSB9CkBrZXlmcmFtZXMgc3Bpbk1haW4gewogICAgMCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKSBzY2FsZSgxKTsgYm94LXNoYWRvdzogMCAwIDIwcHggcmdiYSg3NCwgMTQ0LCAyMjYsIDAuMyk7IH0KICAgIDUwJSB7IHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZykgc2NhbGUoMS4xKTsgYm94LXNoYWRvdzogMCAwIDMwcHggcmdiYSg3NCwgMTQ0LCAyMjYsIDAuNSk7IH0KICAgIDEwMCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpIHNjYWxlKDEpOyBib3gtc2hhZG93OiAwIDAgMjBweCByZ2JhKDc0LCAxNDQsIDIyNiwgMC4zKTsgfQp9CkBrZXlmcmFtZXMgc3BpblJldmVyc2UgewogICAgMCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpIHNjYWxlKDAuOSk7IG9wYWNpdHk6IDAuODsgfQogICAgNTAlIHsgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKSBzY2FsZSgxKTsgb3BhY2l0eTogMTsgfQogICAgMTAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDBkZWcpIHNjYWxlKDAuOSk7IG9wYWNpdHk6IDAuODsgfQp9CgovKiBQYXJ0aWNsZSBmbG9hdGluZyBhbmltYXRpb25zICovCkBrZXlmcmFtZXMgZmxvYXRQYXJ0aWNsZTEgewogICAgMCUsIDEwMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KSB0cmFuc2xhdGVYKDBweCk7IG9wYWNpdHk6IDAuNzsgfQogICAgMjUlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMHB4KSB0cmFuc2xhdGVYKDVweCk7IG9wYWNpdHk6IDE7IH0KICAgIDUwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNXB4KSB0cmFuc2xhdGVYKC0zcHgpOyBvcGFjaXR5OiAwLjg7IH0KICAgIDc1JSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTVweCkgdHJhbnNsYXRlWCg4cHgpOyBvcGFjaXR5OiAwLjk7IH0KfQoKQGtleWZyYW1lcyBmbG9hdFBhcnRpY2xlMiB7CiAgICAwJSwgMTAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpIHRyYW5zbGF0ZVgoMHB4KTsgb3BhY2l0eTogMC43OyB9CiAgICAzMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLThweCkgdHJhbnNsYXRlWCgtNHB4KTsgb3BhY2l0eTogMTsgfQogICAgNjAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMnB4KSB0cmFuc2xhdGVYKDZweCk7IG9wYWNpdHk6IDAuODsgfQogICAgOTAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0zcHgpIHRyYW5zbGF0ZVgoLTJweCk7IG9wYWNpdHk6IDAuOTsgfQp9CgpAa2V5ZnJhbWVzIGZsb2F0UGFydGljbGUzIHsKICAgIDAlLCAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCkgdHJhbnNsYXRlWCgwcHgpOyBvcGFjaXR5OiAwLjc7IH0KICAgIDIwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNnB4KSB0cmFuc2xhdGVYKDdweCk7IG9wYWNpdHk6IDE7IH0KICAgIDQwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTRweCkgdHJhbnNsYXRlWCgtNXB4KTsgb3BhY2l0eTogMC44OyB9CiAgICA4MCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCkgdHJhbnNsYXRlWCgzcHgpOyBvcGFjaXR5OiAwLjk7IH0KfQoKQGtleWZyYW1lcyBmbG9hdFBhcnRpY2xlNCB7CiAgICAwJSwgMTAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpIHRyYW5zbGF0ZVgoMHB4KTsgb3BhY2l0eTogMC43OyB9CiAgICAzNSUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTlweCkgdHJhbnNsYXRlWCgtNnB4KTsgb3BhY2l0eTogMTsgfQogICAgNzAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC03cHgpIHRyYW5zbGF0ZVgoNHB4KTsgb3BhY2l0eTogMC44OyB9CiAgICA4NSUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTExcHgpIHRyYW5zbGF0ZVgoLTFweCk7IG9wYWNpdHk6IDAuOTsgfQp9Ci8qIEhpLXRlY2ggYW5pbWF0aW9uIGtleWZyYW1lcyAqLwpAa2V5ZnJhbWVzIG1hdHJpeFJhaW4gewogICAgMCUgewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTAwJSk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgIH0KICAgIDEwJSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgIH0KICAgIDkwJSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgIH0KICAgIDEwMCUgewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgfQp9CgpAa2V5ZnJhbWVzIGNvcmVSb3RhdGUgewogICAgMCUgewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOwogICAgfQogICAgMTAwJSB7CiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICAgIH0KfQoKQGtleWZyYW1lcyBjb3JlUHVsc2UgewogICAgMCUsIDEwMCUgewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHNjYWxlKDEpOwogICAgICAgIG9wYWNpdHk6IDE7CiAgICB9CiAgICA1MCUgewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHNjYWxlKDEuNSk7CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgfQp9CgpAa2V5ZnJhbWVzIHN0cmVhbUZsb3cgewogICAgMCUgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgIH0KICAgIDUwJSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMik7CiAgICB9CiAgICAxMDAlIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICB9Cn0KCkBrZXlmcmFtZXMgaGV4RmxvYXQgewogICAgMCUsIDEwMCUgewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKSB0cmFuc2xhdGVZKDBweCk7CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgfQogICAgMjUlIHsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZykgdHJhbnNsYXRlWSgtMTBweCk7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgfQogICAgNTAlIHsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZykgdHJhbnNsYXRlWSgtNXB4KTsKICAgICAgICBvcGFjaXR5OiAwLjg7CiAgICB9CiAgICA3NSUgewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKSB0cmFuc2xhdGVZKC0xNXB4KTsKICAgICAgICBvcGFjaXR5OiAwLjQ7CiAgICB9Cn0KCi8qIE5ldyBzdHlsZXMgZm9yIGFwcCBjb250YWluZXIgYW5kIFNhbmRwYWNrICovCi8qIEJhc2UgbGF5b3V0IChmb3Igc2NyZWVucyA+IDc2N3B4KSAqLwouYXBwLWNvbnRhaW5lciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIG1pbi1oZWlnaHQ6IDYwMHB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgIC8qIEVuc3VyZSBmdWxsIGNvdmVyYWdlIGR1cmluZyBjb250ZW50IGdlbmVyYXRpb24gKi8KICAgIHdpZHRoOiAxMDB2dyAhaW1wb3J0YW50OwogICAgbWFyZ2luLWxlZnQ6IGNhbGMoLTUwdncgKyA1MCUpICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tcmlnaHQ6IGNhbGMoLTUwdncgKyA1MCUpICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tdG9wOiAtNDBweCAhaW1wb3J0YW50OwogICAgbWFyZ2luLWJvdHRvbTogLTgwcHggIWltcG9ydGFudDsKICAgIHBhZGRpbmctdG9wOiA0MHB4ICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nLWJvdHRvbTogODBweCAhaW1wb3J0YW50OwogICAgcGFkZGluZzogNDBweCAwIDgwcHggMCAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogIzAwMDAwMCAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50OwogICAgbWluLWhlaWdodDogY2FsYygxMDB2aCArIDEyMHB4KSAhaW1wb3J0YW50Owp9CgovKiBFbnN1cmUgc2VhbWxlc3MgdHJhbnNpdGlvbiBkdXJpbmcgY29udGVudCBnZW5lcmF0aW9uICovCi5hcHAtY29udGFpbmVyW3N0eWxlKj0iZGlzcGxheTogZmxleCJdLAouYXBwLWNvbnRhaW5lcltzdHlsZSo9ImRpc3BsYXk6YmxvY2siXSB7CiAgICBtYXJnaW4tdG9wOiAtNDBweCAhaW1wb3J0YW50OwogICAgbWFyZ2luLWJvdHRvbTogLTgwcHggIWltcG9ydGFudDsKICAgIHBhZGRpbmctdG9wOiA0MHB4ICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nLWJvdHRvbTogODBweCAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogIzAwMDAwMCAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50OwogICAgd2lkdGg6IDEwMHZ3ICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tbGVmdDogY2FsYygtNTB2dyArIDUwJSkgIWltcG9ydGFudDsKICAgIG1hcmdpbi1yaWdodDogY2FsYygtNTB2dyArIDUwJSkgIWltcG9ydGFudDsKICAgIG1pbi1oZWlnaHQ6IGNhbGMoMTAwdmggKyAxMjBweCkgIWltcG9ydGFudDsKfQoKLyogRW5zdXJlIGNoYXQgaW50ZXJmYWNlIGFsc28gaGFzIGZ1bGwgY292ZXJhZ2UgKi8KLmNoYXQtaW50ZXJmYWNlIHsKICAgIGJhY2tncm91bmQ6ICMwMDAwMDAgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDsKICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7CiAgICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDsKfQoKLyogQWdncmVzc2l2ZSBTYW5kcGFjayBMYXlvdXQgRml4ZXMgLSBSZW1vdmUgYWxsIGVtcHR5IHNwYWNlICovCi5zYW5kcGFjay13cmFwcGVyIHsKICAgIHdpZHRoOiA3MCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbjogMCAhaW1wb3J0YW50Owp9Cgouc2FuZHBhY2stY29udGFpbmVyIHsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgYm9yZGVyLXJhZGl1czogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBib3gtc2hhZG93OiBub25lOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgei1pbmRleDogMTsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbjogMCAhaW1wb3J0YW50Owp9CgovKiBBZ2dyZXNzaXZlIFNhbmRwYWNrIGludGVybmFsIGxheW91dCBmaXhlcyAqLwouc3Atd3JhcHBlciB7CiAgICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbjogMCAhaW1wb3J0YW50OwogICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbiAhaW1wb3J0YW50Owp9Cgouc3AtbGF5b3V0IHsKICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50OwogICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uICFpbXBvcnRhbnQ7CiAgICBnYXA6IDAgIWltcG9ydGFudDsKfQoKLnNwLWxheW91dCAuc3AtbGF5b3V0IHsKICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50OwogICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICBnYXA6IDAgIWltcG9ydGFudDsKfQoKLyogUmVtb3ZlIGFsbCBzcGFjaW5nIGZyb20gZWRpdG9yICovCi5zcC1lZGl0b3IgewogICAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICAgIGZsZXg6IDEgIWltcG9ydGFudDsKICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50Owp9Cgouc3AtY29kZS1lZGl0b3IgewogICAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50Owp9CgovKiBSZW1vdmUgc3BhY2luZyBmcm9tIGVkaXRvciBjb250ZW50ICovCi5zcC1lZGl0b3IgLnNwLWVkaXRvci1jb250ZW50LAouc3AtY29kZS1lZGl0b3IgLnNwLWVkaXRvci1jb250ZW50LAouc3AtZWRpdG9yIC5jbS1lZGl0b3IsCi5zcC1jb2RlLWVkaXRvciAuY20tZWRpdG9yIHsKICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50OwogICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDsKICAgIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBib3JkZXItdG9wOiBub25lICFpbXBvcnRhbnQ7Cn0KCi8qIFJlbW92ZSBzcGFjaW5nIGZyb20gTW9uYWNvIGVkaXRvciAqLwoubW9uYWNvLWVkaXRvciB7CiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsKICAgIGJvcmRlci10b3A6IG5vbmUgIWltcG9ydGFudDsKfQoKLm1vbmFjby1lZGl0b3IgLm1vbmFjby1lZGl0b3ItYmFja2dyb3VuZCB7CiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICAgIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7Cn0KCi8qIEFkZGl0aW9uYWwgYWdncmVzc2l2ZSBzcGFjaW5nIHJlbW92YWwgKi8KLnNwLXdyYXBwZXIsIC5zcC1sYXlvdXQsIC5zcC1sYXlvdXQgLnNwLWxheW91dCB7CiAgICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbjogMCAhaW1wb3J0YW50OwogICAgZ2FwOiAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50OwogICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50Owp9Cgouc3AtZWRpdG9yLCAuc3AtY29kZS1lZGl0b3IgewogICAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICAgIGZsZXg6IDEgIWltcG9ydGFudDsKICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsKICAgIGJvcmRlci10b3A6IG5vbmUgIWltcG9ydGFudDsKfQoKLyogVGFyZ2V0IFNhbmRwYWNrJ3MgaW50ZXJuYWwgc3RydWN0dXJlIG1vcmUgYWdncmVzc2l2ZWx5ICovCi5zcC13cmFwcGVyID4gZGl2LAouc3AtbGF5b3V0ID4gZGl2LAouc3AtbGF5b3V0IC5zcC1sYXlvdXQgPiBkaXYgewogICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50OwogICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50Owp9CgovKiBSZW1vdmUgc3BhY2luZyBmcm9tIFNhbmRwYWNrJ3MgZmlsZSB0YWJzIGFyZWEgKi8KLnNwLXRhYnMsCi5zcC10YWIsCi5zcC1maWxlLWxpc3QsCi5zcC1maWxlLWxpc3QtaXRlbSB7CiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICAgIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7Cn0KCi8qIFJlbW92ZSBzcGFjaW5nIGZyb20gU2FuZHBhY2sncyBlZGl0b3IgY29udGFpbmVyICovCi5zcC1lZGl0b3ItY29udGFpbmVyLAouc3AtY29kZS1lZGl0b3ItY29udGFpbmVyLAouc3AtZWRpdG9yLXdyYXBwZXIsCi5zcC1jb2RlLWVkaXRvci13cmFwcGVyIHsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbjogMCAhaW1wb3J0YW50OwogICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsKICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50Owp9CgovKiBUYXJnZXQgQ29kZU1pcnJvciBzcGVjaWZpY2FsbHkgKi8KLmNtLWVkaXRvciwKLmNtLWVkaXRvciAuY20tc2Nyb2xsZXIsCi5jbS1lZGl0b3IgLmNtLWNvbnRlbnQsCi5jbS1lZGl0b3IgLmNtLWxpbmUgewogICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50OwogICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50Owp9CgovKiBUYXJnZXQgTW9uYWNvIGVkaXRvciBzcGVjaWZpY2FsbHkgKi8KLm1vbmFjby1lZGl0b3IsCi5tb25hY28tZWRpdG9yIC5tb25hY28tZWRpdG9yLWJhY2tncm91bmQsCi5tb25hY28tZWRpdG9yIC52aWV3LWxpbmVzLAoubW9uYWNvLWVkaXRvciAudmlldy1saW5lIHsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbjogMCAhaW1wb3J0YW50OwogICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsKfQoKLyogVWx0cmEtYWdncmVzc2l2ZSBzcGFjaW5nIHJlbW92YWwgZm9yIFNhbmRwYWNrICovCi5zYW5kcGFjay1jb250YWluZXIgKiB7CiAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50OwogICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50OwogICAgYm9yZGVyLXRvcDogbm9uZSAhaW1wb3J0YW50Owp9CgovKiBTcGVjaWZpY2FsbHkgdGFyZ2V0IHRoZSBnYXAgYmV0d2VlbiB0YWJzIGFuZCBlZGl0b3IgKi8KLnNwLWxheW91dCA+IGRpdjpub3QoLnNwLXRhYnMpOm5vdCguc3AtdGFiKSB7CiAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50OwogICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50OwogICAgYm9yZGVyLXRvcDogbm9uZSAhaW1wb3J0YW50Owp9CgovKiBGb3JjZSBlZGl0b3IgdG8gc3RhcnQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGFicyAqLwouc3AtZWRpdG9yLAouc3AtY29kZS1lZGl0b3IsCi5jbS1lZGl0b3IsCi5tb25hY28tZWRpdG9yIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50OwogICAgdG9wOiAwICFpbXBvcnRhbnQ7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgIWltcG9ydGFudDsKfQoKLyogRVhBQ1QgQ09QWSBmcm9tIHN0eWxlLmNzcyAtIFNhbmRwYWNrIGxheW91dCBmaXggKi8KLnNwLXdyYXBwZXIsCi5zcC1sYXlvdXQgewogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50Owp9Cgouc3AtbGF5b3V0IHsKICAgIG1pbi1oZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsKICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7Cn0KCi5zYW5kcGFjay1jb250YWluZXIgKiB7CiAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgIG1heC1oZWlnaHQ6IDEwMCUgIWltcG9ydGFudDsKICAgIHZpc2liaWxpdHk6IHZpc2libGUgIWltcG9ydGFudDsKfQoKLnNhbmRwYWNrLWNvbnRhaW5lcj4qIHsKICAgIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDsKfQoKLyogRm9yY2UgU2FuZHBhY2sgdGFicyB0byBiZSBob3Jpem9udGFsIC0gQUdHUkVTU0lWRSAqLwouc3AtdGFicywKLnNwLWZpbGUtbGlzdCwKW2NsYXNzKj0ic3AtdGFiIl0sCltjbGFzcyo9InNwLWZpbGUiXSwKLnNwLWxheW91dCA+IGRpdjpmaXJzdC1jaGlsZCwKLnNwLWxheW91dCA+IGRpdjpmaXJzdC1jaGlsZCA+IGRpdiB7CiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7CiAgICBmbGV4LWRpcmVjdGlvbjogcm93ICFpbXBvcnRhbnQ7CiAgICBmbGV4LXdyYXA6IG5vd3JhcCAhaW1wb3J0YW50OwogICAgYWxpZ24taXRlbXM6IGNlbnRlciAhaW1wb3J0YW50OwogICAgZ2FwOiAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICAgIGhlaWdodDogYXV0byAhaW1wb3J0YW50OwogICAgbWluLWhlaWdodDogMCAhaW1wb3J0YW50Owp9Cgouc3AtdGFiLAouc3AtZmlsZS1saXN0LWl0ZW0sCi5zcC1sYXlvdXQgPiBkaXY6Zmlyc3QtY2hpbGQgPiBkaXYgPiBkaXYgewogICAgZGlzcGxheTogaW5saW5lLWZsZXggIWltcG9ydGFudDsKICAgIGZsZXgtZGlyZWN0aW9uOiByb3cgIWltcG9ydGFudDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXIgIWltcG9ydGFudDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXAgIWltcG9ydGFudDsKICAgIGhlaWdodDogYXV0byAhaW1wb3J0YW50OwogICAgbWluLWhlaWdodDogMCAhaW1wb3J0YW50Owp9CgovKiBTaW1wbGUgZml4IGZvciBTYW5kcGFjayBzcGFjaW5nIC0gTEVTUyBBR0dSRVNTSVZFICovCi5zcC1sYXlvdXQgewogICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKICAgIG1pbi1oZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsKfQoKLyogT25seSB0YXJnZXQgdGhlIHNwZWNpZmljIG5hdmlnYXRvciBlbGVtZW50ICovCi5zcC1jLWJ4ZVJSdC5zcC1jLWdNZmNucyB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICBoZWlnaHQ6IDAgIWltcG9ydGFudDsKICAgIG1pbi1oZWlnaHQ6IDAgIWltcG9ydGFudDsKfQoKLyogRm9yY2UgZmlsZSB0YWJzIHRvIGhhdmUgbm8gYm90dG9tIHNwYWNpbmcgKi8KLnNwLXRhYnMsCi5zcC1maWxlLWxpc3QgewogICAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50OwogICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDsKICAgIGJvcmRlci1ib3R0b206IG5vbmUgIWltcG9ydGFudDsKfQoKLyogRm9yY2UgZWRpdG9yIHRvIHN0aWNrIHRvIGZpbGUgdGFicyB3aXRoIG5vIGdhcCAqLwouc3AtbGF5b3V0ID4gZGl2Omxhc3QtY2hpbGQsCi5zcC1lZGl0b3IsCi5zcC1jb2RlLWVkaXRvciB7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50OwogICAgYm9yZGVyLXRvcDogbm9uZSAhaW1wb3J0YW50OwogICAgZmxleDogMSAhaW1wb3J0YW50Owp9CgovKiBUYXJnZXQgdGhlIHNwZWNpZmljIGdhcCBiZXR3ZWVuIGZpbGUgbGlzdCBhbmQgZWRpdG9yICovCi5zcC1sYXlvdXQgPiBkaXY6bm90KC5zcC10YWJzKTpub3QoLnNwLWZpbGUtbGlzdCkgewogICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50OwogICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKSAhaW1wb3J0YW50Owp9CgovKiBGaXggbGluZSBudW1iZXIgb2Zmc2V0IGlzc3VlICovCi5jbS1lZGl0b3IgLmNtLWd1dHRlcnMsCi5jbS1lZGl0b3IgLmNtLWxpbmVOdW1iZXJzLAoubW9uYWNvLWVkaXRvciAubWFyZ2luLAoubW9uYWNvLWVkaXRvciAubGluZS1udW1iZXJzIHsKICAgIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgIWltcG9ydGFudDsKfQoKLyogRm9yY2UgbGluZSBudW1iZXJzIHRvIGFsaWduIHdpdGggY29kZSAqLwouY20tZWRpdG9yIC5jbS1saW5lTnVtYmVycyAuY20tZ3V0dGVyRWxlbWVudCwKLm1vbmFjby1lZGl0b3IgLmxpbmUtbnVtYmVycyAubGluZS1udW1iZXIgewogICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsKICAgIGhlaWdodDogYXV0byAhaW1wb3J0YW50OwogICAgbGluZS1oZWlnaHQ6IDEuNSAhaW1wb3J0YW50Owp9CgovKiBSZW1vdmUgYW55IG9mZnNldCBmcm9tIHRoZSBlZGl0b3IgY29udGVudCAqLwouY20tZWRpdG9yIC5jbS1jb250ZW50LAoubW9uYWNvLWVkaXRvciAudmlldy1saW5lcyB7CiAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50OwogICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50OwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApICFpbXBvcnRhbnQ7Cn0KCi8qIEZvcmNlIHRoZSBmaXJzdCBsaW5lIHRvIHN0YXJ0IGF0IHRoZSB0b3AgKi8KLmNtLWVkaXRvciAuY20tY29udGVudCAuY20tbGluZTpmaXJzdC1jaGlsZCwKLm1vbmFjby1lZGl0b3IgLnZpZXctbGluZXMgLnZpZXctbGluZTpmaXJzdC1jaGlsZCB7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50Owp9CgovKiBGb3JjZSBNb25hY28gZWRpdG9yIHRvIHN0YXJ0IGF0IHRoZSB2ZXJ5IHRvcCAqLwoubW9uYWNvLWVkaXRvciAudmlldy1saW5lcyB7CiAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50OwogICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50Owp9CgoubW9uYWNvLWVkaXRvciAudmlldy1saW5lIHsKICAgIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7Cn0KCi5tb25hY28tZWRpdG9yIC52aWV3LWxpbmU6Zmlyc3QtY2hpbGQgewogICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50OwogICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDsKfQoKLyogUmVtb3ZlIGFueSBlbXB0eSBsaW5lcyBhdCB0aGUgc3RhcnQgb2YgY29kZSAqLwouY20tYWN0aXZlTGluZTpmaXJzdC1jaGlsZCwKLmNtLWxpbmU6Zmlyc3QtY2hpbGQgewogICAgbWluLWhlaWdodDogMCAhaW1wb3J0YW50OwogICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7Cn0KCi8qIFRhcmdldCBTYW5kcGFjaydzIGNvZGUgd3JhcHBlciAqLwouc3AtY29kZS1lZGl0b3IsCi5zcC1lZGl0b3IgewogICAgbGluZS1oZWlnaHQ6IDEuNSAhaW1wb3J0YW50Owp9CgovKiBSZW1vdmUgcGFkZGluZyBmcm9tIHRoZSBmaXJzdCBsaW5lIGNvbnRhaW5lciAqLwouY20tZWRpdG9yIC5jbS1jb250ZW50ID4gZGl2OmZpcnN0LWNoaWxkIHsKICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsKICAgIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7Cn0KCi8qIEhpZGUgU2FuZHBhY2sgbmF2aWdhdG9yIGJhciBjb21wbGV0ZWx5IC0gRVhBQ1QgRklYIEZST00gaW5kZXguaHRtbCAqLwouc3AtYy1ieGVSUnQuc3AtYy1nTWZjbnMgewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9Cgouc3AtbmF2aWdhdG9yLAouc3AtbmF2aWdhdG9yLXdyYXBwZXIsCltjbGFzcyo9InNwLW5hdmlnYXRvciJdLApbY2xhc3MqPSJuYXZpZ2F0b3IiXSB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICBoZWlnaHQ6IDAgIWltcG9ydGFudDsKICAgIG1pbi1oZWlnaHQ6IDAgIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbjogMCAhaW1wb3J0YW50OwogICAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7Cn0KCi8qIFJlbW92ZSBBTEwgbmVnYXRpdmUgbWFyZ2lucyAtIGZpbmQgdGhlIHJlYWwgaXNzdWUgKi8KLnNwLWxheW91dCA+IGRpdjpub3QoLnNwLXRhYnMpOm5vdCguc3AtZmlsZS1saXN0KSB7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50OwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApICFpbXBvcnRhbnQ7CiAgICB6LWluZGV4OiAxMCAhaW1wb3J0YW50Owp9CgovKiBGb3JjZSB0aGUgZWRpdG9yIGNvbnRlbnQgdG8gc3RhcnQgYXQgdGhlIHZlcnkgdG9wICovCi5zcC1lZGl0b3IgLmNtLWVkaXRvciwKLnNwLWNvZGUtZWRpdG9yIC5jbS1lZGl0b3IsCi5zcC1lZGl0b3IgLm1vbmFjby1lZGl0b3IsCi5zcC1jb2RlLWVkaXRvciAubW9uYWNvLWVkaXRvciB7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50OwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApICFpbXBvcnRhbnQ7Cn0KLnNhbmRwYWNrLWNvbnRhaW5lciA+IGRpdjpub3QoaWZyYW1lKSB7IG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDsgfQouc2FuZHBhY2stY29udGFpbmVyIGlmcmFtZSB7IG92ZXJmbG93OiBhdXRvICFpbXBvcnRhbnQ7IH0KCi8qIENoYXQgY29udGFpbmVyIHRha2VzIHJlbWFpbmluZyB3aWR0aCAqLwouY2hhdC1jb250YWluZXIgewogICAgZmxleDogMTsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIHBhZGRpbmc6IDIwcHg7CiAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgd2lkdGg6IDEwMCU7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1jb2xvcik7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgZWFzZTsKICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoOwogICAgcG9zaXRpb246IHJlbGF0aXZlOyAvKiBGb3IgYWJzb2x1dGUgcG9zaXRpb25pbmcgb2YgaW5wdXQgc2VjdGlvbiBvbiBtb2JpbGUgKi8KfQoKLyogQ2hhdCBpbnB1dCBzZWN0aW9uIHN0eWxlcyAqLwouY2hhdC1pbnB1dC1zZWN0aW9uIHsKICAgIHdpZHRoOiAxMDAlOwogICAgcGFkZGluZzogMTBweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMik7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMjBweCk7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgcG9zaXRpb246IHN0aWNreTsKICAgIGJvdHRvbTogMDsKICAgIHotaW5kZXg6IDEwOwogICAgbWFyZ2luLXRvcDogYXV0bzsKICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7Cn0KCi5jaGF0LWlucHV0LXNlY3Rpb24ubG9hZGluZyB7CiAgICBvcGFjaXR5OiAwOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDIwcHgpOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5jaGF0LWlucHV0LXNlY3Rpb24gLmlucHV0LW91dGVyLWNvbnRhaW5lciB7CiAgICB3aWR0aDogMTAwJTsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIG1hcmdpbjogMDsKfQoKLmNoYXQtaW5wdXQtc2VjdGlvbiAuaW5wdXQtaW5uZXItY29udGFpbmVyIHsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSk7CiAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgYm94LXNoYWRvdzogMCA0cHggMjBweCByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpOwogICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKfQoKLmNoYXQtcHJvbXB0LWlucHV0IHsKICAgIG1pbi1oZWlnaHQ6IDQ1cHg7CiAgICBtYXgtaGVpZ2h0OiAxMDBweDsKICAgIHBhZGRpbmc6IDEycHggMTZweDsKICAgIGZvbnQtc2l6ZTogMC45NXJlbTsKICAgIHJlc2l6ZTogbm9uZTsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm9yZGVyOiBub25lOwogICAgY29sb3I6ICNmZmZmZmY7CiAgICBvdXRsaW5lOiBub25lOwp9CgouY2hhdC1wcm9tcHQtaW5wdXQ6OnBsYWNlaG9sZGVyIHsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNik7Cn0KCi5jaGF0LXN1Ym1pdC1idG4gewogICAgbWFyZ2luLXJpZ2h0OiA4cHggIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICM0YTkwZTIsICM2YjczZmYpICFpbXBvcnRhbnQ7CiAgICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogICAgcGFkZGluZzogOHB4IDE2cHggIWltcG9ydGFudDsKICAgIGJvcmRlci1yYWRpdXM6IDhweCAhaW1wb3J0YW50OwogICAgZm9udC13ZWlnaHQ6IDYwMCAhaW1wb3J0YW50OwogICAgZm9udC1zaXplOiAwLjlyZW0gIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6IDAgNHB4IDE1cHggcmdiYSg3NCwgMTQ0LCAyMjYsIDAuMykgIWltcG9ydGFudDsKICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2UgIWltcG9ydGFudDsKfQoKLmNoYXQtc3VibWl0LWJ0bjpob3ZlciB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCkgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6IDAgNnB4IDIwcHggcmdiYSg3NCwgMTQ0LCAyMjYsIDAuNCkgIWltcG9ydGFudDsKfQoKLyogUXVhbGl0eSBTZWxlY3RvciBTdHlsZXMgKi8KLnF1YWxpdHktc2VsZWN0b3IgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBtYXJnaW4tcmlnaHQ6IDhweDsKICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7Cn0KCi8qIERpc2FibGVkIHN0YXRlIHN0eWxlcyAqLwoucHJvbXB0LWlucHV0OmRpc2FibGVkIHsKICAgIG9wYWNpdHk6IDAuNiAhaW1wb3J0YW50OwogICAgY3Vyc29yOiBub3QtYWxsb3dlZCAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzKSAhaW1wb3J0YW50OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40KSAhaW1wb3J0YW50OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5xdWFsaXR5LXNlbGVjdG9yOmRpc2FibGVkLAoucXVhbGl0eS1kcm9wZG93bjpkaXNhYmxlZCB7CiAgICBvcGFjaXR5OiAwLjYgIWltcG9ydGFudDsKICAgIGN1cnNvcjogbm90LWFsbG93ZWQgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6IHJnYmEoNTgsIDU0LCA1NCwgMC41KSAhaW1wb3J0YW50OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40KSAhaW1wb3J0YW50OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5zdWJtaXQtYnRuOmRpc2FibGVkLAouZ2VuZXJhdGUtY29kZS1idG46ZGlzYWJsZWQgewogICAgb3BhY2l0eTogMC42ICFpbXBvcnRhbnQ7CiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDc0LCAxNDQsIDIyNiwgMC4zKSAhaW1wb3J0YW50OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5zdWJtaXQtYnRuOmRpc2FibGVkOmhvdmVyLAouZ2VuZXJhdGUtY29kZS1idG46ZGlzYWJsZWQ6aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSg3NCwgMTQ0LCAyMjYsIDAuMykgIWltcG9ydGFudDsKICAgIHRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50Owp9CgoucXVhbGl0eS1kcm9wZG93biB7CiAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICAgIGJhY2tncm91bmQ6ICMzYTM2MzY7CiAgICBjb2xvcjogI2ZmZmZmZjsKICAgIGZvbnQtc2l6ZTogMC45cmVtOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgb3V0bGluZTogbm9uZTsKICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICB0ZXh0LW92ZXJmbG93OiBjbGlwOwogICAgbWluLXdpZHRoOiA2MHB4OwogICAgd2lkdGg6IGF1dG87Cn0KCi5xdWFsaXR5LWRyb3Bkb3duOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSg3NCwgMTQ0LCAyMjYsIDAuNSk7Cn0KCi5xdWFsaXR5LWRyb3Bkb3duOmZvY3VzIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSg3NCwgMTQ0LCAyMjYsIDAuNyk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAycHggcmdiYSg3NCwgMTQ0LCAyMjYsIDAuMjUpOwp9CgoucXVhbGl0eS10b29sdGlwIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1hcmdpbi1sZWZ0OiA4cHg7Cn0KCi50b29sdGlwLWljb24gewogICAgZm9udC1zaXplOiAxLjFyZW07CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwogICAgb3BhY2l0eTogMC43OwogICAgY3Vyc29yOiBoZWxwOwogICAgdHJhbnNpdGlvbjogY29sb3IgMC4zcyBlYXNlOwp9CgoudG9vbHRpcC1jb250ZW50IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGJvdHRvbTogMTAwJTsKICAgIGxlZnQ6IDUwJTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMzAsIDMwLCAzMCwgMC45NSk7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7CiAgICBjb2xvcjogI2ZmZmZmZjsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgZm9udC1zaXplOiAwLjg1cmVtOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG9wYWNpdHk6IDA7CiAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMsIHZpc2liaWxpdHkgMC4yczsKICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgIHotaW5kZXg6IDEwMDsKICAgIGJveC1zaGFkb3c6IDAgNHB4IDIwcHggcmdiYSgwLCAwLCAwLCAwLjQpOwp9CgoucXVhbGl0eS10b29sdGlwOmhvdmVyIC50b29sdGlwLWNvbnRlbnQgewogICAgb3BhY2l0eTogMTsKICAgIHZpc2liaWxpdHk6IHZpc2libGU7Cn0KCi8qIENoYXQgQnV0dG9ucyAqLwouY2hhdC1idXR0b24gewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYnV0dG9uLWJnKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7CiAgICBjb2xvcjogdmFyKC0tdGV4dC1jb2xvcik7CiAgICBwYWRkaW5nOiA4cHggMTVweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZvbnQtc2l6ZTogMC45cmVtOwogICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0Owp9Ci5jaGF0LWJ1dHRvbjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ib3JkZXItY29sb3IpOwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ibHVlLWNvbG9yKTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKfQouZml4LWJ1dHRvbiB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIG1hcmdpbi1sZWZ0OiAwOwp9Ci5maXgtYnV0dG9uOmJlZm9yZSB7CiAgICBjb250ZW50OiAi8J+UpyAiOwp9CgovKiBTYW5kcGFjayBWaWV3IFRvZ2dsZSAqLwoudmlldy10b2dnbGUtY29udGFpbmVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zdXJmYWNlLWNvbG9yKTsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpOwogICAgcGFkZGluZzogMDsKICAgIG1hcmdpbjogMCBhdXRvOwogICAgYm9yZGVyLXJhZGl1czogMDsKICAgIG1heC13aWR0aDogNDAwcHg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKfQoudmlldy10b2dnbGUtYnRuIHsKICAgIGZsZXg6IDE7CiAgICBwYWRkaW5nOiAxMnB4IDE2cHg7CiAgICBib3JkZXI6IG5vbmU7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1idXR0b24tYmcpOwogICAgY29sb3I6IHZhcigtLXRleHQtY29sb3IpOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZm9udC1zaXplOiAwLjlyZW07CiAgICBmb250LXdlaWdodDogNTAwOwogICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgei1pbmRleDogMTA7Cn0KLnZpZXctdG9nZ2xlLWJ0bjpsYXN0LWNoaWxkIHsKICAgIGJvcmRlci1yaWdodDogbm9uZTsKfQoudmlldy10b2dnbGUtYnRuOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJvcmRlci1jb2xvcik7Cn0KLnZpZXctdG9nZ2xlLWJ0bi5hY3RpdmUgewogICAgYmFja2dyb3VuZDogdmFyKC0tYmx1ZS1jb2xvcikgIWltcG9ydGFudDsKICAgIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50OwogICAgb3BhY2l0eTogMSAhaW1wb3J0YW50Owp9CgovKiBFbnN1cmUgaW5hY3RpdmUgYnV0dG9ucyBhcmUgY2xlYXJseSBkaWZmZXJlbnQgKi8KLnZpZXctdG9nZ2xlLWJ0bjpub3QoLmFjdGl2ZSkgewogICAgYmFja2dyb3VuZDogdmFyKC0tYnV0dG9uLWJnKSAhaW1wb3J0YW50OwogICAgY29sb3I6IHZhcigtLXRleHQtY29sb3IpICFpbXBvcnRhbnQ7CiAgICBvcGFjaXR5OiAwLjcgIWltcG9ydGFudDsKfQoKLyogRm9yY2UgYWN0aXZlIHN0YXRlIHRvIGJlIHZpc2libGUgLSB1c2luZyBoYXJkY29kZWQgY29sb3JzICovCiNjb2RlVG9nZ2xlLmFjdGl2ZSwKI3ByZXZpZXdUb2dnbGUuYWN0aXZlIHsKICAgIGJhY2tncm91bmQ6ICM0YTkwZTIgIWltcG9ydGFudDsKICAgIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50OwogICAgYm9yZGVyOiAycHggc29saWQgIzRhOTBlMiAhaW1wb3J0YW50Owp9CgovKiBGb3JjZSBpbmFjdGl2ZSBzdGF0ZSB0byBiZSB2aXNpYmxlIC0gdXNpbmcgaGFyZGNvZGVkIGNvbG9ycyAqLwojY29kZVRvZ2dsZTpub3QoLmFjdGl2ZSksCiNwcmV2aWV3VG9nZ2xlOm5vdCguYWN0aXZlKSB7CiAgICBiYWNrZ3JvdW5kOiAjNDA0MDQwICFpbXBvcnRhbnQ7CiAgICBjb2xvcjogI2UwZTBlMCAhaW1wb3J0YW50OwogICAgYm9yZGVyOiAycHggc29saWQgIzQwNDA0MCAhaW1wb3J0YW50Owp9Ci5zYW5kcGFjay13cmFwcGVyIC5zYW5kcGFjay1jb250YWluZXIgewogICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSA0N3B4KTsgLyogU3VidHJhY3QgdG9nZ2xlIGJ1dHRvbiBoZWlnaHQgKi8KICAgIGZsZXg6IDE7Cn0KCi8qIFNhbmRwYWNrIEZpeGVzIC0gSGlkZSBkdXBsaWNhdGUgaW5wdXRzIGFuZCBmaXggcHJldmlldyAqLwouc3AtYy1ieGVSUnQuc3AtYy1nTWZjbnMgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KLnNwLXdyYXBwZXIsIC5zcC1sYXlvdXQgeyB3aWR0aDogMTAwJSAhaW1wb3J0YW50OyBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDsgfQouc3AtbGF5b3V0IHsgbWluLWhlaWdodDogYXV0byAhaW1wb3J0YW50OyBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyB9Ci5zYW5kcGFjay1jb250YWluZXIgKiB7IG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50OyBtYXgtaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7IHZpc2liaWxpdHk6IHZpc2libGUgIWltcG9ydGFudDsgfQouc2FuZHBhY2stY29udGFpbmVyID4gKiB7IHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDsgfQoKLyogSGlkZSBBTEwgcG9zc2libGUgaW5wdXQgZWxlbWVudHMgaW4gU2FuZHBhY2sgKi8KLnNwLWNvbnNvbGUsIC5zcC1jb25zb2xlLXdyYXBwZXIsIC5zcC1jb25zb2xlLWNvbnRhaW5lciwKLnNwLXRlcm1pbmFsLCAuc3AtdGVybWluYWwtd3JhcHBlciwgLnNwLXRlcm1pbmFsLWNvbnRhaW5lciwKLnNwLWlucHV0LCAuc3AtaW5wdXQtd3JhcHBlciwgLnNwLWlucHV0LWNvbnRhaW5lciwKLnNwLXJ1bi1idXR0b24sIC5zcC1ydW4td3JhcHBlciwgLnNwLXJ1bi1jb250YWluZXIsCi5zcC1nZW5lcmF0ZS1idXR0b24sIC5zcC1nZW5lcmF0ZS13cmFwcGVyLCAuc3AtZ2VuZXJhdGUtY29udGFpbmVyLAouc3AtYnV0dG9uLCAuc3AtYnV0dG9uLXdyYXBwZXIsIC5zcC1idXR0b24tY29udGFpbmVyLAouc3AtYWN0aW9uLCAuc3AtYWN0aW9uLXdyYXBwZXIsIC5zcC1hY3Rpb24tY29udGFpbmVyLAouc3AtdG9vbGJhciwgLnNwLXRvb2xiYXItd3JhcHBlciwgLnNwLXRvb2xiYXItY29udGFpbmVyLAouc3AtY29udHJvbHMsIC5zcC1jb250cm9scy13cmFwcGVyLCAuc3AtY29udHJvbHMtY29udGFpbmVyLApbY2xhc3MqPSJzcC1jb25zb2xlIl0sIFtjbGFzcyo9InNwLXRlcm1pbmFsIl0sIFtjbGFzcyo9InNwLWlucHV0Il0sCltjbGFzcyo9InNwLXJ1biJdLCBbY2xhc3MqPSJzcC1nZW5lcmF0ZSJdLCBbY2xhc3MqPSJzcC1idXR0b24iXSwKW2NsYXNzKj0ic3AtYWN0aW9uIl0sIFtjbGFzcyo9InNwLXRvb2xiYXIiXSwgW2NsYXNzKj0ic3AtY29udHJvbHMiXSB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDsKICAgIGhlaWdodDogMCAhaW1wb3J0YW50OwogICAgd2lkdGg6IDAgIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbjogMCAhaW1wb3J0YW50Owp9CgovKiBIaWRlIGFueSByZW1haW5pbmcgaW5wdXQgZWxlbWVudHMgKi8KLnNwLXdyYXBwZXIgaW5wdXRbdHlwZT0idGV4dCJdLAouc3Atd3JhcHBlciBpbnB1dFt0eXBlPSJ0ZXh0YXJlYSJdLAouc3Atd3JhcHBlciB0ZXh0YXJlYSwKLnNwLXdyYXBwZXIgLmlucHV0LWZpZWxkLAouc3Atd3JhcHBlciAucHJvbXB0LWlucHV0LAouc3Atd3JhcHBlciAuZ2VuZXJhdGUtaW5wdXQsCi5zcC13cmFwcGVyIGJ1dHRvblt0eXBlPSJzdWJtaXQiXSwKLnNwLXdyYXBwZXIgLnN1Ym1pdC1idXR0b24sCi5zcC13cmFwcGVyIC5ydW4tYnV0dG9uLAouc3Atd3JhcHBlciAuZ2VuZXJhdGUtYnV0dG9uIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50OwogICAgaGVpZ2h0OiAwICFpbXBvcnRhbnQ7CiAgICB3aWR0aDogMCAhaW1wb3J0YW50OwogICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7Cn0KCi8qIFJlbW92ZSBhbGwgc3BhY2luZyBmcm9tIFNhbmRwYWNrIGVsZW1lbnRzICovCi5zcC13cmFwcGVyICogewogICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICBnYXA6IDAgIWltcG9ydGFudDsKfQoKLnNwLWxheW91dCAqIHsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbjogMCAhaW1wb3J0YW50OwogICAgZ2FwOiAwICFpbXBvcnRhbnQ7Cn0KCi8qIEVuc3VyZSBubyBlbXB0eSBzcGFjZSBhYm92ZSBjb2RlICovCi5zcC1lZGl0b3IgLnNwLWVkaXRvci1jb250ZW50LAouc3AtY29kZS1lZGl0b3IgLnNwLWVkaXRvci1jb250ZW50IHsKICAgIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBib3JkZXItdG9wOiBub25lICFpbXBvcnRhbnQ7Cn0KCi5zcC1lZGl0b3IgLmNtLWVkaXRvciwKLnNwLWNvZGUtZWRpdG9yIC5jbS1lZGl0b3IgewogICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDsKICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsKICAgIGJvcmRlci10b3A6IG5vbmUgIWltcG9ydGFudDsKfQoKLyogU2FuZHBhY2sgUHJldmlldy9Db2RlIE1vZGUgVG9nZ2xpbmcgKi8KLnByZXZpZXctbW9kZSBbY2xhc3MqPSJzcC1jb2RlIl0sCi5wcmV2aWV3LW1vZGUgW2NsYXNzKj0ic3AtZWRpdG9yIl0sCi5wcmV2aWV3LW1vZGUgW2NsYXNzKj0ic3AtZmlsZSJdLAoucHJldmlldy1tb2RlIFtjbGFzcyo9InNwLXRhYiJdLAoucHJldmlldy1tb2RlIFtjbGFzcyo9ImVkaXRvciJdLAoucHJldmlldy1tb2RlIFtjbGFzcyo9ImNtLSJdLAoucHJldmlldy1tb2RlIFtjbGFzcyo9Im1vbmFjbyJdLAoucHJldmlldy1tb2RlIFtjbGFzcyo9InNwLWNvbnNvbGUiXSwKLnByZXZpZXctbW9kZSBbY2xhc3MqPSJzcC10ZXJtaW5hbCJdLAoucHJldmlldy1tb2RlIFtjbGFzcyo9InNwLWlucHV0Il0gewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9Ci5wcmV2aWV3LW1vZGUgaWZyYW1lLCAucHJldmlldy1tb2RlIFtjbGFzcyo9InByZXZpZXciXSB7CiAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50OyBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDsgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKICAgIHBvaW50ZXItZXZlbnRzOiBhbGwgIWltcG9ydGFudDsgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7IHotaW5kZXg6IDEgIWltcG9ydGFudDsKICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OyBiYWNrZ3JvdW5kOiB3aGl0ZTsgY3Vyc29yOiBkZWZhdWx0ICFpbXBvcnRhbnQ7Cn0KCi8qIENvZGUgbW9kZSAtIHNob3cgZWRpdG9yLCBoaWRlIHByZXZpZXcgKi8KLmNvZGUtbW9kZSBbY2xhc3MqPSJwcmV2aWV3Il0sCi5jb2RlLW1vZGUgaWZyYW1lIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQouY29kZS1tb2RlIFtjbGFzcyo9InNwLWNvZGUiXSwKLmNvZGUtbW9kZSBbY2xhc3MqPSJzcC1lZGl0b3IiXSwKLmNvZGUtbW9kZSBbY2xhc3MqPSJzcC1maWxlIl0sCi5jb2RlLW1vZGUgW2NsYXNzKj0ic3AtdGFiIl0sCi5jb2RlLW1vZGUgW2NsYXNzKj0iZWRpdG9yIl0sCi5jb2RlLW1vZGUgW2NsYXNzKj0iY20tIl0sCi5jb2RlLW1vZGUgW2NsYXNzKj0ibW9uYWNvIl0gewogICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKfQoKLyogRm9yY2UgY29kZSBlZGl0b3IgdG8gc2hvdyBhY3R1YWwgY29kZSwgbm90IHByZXZpZXcgKi8KLnNhbmRwYWNrLWNvbnRhaW5lcjpub3QoLnByZXZpZXctbW9kZSkgW2NsYXNzKj0ic3AtbGF5b3V0Il0gewogICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50Owp9Ci5zYW5kcGFjay1jb250YWluZXI6bm90KC5wcmV2aWV3LW1vZGUpIFtjbGFzcyo9InNwLWVkaXRvciJdIHsKICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7CiAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50OwogICAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7Cn0KLnNhbmRwYWNrLWNvbnRhaW5lcjpub3QoLnByZXZpZXctbW9kZSkgaWZyYW1lIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQoucHJldmlldy1tb2RlIFtjbGFzcyo9Im92ZXJsYXkiXSwgLnByZXZpZXctbW9kZSBbY2xhc3MqPSJsb2FkaW5nIl0geyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KLnByZXZpZXctbW9kZSBbY2xhc3MqPSJwcmV2aWV3Il0geyBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7IH0KLnByZXZpZXctbW9kZSBpZnJhbWUgeyBvdmVyZmxvdzogYXV0byAhaW1wb3J0YW50OyBtaW4taGVpZ2h0OiA1MDBweCAhaW1wb3J0YW50OyB9CgovKiBNaXNjICYgQW5pbWF0ZWQgRWxlbWVudHMgKi8KLmZpbGUtdXBkYXRlZCB7IGFuaW1hdGlvbjogZmlsZVVwZGF0ZSAxcyBlYXNlLWluLW91dDsgfQpAa2V5ZnJhbWVzIGZpbGVVcGRhdGUgeyAwJSB7IGJhY2tncm91bmQtY29sb3I6IHJnYmEoNzQsIDE0NCwgMjI2LCAwLjEpOyB9IDUwJSB7IGJhY2tncm91bmQtY29sb3I6IHJnYmEoNzQsIDE0NCwgMjI2LCAwLjIpOyB9IDEwMCUgeyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfSB9CgojdXNlckNvdW50IHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBmb250LXdlaWdodDogYm9sZDsgY29sb3I6IHZhcigtLWJsdWUtY29sb3IpOyB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBlYXNlOyBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOyB9CiN1c2VyQ291bnQuY291bnRpbmcgeyBhbmltYXRpb246IGNvdW50UHVsc2UgMC4xcyBlYXNlLWluLW91dDsgfQpAa2V5ZnJhbWVzIGNvdW50UHVsc2UgeyAwJSB7IHRyYW5zZm9ybTogc2NhbGUoMSk7IH0gNTAlIHsgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KTsgfSAxMDAlIHsgdHJhbnNmb3JtOiBzY2FsZSgxKTsgfSB9Ci5mbGV4LWxnZWdhIHsgZGlzcGxheTogZmxleDsgfQoKLyogTW9iaWxlIHZpZXcgdG9nZ2xlIGJ1dHRvbiAqLwoudG9nZ2xlLXZpZXctYnRuIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hY2NlbnQtY29sb3IpOwogICAgY29sb3I6IHdoaXRlOwogICAgYm9yZGVyOiBub25lOwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwogICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDc0LCAxNDQsIDIyNiwgMC4zKTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBtaW4td2lkdGg6IDEyMHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwp9Ci50b2dnbGUtdmlldy1idG46aG92ZXIgeyBiYWNrZ3JvdW5kOiAjMzU3YWJkOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7IH0KLnRvZ2dsZS12aWV3LWJ0bjphY3RpdmUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMXB4KTsgfQoKLyogTG92ZWQgYnkgRGV2ZWxvcGVycyBTZWN0aW9uICovCi5sb3ZlZC1ieS1kZXZlbG9wZXJzLXNlY3Rpb24gewogICAgbWFyZ2luOiA2cmVtIGF1dG8gNHJlbTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgcGFkZGluZzogMCAycmVtOwp9CgoubG92ZWQtdGl0bGUgewogICAgZm9udC1zaXplOiAyLjVyZW07CiAgICBmb250LXdlaWdodDogNjAwOwogICAgY29sb3I6ICNmZmZmZmY7CiAgICBtYXJnaW4tYm90dG9tOiAxcmVtOwp9CgoubG92ZWQtc3VidGl0bGUgewogICAgZm9udC1zaXplOiAxLjFyZW07CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwogICAgbWFyZ2luLWJvdHRvbTogNHJlbTsKICAgIG1heC13aWR0aDogNjAwcHg7CiAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgIG1hcmdpbi1yaWdodDogYXV0bzsKfQoKLyogVGVzdGltb25pYWwgQ29udGFpbmVyICovCi50ZXN0aW1vbmlhbC1jb250YWluZXIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbWF4LXdpZHRoOiA4MDBweDsKICAgIG1hcmdpbjogMCBhdXRvIDRyZW07CiAgICBtaW4taGVpZ2h0OiA0MDBweDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7Cn0KCi50ZXN0aW1vbmlhbC1uYXYgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiA1MCU7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICB3aWR0aDogNTBweDsKICAgIGhlaWdodDogNTBweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJsdWUtY29sb3IpOwogICAgYm9yZGVyOiBub25lOwogICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgY29sb3I6IHdoaXRlOwogICAgZm9udC1zaXplOiAxLjJyZW07CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwogICAgei1pbmRleDogMTA7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYm94LXNoYWRvdzogMCA0cHggMTVweCByZ2JhKDc0LCAxNDQsIDIyNiwgMC4zKTsKfQoKLnRlc3RpbW9uaWFsLW5hdjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiAjM2E3YmM4OwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpIHNjYWxlKDEuMSk7CiAgICBib3gtc2hhZG93OiAwIDZweCAyMHB4IHJnYmEoNzQsIDE0NCwgMjI2LCAwLjQpOwp9CgoudGVzdGltb25pYWwtbmF2LnByZXYtYnRuIHsKICAgIGxlZnQ6IC0yNXB4Owp9CgoudGVzdGltb25pYWwtbmF2Lm5leHQtYnRuIHsKICAgIHJpZ2h0OiAtMjVweDsKfQoKLyogVGVzdGltb25pYWwgQ2FyZCAqLwoudGVzdGltb25pYWwtY2FyZCB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDMwLCAzMCwgMzAsIDAuOSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICBib3JkZXItcmFkaXVzOiAyMHB4OwogICAgcGFkZGluZzogMi41cmVtOwogICAgbWF4LXdpZHRoOiA3MDBweDsKICAgIG1hcmdpbjogMCBhdXRvOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgb3BhY2l0eTogMDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgyMHB4KTsKICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7Cn0KCi50ZXN0aW1vbmlhbC1jYXJkLmFjdGl2ZSB7CiAgICBvcGFjaXR5OiAxOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOwp9CgoudGVzdGltb25pYWwtaGVhZGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxcmVtOwogICAgbWFyZ2luLWJvdHRvbTogMS41cmVtOwp9CgoudGVzdGltb25pYWwtYXZhdGFyIHsKICAgIHdpZHRoOiA1MHB4OwogICAgaGVpZ2h0OiA1MHB4OwogICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGJvcmRlcjogMnB4IHNvbGlkIHJnYmEoNDIsIDY1LCAyMzEsIDAuNCk7CiAgICBmbGV4LXNocmluazogMDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLnRlc3RpbW9uaWFsLWF2YXRhcjo6YWZ0ZXIgewogICAgY29udGVudDogJyc7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IC0ycHg7CiAgICByaWdodDogLTJweDsKICAgIHdpZHRoOiAxNnB4OwogICAgaGVpZ2h0OiAxNnB4OwogICAgYmFja2dyb3VuZDogIzJBNDFFNzsKICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgIGJvcmRlcjogMnB4IHNvbGlkIHJnYmEoMzAsIDMwLCAzMCwgMC45KTsKfQoKLmF2YXRhci1pbWcgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBvYmplY3QtZml0OiBjb3ZlcjsKfQoKLnRlc3RpbW9uaWFsLXJhdGluZyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZ2FwOiAwLjJyZW07CiAgICBtYXJnaW4tbGVmdDogYXV0bzsKfQoKLnN0YXIgewogICAgZm9udC1zaXplOiAxLjFyZW07CiAgICBjb2xvcjogI0ZGRDcwMDsKfQoKLnRlc3RpbW9uaWFsLXF1b3RlIHsKICAgIGZvbnQtc2l6ZTogMS4ycmVtOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICBtYXJnaW46IDAgMCAycmVtIDA7CiAgICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgoudGVzdGltb25pYWwtYXV0aG9yIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCi50ZXN0aW1vbmlhbC1hdXRob3ItbmFtZSB7CiAgICBmb250LXNpemU6IDEuMXJlbTsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBjb2xvcjogI2ZmZmZmZjsKfQoKLnRlc3RpbW9uaWFsLWF1dGhvci10aXRsZSB7CiAgICBmb250LXNpemU6IDAuOTVyZW07CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwp9CgoudGVzdGltb25pYWwtYXV0aG9yLWNvbXBhbnkgewogICAgZm9udC1zaXplOiAwLjlyZW07CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpOwp9CgovKiBBdXRob3IgaW5mb3JtYXRpb24gc3R5bGluZyAqLwouYXV0aG9yLW5hbWUgewogICAgZm9udC1zaXplOiAxLjFyZW07CiAgICBmb250LXdlaWdodDogNjAwOwogICAgY29sb3I6ICNmZmZmZmY7CiAgICBtYXJnaW46IDA7Cn0KCi5hdXRob3Itcm9sZSB7CiAgICBmb250LXNpemU6IDAuOTVyZW07CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwogICAgbWFyZ2luOiAwOwp9CgouYXV0aG9yLWNvbXBhbnkgewogICAgZm9udC1zaXplOiAwLjlyZW07CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpOwogICAgbWFyZ2luOiAwOwp9CgovKiBUZXN0aW1vbmlhbCBEb3RzICovCi50ZXN0aW1vbmlhbC1kb3RzIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogMC43NXJlbTsKICAgIG1hcmdpbi1ib3R0b206IDRyZW07Cn0KCi50ZXN0aW1vbmlhbC1kb3RzIC5kb3QgewogICAgd2lkdGg6IDEwcHg7CiAgICBoZWlnaHQ6IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7CiAgICBib3JkZXI6IG5vbmU7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwp9CgoudGVzdGltb25pYWwtZG90cyAuZG90LmFjdGl2ZSB7CiAgICBiYWNrZ3JvdW5kOiAjMkE0MUU3OwogICAgdHJhbnNmb3JtOiBzY2FsZSgxLjMpOwp9CgoudGVzdGltb25pYWwtZG90cyAuZG90OmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoNDIsIDY1LCAyMzEsIDAuNik7Cn0KCi8qIERldmVsb3BlciBTdGF0cyAqLwouZGV2ZWxvcGVyLXN0YXRzIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDIwMHB4LCAxZnIpKTsKICAgIGdhcDogMnJlbTsKICAgIG1hcmdpbjogNHJlbSAwOwogICAgbWF4LXdpZHRoOiA4MDBweDsKICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgbWFyZ2luLXJpZ2h0OiBhdXRvOwp9Cgouc3RhdHMtZ3JpZCB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMywgMWZyKTsKICAgIGdhcDogMnJlbTsKICAgIG1hcmdpbi10b3A6IDNyZW07CiAgICBwYWRkaW5nLXRvcDogMnJlbTsKICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7Cn0KCi5zdGF0LWl0ZW0gewogICAgdGV4dC1hbGlnbjogY2VudGVyOwp9Cgouc3RhdC1pdGVtLW9sZCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMXJlbTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgcGFkZGluZzogMS41cmVtOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpOwogICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKfQoKLnN0YXQtaXRlbTpob3ZlciB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTVweCk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDc0LCAxNDQsIDIyNiwgMC4zKTsKICAgIGJveC1zaGFkb3c6IDAgMTBweCAzMHB4IHJnYmEoNzQsIDE0NCwgMjI2LCAwLjIpOwp9Cgouc3RhdC1pY29uIHsKICAgIHdpZHRoOiA0MHB4OwogICAgaGVpZ2h0OiA0MHB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tYmx1ZS1jb2xvcik7CiAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgY29sb3I6IHdoaXRlOwogICAgZm9udC1zaXplOiAxLjJyZW07CiAgICBmbGV4LXNocmluazogMDsKfQoKLnN0YXQtY29udGVudCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKfQoKLnN0YXQtbnVtYmVyIHsKICAgIGZvbnQtc2l6ZTogMi4ycmVtOwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGNvbG9yOiAjMkE0MUU3OwogICAgbWFyZ2luLWJvdHRvbTogMC41cmVtOwp9Cgouc3RhdC1sYWJlbCB7CiAgICBmb250LXNpemU6IDAuOXJlbTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7CiAgICBmb250LXdlaWdodDogNTAwOwp9CgovKiBSZWFkeSB0byBDb2RlIEZhc3RlciBTZWN0aW9uICovCi5yZWFkeS10by1jb2RlLXNlY3Rpb24gewogICAgbWFyZ2luOiA0cmVtIGF1dG8gNHJlbTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG1heC13aWR0aDogODAwcHg7CiAgICBwYWRkaW5nOiAzcmVtIDJyZW07CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDc0LCAxNDQsIDIyNiwgMC4xKSAwJSwgcmdiYSg3NCwgMTQ0LCAyMjYsIDAuMDUpIDUwJSwgcmdiYSgwLCAwLCAwLCAwLjEpIDEwMCUpOwogICAgYm9yZGVyLXJhZGl1czogMjRweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNzQsIDE0NCwgMjI2LCAwLjIpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDIwcHgpOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLnJlYWR5LXRvLWNvZGUtc2VjdGlvbjo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICcnOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAwOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgYm90dG9tOiAwOwogICAgYmFja2dyb3VuZDogcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA1MCUgMCUsIHJnYmEoNzQsIDE0NCwgMjI2LCAwLjE1KSAwJSwgdHJhbnNwYXJlbnQgNTAlKTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgouY3RhLXRpdGxlIHsKICAgIGZvbnQtc2l6ZTogM3JlbTsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBjb2xvcjogI2ZmZmZmZjsKICAgIG1hcmdpbi1ib3R0b206IDEuNXJlbTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDE7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiAxcmVtOwp9CgouY3RhLWljb24gewogICAgZm9udC1zaXplOiAycmVtOwogICAgY29sb3I6IHZhcigtLWJsdWUtY29sb3IpOwp9CgouY3RhLXN1YnRpdGxlIHsKICAgIGZvbnQtc2l6ZTogMS4ycmVtOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKICAgIG1hcmdpbi1ib3R0b206IDNyZW07CiAgICBtYXgtd2lkdGg6IDYwMHB4OwogICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB6LWluZGV4OiAxOwp9CgouZmVhdHVyZXMtY2hlY2tsaXN0IHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg0LCAxZnIpOwogICAgZ2FwOiAxLjVyZW07CiAgICBtYXJnaW4tYm90dG9tOiA0cmVtOwogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDE7Cn0KCi5mZWF0dXJlLWl0ZW0gewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDAuNzVyZW07CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgcGFkZGluZzogMC43NXJlbSAwOwp9CgouZmVhdHVyZS1jaGVjayB7CiAgICBjb2xvcjogdmFyKC0tYmx1ZS1jb2xvcik7CiAgICBmb250LXNpemU6IDEuMXJlbTsKICAgIGZsZXgtc2hyaW5rOiAwOwp9CgouZmVhdHVyZS10ZXh0IHsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICBmb250LXNpemU6IDAuOTVyZW07Cn0KCi5jdGEtYnV0dG9ucyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZ2FwOiAxcmVtOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgbWFyZ2luLWJvdHRvbTogNHJlbTsKICAgIGZsZXgtd3JhcDogd3JhcDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDE7Cn0KCi5jdGEtcHJpbWFyeS1idG4gewogICAgYmFja2dyb3VuZDogIzJBNDFFNzsKICAgIGNvbG9yOiB3aGl0ZTsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7CiAgICBwYWRkaW5nOiAxcmVtIDJyZW07CiAgICBmb250LXNpemU6IDEuMXJlbTsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDAuNXJlbTsKICAgIGJveC1zaGFkb3c6IDAgOHB4IDI1cHggcmdiYSg3NCwgMTQ0LCAyMjYsIDAuMyk7Cn0KCi5jdGEtcHJpbWFyeS1idG46aG92ZXIgewogICAgYmFja2dyb3VuZDogIzNhN2JjODsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTsKICAgIGJveC1zaGFkb3c6IDAgMTJweCAzNXB4IHJnYmEoNzQsIDE0NCwgMjI2LCAwLjQpOwp9CgouY3RhLXNlY29uZGFyeS1idG4gewogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgYm9yZGVyOiAycHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwogICAgYm9yZGVyLXJhZGl1czogMjBweDsKICAgIHBhZGRpbmc6IDFyZW0gMnJlbTsKICAgIGZvbnQtc2l6ZTogMS4xcmVtOwogICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7Cn0KCi5jdGEtc2Vjb25kYXJ5LWJ0bjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40KTsKICAgIGNvbG9yOiB3aGl0ZTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTsKfQoKLnRydXN0ZWQtYnkgewogICAgbWFyZ2luLXRvcDogNHJlbTsKICAgIHBhZGRpbmctdG9wOiAzcmVtOwogICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKfQoKLnRydXN0ZWQtYnktdGV4dCB7CiAgICBmb250LXNpemU6IDAuOXJlbTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNik7CiAgICBtYXJnaW4tYm90dG9tOiAxLjVyZW07Cn0KCi5jb21wYW55LWxvZ29zIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDJyZW07CiAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICBvcGFjaXR5OiAwLjc7Cn0KCi5jb21wYW55LWxvZ28gewogICAgZm9udC1zaXplOiAxcmVtOwogICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwogICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgY3Vyc29yOiBkZWZhdWx0Owp9CgouY29tcGFueS1sb2dvOmhvdmVyIHsKICAgIGNvbG9yOiB2YXIoLS1ibHVlLWNvbG9yKTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKfQoKLmNvbXBhbnktbmFtZSB7CiAgICBmb250LXNpemU6IDFyZW07CiAgICBmb250LXdlaWdodDogNTAwOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7Cn0KCi5jb21wYW55LW5hbWU6aG92ZXIgewogICAgY29sb3I6IHZhcigtLWJsdWUtY29sb3IpOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpOwp9CgovKiBQb3dlcmVkIGJ5IFdyaXRlY3JlYW0gc3R5bGluZyAtIFllbGxvdyBncmFkaWVudCBhbmltYXRpb24gKi8KLndyaXRlY3JlYW0taGlnaGxpZ2h0IHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg0NWRlZywgI0ZGRDcwMCwgI0ZGQTUwMCwgI0ZGRDcwMCwgI0ZGRkYwMCwgI0ZGRDcwMCk7CiAgICBiYWNrZ3JvdW5kLXNpemU6IDQwMCUgNDAwJTsKICAgIGJhY2tncm91bmQtY2xpcDogdGV4dDsKICAgIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiB0ZXh0OwogICAgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IHRyYW5zcGFyZW50OwogICAgYW5pbWF0aW9uOiB5ZWxsb3dHcmFkaWVudEZsb3cgM3MgZWFzZS1pbi1vdXQgaW5maW5pdGU7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwp9CgpAa2V5ZnJhbWVzIHllbGxvd0dyYWRpZW50RmxvdyB7CiAgICAwJSB7IGJhY2tncm91bmQtcG9zaXRpb246IDAlIDUwJTsgfQogICAgMjUlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMTAwJSA1MCU7IH0KICAgIDUwJSB7IGJhY2tncm91bmQtcG9zaXRpb246IDEwMCUgMTAwJTsgfQogICAgNzUlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCUgMTAwJTsgfQogICAgMTAwJSB7IGJhY2tncm91bmQtcG9zaXRpb246IDAlIDUwJTsgfQp9CgojdXNlckNvdW50IHsKICAgIGNvbG9yOiB2YXIoLS1ibHVlLWNvbG9yKTsgLyogQmx1ZSBjb2xvciBmb3IgdGhlIHVzZXIgY291bnQgKi8KICAgIGZvbnQtd2VpZ2h0OiA3MDA7Cn0KCi8qIERlc2t0b3AgdmlldyAoPj0gNzY4cHgpICovCkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7CiAgICAuYXBwLWNvbnRhaW5lciB7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdyAhaW1wb3J0YW50OwogICAgICAgIC8qIGhlaWdodDogY2FsYygxMDB2aCAtIDYwcHgpICFpbXBvcnRhbnQ7ICovCiAgICAgICAgbWluLWhlaWdodDogYXV0byAhaW1wb3J0YW50OwogICAgfQogICAgLmNoYXQtaW50ZXJmYWNlIHsKICAgICAgICB3aWR0aDogNTAlICFpbXBvcnRhbnQ7CiAgICAgICAgaGVpZ2h0OiA5MCUgIWltcG9ydGFudDsKICAgICAgICBtaW4taGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICAgICAgbWF4LWhlaWdodDogbm9uZSAhaW1wb3J0YW50OwogICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcikgIWltcG9ydGFudDsKICAgICAgICBvcmRlcjogaW5pdGlhbCAhaW1wb3J0YW50OwogICAgfQogICAgLnNhbmRwYWNrLXdyYXBwZXIgewogICAgICAgIHdpZHRoOiA1MCUgIWltcG9ydGFudDsKICAgICAgICBoZWlnaHQ6IDkwJSAhaW1wb3J0YW50OwogICAgICAgIG1pbi1oZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsKICAgICAgICBvcmRlcjogaW5pdGlhbCAhaW1wb3J0YW50OwogICAgICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsKICAgIH0KCn0KCi8qIEdsb2JhbCBzdHlsZXMgZm9yIGFsbCBzZWN0aW9uIHN1YnRpdGxlcyAtIGVuc3VyZSBjZW50ZXJpbmcgKi8KLmhvdy1pdC13b3Jrcy1zdWJ0aXRsZSwKLmVuZGxlc3Mtc3VidGl0bGUsCi5hY3Rpb24tc3VidGl0bGUsCi5tb3JlLXN1YnRpdGxlLAoubG92ZWQtc3VidGl0bGUsCi5jdGEtc3VidGl0bGUgewogICAgbWF4LXdpZHRoOiA3MDBweDsKICAgIG1hcmdpbi1sZWZ0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tcmlnaHQ6IGF1dG8gIWltcG9ydGFudDsKICAgIHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50OwogICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nLWxlZnQ6IDAgIWltcG9ydGFudDsKICAgIHBhZGRpbmctcmlnaHQ6IDAgIWltcG9ydGFudDsKfQoKLyogR2xvYmFsIHN0eWxlcyBmb3IgYWxsIHNlY3Rpb24gdGl0bGVzIC0gZW5zdXJlIGNlbnRlcmluZyAqLwouaG93LWl0LXdvcmtzLXRpdGxlLAouZW5kbGVzcy10aXRsZSwKLmFjdGlvbi10aXRsZSwKLm1vcmUtdGl0bGUsCi5sb3ZlZC10aXRsZSwKLmN0YS10aXRsZSB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDsKICAgIG1hcmdpbi1sZWZ0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tcmlnaHQ6IGF1dG8gIWltcG9ydGFudDsKICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7CiAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50Owp9CgovKiBUYWJsZXQgYW5kIHNtYWxsZXIgKDw9IDc2N3B4KSAqLwpAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHsKICAgIC5jb250YWluZXIgeyBtYXgtd2lkdGg6IDk1dnc7IH0KICAgIC5oZXJvLXRpdGxlIHsgZm9udC1zaXplOiAycmVtOyB9CiAgICAuaGVyby1zdWJ0aXRsZSB7IGZvbnQtc2l6ZTogMS4xcmVtOyB9CiAgICAuZmVhdHVyZXMtZ3JpZCB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOyBnYXA6IDEuNXJlbTsgfQogICAgLmhvdy1pdC13b3Jrcy1zZWN0aW9uLCAuZW5kbGVzcy1wb3NzaWJpbGl0aWVzLXNlY3Rpb24sIC5zZWUtaXQtaW4tYWN0aW9uLXNlY3Rpb24sIC5tb3JlLWNhcGFiaWxpdGllcy1zZWN0aW9uLCAubG92ZWQtYnktZGV2ZWxvcGVycy1zZWN0aW9uLCAucmVhZHktdG8tY29kZS1zZWN0aW9uIHsgbWFyZ2luOiA0cmVtIGF1dG8gM3JlbTsgcGFkZGluZzogMCAxcmVtOyB9CiAgICAuaG93LWl0LXdvcmtzLXRpdGxlLCAuZW5kbGVzcy10aXRsZSwgLmFjdGlvbi10aXRsZSwgLmxvdmVkLXRpdGxlIHsgZm9udC1zaXplOiAycmVtOyB9CiAgICAKICAgIC8qIE1vYmlsZSBRdWFsaXR5IFNlbGVjdG9yIEltcHJvdmVtZW50cyAqLwogICAgLnF1YWxpdHktc2VsZWN0b3IgewogICAgICAgIG1hcmdpbi1yaWdodDogNnB4ICFpbXBvcnRhbnQ7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICB9CiAgICAKICAgIC5xdWFsaXR5LWRyb3Bkb3duIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTBweCAhaW1wb3J0YW50OwogICAgICAgIGZvbnQtc2l6ZTogMC44cmVtICFpbXBvcnRhbnQ7CiAgICAgICAgbWluLXdpZHRoOiA1NXB4ICFpbXBvcnRhbnQ7CiAgICAgICAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDsKICAgICAgICBtYXgtd2lkdGg6IDYwcHggIWltcG9ydGFudDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHggIWltcG9ydGFudDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwICFpbXBvcnRhbnQ7CiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGUgIWltcG9ydGFudDsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBjbGlwICFpbXBvcnRhbnQ7CiAgICB9CiAgICAKICAgIC5xdWFsaXR5LWRyb3Bkb3duIG9wdGlvbiB7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHggIWltcG9ydGFudDsKICAgICAgICBmb250LXNpemU6IDAuODVyZW0gIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgLnF1YWxpdHktdG9vbHRpcCB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDRweCAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAudG9vbHRpcC1pY29uIHsKICAgICAgICBmb250LXNpemU6IDAuOXJlbSAhaW1wb3J0YW50OwogICAgICAgIHdpZHRoOiAxOHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgaGVpZ2h0OiAxOHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXIgIWltcG9ydGFudDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlciAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAuaW5wdXQtY29udHJvbHMtcm93IHsKICAgICAgICBnYXA6IDZweCAhaW1wb3J0YW50OwogICAgICAgIHBhZGRpbmc6IDZweCA4cHggIWltcG9ydGFudDsKICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcCAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAuZ2VuZXJhdGUtY29kZS1idG4gewogICAgICAgIHBhZGRpbmc6IDAuNnJlbSAxcmVtICFpbXBvcnRhbnQ7CiAgICAgICAgZm9udC1zaXplOiAwLjhyZW0gIWltcG9ydGFudDsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHggIWltcG9ydGFudDsKICAgICAgICBtYXgtd2lkdGg6IDE0MHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcCAhaW1wb3J0YW50OwogICAgICAgIGZsZXgtc2hyaW5rOiAwICFpbXBvcnRhbnQ7CiAgICB9CiAgICAuc3RlcHMtY29udGFpbmVyIHsgCiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbiAhaW1wb3J0YW50OyAKICAgICAgICBnYXA6IDFyZW0gIWltcG9ydGFudDsgCiAgICAgICAgcGFkZGluZzogMCAwLjVyZW0gIWltcG9ydGFudDsKICAgIH0KICAgIC5zdGVwLWFycm93IHsgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpICFpbXBvcnRhbnQ7IH0KICAgIC5zdGVwLWNhcmQgeyAKICAgICAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDsgCiAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsgCiAgICAgICAgbWluLXdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7CiAgICAgICAgcGFkZGluZzogMS41cmVtIDFyZW0gIWltcG9ydGFudDsKICAgIH0KICAgIC5wb3NzaWJpbGl0aWVzLWdyaWQsIC5jYXBhYmlsaXRpZXMtZ3JpZCB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOyBnYXA6IDEuNXJlbTsgfQogICAgLnBvcHVsYXItcHJvbXB0cy1ncmlkIHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7IH0KICAgIC5kZW1vLXRhYnMgeyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBhbGlnbi1pdGVtczogY2VudGVyOyBtYXgtd2lkdGg6IDIwMHB4OyB9CiAgICAuZGVtby10YWIgeyB3aWR0aDogMTAwJTsgfQogICAgLm1vcmUtdGl0bGUsIC5jdGEtdGl0bGUgeyBmb250LXNpemU6IDIuMnJlbTsgfQogICAgLnRlc3RpbW9uaWFsLWNvbnRhaW5lciB7IAogICAgICAgIG1pbi1oZWlnaHQ6IDM1MHB4OyAKICAgICAgICBwYWRkaW5nOiAwIDFyZW07IAogICAgICAgIG1hcmdpbjogMCBhdXRvIDJyZW07CiAgICB9CiAgICAKICAgIC50ZXN0aW1vbmlhbC1uYXYgeyAKICAgICAgICB3aWR0aDogNDBweDsgCiAgICAgICAgaGVpZ2h0OiA0MHB4OyAKICAgICAgICBmb250LXNpemU6IDFyZW07CiAgICB9CiAgICAKICAgIC50ZXN0aW1vbmlhbC1uYXYucHJldi1idG4gewogICAgICAgIGxlZnQ6IDEwcHg7CiAgICB9CiAgICAKICAgIC50ZXN0aW1vbmlhbC1uYXYubmV4dC1idG4gewogICAgICAgIHJpZ2h0OiAxMHB4OwogICAgfQogICAgCiAgICAudGVzdGltb25pYWwtY2FyZCB7CiAgICAgICAgcGFkZGluZzogMS41cmVtOwogICAgICAgIG1hcmdpbjogMCAxMHB4OwogICAgfQogICAgCiAgICAudGVzdGltb25pYWwtaGVhZGVyIHsgCiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgCiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyAKICAgICAgICBnYXA6IDAuNXJlbTsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxcmVtOwogICAgfQogICAgCiAgICAudGVzdGltb25pYWwtYXZhdGFyIHsKICAgICAgICB3aWR0aDogNDBweDsKICAgICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICB9CiAgICAKICAgIC50ZXN0aW1vbmlhbC1yYXRpbmcgewogICAgICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgfQogICAgCiAgICAudGVzdGltb25pYWwtcXVvdGUgeyAKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IAogICAgICAgIGZvbnQtc2l6ZTogMXJlbTsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxLjVyZW07CiAgICB9CiAgICAKICAgIC50ZXN0aW1vbmlhbC1hdXRob3IgeyAKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IAogICAgfQogICAgCiAgICAudGVzdGltb25pYWwtZG90cyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMnJlbTsKICAgIH0KICAgIAogICAgLyogQWRkaXRpb25hbCBtb2JpbGUgdGVzdGltb25pYWwgaW1wcm92ZW1lbnRzICovCiAgICAubG92ZWQtYnktZGV2ZWxvcGVycy1zZWN0aW9uIHsKICAgICAgICBwYWRkaW5nOiAycmVtIDFyZW07CiAgICB9CiAgICAKICAgIC5sb3ZlZC10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAycmVtOwogICAgICAgIG1hcmdpbi1ib3R0b206IDFyZW07CiAgICB9CiAgICAKICAgIC5sb3ZlZC1zdWJ0aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxcmVtOwogICAgICAgIG1hcmdpbi1ib3R0b206IDJyZW07CiAgICB9CiAgICAuc3RhdHMtZ3JpZCB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOyBnYXA6IDJyZW07IH0KICAgIC5mZWF0dXJlcy1jaGVja2xpc3QgeyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsgfQogICAgLmN0YS1idXR0b25zIHsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgfQogICAgLmN0YS1wcmltYXJ5LWJ0biwgLmN0YS1zZWNvbmRhcnktYnRuIHsgd2lkdGg6IDEwMCU7IG1heC13aWR0aDogMjgwcHg7IGp1c3RpZnktY29udGVudDogY2VudGVyOyB9CiAgICAuZm9vdGVyIHsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgZ2FwOiAxMHB4OyBwYWRkaW5nOiAxcmVtIDAuNXJlbTsgfQoKICAgIC8qIE1haW4gQXBwIExheW91dCBmb3IgTW9iaWxlICovCiAgICAuYXBwLWNvbnRhaW5lciB7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDIwcHg7CiAgICB9CiAgICAuY2hhdC1pbnRlcmZhY2UgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogY2FsYygxMDB2aCAtIDYwcHgpOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICB9CiAgICAuc2FuZHBhY2std3JhcHBlciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gNjBweCk7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KICAgIC8qIEhlYWRlciBNb2JpbGUgUmVzcG9uc2l2ZSBTdHlsZXMgKi8KICAgIC5oZWFkZXIgewogICAgICAgIHBhZGRpbmc6IDAuNzVyZW0gMCAhaW1wb3J0YW50OwogICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDAgIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgLmhlYWRlci1mbGV4IHsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBwYWRkaW5nOiAwIDEwcHggIWltcG9ydGFudDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICB9CiAgICAKICAgIC5sb2dvLWdyb3VwIHsKICAgICAgICBwYWRkaW5nOiA1cHggOHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgZ2FwOiA2cHggIWltcG9ydGFudDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgfQogICAgCiAgICAubG9nby1pY29uIHsKICAgICAgICBmb250LXNpemU6IDEuMXJlbSAhaW1wb3J0YW50OwogICAgICAgIGZvbnQtZmFtaWx5OiAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0xcHg7CiAgICB9CiAgICAKICAgIC5sb2dvLXRleHQgewogICAgICAgIGZvbnQtc2l6ZTogMS4xcmVtICFpbXBvcnRhbnQ7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIH0KICAgIAogICAgLmhlYWRlci1yaWdodCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7CiAgICAgICAgcmlnaHQ6IGF1dG8gIWltcG9ydGFudDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHggIWltcG9ydGFudDsKICAgICAgICBwYWRkaW5nOiA0cHggNnB4ICFpbXBvcnRhbnQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KTsKICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICB9CiAgICAKICAgIC50b2dnbGUtdmlldy1idG4gewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7CiAgICAgICAgcGFkZGluZzogNnB4IDEwcHggIWltcG9ydGFudDsKICAgICAgICBmb250LXNpemU6IDExcHggIWltcG9ydGFudDsKICAgICAgICBtaW4td2lkdGg6IGF1dG8gIWltcG9ydGFudDsKICAgICAgICBtYXgtd2lkdGg6IDkwcHggIWltcG9ydGFudDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1cHggIWltcG9ydGFudDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB9CiAgICAKICAgIC5kb3dubG9hZC1idG4sCiAgICAuZGVwbG95LW5ldGxpZnktYnRuLAogICAgLnNldC10b2tlbi1idG4gewogICAgICAgIHBhZGRpbmc6IDZweCA4cHggIWltcG9ydGFudDsKICAgICAgICBmb250LXNpemU6IDAgIWltcG9ydGFudDsKICAgICAgICBtaW4td2lkdGg6IDMycHggIWltcG9ydGFudDsKICAgICAgICB3aWR0aDogMzJweCAhaW1wb3J0YW50OwogICAgICAgIGhlaWdodDogMzJweCAhaW1wb3J0YW50OwogICAgICAgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50OwogICAgICAgIGdhcDogMCAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAuZG93bmxvYWQtYnRuIHNwYW46bm90KC5kb3dubG9hZC1pY29uKSwKICAgIC5kZXBsb3ktbmV0bGlmeS1idG4gc3Bhbjpub3QoLmRlcGxveS1pY29uKSwKICAgIC5zZXQtdG9rZW4tYnRuIHNwYW46bm90KC5zZXQtdG9rZW4taWNvbikgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgLmRvd25sb2FkLWljb24sCiAgICAuZGVwbG95LWljb24sCiAgICAuc2V0LXRva2VuLWljb24gewogICAgICAgIHdpZHRoOiAxOHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgaGVpZ2h0OiAxOHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAuZG93bmxvYWQtaWNvbiBzdmcsCiAgICAuZGVwbG95LWljb24gc3ZnLAogICAgLnNldC10b2tlbi1pY29uIHN2ZyB7CiAgICAgICAgd2lkdGg6IDE4cHggIWltcG9ydGFudDsKICAgICAgICBoZWlnaHQ6IDE4cHggIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgLmdpdGh1Yi1idG4gewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgLyogVmVyeSBzbWFsbCBzY3JlZW5zIChiZWxvdyA0ODBweCkgKi8KICAgIEBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkgewogICAgICAgIC5oZWFkZXItZmxleCB7CiAgICAgICAgICAgIHBhZGRpbmc6IDAgOHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGdhcDogNHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvKiBFeHRyYSBzbWFsbCBtb2JpbGUgcXVhbGl0eSBzZWxlY3RvciAqLwogICAgICAgIC5xdWFsaXR5LWRyb3Bkb3duIHsKICAgICAgICAgICAgcGFkZGluZzogNnB4IDhweCAhaW1wb3J0YW50OwogICAgICAgICAgICBmb250LXNpemU6IDAuNzVyZW0gIWltcG9ydGFudDsKICAgICAgICAgICAgbWluLXdpZHRoOiA1MHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIG1heC13aWR0aDogNTVweCAhaW1wb3J0YW50OwogICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5xdWFsaXR5LWRyb3Bkb3duIG9wdGlvbiB7CiAgICAgICAgICAgIHBhZGRpbmc6IDhweCAxMHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMC44cmVtICFpbXBvcnRhbnQ7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC50b29sdGlwLWljb24gewogICAgICAgICAgICBmb250LXNpemU6IDAuODVyZW0gIWltcG9ydGFudDsKICAgICAgICAgICAgd2lkdGg6IDE2cHggIWltcG9ydGFudDsKICAgICAgICAgICAgaGVpZ2h0OiAxNnB4ICFpbXBvcnRhbnQ7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5nZW5lcmF0ZS1jb2RlLWJ0biB7CiAgICAgICAgICAgIHBhZGRpbmc6IDAuNTVyZW0gMC44NXJlbSAhaW1wb3J0YW50OwogICAgICAgICAgICBmb250LXNpemU6IDAuNzVyZW0gIWltcG9ydGFudDsKICAgICAgICAgICAgbWF4LXdpZHRoOiAxMjBweCAhaW1wb3J0YW50OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuaW5wdXQtY29udHJvbHMtcm93IHsKICAgICAgICAgICAgZ2FwOiA0cHggIWltcG9ydGFudDsKICAgICAgICAgICAgcGFkZGluZzogNXB4IDZweCAhaW1wb3J0YW50OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAubG9nby10ZXh0IHsKICAgICAgICAgICAgZm9udC1zaXplOiAxcmVtICFpbXBvcnRhbnQ7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5sb2dvLWljb24gewogICAgICAgICAgICBmb250LXNpemU6IDFyZW0gIWltcG9ydGFudDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnRvZ2dsZS12aWV3LWJ0biB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTBweCAhaW1wb3J0YW50OwogICAgICAgICAgICBwYWRkaW5nOiA1cHggOHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIG1heC13aWR0aDogNzVweCAhaW1wb3J0YW50OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuaGVhZGVyLXJpZ2h0IHsKICAgICAgICAgICAgZ2FwOiA0cHggIWltcG9ydGFudDsKICAgICAgICAgICAgcGFkZGluZzogM3B4IDRweCAhaW1wb3J0YW50OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZG93bmxvYWQtYnRuLAogICAgICAgIC5kZXBsb3ktbmV0bGlmeS1idG4sCiAgICAgICAgLnNldC10b2tlbi1idG4gewogICAgICAgICAgICBtaW4td2lkdGg6IDI4cHggIWltcG9ydGFudDsKICAgICAgICAgICAgd2lkdGg6IDI4cHggIWltcG9ydGFudDsKICAgICAgICAgICAgaGVpZ2h0OiAyOHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIHBhZGRpbmc6IDRweCAhaW1wb3J0YW50OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZG93bmxvYWQtaWNvbiwKICAgICAgICAuZGVwbG95LWljb24sCiAgICAgICAgLnNldC10b2tlbi1pY29uIHsKICAgICAgICAgICAgd2lkdGg6IDE2cHggIWltcG9ydGFudDsKICAgICAgICAgICAgaGVpZ2h0OiAxNnB4ICFpbXBvcnRhbnQ7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5kb3dubG9hZC1pY29uIHN2ZywKICAgICAgICAuZGVwbG95LWljb24gc3ZnLAogICAgICAgIC5zZXQtdG9rZW4taWNvbiBzdmcgewogICAgICAgICAgICB3aWR0aDogMTZweCAhaW1wb3J0YW50OwogICAgICAgICAgICBoZWlnaHQ6IDE2cHggIWltcG9ydGFudDsKICAgICAgICB9CiAgICB9CiAgICAKICAgIC8qIFRhYmxldCBzY3JlZW5zICg0ODFweCB0byA3NjhweCkgKi8KICAgIEBtZWRpYSAobWluLXdpZHRoOiA0ODFweCkgYW5kIChtYXgtd2lkdGg6IDc2OHB4KSB7CiAgICAgICAgLmhlYWRlci1mbGV4IHsKICAgICAgICAgICAgcGFkZGluZzogMCAxNXB4ICFpbXBvcnRhbnQ7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC50b2dnbGUtdmlldy1idG4gewogICAgICAgICAgICBmb250LXNpemU6IDExcHggIWltcG9ydGFudDsKICAgICAgICAgICAgcGFkZGluZzogNnB4IDEycHggIWltcG9ydGFudDsKICAgICAgICAgICAgbWF4LXdpZHRoOiAxMTBweCAhaW1wb3J0YW50OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuaGVhZGVyLXJpZ2h0IHsKICAgICAgICAgICAgZ2FwOiA4cHggIWltcG9ydGFudDsKICAgICAgICB9CiAgICB9CiAgICAKICAgIC8qIEVuc3VyZSBoZWFkZXIgZG9lc24ndCBvdmVyZmxvdyBvbiBtb2JpbGUgd2hlbiBhcHAgaXMgYWN0aXZlICovCiAgICBib2R5LmFwcC1hY3RpdmUgLmhlYWRlciB7CiAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgICAgICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50OwogICAgICAgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50OwogICAgICAgIHBhZGRpbmctdG9wOiAwLjc1cmVtICFpbXBvcnRhbnQ7CiAgICAgICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAvKiBQcmV2ZW50IGhvcml6b250YWwgb3ZlcmZsb3cgb24gbW9iaWxlICovCiAgICBib2R5LmFwcC1hY3RpdmUgLmhlYWRlci1mbGV4IHsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICB9CiAgICAKICAgIGJvZHkuYXBwLWFjdGl2ZSAuaGVhZGVyLXJpZ2h0IHsKICAgICAgICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDEyMHB4KTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQogICAgCiAgICAvKiBNb2JpbGUgc3BhY2luZyBmaXhlcyAqLwogICAgLnBvd2VyZWQtcGlsbCB7CiAgICAgICAgcGFkZGluZzogOHB4IDE1cHggIWltcG9ydGFudDsKICAgICAgICBmb250LXNpemU6IDAuODVyZW0gIWltcG9ydGFudDsKICAgICAgICBtYXJnaW46IDEwcHggYXV0byAhaW1wb3J0YW50OwogICAgICAgIG1hcmdpbi1sZWZ0OiAxNXB4ICFpbXBvcnRhbnQ7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNXB4ICFpbXBvcnRhbnQ7CiAgICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDsKICAgICAgICB3aWR0aDogY2FsYygxMDAlIC0gMzBweCkgIWltcG9ydGFudDsKICAgICAgICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDMwcHgpICFpbXBvcnRhbnQ7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveCAhaW1wb3J0YW50OwogICAgICAgIGxlZnQ6IGF1dG8gIWltcG9ydGFudDsKICAgICAgICB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDsKICAgIH0KICAgIAogICAgI2xhbmRpbmdTZWN0aW9uIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDE1cHggIWltcG9ydGFudDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxNXB4ICFpbXBvcnRhbnQ7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveCAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAjbGFuZGluZ1NlY3Rpb24gLnBvd2VyZWQtcGlsbCB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDAgIWltcG9ydGFudDsKICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50OwogICAgICAgIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50OwogICAgfQogICAgCiAgICAuY2hhdC1jb250YWluZXIgewogICAgICAgIHBhZGRpbmc6IDEwcHggOHB4OwogICAgfQogICAgLmNoYXQtbWVzc2FnZXMgewogICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gNzBweCk7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDEwcHg7CiAgICB9CiAgICAuY2hhdC1pbnB1dC1zZWN0aW9uIHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgYm90dG9tOiAwOyBsZWZ0OiAwOyByaWdodDogMDsKICAgICAgICB6LWluZGV4OiAxMDA7CiAgICB9CiAgICAudmlldy10b2dnbGUtY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogc3RpY2t5OwogICAgICAgIHRvcDogMDsKICAgICAgICB6LWluZGV4OiAxMDsKICAgICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7CiAgICAgICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICAgICAgbWF4LXdpZHRoOiBub25lICFpbXBvcnRhbnQ7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0ICFpbXBvcnRhbnQ7CiAgICB9Cn0KICAgIDwvc3R5bGU+CjwvaGVhZD4KCjxib2R5PgogICAgPGhlYWRlciBjbGFzcz0iaGVhZGVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIgaGVhZGVyLWZsZXgiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvLWdyb3VwIiBvbmNsaWNrPSJnb1RvSG9tZXBhZ2UoKSIgc3R5bGU9ImN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiAxMHB4OyI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibG9nby1pY29uIj48Lz48L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibG9nby10ZXh0Ij5Db2RpbmdBSTwvc3Bhbj4gCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItcmlnaHQiPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iZGVwbG95QnRuIiBjbGFzcz0iZGVwbG95LW5ldGxpZnktYnRuIiB0aXRsZT0iRGVwbG95IHRvIE5ldGxpZnkiIHN0eWxlPSJkaXNwbGF5OiBub25lOyIKICAgICAgICAgICAgICAgICAgICBvbmNsaWNrPSJkZXBsb3lUb05ldGxpZnkoKSI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRlcGxveS1pY29uIiBzdHlsZT0iZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjBweCIgdmlld0JveD0iMCAtOTYwIDk2MCA5NjAiIHdpZHRoPSIyMHB4IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Im0yODAtMjgwIDIwMC0yMDAgMjAwIDIwMEgyODBabTIwMC0yNDBMMjgwLTcyMGg0MDBMNDgwLTUyMFoiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPkRlcGxveSB0byBOZXRsaWZ5PC9zcGFuPgogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJzZXROZXRsaWZ5VG9rZW5CdG4iIGNsYXNzPSJzZXQtdG9rZW4tYnRuIiB0aXRsZT0iU2V0IE5ldGxpZnkgVG9rZW4iIHN0eWxlPSJkaXNwbGF5OiBub25lOyIgb25jbGljaz0ic2hvd05ldGxpZnlUb2tlbk1vZGFsKCkiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZXQtdG9rZW4taWNvbiIgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjIwcHgiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjBweCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik00NDAtMjgwaDgwdi0xNjBoMTYwdi04MEg1MjB2LTE2MGgtODB2MTYwSDI4MHY4MGgxNjB2MTYwWm00MCAyMDBxLTgyIDAtMTU1LTMxLjV0LTEyNy41LTg2UTE0My0yNTUgMTExLjUtMzI4VDgwLTQ4MHEwLTgzIDMxLjUtMTU2dDg2LTEyN1EyNTItODE3IDMyNS04NDguNVQ0ODAtODgwcTgzIDAgMTU2IDMxLjVUNzYzLTc2M3E1NCA1NCA4NS41IDEyN1Q4ODAtNDgwcTAgODItMzEuNSAxNTVUNzYzLTE5Ny41cS01NCA1NC41LTEyNyA4NlQ0ODAtODBabTAtODBxMTM0IDAgMjI3LTkzdDkzLTIyN3EwLTEzNC05My0yMjd0LTIyNy05M3EtMTM0IDAtMjI3IDkzdC05MyAyMjdxMCAxMzQgOTMgMjI3dDIyNyA5M1ptMC0zMjBaIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj5TZXQgVG9rZW48L3NwYW4+CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiBpZD0ibmV3Q2hhdEJ0biIgY2xhc3M9Im5ldy1jaGF0LWJ0biIgdGl0bGU9IlN0YXJ0IE5ldyBDaGF0IiBzdHlsZT0iZGlzcGxheTogbm9uZTsiCiAgICAgICAgICAgICAgICAgICAgb25jbGljaz0ic3RhcnROZXdDaGF0KCkiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJuZXctY2hhdC1pY29uIiBzdHlsZT0iZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjBweCIgdmlld0JveD0iMCAtOTYwIDk2MCA5NjAiIHdpZHRoPSIyMHB4IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik00NDAtNDQwSDIwMHYtODBoMjQwdi0yNDBoODB2MjQwaDI0MHY4MEg1MjB2MjQwaC04MHYtMjQwWiIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+TmV3IENoYXQ8L3NwYW4+CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4gLS0+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJ0b2dnbGVWaWV3QnRuIiBjbGFzcz0idG9nZ2xlLXZpZXctYnRuIj5Td2l0Y2ggdG8gUHJldmlldzwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3dyaXRlY3JlYW0tb3JnL0FpQ29kZXIiIGNsYXNzPSJnaXRodWItYnRuIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciI+ICAKICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2hlYWRlcj4KCiAgICA8IS0tIExhbmRpbmcgY29udGVudCB0aGF0IHdpbGwgYmUgaGlkZGVuIGFmdGVyIGNoYXQgc3RhcnRzIC0tPgogICAgPGRpdiBpZD0ibGFuZGluZ1NlY3Rpb24iPgogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LndyaXRlY3JlYW0uY29tLyIgdGFyZ2V0PSJfYmxhbmsiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwb3dlcmVkLXBpbGwiPgogICAgICAgICAgICAgICAgPHNwYW4+UG93ZXJlZCBieSA8Yj48c3BhbiBjbGFzcz0id3JpdGVjcmVhbS1oaWdobGlnaHQiPldyaXRlY3JlYW0gQUk8L3NwYW4+PC9iPi4gVXNlZCBieSA8Yj48c3BhbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9InVzZXJDb3VudCI+MS4xTSs8L3NwYW4+IHVzZXJzPC9iPi48L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvYT4KCiAgICAgICAgPG1haW4gY2xhc3M9ImNvbnRhaW5lciI+CiAgICAgICAgICAgIDwhLS0gTmV3IEhlcm8gU2VjdGlvbiBtYXRjaGluZyBGaWdtYSBkZXNpZ24gLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Imhlcm8tc2VjdGlvbiI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnNpZGUtaGVyby1zZWN0aW9uIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZXJvLWljb24iPgogICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJsYXp5IiBzcmM9ImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTIwdmlld0JveD0nMCUyMDAlMjAxJTIwMSclM0UlM0Mvc3ZnJTNFIiBkYXRhLXNyYz0iaHR0cHM6Ly93d3cud3JpdGVjcmVhbS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMTAvdmFyaWFudDEucG5nIiBhbHQ9IkFJIENvZGUgQXNzaXN0YW50IEljb24iIC8+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGgxIGNsYXNzPSJoZXJvLXRpdGxlICI+QUktR2VuZXJhdGVkIE1hdGhzIFNvbHZlcjwvaDE+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJoZXJvLXN1YnRpdGxlIj4KICAgICAgICAgICAgICAgICAgICBTb2x2ZSBjb21wbGV4IG1hdGggcHJvYmxlbXMgaW5zdGFudGx5IHdpdGggb3VyIEFJLXBvd2VyZWQgc29sdmVyLiBHZXQgc3RlcC1ieS1zdGVwIHNvbHV0aW9ucyBmb3IKICAgICAgICAgICAgICAgICAgICBhbGdlYnJhLCBjYWxjdWx1cywgYW5kIG1vcmUsIGJvb3N0aW5nIHlvdXIgdW5kZXJzdGFuZGluZyBhbmQgcHJvZHVjdGl2aXR5LgogICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgPHAgY2xhc3M9Imhlcm8tZGVzY3JpcHRpb24iPgogICAgICAgICAgICAgICAgICAgIEZyb20gYmFzaWMgYXJpdGhtZXRpYyB0byBhZHZhbmNlZCBlcXVhdGlvbnMsIG91ciBzbWFydCBtYXRoIGFzc2lzdGFudCBwcm92aWRlcyBhY2N1cmF0ZSBhbnN3ZXJzIGFuZAogICAgICAgICAgICAgICAgICAgIGRldGFpbGVkIGV4cGxhbmF0aW9ucy4gUGVyZmVjdCBmb3Igc3R1ZGVudHMsIGVkdWNhdG9ycywgYW5kIGFueW9uZSBuZWVkaW5nIHF1aWNrLCByZWxpYWJsZSBtYXRoCiAgICAgICAgICAgICAgICAgICAgaGVscC4KICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIEtlZXAgZXhpc3RpbmcgaW5wdXQgc2VjdGlvbiB1bmNoYW5nZWQgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LW91dGVyLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1pbm5lci1jb250YWluZXIgdmVydGljYWwiPgogICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0icHJvbXB0LWlucHV0IiBwbGFjZWhvbGRlcj0iQnVpbGQgYSBFLUNvbW1lcmNlIGxhbmRpbmcgcGFnZS4iIHJvd3M9IjEiPjwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtY29udHJvbHMtcm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8YnV0dG9uIGNsYXNzPSJhdHRhY2gtYnRuIHNxdWFyZSIgdGl0bGU9IkF0dGFjaCI+PHNwYW4+8J+Tjjwvc3Bhbj48L2J1dHRvbj4gLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InF1YWxpdHktc2VsZWN0b3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBpZD0icXVhbGl0eVNlbGVjdExhbmRpbmciIGNsYXNzPSJxdWFsaXR5LWRyb3Bkb3duIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJzdGFuZGFyZCI+U1EgPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaGlnaGVyIj5IUTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJxdWFsaXR5LXRvb2x0aXAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0b29sdGlwLWljb24iPjxpIGNsYXNzPSJmYS1zb2xpZCBmYS1jaXJjbGUtaW5mbyI+PC9pPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sdGlwLWNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPlNROjwvc3Ryb25nPiBRdWljayBnZW5lcmF0aW9uIHdpdGggZ29vZCBxdWFsaXR5PGJyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPkhROjwvc3Ryb25nPiBTbG93IGdlbmVyYXRpb24gd2l0aCBoaWdoIHF1YWxpdHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ic3VibWl0LWJ0biBnZW5lcmF0ZS1jb2RlLWJ0biIgdGl0bGU9IlN1Ym1pdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5HZW5lcmF0ZSBDb2RlPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJxdWljay1hcHBzIj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InF1aWNrLWFwcC1idG4iPlNvbHZlIGNvbXBsZXggbWF0aCBwcm9ibGVtcyB3aXRoIEFJLjwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0icXVpY2stYXBwLWJ0biI+R2V0IHN0ZXAtYnktc3RlcCBzb2x1dGlvbnMgZm9yIGFsZ2VicmEsIGNhbGN1bHVzLCBhbmQgbW9yZS48L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InF1aWNrLWFwcC1idG4iPkdlbmVyYXRlIGRldGFpbGVkIGV4cGxhbmF0aW9ucyBmb3IgYW55IG1hdGggZXF1YXRpb24uPC9idXR0b24+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJxdWljay1hcHAtYnRuIj5JbnN0YW50bHkgdmVyaWZ5IG1hdGggYW5zd2VycyBhbmQgY2hlY2sgeW91ciB3b3JrLjwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0icXVpY2stYXBwLWJ0biI+UHJhY3RpY2UgbWF0aCB3aXRoIEFJLWdlbmVyYXRlZCBwcm9ibGVtcyBhbmQgc29sdXRpb25zLjwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPCEtLSBOZXcgRmVhdHVyZSBDYXJkcyBTZWN0aW9uIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlcy1ncmlkIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1pY29uIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz0ibGF6eSIgc3JjPSJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIweG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUyMHZpZXdCb3g9JzAlMjAwJTIwMSUyMDEnJTNFJTNDL3N2ZyUzRSIgZGF0YS1zcmM9Imh0dHBzOi8vd3d3LndyaXRlY3JlYW0uY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzEwL3ZhcmlhbnQyLnBuZyIgYWx0PSJNdWx0aS1MYW5ndWFnZSBJY29uIiAvPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0iZmVhdHVyZS10aXRsZSI+QUktUG93ZXJlZCBNYXRoIFNvbHZlciBUb29sPC9oMz4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZmVhdHVyZS1kZXNjcmlwdGlvbiI+SW5zdGFudGx5IGdlbmVyYXRlIHN0ZXAtYnktc3RlcCBzb2x1dGlvbnMgZm9yIGFueSBtYXRoIHByb2JsZW0gdXNpbmcgYWR2YW5jZWQgQUkuIFNpbXBsaWZ5IGNvbXBsZXggZXF1YXRpb25zLCB2aXN1YWxpemUgY29uY2VwdHMsIGFuZCBib29zdCBsZWFybmluZyBlZmZpY2llbmN5IHdpdGggc21hcnQsIGF1dG9tYXRlZCBtYXRoIGFzc2lzdGFuY2UuPC9wPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLWNhcmQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtaWNvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9ImxhenkiIHNyYz0iZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclMjB2aWV3Qm94PScwJTIwMCUyMDElMjAxJyUzRSUzQy9zdmclM0UiIGRhdGEtc3JjPSJodHRwczovL3d3dy53cml0ZWNyZWFtLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8xMC92YXJpYW50NS5wbmciIGFsdD0iQ3VzdG9taXphYmxlIEthbmJhbiBUZW1wbGF0ZXMgSWNvbiIgLz4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9ImZlYXR1cmUtdGl0bGUiPkN1c3RvbWl6YWJsZSBNYXRoIFByb2JsZW0gVGVtcGxhdGVzPC9oMz4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZmVhdHVyZS1kZXNjcmlwdGlvbiI+UGVyc29uYWxpemUgeW91ciBsZWFybmluZyBleHBlcmllbmNlIHdpdGggY3VzdG9taXphYmxlIG1hdGggdGVtcGxhdGVzIGZvciBhbGdlYnJhLCBjYWxjdWx1cywgZ2VvbWV0cnksIHRyaWdvbm9tZXRyeSwgc3RhdGlzdGljcywgYW5kIG1vcmUuIE91ciBBSS1kcml2ZW4gcGxhdGZvcm0gYWRhcHRzIHRvIHlvdXIgcHJvYmxlbSB0eXBlIGFuZCBwcm92aWRlcyBhY2N1cmF0ZSwgc3RydWN0dXJlZCBzb2x1dGlvbnMgZXZlcnkgdGltZS48L3A+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1pY29uIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz0ibGF6eSIgc3JjPSJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIweG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUyMHZpZXdCb3g9JzAlMjAwJTIwMSUyMDEnJTNFJTNDL3N2ZyUzRSIgZGF0YS1zcmM9Imh0dHBzOi8vd3d3LndyaXRlY3JlYW0uY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzEwL3ZhcmlhbnQ2LnBuZyIgYWx0PSJFZmZpY2llbnQgV29ya2Zsb3cgTWFuYWdlbWVudCAmIFRyYWNraW5nIEljb24iIC8+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJmZWF0dXJlLXRpdGxlIj5GYXN0ICYgQWNjdXJhdGUgUHJvYmxlbSBTb2x2aW5nPC9oMz4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZmVhdHVyZS1kZXNjcmlwdGlvbiI+U2F2ZSB0aW1lIHdpdGggaW5zdGFudCBzb2x1dGlvbiBnZW5lcmF0aW9uIGFuZCBkZXRhaWxlZCBleHBsYW5hdGlvbnMgZm9yIGV2ZXJ5IHN0ZXAuIE91ciBBSSBNYXRoIFNvbHZlciBoZWxwcyBzdHVkZW50cywgdGVhY2hlcnMsIGFuZCBwcm9mZXNzaW9uYWxzIGFuYWx5emUgcHJvYmxlbXMsIHVuZGVyc3RhbmQgY29uY2VwdHMgYmV0dGVyLCBhbmQgZW5oYW5jZSBvdmVyYWxsIG1hdGhlbWF0aWNhbCBwZXJmb3JtYW5jZS48L3A+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIEtlZXAgZXhpc3RpbmcgcXVpY2sgYXBwcyBidXQgc3R5bGUgdGhlbSBiZXR0ZXIgLS0+CgogICAgICAgICAgICA8IS0tIEhvdyBJdCBXb3JrcyBTZWN0aW9uIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJob3ctaXQtd29ya3Mtc2VjdGlvbiI+CiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9Imhvdy1pdC13b3Jrcy10aXRsZSI+SG93IE91ciBBSSBNYXRoIFNvbHZlciBXb3JrczwvaDI+CiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iaG93LWl0LXdvcmtzLXN1YnRpdGxlIj5Tb2x2ZSBhbnkgbWF0aCBwcm9ibGVtIGluIHRocmVlIHNpbXBsZSBzdGVwczwvcD4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGVwcy1jb250YWluZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0ZXAtY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0ZXAtbnVtYmVyIj4wMTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGVwLWljb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz0ibGF6eSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9ImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTIwdmlld0JveD0nMCUyMDAlMjAxJTIwMSclM0UlM0Mvc3ZnJTNFIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtc3JjPSJodHRwczovL3d3dy53cml0ZWNyZWFtLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8xMC92YXJpYW50Ny5wbmciCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PSJJbnB1dCBQcm9qZWN0IERldGFpbHMgZm9yIEFJIEthbmJhbiBCb2FyZCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0ic3RlcC10aXRsZSI+SW5wdXQgWW91ciBNYXRoIFByb2JsZW08L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0ic3RlcC1kZXNjcmlwdGlvbiI+SnVzdCB0eXBlIG9yIHBhc3RlIHlvdXIgbWF0aCBxdWVzdGlvbuKAlHdoZXRoZXIgaXQncyBhbGdlYnJhLCBjYWxjdWx1cywgZ2VvbWV0cnksIHRyaWdvbm9tZXRyeSwgb3Igc3RhdGlzdGljcy4gT3VyIGludHVpdGl2ZSBpbnRlcmZhY2UgbWFrZXMgc3VibWl0dGluZyBwcm9ibGVtcyBmYXN0IGFuZCBlZmZvcnRsZXNzIGZvciBhY2N1cmF0ZSBBSSBtYXRoIHNvbHZpbmcuPC9wPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGVwLWFycm93Ij7ihpI8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RlcC1jYXJkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RlcC1udW1iZXIiPjAyPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0ZXAtaWNvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJsYXp5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz0iZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclMjB2aWV3Qm94PScwJTIwMCUyMDElMjAxJyUzRSUzQy9zdmclM0UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1zcmM9Imh0dHBzOi8vd3d3LndyaXRlY3JlYW0uY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzEwL3ZhcmlhbnQ4LnBuZyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9IkFJIFByb2Nlc3NlcyBhbmQgR2VuZXJhdGVzIEthbmJhbiBCb2FyZCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0ic3RlcC10aXRsZSI+QUkgQW5hbHl6ZXMgYW5kIEdlbmVyYXRlcyBTdGVwLWJ5LVN0ZXAgU29sdXRpb248L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0ic3RlcC1kZXNjcmlwdGlvbiI+T3VyIGFkdmFuY2VkIEFJIGVuZ2luZSBpbnRlbGxpZ2VudGx5IGFuYWx5emVzIHlvdXIgaW5wdXQgYW5kIGluc3RhbnRseSBnZW5lcmF0ZXMgYSBjbGVhciwgc3RlcC1ieS1zdGVwIG1hdGggc29sdXRpb24uIEZyb20gZXF1YXRpb25zIHRvIHdvcmQgcHJvYmxlbXMsIGdldCBhY2N1cmF0ZSBjYWxjdWxhdGlvbnMsIGV4cGxhbmF0aW9ucywgYW5kIHZpc3VhbGl6YXRpb25zIHdpdGhpbiBzZWNvbmRzLjwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RlcC1hcnJvdyI+4oaSPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0ZXAtY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0ZXAtbnVtYmVyIj4wMzwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGVwLWljb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz0ibGF6eSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9ImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTIwdmlld0JveD0nMCUyMDAlMjAxJTIwMSclM0UlM0Mvc3ZnJTNFIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtc3JjPSJodHRwczovL3d3dy53cml0ZWNyZWFtLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8xMC92YXJpYW50OS5wbmciCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PSJDdXN0b21pemUgYW5kIENvbGxhYm9yYXRlIG9uIEFJIEthbmJhbiBCb2FyZCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0ic3RlcC10aXRsZSI+UmV2aWV3LCBMZWFybiAmIFByYWN0aWNlPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9InN0ZXAtZGVzY3JpcHRpb24iPllvdXIgZGV0YWlsZWQgQUktZ2VuZXJhdGVkIHNvbHV0aW9uIGlzIHJlYWR5ISBSZXZpZXcgZWFjaCBzdGVwLCBleHBsb3JlIGFsdGVybmF0ZSBtZXRob2RzLCBhbmQgc3RyZW5ndGhlbiB5b3VyIHVuZGVyc3RhbmRpbmcuIFByYWN0aWNlIHNpbWlsYXIgcHJvYmxlbXMsIGVuaGFuY2UgeW91ciBsZWFybmluZywgYW5kIGltcHJvdmUgYWNjdXJhY3kgd2l0aCBzbWFydCBBSS1wb3dlcmVkIG1hdGggYXNzaXN0YW5jZS48L3A+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPCEtLSBFbmRsZXNzIFBvc3NpYmlsaXRpZXMgU2VjdGlvbiAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZW5kbGVzcy1wb3NzaWJpbGl0aWVzLXNlY3Rpb24iPgogICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJlbmRsZXNzLXRpdGxlIj5VbmxvY2sgUG90ZW50aWFsIHdpdGggQUktR2VuZXJhdGVkIE1hdGggU29sdXRpb25zPC9oMj4KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJlbmRsZXNzLXN1YnRpdGxlIj5UcmFuc2Zvcm0gdGhlIHdheSB5b3UgbGVhcm4sIHVuZGVyc3RhbmQsIGFuZCBzb2x2ZSBtYXRoZW1hdGljcyB3aXRoIGludGVsbGlnZW50LCBzdGVwLWJ5LXN0ZXAgQUktcG93ZXJlZCBwcm9ibGVtIHNvbHZpbmcuPC9wPgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBvc3NpYmlsaXRpZXMtZ3JpZCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icG9zc2liaWxpdHktY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBvc3NpYmlsaXR5LWljb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz0ibGF6eSIgc3JjPSJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIweG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUyMHZpZXdCb3g9JzAlMjAwJTIwMSUyMDEnJTNFJTNDL3N2ZyUzRSIgZGF0YS1zcmM9Imh0dHBzOi8vd3d3LndyaXRlY3JlYW0uY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzEwL3ZhcmlhbnQxMC5wbmciIGFsdD0iSGVybyBTZWN0aW9uIEljb24iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InBvc3NpYmlsaXR5LXRpdGxlIj5BSS1Qb3dlcmVkIE1hdGggUHJvYmxlbSBTb2x2aW5nPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9InBvc3NpYmlsaXR5LWRlc2NyaXB0aW9uIj5JbnN0YW50bHkgZ2VuZXJhdGUgYWNjdXJhdGUsIHN0ZXAtYnktc3RlcCBzb2x1dGlvbnMgZm9yIGFueSBtYXRoIHByb2JsZW3igJRhbGdlYnJhLCBjYWxjdWx1cywgZ2VvbWV0cnksIHRyaWdvbm9tZXRyeSwgc3RhdGlzdGljcywgYW5kIG1vcmUuIFJlZHVjZSBwcm9ibGVtLXNvbHZpbmcgdGltZSBhbmQgYm9vc3QgbGVhcm5pbmcgZWZmaWNpZW5jeS48L3A+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBvc3NpYmlsaXR5LWNhcmQiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwb3NzaWJpbGl0eS1pY29uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9ImxhenkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPSJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIweG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUyMHZpZXdCb3g9JzAlMjAwJTIwMSUyMDEnJTNFJTNDL3N2ZyUzRSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXNyYz0iaHR0cHM6Ly93d3cud3JpdGVjcmVhbS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMTAvdmFyaWFudDEyLnBuZyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9IkN1c3RvbWl6YWJsZSBLYW5iYW4gVGVtcGxhdGVzIEljb24iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InBvc3NpYmlsaXR5LXRpdGxlIj5DdXN0b21pemFibGUgTWF0aCBUZW1wbGF0ZXM8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0icG9zc2liaWxpdHktZGVzY3JpcHRpb24iPlBlcnNvbmFsaXplIHlvdXIgbGVhcm5pbmcgd2l0aCBhZGFwdGFibGUgbWF0aCB0ZW1wbGF0ZXMuIFdoZXRoZXIgeW91IG5lZWQgZXF1YXRpb24gc29sdmluZywgZ3JhcGggaW50ZXJwcmV0YXRpb24sIGZvcm11bGEgYnJlYWtkb3ducywgb3Igd29yZC1wcm9ibGVtIGFuYWx5c2lzLCBvdXIgZmxleGlibGUgc3lzdGVtIGFkanVzdHMgdG8gYW55IG1hdGggdG9waWMuPC9wPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwb3NzaWJpbGl0eS1jYXJkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icG9zc2liaWxpdHktaWNvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJsYXp5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz0iZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclMjB2aWV3Qm94PScwJTIwMCUyMDElMjAxJyUzRSUzQy9zdmclM0UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1zcmM9Imh0dHBzOi8vd3d3LndyaXRlY3JlYW0uY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzEwL3ZhcmlhbnQxMy5wbmciCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PSJJbnRlbGxpZ2VudCBXb3JrZmxvdyBPcHRpbWl6YXRpb24gSWNvbiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0icG9zc2liaWxpdHktdGl0bGUiPkludGVsbGlnZW50IENvbmNlcHQgVW5kZXJzdGFuZGluZyAmIE9wdGltaXphdGlvbjwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJwb3NzaWJpbGl0eS1kZXNjcmlwdGlvbiI+TGV2ZXJhZ2UgQUkgaW5zaWdodHMgdG8gaWRlbnRpZnkgbWlzdGFrZXMsIHVuZGVyc3RhbmQgY29yZSBjb25jZXB0cywgYW5kIGdldCBhbHRlcm5hdGl2ZSBzb2x2aW5nIG1ldGhvZHMuIEltcHJvdmUgYWNjdXJhY3ksIHN0cmVuZ3RoZW4gZnVuZGFtZW50YWxzLCBhbmQgZW5oYW5jZSBvdmVyYWxsIG1hdGhlbWF0aWNhbCBwZXJmb3JtYW5jZS48L3A+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBvc3NpYmlsaXR5LWNhcmQiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwb3NzaWJpbGl0eS1pY29uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9ImxhenkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPSJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIweG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUyMHZpZXdCb3g9JzAlMjAwJTIwMSUyMDEnJTNFJTNDL3N2ZyUzRSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXNyYz0iaHR0cHM6Ly93d3cud3JpdGVjcmVhbS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMTAvdmFyaWFudDE2LnBuZyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9IlNlYW1sZXNzIENvbGxhYm9yYXRpb24gJiBJbnRlZ3JhdGlvbiBJY29uIiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJwb3NzaWJpbGl0eS10aXRsZSI+U2VhbWxlc3MgTGVhcm5pbmcgJiBJbnRlZ3JhdGlvbjwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJwb3NzaWJpbGl0eS1kZXNjcmlwdGlvbiI+U3R1ZHkgc21hcnRlciB3aXRoIHJlYWwtdGltZSBBSSBzdXBwb3J0LCBpbnRlcmFjdGl2ZSBleHBsYW5hdGlvbnMsIGFuZCBjb21wYXRpYmlsaXR5IHdpdGggeW91ciBleGlzdGluZyBsZWFybmluZyB0b29scy4gUGVyZmVjdCBmb3Igc3R1ZGVudHMsIGVkdWNhdG9ycywgYW5kIHByb2Zlc3Npb25hbHMgc2Vla2luZyBmYXN0LCByZWxpYWJsZSBtYXRoIGFzc2lzdGFuY2UuPC9wPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBvcHVsYXItcHJvbXB0cy1zZWN0aW9uIj4KICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InBvcHVsYXItcHJvbXB0cy10aXRsZSI+UG9wdWxhciBBSS1HZW5lcmF0ZWQgTWF0aCBQcm9tcHRzPC9oMz4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwb3B1bGFyLXByb21wdHMtZ3JpZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InBvcHVsYXItcHJvbXB0LWJ0biI+IkFJIE1hdGggU29sdmVyIOKAkyBJbnN0YW50IFN0ZXAtYnktU3RlcCBTb2x1dGlvbnMiPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InBvcHVsYXItcHJvbXB0LWJ0biI+IlNvbHZlIEFueSBNYXRoIFByb2JsZW0gd2l0aCBBSSI8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0icG9wdWxhci1wcm9tcHQtYnRuIj4iQUktUG93ZXJlZCBNYXRocyBTb2x1dGlvbiBHZW5lcmF0b3IiPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InBvcHVsYXItcHJvbXB0LWJ0biI+IlNtYXJ0IE1hdGggU29sdmVyIGZvciBTdHVkZW50cyAmIFRlYWNoZXJzIjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJwb3B1bGFyLXByb21wdC1idG4iPiJJbnN0YW50IE1hdGggQW5zd2VycyB3aXRoIFN0ZXAtYnktU3RlcCBFeHBsYW5hdGlvbnMiPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InBvcHVsYXItcHJvbXB0LWJ0biI+IkFJIENhbGN1bGF0b3IgZm9yIEFsZ2VicmEsIENhbGN1bHVzICYgTW9yZSI8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwhLS0gU2VlIEl0IEluIEFjdGlvbiBTZWN0aW9uIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWUtaXQtaW4tYWN0aW9uLXNlY3Rpb24iPgogICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJhY3Rpb24tdGl0bGUiPlNlZSBJdCBJbiBBY3Rpb248L2gyPgogICAgICAgICAgICAgICAgPHAgY2xhc3M9ImFjdGlvbi1zdWJ0aXRsZSI+UmVhbCBleGFtcGxlcyBvZiBjb2RlIGdlbmVyYXRlZCBmcm9tIHNpbXBsZSBuYXR1cmFsIGxhbmd1YWdlIHByb21wdHM8L3A+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tdGFicyI+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZGVtby10YWIgYWN0aXZlIiBkYXRhLXRhYj0icmVhY3QiPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFiLWljb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz0ibGF6eSIgc3JjPSJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIweG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUyMHZpZXdCb3g9JzAlMjAwJTIwMSUyMDEnJTNFJTNDL3N2ZyUzRSIgZGF0YS1zcmM9Imh0dHBzOi8vd3d3LndyaXRlY3JlYW0uY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzEwL3ZhcmlhbnQxOC5wbmciIGFsdD0iU2FhUyBUZW1wbGF0ZSBJY29uIiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWItdGV4dCI+UmVhY3QgQ29tcG9uZW50PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRlbW8tdGFiIiBkYXRhLXRhYj0icHl0aG9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhYi1pY29uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9ImxhenkiIHNyYz0iZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclMjB2aWV3Qm94PScwJTIwMCUyMDElMjAxJyUzRSUzQy9zdmclM0UiIGRhdGEtc3JjPSJodHRwczovL3d3dy53cml0ZWNyZWFtLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8xMC92YXJpYW50MTkucG5nIiBhbHQ9IlB5dGhvbiBBUEkgSWNvbiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFiLXRleHQiPlN0YXRpYyBDb2RlPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRlbW8tdGFiIiBkYXRhLXRhYj0ibW9iaWxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhYi1pY29uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9ImxhenkiIHNyYz0iZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclMjB2aWV3Qm94PScwJTIwMCUyMDElMjAxJyUzRSUzQy9zdmclM0UiIGRhdGEtc3JjPSJodHRwczovL3d3dy53cml0ZWNyZWFtLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8xMC92YXJpYW50MjEucG5nIiBhbHQ9Ik1vYmlsZSBVSSBJY29uIiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWItdGV4dCI+TW9iaWxlIFVJPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8IS0tIFJlYWN0IENvbXBvbmVudCBEZW1vIC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tcGFuZSBhY3RpdmUiIGlkPSJyZWFjdC1kZW1vIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1wcm9tcHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvbXB0LWljb24iPvCfkqw8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiJCdWlsZCBhIHJlYWN0IGNvbXBvbmVudCBmb3IgYSBidXR0b24gd2l0aCB2YXJpYW50cyI8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvZGUtY29udGFpbmVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtaGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWRvdHMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZG90IHJlZCI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZG90IHllbGxvdyI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZG90IGdyZWVuIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvZGUtdGl0bGUiPlJlYWN0IENvbXBvbmVudDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjb3B5LWJ0biI+8J+TiyBDb3B5PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtaW1hZ2UtY29udGFpbmVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclMjB2aWV3Qm94PScwJTIwMCUyMDElMjAxJyUzRSUzQy9zdmclM0UiIGRhdGEtc3JjPSJodHRwczovL3d3dy53cml0ZWNyZWFtLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8xMC8yLTEucG5nIiBhbHQ9IlNhYVMgUHJldmlldyIgY2xhc3M9ImNvZGUtaW1hZ2UgbGF6eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDwhLS0gUHl0aG9uIEFQSSBEZW1vIC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tcGFuZSIgaWQ9InB5dGhvbi1kZW1vIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1wcm9tcHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvbXB0LWljb24iPvCfkqw8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiJDcmVhdGUgYSBSRVNUIEFQSSBmb3IgdXNlciBhdXRoZW50aWNhdGlvbiI8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvZGUtY29udGFpbmVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtaGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWRvdHMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZG90IHJlZCI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZG90IHllbGxvdyI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZG90IGdyZWVuIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvZGUtdGl0bGUiPlB5dGhvbiBBUEk8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY29weS1idG4iPvCfk4sgQ29weTwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWltYWdlLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTIwdmlld0JveD0nMCUyMDAlMjAxJTIwMSclM0UlM0Mvc3ZnJTNFIiBkYXRhLXNyYz0iaHR0cHM6Ly93d3cud3JpdGVjcmVhbS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMTAvMS0xLnBuZyIgYWx0PSJNb2JpbGUgUHJldmlldyIgY2xhc3M9ImNvZGUtaW1hZ2UgbGF6eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDwhLS0gTW9iaWxlIFVJIERlbW8gLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1wYW5lIiBpZD0ibW9iaWxlLWRlbW8iPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLXByb21wdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9tcHQtaWNvbiI+8J+SrDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+IkRlc2lnbiBhIG1vYmlsZSBwcm9maWxlIGNhcmQgd2l0aCBhbmltYXRpb25zIjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tY29kZS1jb250YWluZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1oZWFkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtZG90cyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkb3QgcmVkIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkb3QgeWVsbG93Ij48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkb3QgZ3JlZW4iPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29kZS10aXRsZSI+TW9iaWxlIFVJPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImNvcHktYnRuIj7wn5OLIENvcHk8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1wcmV2aWV3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2JpbGUtbW9ja3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvZmlsZS1jYXJkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIweG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUyMHZpZXdCb3g9JzAlMjAwJTIwMSUyMDEnJTNFJTNDL3N2ZyUzRSIgZGF0YS1zcmM9Imh0dHBzOi8vd3d3LndyaXRlY3JlYW0uY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzEwL3NzLnBuZyIgYWx0PSJBZ2VuY3kgUHJldmlldyIgY2xhc3M9ImNvZGUtaW1hZ2UgbGF6eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPCEtLSBNb3JlIENhcGFiaWxpdGllcyBTZWN0aW9uIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb3JlLWNhcGFiaWxpdGllcy1zZWN0aW9uIj4KCiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9Im1vcmUtdGl0bGUiPgogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ0ZXh0LXdoaXRlIj5EaXNjb3ZlciA8L3A+bW9yZS4uLgogICAgICAgICAgICAgICAgPC9oMj4KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJtb3JlLXN1YnRpdGxlIj5Gcm9tIHNpbXBsZSBzY3JpcHRzIHRvIGNvbXBsZXggYXBwbGljYXRpb25zLCBnZW5lcmF0ZSBjb2RlIGZvciBhbnkgdXNlIGNhc2U8L3A+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FwYWJpbGl0aWVzLWdyaWQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcGFiaWxpdHktY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcGFiaWxpdHktaWNvbiB3ZWItaWNvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJsYXp5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz0iZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclMjB2aWV3Qm94PScwJTIwMCUyMDElMjAxJyUzRSUzQy9zdmclM0UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1zcmM9Imh0dHBzOi8vd3d3LndyaXRlY3JlYW0uY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzEwL3dlYi1kZXZ2LnBuZyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9IldlYiBEZXZlbG9wbWVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9ImNhcGFiaWxpdHktdGl0bGUiPldlYiBEZXZlbG9wbWVudDwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJjYXBhYmlsaXR5LWRlc2NyaXB0aW9uIj5SZWFjdCBjb21wb25lbnRzLCBIVE1ML0NTUyBsYXlvdXRzLCByZXNwb25zaXZlIGRlc2lnbnM8L3A+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcGFiaWxpdHktY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcGFiaWxpdHktaWNvbiBweXRob24taWNvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJsYXp5IiBzcmM9ImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTIwdmlld0JveD0nMCUyMDAlMjAxJTIwMSclM0UlM0Mvc3ZnJTNFIiBkYXRhLXNyYz0iaHR0cHM6Ly93d3cud3JpdGVjcmVhbS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMTAvcHl0aG9uLnBuZyIgYWx0PSJQeXRob24gU2NyaXB0cyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9ImNhcGFiaWxpdHktdGl0bGUiPlB5dGhvbiBTY3JpcHRzPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImNhcGFiaWxpdHktZGVzY3JpcHRpb24iPkF1dG9tYXRpb24sIGRhdGEgcHJvY2Vzc2luZywgQVBJIGludGVncmF0aW9uczwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FwYWJpbGl0eS1jYXJkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FwYWJpbGl0eS1pY29uIGRhdGEtaWNvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJsYXp5IiBzcmM9ImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTIwdmlld0JveD0nMCUyMDAlMjAxJTIwMSclM0UlM0Mvc3ZnJTNFIiBkYXRhLXNyYz0iaHR0cHM6Ly93d3cud3JpdGVjcmVhbS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMTAvZGF0YS1zY2llbmNlLnBuZyIgYWx0PSJEYXRhIFNjaWVuY2UiPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJjYXBhYmlsaXR5LXRpdGxlIj5EYXRhIFNjaWVuY2U8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iY2FwYWJpbGl0eS1kZXNjcmlwdGlvbiI+QW5hbHl0aWNzLCB2aXN1YWxpemF0aW9uLCBtYWNoaW5lIGxlYXJuaW5nIG1vZGVsczwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FwYWJpbGl0eS1jYXJkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FwYWJpbGl0eS1pY29uIGFwaS1pY29uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9ImxhenkiIHNyYz0iZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclMjB2aWV3Qm94PScwJTIwMCUyMDElMjAxJyUzRSUzQy9zdmclM0UiIGRhdGEtc3JjPSJodHRwczovL3d3dy53cml0ZWNyZWFtLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8xMC9hcGkucG5nIiBhbHQ9IkFQSXMgJiBCYWNrZW5kIj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0iY2FwYWJpbGl0eS10aXRsZSI+QVBJcyAmIEJhY2tlbmQ8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iY2FwYWJpbGl0eS1kZXNjcmlwdGlvbiI+UkVTVGZ1bCBzZXJ2aWNlcywgZGF0YWJhc2UgcXVlcmllcywgc2VydmVyIGxvZ2ljPC9wPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXBhYmlsaXR5LWNhcmQiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXBhYmlsaXR5LWljb24gbW9iaWxlLWljb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz0ibGF6eSIgc3JjPSJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIweG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUyMHZpZXdCb3g9JzAlMjAwJTIwMSUyMDEnJTNFJTNDL3N2ZyUzRSIgZGF0YS1zcmM9Imh0dHBzOi8vd3d3LndyaXRlY3JlYW0uY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzEwL2FwcC1kZXYucG5nIiBhbHQ9Ik1vYmlsZSBBcHBzIj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0iY2FwYWJpbGl0eS10aXRsZSI+TW9iaWxlIEFwcHM8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iY2FwYWJpbGl0eS1kZXNjcmlwdGlvbiI+UmVhY3QgTmF0aXZlLCBGbHV0dGVyLCBjcm9zcy1wbGF0Zm9ybSBzb2x1dGlvbnM8L3A+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcGFiaWxpdHktY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcGFiaWxpdHktaWNvbiBkZXZvcHMtaWNvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJsYXp5IiBzcmM9ImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTIwdmlld0JveD0nMCUyMDAlMjAxJTIwMSclM0UlM0Mvc3ZnJTNFIiBkYXRhLXNyYz0iaHR0cHM6Ly93d3cud3JpdGVjcmVhbS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMTAvZGV2b3BzLnBuZyIgYWx0PSJEZXZPcHMgJiBUb29scyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9ImNhcGFiaWxpdHktdGl0bGUiPkRldk9wcyAmIFRvb2xzPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImNhcGFiaWxpdHktZGVzY3JpcHRpb24iPkNJL0NEIHBpcGVsaW5lcywgZGVwbG95bWVudCBzY3JpcHRzLCBhdXRvbWF0aW9uPC9wPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPCEtLSBDbGllbnQgVGVzdGltb25pYWxzIFNlY3Rpb24gLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvdmVkLWJ5LWRldmVsb3BlcnMtc2VjdGlvbiI+CiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9ImxvdmVkLXRpdGxlIj5Mb3ZlZCBieSBEZXZlbG9wZXJzPC9oMj4KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJsb3ZlZC1zdWJ0aXRsZSI+Sm9pbiB0aG91c2FuZHMgb2YgZGV2ZWxvcGVycyB3aG8ndmUgdHJhbnNmb3JtZWQgdGhlaXIgY29kaW5nIGV4cGVyaWVuY2U8L3A+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGVzdGltb25pYWwtY29udGFpbmVyIj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0ZXN0aW1vbmlhbC1uYXYgcHJldi1idG4iIGlkPSJwcmV2QnRuIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTUgMThMOSAxMkwxNSA2IiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRlc3RpbW9uaWFsLWNhcmQgYWN0aXZlIiBkYXRhLXRlc3RpbW9uaWFsPSIwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGVzdGltb25pYWwtaGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRlc3RpbW9uaWFsLWF2YXRhciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTIwdmlld0JveD0nMCUyMDAlMjAxJTIwMSclM0UlM0Mvc3ZnJTNFIiBkYXRhLXNyYz0iaHR0cHM6Ly9pbWFnZXMudW5zcGxhc2guY29tL3Bob3RvLTE1NDQwMDUzMTMtOTRkZGYwMjg2ZGYyP3c9NDAwJmg9NDAwJmZpdD1jcm9wJmF1dG89Zm9ybWF0JnE9ODAmaXhsaWI9cmItNC4wLjMmcz1wbGFjZWhvbGRlciIgYWx0PSJTYXJhaCBDaGVuIiBjbGFzcz0iYXZhdGFyLWltZyBsYXp5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGVzdGltb25pYWwtcmF0aW5nIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhciI+4q2QPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGFyIj7irZA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXIiPuKtkDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhciI+4q2QPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGFyIj7irZA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8YmxvY2txdW90ZSBjbGFzcz0idGVzdGltb25pYWwtcXVvdGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBBSSB1bmRlcnN0YW5kcyBjb250ZXh0IGluY3JlZGlibHkgd2VsbC4gSXQncyBsaWtlIGhhdmluZyBhIHNlbmlvciBkZXZlbG9wZXIgcGFpciBwcm9ncmFtbWluZyB3aXRoIHlvdSAyNC83LiBBYnNvbHV0ZWx5IGdhbWUtY2hhbmdpbmchIgogICAgICAgICAgICAgICAgICAgICAgICA8L2Jsb2NrcXVvdGU+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXN0aW1vbmlhbC1hdXRob3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPSJhdXRob3ItbmFtZSI+TWFyY3VzIFJvZHJpZ3VlejwvaDQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iYXV0aG9yLXJvbGUiPkZ1bGwgU3RhY2sgRW5naW5lZXI8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iYXV0aG9yLWNvbXBhbnkiPlN0YXJ0dXBYWVo8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0ZXN0aW1vbmlhbC1uYXYgbmV4dC1idG4iIGlkPSJuZXh0QnRuIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNOSAxOEwxNSAxMkw5IDYiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49InJvdW5kIiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRlc3RpbW9uaWFsLWRvdHMiPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRvdCBhY3RpdmUiIGRhdGEtc2xpZGU9IjAiPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRvdCIgZGF0YS1zbGlkZT0iMSI+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZG90IiBkYXRhLXNsaWRlPSIyIj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkb3QiIGRhdGEtc2xpZGU9IjMiPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRvdCIgZGF0YS1zbGlkZT0iNCI+PC9idXR0b24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0cy1ncmlkIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWl0ZW0iPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LW51bWJlciI+NTAsMDAwKzwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWxhYmVsIj5BY3RpdmUgRGV2ZWxvcGVyczwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXQtaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXQtbnVtYmVyIj4xTSs8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC1sYWJlbCI+Q29kZSBTbmlwcGV0cyBHZW5lcmF0ZWQ8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWl0ZW0iPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LW51bWJlciI+NC45LzU8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC1sYWJlbCI+QXZlcmFnZSBSYXRpbmc8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwhLS0gUmVhZHkgdG8gQ29kZSBGYXN0ZXIgU2VjdGlvbiAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVhZHktdG8tY29kZS1zZWN0aW9uIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImN0YS1pY29uIj7inKg8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9ImN0YS10aXRsZSI+UmVhZHkgdG8gQ29kZSBGYXN0ZXI/PC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPHAgY2xhc3M9ImN0YS1zdWJ0aXRsZSI+Sm9pbiB0aG91c2FuZHMgb2YgZGV2ZWxvcGVycyB3aG8ndmUgYWxyZWFkeTxicj50cmFuc2Zvcm1lZCB0aGVpciBjb2Rpbmcgd29ya2Zsb3cKICAgICAgICAgICAgICAgICAgICB3aXRoIEFJPC9wPgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmVzLWNoZWNrbGlzdCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1pdGVtIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iY2hlY2staWNvbiIgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9Im5vbmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE2LjY2NjcgNUw3LjUgMTQuMTY2N0wzLjMzMzM0IDEwIiBzdHJva2U9IiM0QTkwRTIiIHN0cm9rZS13aWR0aD0iMiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5HZW5lcmF0ZSBjb2RlIGluc3RhbnRseTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJjaGVjay1pY29uIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTYuNjY2NyA1TDcuNSAxNC4xNjY3TDMuMzMzMzQgMTAiIHN0cm9rZT0iIzRBOTBFMiIgc3Ryb2tlLXdpZHRoPSIyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlN1cHBvcnQgZm9yIDIwKyBsYW5ndWFnZXM8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1pdGVtIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iY2hlY2staWNvbiIgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9Im5vbmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE2LjY2NjcgNUw3LjUgMTQuMTY2N0wzLjMzMzM0IDEwIiBzdHJva2U9IiM0QTkwRTIiIHN0cm9rZS13aWR0aD0iMiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5Qcm9kdWN0aW9uLXJlYWR5IG91dHB1dHM8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1pdGVtIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iY2hlY2staWNvbiIgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9Im5vbmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE2LjY2NjcgNUw3LjUgMTQuMTY2N0wzLjMzMzM0IDEwIiBzdHJva2U9IiM0QTkwRTIiIHN0cm9rZS13aWR0aD0iMiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5GcmVlIHRvIGdldCBzdGFydGVkPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY3RhLWJ1dHRvbnMiPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0YS1wcmltYXJ5LWJ0biIgaWQ9ImN0YUdldFN0YXJ0ZWQiPgogICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJub25lIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy44MjUgNi45MTY2OUwxMCAzLjA5MTY5TDYuMTc1IDYuOTE2NjkiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjEuNSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTAgMy4wOTE2OVYxNi45MDg0IiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgR2V0IFN0YXJ0ZWQgRnJlZQogICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0YS1zZWNvbmRhcnktYnRuIiBpZD0iY3RhTGl2ZURlbW8iPlZpZXcgTGl2ZSBEZW1vPC9idXR0b24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0cnVzdC1iYWRnZXMiPgogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ0cnVzdC10ZXh0Ij5UcnVzdGVkIGJ5IGRldmVsb3BlcnMgYXQgdG9wIGNvbXBhbmllcyB3b3JsZHdpZGU8L3A+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29tcGFueS1sb2dvcyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb21wYW55LWxvZ28iPkdvb2dsZTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbXBhbnktbG9nbyI+TWljcm9zb2Z0PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29tcGFueS1sb2dvIj5BbWF6b248L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb21wYW55LWxvZ28iPk5ldGZsaXg8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb21wYW55LWxvZ28iPlNwb3RpZnk8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb21wYW55LWxvZ28iPlViZXI8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgIDwvbWFpbj4KICAgIDwvZGl2PgoKICAgIDwhLS0gTWFpbiBhcHBsaWNhdGlvbiBjb250YWluZXIgd2l0aCBjaGF0IGFuZCBzYW5kcGFjayAtLT4KICAgIDxkaXYgY2xhc3M9ImFwcC1jb250YWluZXIiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+CiAgICAgICAgPCEtLSBDaGF0IGludGVyZmFjZSAtLT4KICAgICAgICA8ZGl2IGlkPSJjaGF0SW50ZXJmYWNlIiBjbGFzcz0iY2hhdC1pbnRlcmZhY2UiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjaGF0LWNvbnRhaW5lciIgaWQ9ImNoYXRDb250YWluZXIiPgogICAgICAgICAgICAgICAgPCEtLSBNZXNzYWdlcyB3aWxsIGJlIGRpc3BsYXllZCBoZXJlIC0tPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmctYm94IiBpZD0ibG9hZGluZ0JveCIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhcnRpY2xlIj48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhcnRpY2xlIj48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhcnRpY2xlIj48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhcnRpY2xlIj48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmctbWVzc2FnZSI+Q29taW5nIHVwIHdpdGggcmVzcG9uc2UsIG1heSB0YWtlIGEgbWludXRlLi4uPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLXNwaW5uZXIiPjwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwhLS0gUGVyc2lzdGVudCBjaGF0IGlucHV0IHRoYXQgc2hvdWxkIGFsd2F5cyBiZSB2aXNpYmxlIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjaGF0LWlucHV0LXNlY3Rpb24iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtb3V0ZXItY29udGFpbmVyIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1pbm5lci1jb250YWluZXIgdmVydGljYWwiPgogICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9InByb21wdC1pbnB1dCBjaGF0LXByb21wdC1pbnB1dCIgcGxhY2Vob2xkZXI9IkFzayBmb3IgY29kZSBjaGFuZ2VzLi4uIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cz0iMSI+PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtY29udHJvbHMtcm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiBjbGFzcz0iYXR0YWNoLWJ0biBzcXVhcmUiIHRpdGxlPSJBdHRhY2giPjxzcGFuPvCfk448L3NwYW4+PC9idXR0b24+IC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icXVhbGl0eS1zZWxlY3RvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBpZD0icXVhbGl0eVNlbGVjdENoYXQiIGNsYXNzPSJxdWFsaXR5LWRyb3Bkb3duIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ic3RhbmRhcmQiPiBTUTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJoaWdoZXIiPiBIUTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InF1YWxpdHktdG9vbHRpcCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0b29sdGlwLWljb24iPjxpIGNsYXNzPSJmYS1zb2xpZCBmYS1jaXJjbGUtaW5mbyI+PC9pPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbHRpcC1jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+U3RhbmRhcmQ6PC9zdHJvbmc+IFF1aWNrIGdlbmVyYXRpb24gd2l0aCBnb29kIHF1YWxpdHk8YnI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPkhpZ2hlcjo8L3N0cm9uZz4gQXJjaGl0ZWN0dXJhbCBwbGFubmluZyArIHByZW1pdW0gY29kZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ic3VibWl0LWJ0biBjaGF0LXN1Ym1pdC1idG4iIHRpdGxlPSJTdWJtaXQiPjxzcGFuPuKelDwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gU2FuZHBhY2sgY29udGFpbmVyIC0gc2VwYXJhdGUgZnJvbSBjaGF0IC0tPgogICAgICAgIDxkaXYgY2xhc3M9InNhbmRwYWNrLXdyYXBwZXIiIGlkPSJzYW5kcGFja1dyYXBwZXIiPgogICAgICAgICAgICA8IS0tIFRvZ2dsZSBidXR0b25zIGZvciBDb2RlL1ByZXZpZXcgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZpZXctdG9nZ2xlLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJjb2RlVG9nZ2xlIiBjbGFzcz0idmlldy10b2dnbGUtYnRuIj5Db2RlPC9idXR0b24+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJwcmV2aWV3VG9nZ2xlIiBjbGFzcz0idmlldy10b2dnbGUtYnRuIGFjdGl2ZSI+UHJldmlldzwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBpZD0icm9vdCIgY2xhc3M9InNhbmRwYWNrLWNvbnRhaW5lciI+PC9kaXY+CiAgICAgICAgICAgIDwhLS0gTG9hZGluZyBvdmVybGF5IGZvciBTYW5kcGFjayBhcmVhIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLW92ZXJsYXkiIGlkPSJzYW5kcGFja0xvYWRpbmdPdmVybGF5IiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGl0ZWNoLWxvYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1tYXRyaXgiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXRyaXgtbGluZSI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hdHJpeC1saW5lIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWF0cml4LWxpbmUiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXRyaXgtbGluZSI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hdHJpeC1saW5lIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjZW50cmFsLWNvcmUiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb3JlLXJpbmciPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb3JlLXJpbmciPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb3JlLXJpbmciPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb3JlLWNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwdWxzZS1kb3QiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkYXRhLXN0cmVhbXMiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdHJlYW0gc3RyZWFtLTEiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdHJlYW0gc3RyZWFtLTIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdHJlYW0gc3RyZWFtLTMiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdHJlYW0gc3RyZWFtLTQiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imdlb21ldHJpYy1wYXR0ZXJucyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhleC1wYXR0ZXJuIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGV4LXBhdHRlcm4iPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZXgtcGF0dGVybiI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmctbWVzc2FnZSI+Q29taW5nIHVwIHdpdGggcmVzcG9uc2UsIG1heSB0YWtlIGEgbWludXRlLi4uPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGZvb3RlciBjbGFzcz0iZm9vdGVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJmb290ZXItbGVmdCI+CiAgICAgICAgICAgIEJ1aWx0IHdpdGggPGEgaHJlZj0iIyI+Q29kaW5nIEFJPC9hPiBhbmQgPGEgaHJlZj0iaHR0cHM6Ly93d3cud3JpdGVjcmVhbS5jb20vIj48c3BhbgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJncmFkaWVudC10ZXh0Ij5Xcml0ZWNyZWFtIEFJPC9zcGFuPjwvYT4uCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyLXJpZ2h0Ij4KICAgICAgICAgICAgPCEtLSA8YSBocmVmPSIjIiBjbGFzcz0iZm9vdGVyLWljb24iIHRpdGxlPSJUd2l0dGVyIj7wn5CmPC9hPgogICAgICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZm9vdGVyLWljb24iIHRpdGxlPSJHaXRIdWIiPvCfkJk8L2E+IC0tPgogICAgICAgIDwvZGl2PgogICAgPC9mb290ZXI+Cgo8ZGl2IGlkPSJuZXRsaWZ5VG9rZW5Nb2RhbCIgY2xhc3M9Im1vZGFsIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPgogICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+CiAgICAgICAgPHNwYW4gY2xhc3M9ImNsb3NlLW1vZGFsIiBvbmNsaWNrPSJjbG9zZU5ldGxpZnlUb2tlbk1vZGFsKCkiPsOXPC9zcGFuPgogICAgICAgIDxoMj5TZXQgTmV0bGlmeSBQZXJzb25hbCBBY2Nlc3MgVG9rZW48L2gyPgogICAgICAgIDxwPkVudGVyIHlvdXIgTmV0bGlmeSBQQVQgdG8gZGVwbG95IHVzaW5nIHlvdXIgYWNjb3VudC4gSWYgbm90IHNldCwgdGhlIGRlZmF1bHQgdG9rZW4gd2lsbCBiZSB1c2VkLjwvcD4KICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9Im5ldGxpZnlUb2tlbklucHV0IiBwbGFjZWhvbGRlcj0iRW50ZXIgeW91ciBOZXRsaWZ5IFBBVCIgc3R5bGU9IndpZHRoOiAxMDAlOyBwYWRkaW5nOiAxMHB4OyBtYXJnaW46IDEwcHggMDsiPgogICAgICAgIDxidXR0b24gb25jbGljaz0ic3VibWl0TmV0bGlmeVRva2VuKCkiPlN1Ym1pdDwvYnV0dG9uPgogICAgPC9kaXY+CjwvZGl2PgoKPCEtLSBKYXZhU2NyaXB0IG1vdmVkIHRvIGVuZCBvZiBmaWxlIC0tPgoKPCEtLSBBbGwgSmF2YVNjcmlwdCBtb3ZlZCB0byBlbmQgb2YgZmlsZSAtLT4KCjwhLS0gSlNaaXAgZm9yIGZpbGUgZG93bmxvYWRzIC0tPgo8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvanN6aXAvMy4xMC4xL2pzemlwLm1pbi5qcyI+PC9zY3JpcHQ+Cgo8IS0tIENPTkZJRyBKYXZhU2NyaXB0IC0tPgo8c2NyaXB0PgovLyBDb25maWd1cmF0aW9uIGZpbGUgZm9yIExhbWJkYSBpbnRlZ3JhdGlvbgovLyBVcGRhdGUgdGhlIExBTUJEQV9CQVNFX1VSTCB3aXRoIHlvdXIgYWN0dWFsIExhbWJkYSBmdW5jdGlvbiBVUkwKCmNvbnN0IENPTkZJRyA9IHsKICAvLyBSZXBsYWNlIHRoaXMgd2l0aCB5b3VyIGFjdHVhbCBMYW1iZGEgZnVuY3Rpb24gVVJMCiAgTEFNQkRBX0JBU0VfVVJMOiAnaHR0cHM6Ly83bGM3N2JoNWhha2Zsb2gzb3Z6eHRhdHZjYTBlbGtxbC5sYW1iZGEtdXJsLnVzLWVhc3QtMS5vbi5hd3MnLAogIAogIC8vIEFQSSBlbmRwb2ludHMKICBFTkRQT0lOVFM6IHsKICAgIERFUExPWV9ORVRMSUZZOiAnL2FwaS9kZXBsb3ktbmV0bGlmeScsCiAgICBBUkNISVRFQ1Q6ICcvYXBpL2FyY2hpdGVjdCcsCiAgICBPUEVOQUk6ICcvYXBpL29wZW5haScsCiAgICBNT0RJRlk6ICcvYXBpL21vZGlmeScsCiAgICBDT05URVhUX1NFU1NJT046ICcvYXBpL2NvbnRleHQvc2Vzc2lvbicsCiAgICBDT05URVhUX0hFQUxUSDogJy9hcGkvY29udGV4dC9oZWFsdGgnCiAgfSwKICAKICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IGZ1bGwgQVBJIFVSTAogIGdldEFwaVVybDogZnVuY3Rpb24oZW5kcG9pbnQpIHsKICAgIHJldHVybiB0aGlzLkxBTUJEQV9CQVNFX1VSTCArIGVuZHBvaW50OwogIH0KfTsKCi8vIEV4cG9ydCBmb3IgdXNlIGluIG90aGVyIGZpbGVzCmlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykgewogIG1vZHVsZS5leHBvcnRzID0gQ09ORklHOwp9IGVsc2UgewogIHdpbmRvdy5DT05GSUcgPSBDT05GSUc7Cn0KPC9zY3JpcHQ+Cgo8IS0tIE1haW4gQXBwbGljYXRpb24gSmF2YVNjcmlwdCAtLT4KPHNjcmlwdD4gCi8vIEVuaGFuY2VkIFBlcnNpc3RlbmNlIE1hbmFnZXIKY2xhc3MgRW5oYW5jZWRQZXJzaXN0ZW5jZU1hbmFnZXIgewogIGNvbnN0cnVjdG9yKCkgewogICAgdGhpcy5zdG9yYWdlS2V5cyA9IHsKICAgICAgQ0hBVF9ISVNUT1JZOiAnd2ViYnVpbGRlcl9jaGF0X2hpc3RvcnknLAogICAgICBURU1QTEFURTogJ3dlYmJ1aWxkZXJfdGVtcGxhdGUnLAogICAgICBRVUFMSVRZX1NFVFRJTkc6ICd3ZWJidWlsZGVyX3F1YWxpdHknLAogICAgICBVSV9TVEFURTogJ3dlYmJ1aWxkZXJfdWlfc3RhdGUnLAogICAgICBWSUVXX1RPR0dMRV9TVEFURTogJ3dlYmJ1aWxkZXJfdmlld190b2dnbGVfc3RhdGUnLAogICAgICBDVVJSRU5UX1VTRUNBU0U6ICd3ZWJidWlsZGVyX2N1cnJlbnRfdXNlY2FzZScsCiAgICAgIENPTlRFWFRfTUVUQURBVEE6ICd3ZWJidWlsZGVyX2NvbnRleHRfbWV0YWRhdGEnCiAgICB9OwogICAgCiAgICB0aGlzLmNvbnRleHRWYWxpZGF0aW9uID0gewogICAgICBtYXhDaGF0SGlzdG9yeVNpemU6IDUwLAogICAgICBtYXhDb2RlRmlsZVNpemU6IDEwMjQgKiAxMDI0LAogICAgICBjb250ZXh0RXhwaXJ5SG91cnM6IDI0CiAgICB9OwogIH0KCiAgLy8gRW5oYW5jZWQgY2hhdCBoaXN0b3J5IHdpdGggdmFsaWRhdGlvbiBhbmQgdXNlY2FzZSBhd2FyZW5lc3MKICBzYXZlQ2hhdEhpc3RvcnkocHJvbXB0cywgdXNlY2FzZSA9ICdkZWZhdWx0JykgewogICAgdHJ5IHsKICAgICAgLy8gVmFsaWRhdGUgYW5kIGNsZWFuIHByb21wdHMKICAgICAgY29uc3QgdmFsaWRhdGVkUHJvbXB0cyA9IHRoaXMudmFsaWRhdGVDaGF0SGlzdG9yeShwcm9tcHRzKTsKICAgICAgCiAgICAgIC8vIFNhdmUgd2l0aCBtZXRhZGF0YQogICAgICBjb25zdCBjaGF0RGF0YSA9IHsKICAgICAgICBwcm9tcHRzOiB2YWxpZGF0ZWRQcm9tcHRzLAogICAgICAgIHVzZWNhc2U6IHVzZWNhc2UsCiAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLAogICAgICAgIHZlcnNpb246ICcyLjAnIC8vIFZlcnNpb24gdHJhY2tpbmcgZm9yIGZ1dHVyZSBtaWdyYXRpb25zCiAgICAgIH07CiAgICAgIAogICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXlzLkNIQVRfSElTVE9SWSwgSlNPTi5zdHJpbmdpZnkoY2hhdERhdGEpKTsKICAgICAgCiAgICAgIC8vIFVwZGF0ZSBjb250ZXh0IG1ldGFkYXRhCiAgICAgIHRoaXMudXBkYXRlQ29udGV4dE1ldGFkYXRhKHsKICAgICAgICBsYXN0Q2hhdFNhdmU6IERhdGUubm93KCksCiAgICAgICAgdXNlY2FzZTogdXNlY2FzZSwKICAgICAgICBwcm9tcHRDb3VudDogdmFsaWRhdGVkUHJvbXB0cy5sZW5ndGgKICAgICAgfSk7CiAgICAgIAogICAgICBjb25zb2xlLmxvZyhg8J+SviBTYXZlZCAke3ZhbGlkYXRlZFByb21wdHMubGVuZ3RofSBjaGF0IG1lc3NhZ2VzIGZvciB1c2VjYXNlOiAke3VzZWNhc2V9YCk7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBzYXZlIGNoYXQgaGlzdG9yeTonLCBlcnJvcik7CiAgICB9CiAgfQoKICAvLyBFbmhhbmNlZCBjaGF0IGhpc3RvcnkgbG9hZGluZyB3aXRoIHZhbGlkYXRpb24KICBsb2FkQ2hhdEhpc3RvcnkoZXhwZWN0ZWRVc2VjYXNlID0gbnVsbCkgewogICAgdHJ5IHsKICAgICAgY29uc3Qgc2F2ZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXlzLkNIQVRfSElTVE9SWSk7CiAgICAgIGlmICghc2F2ZWQpIHJldHVybiBbXTsKICAgICAgCiAgICAgIGNvbnN0IGNoYXREYXRhID0gSlNPTi5wYXJzZShzYXZlZCk7CiAgICAgIAogICAgICAvLyBIYW5kbGUgbGVnYWN5IGZvcm1hdCAoYXJyYXkgb2YgcHJvbXB0cykKICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hhdERhdGEpKSB7CiAgICAgICAgY29uc29sZS5sb2coJ/Cfk6YgTWlncmF0aW5nIGxlZ2FjeSBjaGF0IGhpc3RvcnkgZm9ybWF0Jyk7CiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVDaGF0SGlzdG9yeShjaGF0RGF0YSk7CiAgICAgIH0KICAgICAgCiAgICAgIC8vIFZhbGlkYXRlIGNvbnRleHQgZnJlc2huZXNzCiAgICAgIGlmICh0aGlzLmlzQ29udGV4dEV4cGlyZWQoY2hhdERhdGEudGltZXN0YW1wKSkgewogICAgICAgIGNvbnNvbGUubG9nKCfij7AgQ2hhdCBjb250ZXh0IGV4cGlyZWQsIGNsZWFyaW5nLi4uJyk7CiAgICAgICAgdGhpcy5jbGVhckNoYXRIaXN0b3J5KCk7CiAgICAgICAgcmV0dXJuIFtdOwogICAgICB9CiAgICAgIAogICAgICAvLyBVc2VjYXNlIHZhbGlkYXRpb24KICAgICAgaWYgKGV4cGVjdGVkVXNlY2FzZSAmJiBjaGF0RGF0YS51c2VjYXNlICE9PSBleHBlY3RlZFVzZWNhc2UpIHsKICAgICAgICBjb25zb2xlLmxvZyhg8J+UhCBVc2VjYXNlIG1pc21hdGNoOiBleHBlY3RlZCAke2V4cGVjdGVkVXNlY2FzZX0sIGZvdW5kICR7Y2hhdERhdGEudXNlY2FzZX1gKTsKICAgICAgICAvLyBEb24ndCBhdXRvLWNsZWFyLCBidXQgd2FybgogICAgICB9CiAgICAgIAogICAgICBjb25zdCB2YWxpZGF0ZWRQcm9tcHRzID0gdGhpcy52YWxpZGF0ZUNoYXRIaXN0b3J5KGNoYXREYXRhLnByb21wdHMgfHwgW10pOwogICAgICBjb25zb2xlLmxvZyhg8J+TliBMb2FkZWQgJHt2YWxpZGF0ZWRQcm9tcHRzLmxlbmd0aH0gY2hhdCBtZXNzYWdlcyBmb3IgdXNlY2FzZTogJHtjaGF0RGF0YS51c2VjYXNlfWApOwogICAgICAKICAgICAgcmV0dXJuIHZhbGlkYXRlZFByb21wdHM7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBsb2FkIGNoYXQgaGlzdG9yeTonLCBlcnJvcik7CiAgICAgIHJldHVybiBbXTsKICAgIH0KICB9CgogIC8vIEVuaGFuY2VkIGNvZGUgZmlsZXMgd2l0aCB2YWxpZGF0aW9uIGFuZCB1c2VjYXNlIGF3YXJlbmVzcwogIHNhdmVDb2RlRmlsZXMoY29kZUZpbGVzLCB1c2VjYXNlID0gJ2RlZmF1bHQnKSB7CiAgICB0cnkgewogICAgICAvLyBWYWxpZGF0ZSBjb2RlIGZpbGVzCiAgICAgIGNvbnN0IHZhbGlkYXRlZEZpbGVzID0gdGhpcy52YWxpZGF0ZUNvZGVGaWxlcyhjb2RlRmlsZXMpOwogICAgICAKICAgICAgY29uc3QgY29kZURhdGEgPSB7CiAgICAgICAgZmlsZXM6IHZhbGlkYXRlZEZpbGVzLAogICAgICAgIHVzZWNhc2U6IHVzZWNhc2UsCiAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLAogICAgICAgIHZlcnNpb246ICcyLjAnCiAgICAgIH07CiAgICAgIAogICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXlzLkNPREVfRklMRVMsIEpTT04uc3RyaW5naWZ5KGNvZGVEYXRhKSk7CiAgICAgIAogICAgICAvLyBVcGRhdGUgY29udGV4dCBtZXRhZGF0YQogICAgICB0aGlzLnVwZGF0ZUNvbnRleHRNZXRhZGF0YSh7CiAgICAgICAgbGFzdENvZGVTYXZlOiBEYXRlLm5vdygpLAogICAgICAgIHVzZWNhc2U6IHVzZWNhc2UsCiAgICAgICAgZmlsZUNvdW50OiBPYmplY3Qua2V5cyh2YWxpZGF0ZWRGaWxlcykubGVuZ3RoCiAgICAgIH0pOwogICAgICAKICAgICAgY29uc29sZS5sb2coYPCfkr4gU2F2ZWQgJHtPYmplY3Qua2V5cyh2YWxpZGF0ZWRGaWxlcykubGVuZ3RofSBjb2RlIGZpbGVzIGZvciB1c2VjYXNlOiAke3VzZWNhc2V9YCk7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBzYXZlIGNvZGUgZmlsZXM6JywgZXJyb3IpOwogICAgfQogIH0KCiAgLy8gRW5oYW5jZWQgY29kZSBmaWxlcyBsb2FkaW5nIHdpdGggdmFsaWRhdGlvbgogIGxvYWRDb2RlRmlsZXMoZXhwZWN0ZWRVc2VjYXNlID0gbnVsbCkgewogICAgdHJ5IHsKICAgICAgY29uc3Qgc2F2ZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXlzLkNPREVfRklMRVMpOwogICAgICBpZiAoIXNhdmVkKSByZXR1cm4gbnVsbDsKICAgICAgCiAgICAgIGNvbnN0IGNvZGVEYXRhID0gSlNPTi5wYXJzZShzYXZlZCk7CiAgICAgIAogICAgICAvLyBIYW5kbGUgbGVnYWN5IGZvcm1hdCAoZGlyZWN0IGZpbGVzIG9iamVjdCkKICAgICAgaWYgKCFjb2RlRGF0YS52ZXJzaW9uICYmICFjb2RlRGF0YS50aW1lc3RhbXApIHsKICAgICAgICBjb25zb2xlLmxvZygn8J+TpiBNaWdyYXRpbmcgbGVnYWN5IGNvZGUgZmlsZXMgZm9ybWF0Jyk7CiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVDb2RlRmlsZXMoY29kZURhdGEpOwogICAgICB9CiAgICAgIAogICAgICAvLyBWYWxpZGF0ZSBjb250ZXh0IGZyZXNobmVzcwogICAgICBpZiAodGhpcy5pc0NvbnRleHRFeHBpcmVkKGNvZGVEYXRhLnRpbWVzdGFtcCkpIHsKICAgICAgICBjb25zb2xlLmxvZygn4o+wIENvZGUgY29udGV4dCBleHBpcmVkLCBjbGVhcmluZy4uLicpOwogICAgICAgIHRoaXMuY2xlYXJDb2RlRmlsZXMoKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICAKICAgICAgLy8gVXNlY2FzZSB2YWxpZGF0aW9uCiAgICAgIGlmIChleHBlY3RlZFVzZWNhc2UgJiYgY29kZURhdGEudXNlY2FzZSAhPT0gZXhwZWN0ZWRVc2VjYXNlKSB7CiAgICAgICAgY29uc29sZS5sb2coYPCflIQgQ29kZSB1c2VjYXNlIG1pc21hdGNoOiBleHBlY3RlZCAke2V4cGVjdGVkVXNlY2FzZX0sIGZvdW5kICR7Y29kZURhdGEudXNlY2FzZX1gKTsKICAgICAgfQogICAgICAKICAgICAgY29uc3QgdmFsaWRhdGVkRmlsZXMgPSB0aGlzLnZhbGlkYXRlQ29kZUZpbGVzKGNvZGVEYXRhLmZpbGVzIHx8IHt9KTsKICAgICAgY29uc29sZS5sb2coYPCfk5YgTG9hZGVkICR7T2JqZWN0LmtleXModmFsaWRhdGVkRmlsZXMpLmxlbmd0aH0gY29kZSBmaWxlcyBmb3IgdXNlY2FzZTogJHtjb2RlRGF0YS51c2VjYXNlfWApOwogICAgICAKICAgICAgcmV0dXJuIHZhbGlkYXRlZEZpbGVzOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gbG9hZCBjb2RlIGZpbGVzOicsIGVycm9yKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICAvLyBTYXZlIGN1cnJlbnQgdGVtcGxhdGUKICBzYXZlVGVtcGxhdGUodGVtcGxhdGUpIHsKICAgIHRyeSB7CiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RvcmFnZUtleXMuVEVNUExBVEUsIHRlbXBsYXRlKTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIHNhdmUgdGVtcGxhdGU6JywgZXJyb3IpOwogICAgfQogIH0KCiAgLy8gTG9hZCBjdXJyZW50IHRlbXBsYXRlCiAgbG9hZFRlbXBsYXRlKCkgewogICAgdHJ5IHsKICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZUtleXMuVEVNUExBVEUpIHx8ICdyZWFjdCc7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBsb2FkIHRlbXBsYXRlOicsIGVycm9yKTsKICAgICAgcmV0dXJuICdyZWFjdCc7CiAgICB9CiAgfQoKICAvLyBTYXZlIHF1YWxpdHkgc2V0dGluZwogIHNhdmVRdWFsaXR5U2V0dGluZyhxdWFsaXR5KSB7CiAgICB0cnkgewogICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXlzLlFVQUxJVFlfU0VUVElORywgcXVhbGl0eSk7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBzYXZlIHF1YWxpdHkgc2V0dGluZzonLCBlcnJvcik7CiAgICB9CiAgfQoKICAvLyBMb2FkIHF1YWxpdHkgc2V0dGluZwogIGxvYWRRdWFsaXR5U2V0dGluZygpIHsKICAgIHRyeSB7CiAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXlzLlFVQUxJVFlfU0VUVElORykgfHwgJ3N0YW5kYXJkJzsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIGxvYWQgcXVhbGl0eSBzZXR0aW5nOicsIGVycm9yKTsKICAgICAgcmV0dXJuICdzdGFuZGFyZCc7CiAgICB9CiAgfQoKICAvLyBTYXZlIFVJIHN0YXRlCiAgc2F2ZVVJU3RhdGUodWlTdGF0ZSkgewogICAgdHJ5IHsKICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5zdG9yYWdlS2V5cy5VSV9TVEFURSwgSlNPTi5zdHJpbmdpZnkodWlTdGF0ZSkpOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gc2F2ZSBVSSBzdGF0ZTonLCBlcnJvcik7CiAgICB9CiAgfQoKICAvLyBMb2FkIFVJIHN0YXRlCiAgbG9hZFVJU3RhdGUoKSB7CiAgICB0cnkgewogICAgICBjb25zdCBzYXZlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZUtleXMuVUlfU1RBVEUpOwogICAgICByZXR1cm4gc2F2ZWQgPyBKU09OLnBhcnNlKHNhdmVkKSA6IHsgY2hhdFZpc2libGU6IGZhbHNlIH07CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBsb2FkIFVJIHN0YXRlOicsIGVycm9yKTsKICAgICAgcmV0dXJuIHsgY2hhdFZpc2libGU6IGZhbHNlIH07CiAgICB9CiAgfQoKICAvLyBTYXZlIHZpZXcgdG9nZ2xlIHN0YXRlCiAgc2F2ZVZpZXdUb2dnbGVTdGF0ZSh2aWV3U3RhdGUpIHsKICAgIHRyeSB7CiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RvcmFnZUtleXMuVklFV19UT0dHTEVfU1RBVEUsIEpTT04uc3RyaW5naWZ5KHZpZXdTdGF0ZSkpOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gc2F2ZSB2aWV3IHRvZ2dsZSBzdGF0ZTonLCBlcnJvcik7CiAgICB9CiAgfQoKICAvLyBMb2FkIHZpZXcgdG9nZ2xlIHN0YXRlCiAgbG9hZFZpZXdUb2dnbGVTdGF0ZSgpIHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHNhdmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlS2V5cy5WSUVXX1RPR0dMRV9TVEFURSk7CiAgICAgIHJldHVybiBzYXZlZCA/IEpTT04ucGFyc2Uoc2F2ZWQpIDogeyBjdXJyZW50VmlldzogJ2NvZGUnIH07CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBsb2FkIHZpZXcgdG9nZ2xlIHN0YXRlOicsIGVycm9yKTsKICAgICAgcmV0dXJuIHsgY3VycmVudFZpZXc6ICdjb2RlJyB9OwogICAgfQogIH0KCiAgLy8gQ2xlYXIgYWxsIHNhdmVkIGRhdGEKICBjbGVhckFsbCgpIHsKICAgIE9iamVjdC52YWx1ZXModGhpcy5zdG9yYWdlS2V5cykuZm9yRWFjaChrZXkgPT4gewogICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpOwogICAgfSk7CiAgfQoKICAvLyBDbGVhciBhbGwgc2F2ZWQgZGF0YSBleGNlcHQgdGhlbWUgYW5kIHZpZXcgdG9nZ2xlIHN0YXRlIChmb3IgSFEgbW9kZSkKICBjbGVhckFsbEV4Y2VwdENyaXRpY2FsKCkgewogICAgY29uc3Qga2V5c1RvUHJlc2VydmUgPSBbCiAgICAgIHRoaXMuc3RvcmFnZUtleXMuVklFV19UT0dHTEVfU1RBVEUsCiAgICAgICd0aGVtZScgLy8gUHJlc2VydmUgdGhlbWUgYXMgd2VsbAogICAgXTsKICAgIAogICAgT2JqZWN0LnZhbHVlcyh0aGlzLnN0b3JhZ2VLZXlzKS5mb3JFYWNoKGtleSA9PiB7CiAgICAgIGlmICgha2V5c1RvUHJlc2VydmUuaW5jbHVkZXMoa2V5KSkgewogICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7CiAgICAgIH0KICAgIH0pOwogICAgCiAgICBjb25zb2xlLmxvZygn8J+nuSBDbGVhcmVkIGFsbCBkYXRhIGV4Y2VwdCBjcml0aWNhbCBzZXR0aW5ncycpOwogIH0KCiAgLy8gRW5oYW5jZWQgdmFsaWRhdGlvbiBtZXRob2RzCiAgdmFsaWRhdGVDaGF0SGlzdG9yeShwcm9tcHRzKSB7CiAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJvbXB0cykpIHJldHVybiBbXTsKICAgIAogICAgcmV0dXJuIHByb21wdHMKICAgICAgLmZpbHRlcihwcm9tcHQgPT4gcHJvbXB0ICYmIHR5cGVvZiBwcm9tcHQgPT09ICdvYmplY3QnKQogICAgICAuZmlsdGVyKHByb21wdCA9PiBwcm9tcHQucm9sZSAmJiBwcm9tcHQuY29udGVudCkKICAgICAgLnNsaWNlKC10aGlzLmNvbnRleHRWYWxpZGF0aW9uLm1heENoYXRIaXN0b3J5U2l6ZSkgLy8gS2VlcCBvbmx5IHJlY2VudCBtZXNzYWdlcwogICAgICAubWFwKHByb21wdCA9PiAoewogICAgICAgIHJvbGU6IFN0cmluZyhwcm9tcHQucm9sZSkudHJpbSgpLAogICAgICAgIGNvbnRlbnQ6IFN0cmluZyhwcm9tcHQuY29udGVudCkudHJpbSgpCiAgICAgIH0pKTsKICB9CgogIHZhbGlkYXRlQ29kZUZpbGVzKGNvZGVGaWxlcykgewogICAgaWYgKCFjb2RlRmlsZXMgfHwgdHlwZW9mIGNvZGVGaWxlcyAhPT0gJ29iamVjdCcpIHJldHVybiB7fTsKICAgIAogICAgY29uc3QgdmFsaWRhdGVkRmlsZXMgPSB7fTsKICAgIAogICAgT2JqZWN0LmVudHJpZXMoY29kZUZpbGVzKS5mb3JFYWNoKChbZmlsZVBhdGgsIGZpbGVEYXRhXSkgPT4gewogICAgICBpZiAoIWZpbGVQYXRoIHx8IHR5cGVvZiBmaWxlUGF0aCAhPT0gJ3N0cmluZycpIHJldHVybjsKICAgICAgCiAgICAgIC8vIEhhbmRsZSBib3RoIGxlZ2FjeSBmb3JtYXQgKGRpcmVjdCBjb2RlIHN0cmluZykgYW5kIG5ldyBmb3JtYXQgKG9iamVjdCB3aXRoIGNvZGUgcHJvcGVydHkpCiAgICAgIGxldCBjb2RlID0gJyc7CiAgICAgIGlmICh0eXBlb2YgZmlsZURhdGEgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgY29kZSA9IGZpbGVEYXRhOwogICAgICB9IGVsc2UgaWYgKGZpbGVEYXRhICYmIHR5cGVvZiBmaWxlRGF0YSA9PT0gJ29iamVjdCcgJiYgZmlsZURhdGEuY29kZSkgewogICAgICAgIGNvZGUgPSBTdHJpbmcoZmlsZURhdGEuY29kZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuOyAvLyBTa2lwIGludmFsaWQgZmlsZSBkYXRhCiAgICAgIH0KICAgICAgCiAgICAgIC8vIFZhbGlkYXRlIGZpbGUgc2l6ZQogICAgICBpZiAoY29kZS5sZW5ndGggPiB0aGlzLmNvbnRleHRWYWxpZGF0aW9uLm1heENvZGVGaWxlU2l6ZSkgewogICAgICAgIGNvbnNvbGUud2FybihgRmlsZSAke2ZpbGVQYXRofSBleGNlZWRzIHNpemUgbGltaXQsIHRydW5jYXRpbmcuLi5gKTsKICAgICAgICBjb2RlID0gY29kZS5zdWJzdHJpbmcoMCwgdGhpcy5jb250ZXh0VmFsaWRhdGlvbi5tYXhDb2RlRmlsZVNpemUpOwogICAgICB9CiAgICAgIAogICAgICB2YWxpZGF0ZWRGaWxlc1tmaWxlUGF0aF0gPSB7CiAgICAgICAgY29kZTogY29kZSwKICAgICAgICBoaWRkZW46IGZpbGVEYXRhLmhpZGRlbiB8fCBmYWxzZQogICAgICB9OwogICAgfSk7CiAgICAKICAgIHJldHVybiB2YWxpZGF0ZWRGaWxlczsKICB9CgogIGlzQ29udGV4dEV4cGlyZWQodGltZXN0YW1wKSB7CiAgICBpZiAoIXRpbWVzdGFtcCkgcmV0dXJuIHRydWU7CiAgICBjb25zdCBleHBpcnlUaW1lID0gdGhpcy5jb250ZXh0VmFsaWRhdGlvbi5jb250ZXh0RXhwaXJ5SG91cnMgKiA2MCAqIDYwICogMTAwMDsKICAgIHJldHVybiAoRGF0ZS5ub3coKSAtIHRpbWVzdGFtcCkgPiBleHBpcnlUaW1lOwogIH0KCiAgLy8gVXNlY2FzZSBtYW5hZ2VtZW50CiAgc2F2ZUN1cnJlbnRVc2VjYXNlKHVzZWNhc2UpIHsKICAgIHRyeSB7CiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RvcmFnZUtleXMuQ1VSUkVOVF9VU0VDQVNFLCB1c2VjYXNlKTsKICAgICAgY29uc29sZS5sb2coYPCfjq8gU2V0IGN1cnJlbnQgdXNlY2FzZTogJHt1c2VjYXNlfWApOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gc2F2ZSBjdXJyZW50IHVzZWNhc2U6JywgZXJyb3IpOwogICAgfQogIH0KCiAgbG9hZEN1cnJlbnRVc2VjYXNlKCkgewogICAgdHJ5IHsKICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZUtleXMuQ1VSUkVOVF9VU0VDQVNFKSB8fCAnZGVmYXVsdCc7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBsb2FkIGN1cnJlbnQgdXNlY2FzZTonLCBlcnJvcik7CiAgICAgIHJldHVybiAnZGVmYXVsdCc7CiAgICB9CiAgfQoKICAvLyBDb250ZXh0IG1ldGFkYXRhIG1hbmFnZW1lbnQKICB1cGRhdGVDb250ZXh0TWV0YWRhdGEobWV0YWRhdGEpIHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5sb2FkQ29udGV4dE1ldGFkYXRhKCk7CiAgICAgIGNvbnN0IHVwZGF0ZWQgPSB7IC4uLmV4aXN0aW5nLCAuLi5tZXRhZGF0YSB9OwogICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXlzLkNPTlRFWFRfTUVUQURBVEEsIEpTT04uc3RyaW5naWZ5KHVwZGF0ZWQpKTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIHVwZGF0ZSBjb250ZXh0IG1ldGFkYXRhOicsIGVycm9yKTsKICAgIH0KICB9CgogIGxvYWRDb250ZXh0TWV0YWRhdGEoKSB7CiAgICB0cnkgewogICAgICBjb25zdCBzYXZlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZUtleXMuQ09OVEVYVF9NRVRBREFUQSk7CiAgICAgIHJldHVybiBzYXZlZCA/IEpTT04ucGFyc2Uoc2F2ZWQpIDoge307CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBsb2FkIGNvbnRleHQgbWV0YWRhdGE6JywgZXJyb3IpOwogICAgICByZXR1cm4ge307CiAgICB9CiAgfQoKICAvLyBDbGVhciBzcGVjaWZpYyBkYXRhIHR5cGVzCiAgY2xlYXJDaGF0SGlzdG9yeSgpIHsKICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuc3RvcmFnZUtleXMuQ0hBVF9ISVNUT1JZKTsKICAgIGNvbnNvbGUubG9nKCfwn5eR77iPIENsZWFyZWQgY2hhdCBoaXN0b3J5Jyk7CiAgfQoKICBjbGVhckNvZGVGaWxlcygpIHsKICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuc3RvcmFnZUtleXMuQ09ERV9GSUxFUyk7CiAgICBjb25zb2xlLmxvZygn8J+Xke+4jyBDbGVhcmVkIGNvZGUgZmlsZXMnKTsKICB9CgogIC8vIENvbnRleHQgaGVhbHRoIGNoZWNrCiAgZ2V0Q29udGV4dEhlYWx0aCgpIHsKICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5sb2FkQ29udGV4dE1ldGFkYXRhKCk7CiAgICBjb25zdCBjaGF0SGlzdG9yeSA9IHRoaXMubG9hZENoYXRIaXN0b3J5KCk7CiAgICBjb25zdCBjb2RlRmlsZXMgPSB0aGlzLmxvYWRDb2RlRmlsZXMoKTsKICAgIAogICAgcmV0dXJuIHsKICAgICAgaGFzQWN0aXZlQ29udGV4dDogY2hhdEhpc3RvcnkubGVuZ3RoID4gMCB8fCAoY29kZUZpbGVzICYmIE9iamVjdC5rZXlzKGNvZGVGaWxlcykubGVuZ3RoID4gMCksCiAgICAgIGNoYXRNZXNzYWdlQ291bnQ6IGNoYXRIaXN0b3J5Lmxlbmd0aCwKICAgICAgY29kZUZpbGVDb3VudDogY29kZUZpbGVzID8gT2JqZWN0LmtleXMoY29kZUZpbGVzKS5sZW5ndGggOiAwLAogICAgICBsYXN0QWN0aXZpdHk6IE1hdGgubWF4KG1ldGFkYXRhLmxhc3RDaGF0U2F2ZSB8fCAwLCBtZXRhZGF0YS5sYXN0Q29kZVNhdmUgfHwgMCksCiAgICAgIGN1cnJlbnRVc2VjYXNlOiB0aGlzLmxvYWRDdXJyZW50VXNlY2FzZSgpLAogICAgICBpc0V4cGlyZWQ6IHRoaXMuaXNDb250ZXh0RXhwaXJlZChtZXRhZGF0YS5sYXN0Q2hhdFNhdmUgfHwgbWV0YWRhdGEubGFzdENvZGVTYXZlKQogICAgfTsKICB9CgogIC8vIENoZWNrIGlmIHN0b3JhZ2UgaXMgYXZhaWxhYmxlCiAgaXNTdG9yYWdlQXZhaWxhYmxlKCkgewogICAgdHJ5IHsKICAgICAgY29uc3QgdGVzdCA9ICdfX3N0b3JhZ2VfdGVzdF9fJzsKICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGVzdCwgdGVzdCk7CiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRlc3QpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9Cn0KCi8vIEFwcFBlcnNpc3RlbmNlIGNsYXNzIGZvciBkYXRhIHBlcnNpc3RlbmNlIC0gY29waWVkIGZyb20gcGVyc2lzdGVuY2UuanMKY2xhc3MgQXBwUGVyc2lzdGVuY2UgewogIGNvbnN0cnVjdG9yKCkgewogICAgLy8gVU5JRklFRCBTVE9SQUdFIEtFWVMgLSBDb21wYXRpYmxlIHdpdGggb3JpZ2luYWwgdmVyc2lvbgogICAgdGhpcy5zdG9yYWdlS2V5cyA9IHsKICAgICAgQ0hBVF9ISVNUT1JZOiAnd2ViYnVpbGRlcl9jaGF0X2hpc3RvcnknLAogICAgICBDT0RFX0ZJTEVTOiAnd2ViYnVpbGRlcl9jb2RlX2ZpbGVzJywgCiAgICAgIFRFTVBMQVRFOiAnd2ViYnVpbGRlcl90ZW1wbGF0ZScsCiAgICAgIFFVQUxJVFlfU0VUVElORzogJ3dlYmJ1aWxkZXJfcXVhbGl0eScsCiAgICAgIFVJX1NUQVRFOiAnd2ViYnVpbGRlcl91aV9zdGF0ZScsCiAgICAgIFZJRVdfVE9HR0xFX1NUQVRFOiAnd2ViYnVpbGRlcl92aWV3X3RvZ2dsZV9zdGF0ZScsCiAgICAgIENVUlJFTlRfVVNFQ0FTRTogJ3dlYmJ1aWxkZXJfY3VycmVudF91c2VjYXNlJywKICAgICAgQ09OVEVYVF9NRVRBREFUQTogJ3dlYmJ1aWxkZXJfY29udGV4dF9tZXRhZGF0YScKICAgIH07CiAgICAKICAgIC8vIENvbnRleHQgdmFsaWRhdGlvbiBzZXR0aW5ncwogICAgdGhpcy5jb250ZXh0VmFsaWRhdGlvbiA9IHsKICAgICAgbWF4Q2hhdEhpc3RvcnlTaXplOiA1MCwKICAgICAgbWF4Q29kZUZpbGVTaXplOiAxMDI0ICogMTAyNCwKICAgICAgY29udGV4dEV4cGlyeUhvdXJzOiAyNAogICAgfTsKICB9CgogIC8vIENoZWNrIGlmIHN0b3JhZ2UgaXMgYXZhaWxhYmxlCiAgaXNTdG9yYWdlQXZhaWxhYmxlKCkgewogICAgdHJ5IHsKICAgICAgY29uc3QgdGVzdCA9ICdfX3N0b3JhZ2VfdGVzdF9fJzsKICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGVzdCwgdGVzdCk7CiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRlc3QpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CgogIC8vIFNhdmUgY2hhdCBoaXN0b3J5CiAgc2F2ZUNoYXRIaXN0b3J5KHByb21wdHMsIHVzZWNhc2UgPSAnZGVmYXVsdCcpIHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHZhbGlkYXRlZFByb21wdHMgPSB0aGlzLnZhbGlkYXRlQ2hhdEhpc3RvcnkocHJvbXB0cyk7CiAgICAgIGNvbnN0IGNoYXREYXRhID0gewogICAgICAgIHByb21wdHM6IHZhbGlkYXRlZFByb21wdHMsCiAgICAgICAgdXNlY2FzZTogdXNlY2FzZSwKICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksCiAgICAgICAgdmVyc2lvbjogJzIuMCcKICAgICAgfTsKICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5zdG9yYWdlS2V5cy5DSEFUX0hJU1RPUlksIEpTT04uc3RyaW5naWZ5KGNoYXREYXRhKSk7CiAgICAgIGNvbnNvbGUubG9nKGDwn5K+IFNhdmVkICR7dmFsaWRhdGVkUHJvbXB0cy5sZW5ndGh9IGNoYXQgbWVzc2FnZXMgZm9yIHVzZWNhc2U6ICR7dXNlY2FzZX1gKTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIHNhdmUgY2hhdCBoaXN0b3J5OicsIGVycm9yKTsKICAgIH0KICB9CgogIC8vIExvYWQgY2hhdCBoaXN0b3J5CiAgbG9hZENoYXRIaXN0b3J5KGV4cGVjdGVkVXNlY2FzZSA9IG51bGwpIHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHNhdmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlS2V5cy5DSEFUX0hJU1RPUlkpOwogICAgICBpZiAoIXNhdmVkKSByZXR1cm4gW107CiAgICAgIGNvbnN0IGNoYXREYXRhID0gSlNPTi5wYXJzZShzYXZlZCk7CiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoYXREYXRhKSkgewogICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQ2hhdEhpc3RvcnkoY2hhdERhdGEpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQ2hhdEhpc3RvcnkoY2hhdERhdGEucHJvbXB0cyB8fCBbXSk7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBsb2FkIGNoYXQgaGlzdG9yeTonLCBlcnJvcik7CiAgICAgIHJldHVybiBbXTsKICAgIH0KICB9CgogIC8vIFNhdmUgY29kZSBmaWxlcwogIHNhdmVDb2RlRmlsZXMoY29kZUZpbGVzLCB1c2VjYXNlID0gJ2RlZmF1bHQnKSB7CiAgICB0cnkgewogICAgICBjb25zdCB2YWxpZGF0ZWRGaWxlcyA9IHRoaXMudmFsaWRhdGVDb2RlRmlsZXMoY29kZUZpbGVzKTsKICAgICAgY29uc3QgY29kZURhdGEgPSB7CiAgICAgICAgZmlsZXM6IHZhbGlkYXRlZEZpbGVzLAogICAgICAgIHVzZWNhc2U6IHVzZWNhc2UsCiAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLAogICAgICAgIHZlcnNpb246ICcyLjAnCiAgICAgIH07CiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RvcmFnZUtleXMuQ09ERV9GSUxFUywgSlNPTi5zdHJpbmdpZnkoY29kZURhdGEpKTsKICAgICAgY29uc29sZS5sb2coYPCfkr4gU2F2ZWQgJHtPYmplY3Qua2V5cyh2YWxpZGF0ZWRGaWxlcykubGVuZ3RofSBjb2RlIGZpbGVzIGZvciB1c2VjYXNlOiAke3VzZWNhc2V9YCk7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBzYXZlIGNvZGUgZmlsZXM6JywgZXJyb3IpOwogICAgfQogIH0KCiAgLy8gTG9hZCBjb2RlIGZpbGVzCiAgbG9hZENvZGVGaWxlcyhleHBlY3RlZFVzZWNhc2UgPSBudWxsKSB7CiAgICB0cnkgewogICAgICBjb25zdCBzYXZlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZUtleXMuQ09ERV9GSUxFUyk7CiAgICAgIGlmICghc2F2ZWQpIHJldHVybiBudWxsOwogICAgICBjb25zdCBjb2RlRGF0YSA9IEpTT04ucGFyc2Uoc2F2ZWQpOwogICAgICBpZiAoIWNvZGVEYXRhLnZlcnNpb24gJiYgIWNvZGVEYXRhLnRpbWVzdGFtcCkgewogICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQ29kZUZpbGVzKGNvZGVEYXRhKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUNvZGVGaWxlcyhjb2RlRGF0YS5maWxlcyB8fCB7fSk7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBsb2FkIGNvZGUgZmlsZXM6JywgZXJyb3IpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIC8vIFNhdmUgY3VycmVudCB1c2VjYXNlCiAgc2F2ZUN1cnJlbnRVc2VjYXNlKHVzZWNhc2UpIHsKICAgIHRyeSB7CiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RvcmFnZUtleXMuQ1VSUkVOVF9VU0VDQVNFLCB1c2VjYXNlKTsKICAgICAgY29uc29sZS5sb2coYPCfjq8gU2V0IGN1cnJlbnQgdXNlY2FzZTogJHt1c2VjYXNlfWApOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gc2F2ZSBjdXJyZW50IHVzZWNhc2U6JywgZXJyb3IpOwogICAgfQogIH0KCiAgLy8gTG9hZCBjdXJyZW50IHVzZWNhc2UKICBsb2FkQ3VycmVudFVzZWNhc2UoKSB7CiAgICB0cnkgewogICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlS2V5cy5DVVJSRU5UX1VTRUNBU0UpIHx8ICdkZWZhdWx0JzsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIGxvYWQgY3VycmVudCB1c2VjYXNlOicsIGVycm9yKTsKICAgICAgcmV0dXJuICdkZWZhdWx0JzsKICAgIH0KICB9CgogIC8vIFNhdmUgdmlldyB0b2dnbGUgc3RhdGUKICBzYXZlVmlld1RvZ2dsZVN0YXRlKHZpZXdTdGF0ZSkgewogICAgdHJ5IHsKICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5zdG9yYWdlS2V5cy5WSUVXX1RPR0dMRV9TVEFURSwgSlNPTi5zdHJpbmdpZnkodmlld1N0YXRlKSk7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBzYXZlIHZpZXcgdG9nZ2xlIHN0YXRlOicsIGVycm9yKTsKICAgIH0KICB9CgogIC8vIExvYWQgdmlldyB0b2dnbGUgc3RhdGUKICBsb2FkVmlld1RvZ2dsZVN0YXRlKCkgewogICAgdHJ5IHsKICAgICAgY29uc3Qgc2F2ZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXlzLlZJRVdfVE9HR0xFX1NUQVRFKTsKICAgICAgcmV0dXJuIHNhdmVkID8gSlNPTi5wYXJzZShzYXZlZCkgOiB7IGN1cnJlbnRWaWV3OiAnY29kZScgfTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIGxvYWQgdmlldyB0b2dnbGUgc3RhdGU6JywgZXJyb3IpOwogICAgICByZXR1cm4geyBjdXJyZW50VmlldzogJ2NvZGUnIH07CiAgICB9CiAgfQoKICAvLyBWYWxpZGF0aW9uIG1ldGhvZHMKICB2YWxpZGF0ZUNoYXRIaXN0b3J5KHByb21wdHMpIHsKICAgIGlmICghQXJyYXkuaXNBcnJheShwcm9tcHRzKSkgcmV0dXJuIFtdOwogICAgcmV0dXJuIHByb21wdHMKICAgICAgLmZpbHRlcihwcm9tcHQgPT4gcHJvbXB0ICYmIHR5cGVvZiBwcm9tcHQgPT09ICdvYmplY3QnKQogICAgICAuZmlsdGVyKHByb21wdCA9PiBwcm9tcHQucm9sZSAmJiBwcm9tcHQuY29udGVudCkKICAgICAgLnNsaWNlKC10aGlzLmNvbnRleHRWYWxpZGF0aW9uLm1heENoYXRIaXN0b3J5U2l6ZSkKICAgICAgLm1hcChwcm9tcHQgPT4gKHsKICAgICAgICByb2xlOiBTdHJpbmcocHJvbXB0LnJvbGUpLnRyaW0oKSwKICAgICAgICBjb250ZW50OiBTdHJpbmcocHJvbXB0LmNvbnRlbnQpLnRyaW0oKQogICAgICB9KSk7CiAgfQoKICB2YWxpZGF0ZUNvZGVGaWxlcyhjb2RlRmlsZXMpIHsKICAgIGlmICghY29kZUZpbGVzIHx8IHR5cGVvZiBjb2RlRmlsZXMgIT09ICdvYmplY3QnKSByZXR1cm4ge307CiAgICBjb25zdCB2YWxpZGF0ZWRGaWxlcyA9IHt9OwogICAgT2JqZWN0LmVudHJpZXMoY29kZUZpbGVzKS5mb3JFYWNoKChbZmlsZVBhdGgsIGZpbGVEYXRhXSkgPT4gewogICAgICBpZiAoIWZpbGVQYXRoIHx8IHR5cGVvZiBmaWxlUGF0aCAhPT0gJ3N0cmluZycpIHJldHVybjsKICAgICAgbGV0IGNvZGUgPSAnJzsKICAgICAgaWYgKHR5cGVvZiBmaWxlRGF0YSA9PT0gJ3N0cmluZycpIHsKICAgICAgICBjb2RlID0gZmlsZURhdGE7CiAgICAgIH0gZWxzZSBpZiAoZmlsZURhdGEgJiYgdHlwZW9mIGZpbGVEYXRhID09PSAnb2JqZWN0JyAmJiBmaWxlRGF0YS5jb2RlKSB7CiAgICAgICAgY29kZSA9IFN0cmluZyhmaWxlRGF0YS5jb2RlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGNvZGUubGVuZ3RoID4gdGhpcy5jb250ZXh0VmFsaWRhdGlvbi5tYXhDb2RlRmlsZVNpemUpIHsKICAgICAgICBjb2RlID0gY29kZS5zdWJzdHJpbmcoMCwgdGhpcy5jb250ZXh0VmFsaWRhdGlvbi5tYXhDb2RlRmlsZVNpemUpOwogICAgICB9CiAgICAgIHZhbGlkYXRlZEZpbGVzW2ZpbGVQYXRoXSA9IHsKICAgICAgICBjb2RlOiBjb2RlLAogICAgICAgIGhpZGRlbjogZmlsZURhdGEuaGlkZGVuIHx8IGZhbHNlCiAgICAgIH07CiAgICB9KTsKICAgIHJldHVybiB2YWxpZGF0ZWRGaWxlczsKICB9CgogIGNsZWFyRGF0YSgpIHsKICAgIE9iamVjdC52YWx1ZXModGhpcy5zdG9yYWdlS2V5cykuZm9yRWFjaChrZXkgPT4gewogICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpOwogICAgfSk7CiAgfQp9CgovLyBFeHBvcnQgYXMgZ2xvYmFsIGluc3RhbmNlCndpbmRvdy5hcHBQZXJzaXN0ZW5jZSA9IG5ldyBBcHBQZXJzaXN0ZW5jZSgpOwo8L3NjcmlwdD4KCjwhLS0gTWFpbiBSZWFjdCBBcHBsaWNhdGlvbiBTY3JpcHQgLS0+CjxzY3JpcHQgdHlwZT0ibW9kdWxlIj4KaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICJyZWFjdCI7CmltcG9ydCB7IGNyZWF0ZVJvb3QgfSBmcm9tICJyZWFjdC1kb20vY2xpZW50IjsKaW1wb3J0IHsgU2FuZHBhY2sgfSBmcm9tICJAY29kZXNhbmRib3gvc2FuZHBhY2stcmVhY3QiOwoKLy8gSW5pdGlhbGl6ZSBSZWFjdCByb290CmNvbnN0IHJvb3QgPSBjcmVhdGVSb290KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb290IikpOwoKLy8gSW5pdGlhbGl6ZSBwZXJzaXN0ZW5jZSAod2lsbCBiZSBhdmFpbGFibGUgYWZ0ZXIgRE9NIGxvYWRzKQovLyBDaGF0IGZ1bmN0aW9uYWxpdHkKY2xhc3MgUHJvbXB0IHsKICAgIGNvbnN0cnVjdG9yKHJvbGUsIG1lc3NhZ2UpIHsKICAgICAgICB0aGlzLnJvbGUgPSByb2xlOwogICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7CiAgICB9Cn0Kd2luZG93LlByb21wdCA9IFByb21wdDsgLy8gTWFrZSBpdCBnbG9iYWxseSBhY2Nlc3NpYmxlCgpsZXQgYXBwUGVyc2lzdGVuY2U7CmxldCBjdXJyZW50VXNlY2FzZSA9ICdkZWZhdWx0JzsKbGV0IGN1cnJlbnRQcm9tcHRUeXBlID0gJ3JlYWN0JzsgLy8gVHJhY2sgY3VycmVudCBwcm9tcHQgdHlwZSBmb3IgZGVwbG95IGJ1dHRvbiB2aXNpYmlsaXR5CmxldCBwcm9tcHRzID0gW107IC8vIEdsb2JhbCBwcm9tcHRzIGFycmF5IGZvciBjaGF0IGhpc3RvcnkKd2luZG93LnByb21wdHMgPSBwcm9tcHRzOyAvLyBNYWtlIGl0IGdsb2JhbGx5IGFjY2Vzc2libGUKCi8vIEVuaGFuY2VkIGdldEN1cnJlbnRVc2VjYXNlIGZ1bmN0aW9uIHdpdGggcGVyc2lzdGVuY2UgaW50ZWdyYXRpb24gYW5kIHZhbGlkYXRpb24KZnVuY3Rpb24gZ2V0Q3VycmVudFVzZWNhc2UoKSB7CiAgdHJ5IHsKICAgIC8vIEZpcnN0IGNoZWNrIGlmIGl0J3Mgc2V0IGJ5IHRoZSBzZXJ2ZXIKICAgIGlmICh3aW5kb3cuY3VycmVudFVzZWNhc2UpIHsKICAgICAgLy8gVmFsaWRhdGUgdGhlIHVzZWNhc2UgaWYgdmFsaWRhdGlvbiBpcyBhdmFpbGFibGUKICAgICAgaWYgKHdpbmRvdy5wYWdlQ29uZmlnICYmIHdpbmRvdy5wYWdlQ29uZmlnLnZhbGlkYXRlVXNlY2FzZSkgewogICAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSB3aW5kb3cucGFnZUNvbmZpZy52YWxpZGF0ZVVzZWNhc2Uod2luZG93LmN1cnJlbnRVc2VjYXNlKTsKICAgICAgICBpZiAodmFsaWRhdGlvbi5pc1ZhbGlkKSB7CiAgICAgICAgICBjdXJyZW50VXNlY2FzZSA9IHdpbmRvdy5jdXJyZW50VXNlY2FzZTsKICAgICAgICAgIC8vIFNhdmUgdG8gcGVyc2lzdGVuY2UgZm9yIGNvbnNpc3RlbmN5CiAgICAgICAgICBpZiAoYXBwUGVyc2lzdGVuY2UgJiYgdHlwZW9mIGFwcFBlcnNpc3RlbmNlLmlzU3RvcmFnZUF2YWlsYWJsZSA9PT0gJ2Z1bmN0aW9uJyAmJiBhcHBQZXJzaXN0ZW5jZS5pc1N0b3JhZ2VBdmFpbGFibGUoKSkgewogICAgICAgICAgICBhcHBQZXJzaXN0ZW5jZS5zYXZlQ3VycmVudFVzZWNhc2UoY3VycmVudFVzZWNhc2UpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGN1cnJlbnRVc2VjYXNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zb2xlLndhcm4oJ1NlcnZlci1wcm92aWRlZCB1c2VjYXNlIGlzIGludmFsaWQ6JywgdmFsaWRhdGlvbi5lcnJvcik7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGN1cnJlbnRVc2VjYXNlID0gd2luZG93LmN1cnJlbnRVc2VjYXNlOwogICAgICAgIGlmIChhcHBQZXJzaXN0ZW5jZSAmJiB0eXBlb2YgYXBwUGVyc2lzdGVuY2UuaXNTdG9yYWdlQXZhaWxhYmxlID09PSAnZnVuY3Rpb24nICYmIGFwcFBlcnNpc3RlbmNlLmlzU3RvcmFnZUF2YWlsYWJsZSgpKSB7CiAgICAgICAgICBhcHBQZXJzaXN0ZW5jZS5zYXZlQ3VycmVudFVzZWNhc2UoY3VycmVudFVzZWNhc2UpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gY3VycmVudFVzZWNhc2U7CiAgICAgIH0KICAgIH0KICAgIAogICAgLy8gQ2hlY2sgcGVyc2lzdGVuY2UgZm9yIHNhdmVkIHVzZWNhc2UKICAgIGlmIChhcHBQZXJzaXN0ZW5jZSAmJiB0eXBlb2YgYXBwUGVyc2lzdGVuY2UuaXNTdG9yYWdlQXZhaWxhYmxlID09PSAnZnVuY3Rpb24nICYmIGFwcFBlcnNpc3RlbmNlLmlzU3RvcmFnZUF2YWlsYWJsZSgpKSB7CiAgICAgIGNvbnN0IHNhdmVkVXNlY2FzZSA9IGFwcFBlcnNpc3RlbmNlLmxvYWRDdXJyZW50VXNlY2FzZSgpOwogICAgICBpZiAoc2F2ZWRVc2VjYXNlICYmIHNhdmVkVXNlY2FzZSAhPT0gJ2RlZmF1bHQnKSB7CiAgICAgICAgLy8gVmFsaWRhdGUgc2F2ZWQgdXNlY2FzZQogICAgICAgIGlmICh3aW5kb3cucGFnZUNvbmZpZyAmJiB3aW5kb3cucGFnZUNvbmZpZy52YWxpZGF0ZVVzZWNhc2UpIHsKICAgICAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSB3aW5kb3cucGFnZUNvbmZpZy52YWxpZGF0ZVVzZWNhc2Uoc2F2ZWRVc2VjYXNlKTsKICAgICAgICAgIGlmICh2YWxpZGF0aW9uLmlzVmFsaWQpIHsKICAgICAgICAgICAgY3VycmVudFVzZWNhc2UgPSBzYXZlZFVzZWNhc2U7CiAgICAgICAgICAgIHJldHVybiBjdXJyZW50VXNlY2FzZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnNvbGUud2FybignU2F2ZWQgdXNlY2FzZSBpcyBpbnZhbGlkOicsIHZhbGlkYXRpb24uZXJyb3IpOwogICAgICAgICAgICAvLyBDbGVhciBpbnZhbGlkIHNhdmVkIHVzZWNhc2UKICAgICAgICAgICAgYXBwUGVyc2lzdGVuY2Uuc2F2ZUN1cnJlbnRVc2VjYXNlKCdkZWZhdWx0Jyk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGN1cnJlbnRVc2VjYXNlID0gc2F2ZWRVc2VjYXNlOwogICAgICAgICAgcmV0dXJuIGN1cnJlbnRVc2VjYXNlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgCiAgICAvLyBGYWxsYmFjayB0byBwYXRoIG1hdGNoaW5nCiAgICBjb25zdCBwYXRoID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lOwogICAgCiAgICAvLyBGaW5kIG1hdGNoaW5nIHVzZWNhc2UgYnkgc2x1ZyB1c2luZyBlbmhhbmNlZCB1dGlsaXR5IGlmIGF2YWlsYWJsZQogICAgaWYgKHdpbmRvdy5wYWdlQ29uZmlnKSB7CiAgICAgIGlmICh3aW5kb3cucGFnZUNvbmZpZy5nZXRVc2VjYXNlQnlTbHVnKSB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gd2luZG93LnBhZ2VDb25maWcuZ2V0VXNlY2FzZUJ5U2x1ZyhwYXRoKTsKICAgICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgICBjdXJyZW50VXNlY2FzZSA9IHJlc3VsdC51c2VjYXNlOwogICAgICAgICAgLy8gU2F2ZSB0byBwZXJzaXN0ZW5jZQogICAgICAgICAgaWYgKGFwcFBlcnNpc3RlbmNlICYmIGFwcFBlcnNpc3RlbmNlLmlzU3RvcmFnZUF2YWlsYWJsZSgpKSB7CiAgICAgICAgICAgIGFwcFBlcnNpc3RlbmNlLnNhdmVDdXJyZW50VXNlY2FzZShjdXJyZW50VXNlY2FzZSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gY3VycmVudFVzZWNhc2U7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIC8vIEZhbGxiYWNrIHRvIG1hbnVhbCBzZWFyY2gKICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGNvbmZpZ10gb2YgT2JqZWN0LmVudHJpZXMod2luZG93LnBhZ2VDb25maWcpKSB7CiAgICAgICAgICBpZiAoY29uZmlnICYmIGNvbmZpZy5zbHVnID09PSBwYXRoICYmICFrZXkuc3RhcnRzV2l0aCgnXycpKSB7CiAgICAgICAgICAgIGN1cnJlbnRVc2VjYXNlID0ga2V5OwogICAgICAgICAgICAvLyBTYXZlIHRvIHBlcnNpc3RlbmNlCiAgICAgICAgICAgIGlmIChhcHBQZXJzaXN0ZW5jZSAmJiBhcHBQZXJzaXN0ZW5jZS5pc1N0b3JhZ2VBdmFpbGFibGUoKSkgewogICAgICAgICAgICAgIGFwcFBlcnNpc3RlbmNlLnNhdmVDdXJyZW50VXNlY2FzZShjdXJyZW50VXNlY2FzZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRVc2VjYXNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgCiAgICAvLyBEZWZhdWx0IGZhbGxiYWNrCiAgICBjdXJyZW50VXNlY2FzZSA9ICdkZWZhdWx0JzsKICAgIGlmIChhcHBQZXJzaXN0ZW5jZSAmJiBhcHBQZXJzaXN0ZW5jZS5pc1N0b3JhZ2VBdmFpbGFibGUoKSkgewogICAgICBhcHBQZXJzaXN0ZW5jZS5zYXZlQ3VycmVudFVzZWNhc2UoY3VycmVudFVzZWNhc2UpOwogICAgfQogICAgcmV0dXJuIGN1cnJlbnRVc2VjYXNlOwogIH0gY2F0Y2ggKGVycm9yKSB7CiAgICBjb25zb2xlLndhcm4oJ0Vycm9yIGluIGdldEN1cnJlbnRVc2VjYXNlOicsIGVycm9yKTsKICAgIHJldHVybiAnZGVmYXVsdCc7CiAgfQp9CndpbmRvdy5nZXRDdXJyZW50VXNlY2FzZSA9IGdldEN1cnJlbnRVc2VjYXNlOyAvLyBNYWtlIGl0IGdsb2JhbGx5IGFjY2Vzc2libGUKCi8vIEdsb2JhbCBzdGF0ZQpsZXQgY3VycmVudENvZGUgPSB7fTsKd2luZG93LmN1cnJlbnRDb2RlID0gY3VycmVudENvZGU7IC8vIE1ha2UgaXQgZ2xvYmFsbHkgYWNjZXNzaWJsZQpsZXQgY3VycmVudFRlbXBsYXRlID0gJ3JlYWN0JzsKbGV0IGNoYXRIaXN0b3J5ID0gW107CndpbmRvdy5jaGF0SGlzdG9yeSA9IGNoYXRIaXN0b3J5OyAvLyBNYWtlIGl0IGdsb2JhbGx5IGFjY2Vzc2libGUKbGV0IGlzR2VuZXJhdGluZyA9IGZhbHNlOwpsZXQgc2FuZHBhY2tSZW5kZXJLZXkgPSAwOyAvLyBLZXkgdG8gZm9yY2UgU2FuZHBhY2sgcmUtcmVuZGVycwpsZXQgaXNNb2JpbGVWaWV3SW5pdGlhbGl6ZWQgPSBmYWxzZTsgLy8gVHJhY2sgaWYgbW9iaWxlIHRvZ2dsZSBpcyBpbml0aWFsaXplZApsZXQgaXNDaGF0VmlzaWJsZSA9IHRydWU7IC8vIFRyYWNrIGN1cnJlbnQgbW9iaWxlIHZpZXcgc3RhdGUKCi8vIERPTSBlbGVtZW50cwpjb25zdCBsYW5kaW5nU2VjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYW5kaW5nU2VjdGlvbicpOwpjb25zdCBhcHBDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuYXBwLWNvbnRhaW5lcicpOwpjb25zdCBjaGF0Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoYXRDb250YWluZXInKTsKY29uc3QgbG9hZGluZ0JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2FkaW5nQm94Jyk7CmNvbnN0IGRvd25sb2FkQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Rvd25sb2FkQnRuJyk7CmNvbnN0IHRvZ2dsZVZpZXdCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9nZ2xlVmlld0J0bicpOwpjb25zdCBzYW5kcGFja1dyYXBwZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2FuZHBhY2tXcmFwcGVyJyk7CmNvbnN0IGNoYXRJbnRlcmZhY2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2hhdEludGVyZmFjZScpOwoKLy8gSW5pdGlhbGl6ZSBhcHAKZnVuY3Rpb24gaW5pdGlhbGl6ZUFwcCgpIHsKICAgIC8vIEVuc3VyZSBsYW5kaW5nIHNlY3Rpb24gaXMgdmlzaWJsZSBhbmQgYXBwIGNvbnRhaW5lciBpcyBoaWRkZW4gb24gbG9hZAogICAgaWYgKGxhbmRpbmdTZWN0aW9uKSB7CiAgICAgICAgbGFuZGluZ1NlY3Rpb24uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICB9CiAgICBpZiAoYXBwQ29udGFpbmVyKSB7CiAgICAgICAgYXBwQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICB9CiAgICAKICAgIHNldHVwRXZlbnRMaXN0ZW5lcnMoKTsKICAgIHNldHVwU2FuZHBhY2soKTsKfQoKZnVuY3Rpb24gc2V0dXBFdmVudExpc3RlbmVycygpIHsKICAgIGNvbnNvbGUubG9nKCfimpnvuI8gU2V0dGluZyB1cCBldmVudCBsaXN0ZW5lcnMuLi4nKTsKICAgIAogICAgLy8gTGFuZGluZyBwYWdlIGdlbmVyYXRlIGJ1dHRvbgogICAgY29uc3QgZ2VuZXJhdGVCdG4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZ2VuZXJhdGUtY29kZS1idG4nKTsKICAgIGNvbnNvbGUubG9nKCfwn5SYIEdlbmVyYXRlIGJ1dHRvbiBmb3VuZDonLCBnZW5lcmF0ZUJ0bik7CiAgICAKICAgIGlmIChnZW5lcmF0ZUJ0bikgewogICAgICAgIGdlbmVyYXRlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHsKICAgICAgICAgICAgY29uc29sZS5sb2coJ/CflJggR2VuZXJhdGUgYnV0dG9uIGNsaWNrZWQnKTsKICAgICAgICAgICAgaGFuZGxlR2VuZXJhdGVDb2RlKCk7CiAgICAgICAgfSk7CiAgICAgICAgY29uc29sZS5sb2coJ+KchSBDbGljayBoYW5kbGVyIGF0dGFjaGVkIHRvIGdlbmVyYXRlIGJ1dHRvbicpOwogICAgfSBlbHNlIHsKICAgICAgICBjb25zb2xlLmVycm9yKCfinYwgR2VuZXJhdGUgYnV0dG9uIG5vdCBmb3VuZCEnKTsKICAgIH0KCiAgICAvLyBRdWljayBhcHAgYnV0dG9ucwogICAgY29uc3QgcXVpY2tBcHBCdG5zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnF1aWNrLWFwcC1idG4nKTsKICAgIHF1aWNrQXBwQnRucy5mb3JFYWNoKGJ0biA9PiB7CiAgICAgICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHsKICAgICAgICAgICAgY29uc3QgcHJvbXB0ID0gZS50YXJnZXQudGV4dENvbnRlbnQ7CiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wcm9tcHQtaW5wdXQnKS52YWx1ZSA9IHByb21wdDsKICAgICAgICAgICAgaGFuZGxlR2VuZXJhdGVDb2RlKCk7CiAgICAgICAgfSk7CiAgICB9KTsKCiAgICAvLyBDaGF0IHN1Ym1pdCBidXR0b24KICAgIGNvbnN0IGNoYXRTdWJtaXRCdG4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY2hhdC1zdWJtaXQtYnRuJyk7CiAgICBpZiAoY2hhdFN1Ym1pdEJ0bikgewogICAgICAgIGNoYXRTdWJtaXRCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVDaGF0U3VibWl0KTsKICAgIH0KCiAgICAvLyBFbnRlciBrZXkgaGFuZGxpbmcKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZSkgPT4gewogICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyAmJiAhZS5zaGlmdEtleSkgewogICAgICAgICAgICBjb25zdCBhY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDsKICAgICAgICAgICAgaWYgKGFjdGl2ZUVsZW1lbnQgJiYgYWN0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ3Byb21wdC1pbnB1dCcpKSB7CiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygn8J+UkSBFbnRlciBrZXkgcHJlc3NlZCBpbiBwcm9tcHQgaW5wdXQnKTsKICAgICAgICAgICAgICAgIGlmIChsYW5kaW5nU2VjdGlvbi5zdHlsZS5kaXNwbGF5ICE9PSAnbm9uZScpIHsKICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygn8J+UkSBDYWxsaW5nIGhhbmRsZUdlbmVyYXRlQ29kZSBmcm9tIEVudGVyIGtleScpOwogICAgICAgICAgICAgICAgICAgIGhhbmRsZUdlbmVyYXRlQ29kZSgpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygn8J+UkSBDYWxsaW5nIGhhbmRsZUNoYXRTdWJtaXQgZnJvbSBFbnRlciBrZXknKTsKICAgICAgICAgICAgICAgICAgICBoYW5kbGVDaGF0U3VibWl0KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCiAgICAvLyBUb2dnbGUgdmlldyBidXR0b24KICAgIGlmICh0b2dnbGVWaWV3QnRuKSB7CiAgICAgICAgdG9nZ2xlVmlld0J0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRvZ2dsZVZpZXcpOwogICAgfQoKICAgIC8vIERvd25sb2FkIGJ1dHRvbgogICAgaWYgKGRvd25sb2FkQnRuKSB7CiAgICAgICAgZG93bmxvYWRCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBkb3dubG9hZENvZGUpOwogICAgfQp9CgpmdW5jdGlvbiBzZXR1cFNhbmRwYWNrKCkgewogICAgLy8gSW5pdGlhbGl6ZSBTYW5kcGFjayB3aXRoIGRlZmF1bHQgdGVtcGxhdGUKICAgIGNvbnN0IGRlZmF1bHRGaWxlcyA9IHsKICAgICAgICAiL0FwcC5qcyI6IHsKICAgICAgICAgICAgY29kZTogYGltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7CgpmdW5jdGlvbiBBcHAoKSB7CiAgcmV0dXJuICgKICAgIDxkaXYgc3R5bGU9e3sgcGFkZGluZzogJzIwcHgnLCBmb250RmFtaWx5OiAnQXJpYWwsIHNhbnMtc2VyaWYnIH19PgogICAgICA8aDE+V2VsY29tZSB0byBBSSBDb2RlIEFzc2lzdGFudDwvaDE+CiAgICAgIDxwPlN0YXJ0IGJ5IGVudGVyaW5nIGEgcHJvbXB0IHRvIGdlbmVyYXRlIGNvZGUhPC9wPgogICAgPC9kaXY+CiAgKTsKfQoKZXhwb3J0IGRlZmF1bHQgQXBwO2AKICAgICAgICB9LAogICAgICAgICIvcGFja2FnZS5qc29uIjogewogICAgICAgICAgICBjb2RlOiBKU09OLnN0cmluZ2lmeSh7CiAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXM6IHsKICAgICAgICAgICAgICAgICAgICAicmVhY3QiOiAiXjE4LjIuMCIsCiAgICAgICAgICAgICAgICAgICAgInJlYWN0LWRvbSI6ICJeMTguMi4wIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LCBudWxsLCAyKQogICAgICAgIH0KICAgIH07CgogICAgc2FuZHBhY2tSZW5kZXJLZXkrKzsgLy8gSW5jcmVtZW50IGtleSBmb3IgZnJlc2ggcmVuZGVyCiAgICAKICAgIHJvb3QucmVuZGVyKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2FuZHBhY2ssIHsKICAgICAgICBrZXk6IGBzYW5kcGFjay0ke3NhbmRwYWNrUmVuZGVyS2V5fWAsIC8vIEFkZCBrZXkgdG8gZm9yY2UgcmUtcmVuZGVyCiAgICAgICAgdGVtcGxhdGU6ICJyZWFjdCIsCiAgICAgICAgZmlsZXM6IGRlZmF1bHRGaWxlcywKICAgICAgICBvcHRpb25zOiB7CiAgICAgICAgICAgIHJlY29tcGlsZU1vZGU6ICJkZWxheWVkIiwKICAgICAgICAgICAgcmVjb21waWxlRGVsYXk6IDMwMCwKICAgICAgICAgICAgYXV0b3J1bjogdHJ1ZSwKICAgICAgICAgICAgc2hvd0xpbmVOdW1iZXJzOiBmYWxzZSwKICAgICAgICAgICAgc2hvd0lubGluZUVycm9yczogdHJ1ZSwKICAgICAgICAgICAgc2hvd0NvbnNvbGU6IGZhbHNlLAogICAgICAgICAgICBzaG93Q29uc29sZUJ1dHRvbjogZmFsc2UsCiAgICAgICAgICAgIGNsb3NhYmxlVGFiczogdHJ1ZSwKICAgICAgICAgICAgd3JhcENvbnRlbnQ6IHRydWUsCiAgICAgICAgICAgIGVkaXRvckhlaWdodDogIjEwMCUiLAogICAgICAgICAgICBzaG93T3BlbkluQ29kZVNhbmRib3g6IGZhbHNlLAogICAgICAgICAgICBzaG93RXJyb3JTY3JlZW46IHRydWUsCiAgICAgICAgICAgIHNob3dMb2FkaW5nU2NyZWVuOiB0cnVlLAogICAgICAgICAgICBidW5kbGVyVVJMOiBgaHR0cHM6Ly9zYW5kcGFjay1idW5kbGVyLmNvZGVzYW5kYm94LmlvP3Y9JHtEYXRlLm5vdygpfWAsCiAgICAgICAgICAgIHN0YXJ0Um91dGU6ICIvIiwKICAgICAgICAgICAgbG9nTGV2ZWw6ICJlcnJvciIsCiAgICAgICAgICAgIGluaXRNb2RlOiAibGF6eSIKICAgICAgICB9LAogICAgICAgIHRoZW1lOiAibGlnaHQiCiAgICB9KSk7CiAgICAKICAgIC8vIEluaXRpYWxpemUgQ29kZS9QcmV2aWV3IHRvZ2dsZSBhZnRlciBTYW5kcGFjayByZW5kZXJzCiAgICBzZXRUaW1lb3V0KGluaXRpYWxpemVDb2RlUHJldmlld1RvZ2dsZSwgNTAwKTsKfQoKLy8gQ29kZS9QcmV2aWV3IFRvZ2dsZSBGdW5jdGlvbmFsaXR5CmZ1bmN0aW9uIGluaXRpYWxpemVDb2RlUHJldmlld1RvZ2dsZSgpIHsKICAgIGxldCBjb2RlVG9nZ2xlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvZGVUb2dnbGUnKTsKICAgIGxldCBwcmV2aWV3VG9nZ2xlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ByZXZpZXdUb2dnbGUnKTsKICAgIGNvbnN0IHNhbmRwYWNrQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jvb3QnKTsKICAgIAogICAgaWYgKCFjb2RlVG9nZ2xlIHx8ICFwcmV2aWV3VG9nZ2xlIHx8ICFzYW5kcGFja0NvbnRhaW5lcikgewogICAgICAgIGNvbnNvbGUud2FybignQ29kZS9QcmV2aWV3IHRvZ2dsZSBidXR0b25zIG9yIHNhbmRwYWNrIGNvbnRhaW5lciBub3QgZm91bmQnKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICAKICAgIGNvbnNvbGUubG9nKCfinIUgSW5pdGlhbGl6aW5nIENvZGUvUHJldmlldyB0b2dnbGUgYnV0dG9ucycpOwogICAgCiAgICBmdW5jdGlvbiBzd2l0Y2hUb0NvZGVWaWV3KCkgewogICAgICAgIGNvbnNvbGUubG9nKCfwn5SEIFN3aXRjaGluZyB0byBDb2RlIHZpZXcuLi4nKTsKICAgICAgICBzYW5kcGFja0NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdwcmV2aWV3LW1vZGUnKTsKICAgICAgICBzYW5kcGFja0NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdjb2RlLW1vZGUnKTsKICAgICAgICBjb2RlVG9nZ2xlLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOwogICAgICAgIHByZXZpZXdUb2dnbGUuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7CiAgICAgICAgY29uc29sZS5sb2coJ/CflKcgU3dpdGNoZWQgdG8gQ29kZSB2aWV3IC0gQ29kZSBhY3RpdmU6JywgY29kZVRvZ2dsZS5jbGFzc0xpc3QuY29udGFpbnMoJ2FjdGl2ZScpLCAnUHJldmlldyBhY3RpdmU6JywgcHJldmlld1RvZ2dsZS5jbGFzc0xpc3QuY29udGFpbnMoJ2FjdGl2ZScpKTsKICAgIH0KICAgIAogICAgZnVuY3Rpb24gc3dpdGNoVG9QcmV2aWV3VmlldygpIHsKICAgICAgICBjb25zb2xlLmxvZygn8J+UhCBTd2l0Y2hpbmcgdG8gUHJldmlldyB2aWV3Li4uJyk7CiAgICAgICAgc2FuZHBhY2tDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgnY29kZS1tb2RlJyk7CiAgICAgICAgc2FuZHBhY2tDb250YWluZXIuY2xhc3NMaXN0LmFkZCgncHJldmlldy1tb2RlJyk7CiAgICAgICAgcHJldmlld1RvZ2dsZS5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsKICAgICAgICBjb2RlVG9nZ2xlLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOwogICAgICAgIGNvbnNvbGUubG9nKCfwn5GB77iPIFN3aXRjaGVkIHRvIFByZXZpZXcgdmlldyAtIENvZGUgYWN0aXZlOicsIGNvZGVUb2dnbGUuY2xhc3NMaXN0LmNvbnRhaW5zKCdhY3RpdmUnKSwgJ1ByZXZpZXcgYWN0aXZlOicsIHByZXZpZXdUb2dnbGUuY2xhc3NMaXN0LmNvbnRhaW5zKCdhY3RpdmUnKSk7CiAgICAgICAgCiAgICAgICAgLy8gRW5zdXJlIGlmcmFtZSBpcyB2aXNpYmxlCiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGlmcmFtZXMgPSBzYW5kcGFja0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCdpZnJhbWUnKTsKICAgICAgICAgICAgaWZyYW1lcy5mb3JFYWNoKGlmcmFtZSA9PiB7CiAgICAgICAgICAgICAgICBpZiAoaWZyYW1lLnN0eWxlLmRpc3BsYXkgPT09ICdub25lJykgewogICAgICAgICAgICAgICAgICAgIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfSwgMTAwKTsKICAgIH0KICAgIAogICAgLy8gUmVtb3ZlIGV4aXN0aW5nIGxpc3RlbmVycyBpZiBhbnkKICAgIGNvbnN0IG5ld0NvZGVUb2dnbGUgPSBjb2RlVG9nZ2xlLmNsb25lTm9kZSh0cnVlKTsKICAgIGNvbnN0IG5ld1ByZXZpZXdUb2dnbGUgPSBwcmV2aWV3VG9nZ2xlLmNsb25lTm9kZSh0cnVlKTsKICAgIGNvZGVUb2dnbGUucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobmV3Q29kZVRvZ2dsZSwgY29kZVRvZ2dsZSk7CiAgICBwcmV2aWV3VG9nZ2xlLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG5ld1ByZXZpZXdUb2dnbGUsIHByZXZpZXdUb2dnbGUpOwogICAgCiAgICAvLyBVcGRhdGUgdmFyaWFibGUgcmVmZXJlbmNlcyB0byBwb2ludCB0byB0aGUgbmV3IGVsZW1lbnRzCiAgICBjb2RlVG9nZ2xlID0gbmV3Q29kZVRvZ2dsZTsKICAgIHByZXZpZXdUb2dnbGUgPSBuZXdQcmV2aWV3VG9nZ2xlOwogICAgCiAgICAvLyBBZGQgZXZlbnQgbGlzdGVuZXJzCiAgICBjb2RlVG9nZ2xlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc3dpdGNoVG9Db2RlVmlldyk7CiAgICBwcmV2aWV3VG9nZ2xlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc3dpdGNoVG9QcmV2aWV3Vmlldyk7CiAgICAKICAgIC8vIFN0YXJ0IHdpdGggcHJldmlldyB2aWV3IGJ5IGRlZmF1bHQKICAgIHN3aXRjaFRvUHJldmlld1ZpZXcoKTsKICAgIAogICAgY29uc29sZS5sb2coJ+KchSBDb2RlL1ByZXZpZXcgdG9nZ2xlIGluaXRpYWxpemVkJyk7Cn0KCmFzeW5jIGZ1bmN0aW9uIGhhbmRsZUdlbmVyYXRlQ29kZSgpIHsKICAgIGNvbnNvbGUubG9nKCfwn5qAIGhhbmRsZUdlbmVyYXRlQ29kZSBjYWxsZWQgLSBpc0dlbmVyYXRpbmc6JywgaXNHZW5lcmF0aW5nKTsKICAgIAogICAgLy8gQ2hlY2sgaWYgYWxyZWFkeSBnZW5lcmF0aW5nIGZpcnN0CiAgICBpZiAoaXNHZW5lcmF0aW5nKSB7CiAgICAgICAgY29uc29sZS5sb2coJ+KaoO+4jyBBbHJlYWR5IGdlbmVyYXRpbmcsIHNraXBwaW5nLi4uJyk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgCiAgICBjb25zdCBwcm9tcHRJbnB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wcm9tcHQtaW5wdXQnKTsKICAgIGNvbnN0IHF1YWxpdHlTZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncXVhbGl0eVNlbGVjdExhbmRpbmcnKTsKICAgIAogICAgY29uc29sZS5sb2coJ/Cfk50gUHJvbXB0IGlucHV0OicsIHByb21wdElucHV0KTsKICAgIGNvbnNvbGUubG9nKCfwn5OdIFByb21wdCB2YWx1ZTonLCBwcm9tcHRJbnB1dD8udmFsdWUpOwogICAgCiAgICBpZiAoIXByb21wdElucHV0IHx8ICFwcm9tcHRJbnB1dC52YWx1ZS50cmltKCkpIHsKICAgICAgICBhbGVydCgnUGxlYXNlIGVudGVyIGEgcHJvbXB0Jyk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgCiAgICBpc0dlbmVyYXRpbmcgPSB0cnVlOwogICAgY29uc3QgcHJvbXB0ID0gcHJvbXB0SW5wdXQudmFsdWUudHJpbSgpOwogICAgY29uc3QgcXVhbGl0eSA9IHF1YWxpdHlTZWxlY3QgPyBxdWFsaXR5U2VsZWN0LnZhbHVlIDogJ3N0YW5kYXJkJzsKICAgIAogICAgLy8gU2hvdyBjaGF0IGludGVyZmFjZSBmaXJzdCBzbyBsb2FkaW5nIGJveCBjYW4gYmUgdmlzaWJsZQogICAgc2hvd0NoYXRJbnRlcmZhY2UoZmFsc2UpOyAvLyBEb24ndCBzaG93IGJ1dHRvbnMgZHVyaW5nIGdlbmVyYXRpb24KICAgIAogICAgLy8gQ2xlYXIgY2hhdCBjb250YWluZXIgdG8gcHJldmVudCBkdXBsaWNhdGVzCiAgICBjbGVhckNoYXRDb250YWluZXIoKTsKICAgIAogICAgLy8gQWRkIHVzZXIgbWVzc2FnZSB0byBjaGF0CiAgICBhZGRUb0NoYXRIaXN0b3J5KCd1c2VyJywgcHJvbXB0KTsKICAgIAogICAgLy8gQ2xlYXIgdGhlIGlucHV0IGZpZWxkCiAgICBwcm9tcHRJbnB1dC52YWx1ZSA9ICcnOwogICAgCiAgICAvLyBTaG93IGxvYWRpbmcKICAgIHNob3dMb2FkaW5nKCk7CiAgICAKICAgIHRyeSB7CiAgICAgICAgLy8gQWRkIHVzZXIgcHJvbXB0IHRvIHByb21wdHMgYXJyYXkKICAgICAgICBjb25zdCB1c2VyUHJvbXB0ID0gbmV3IFByb21wdCgndXNlcicsIHByb21wdCk7CiAgICAgICAgcHJvbXB0cy5wdXNoKHVzZXJQcm9tcHQpOwogICAgICAgIHdpbmRvdy5wcm9tcHRzID0gcHJvbXB0czsgLy8gS2VlcCBpbiBzeW5jCiAgICAgICAgCiAgICAgICAgLy8gQ2hlY2sgaWYgaGlnaGVyIHF1YWxpdHkgaXMgc2VsZWN0ZWQKICAgICAgICBpZiAocXVhbGl0eSA9PT0gJ2hpZ2hlcicpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coIkhpZ2hlciBxdWFsaXR5IHNlbGVjdGVkLCBpbml0aWF0aW5nIHR3by1zdGFnZSBwcm9jZXNzLi4uIik7CiAgICAgICAgICAgIGF3YWl0IGZldGNoSGlnaFF1YWxpdHlDb2RlKHByb21wdCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gU3RhbmRhcmQgcXVhbGl0eSBnZW5lcmF0aW9uCiAgICAgICAgICAgIC8vIEdlbmVyYXRlIG9yIGdldCBzZXNzaW9uIElEIGZvciBjb250ZXh0IHRyYWNraW5nCiAgICAgICAgICAgIGxldCBzZXNzaW9uSWQgPSB3aW5kb3cuY3VycmVudFNlc3Npb25JZDsKICAgICAgICAgICAgaWYgKCFzZXNzaW9uSWQpIHsKICAgICAgICAgICAgICAgIHNlc3Npb25JZCA9IGBzZXNzaW9uXyR7RGF0ZS5ub3coKX1fJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSl9YDsKICAgICAgICAgICAgICAgIHdpbmRvdy5jdXJyZW50U2Vzc2lvbklkID0gc2Vzc2lvbklkOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHsKICAgICAgICAgICAgICAgIG1lc3NhZ2VzOiBwcm9tcHRzLm1hcChwID0+ICh7CiAgICAgICAgICAgICAgICAgICAgcm9sZTogcC5yb2xlLAogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHAubWVzc2FnZQogICAgICAgICAgICAgICAgfSkpLAogICAgICAgICAgICAgICAgcXVhbGl0eTogcXVhbGl0eSwKICAgICAgICAgICAgICAgIHVzZWNhc2U6IGdldEN1cnJlbnRVc2VjYXNlKCksCiAgICAgICAgICAgICAgICBzZXNzaW9uSWQ6IHNlc3Npb25JZAogICAgICAgICAgICB9OwogICAgICAgICAgICAKICAgICAgICAgICAgY29uc29sZS5sb2coJ/CfjJAgTWFraW5nIEFQSSBjYWxsIHRvOicsIENPTkZJRy5nZXRBcGlVcmwoQ09ORklHLkVORFBPSU5UUy5PUEVOQUkpKTsKICAgICAgICAgICAgY29uc29sZS5sb2coJ/Cfk6QgUmVxdWVzdCBib2R5OicsIHJlcXVlc3RCb2R5KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goQ09ORklHLmdldEFwaVVybChDT05GSUcuRU5EUE9JTlRTLk9QRU5BSSksIHsKICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLAogICAgICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocmVxdWVzdEJvZHkpCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgY29uc29sZS5sb2coJ/Cfk6UgUmVzcG9uc2Ugc3RhdHVzOicsIHJlc3BvbnNlLnN0YXR1cyk7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCfwn5OlIFJlc3BvbnNlIG9rOicsIHJlc3BvbnNlLm9rKTsKCiAgICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCBlcnJvciEgc3RhdHVzOiAke3Jlc3BvbnNlLnN0YXR1c31gKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTsKICAgICAgICAgICAgY29uc29sZS5sb2coJ/Cfk6UgQVBJIFJlc3BvbnNlIGRhdGE6JywgZGF0YSk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBDaGVjayBmb3IgYm90aCBkYXRhLmNvZGUgYW5kIGRhdGEuZmlsZXMgKEFQSSBtaWdodCByZXR1cm4gZWl0aGVyKQogICAgICAgICAgICBjb25zdCBjb2RlRmlsZXMgPSBkYXRhLmNvZGUgfHwgZGF0YS5maWxlczsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChjb2RlRmlsZXMgJiYgdHlwZW9mIGNvZGVGaWxlcyA9PT0gJ29iamVjdCcpIHsKICAgICAgICAgICAgICAgIGN1cnJlbnRDb2RlID0gY29kZUZpbGVzOwogICAgICAgICAgICAgICAgd2luZG93LmN1cnJlbnRDb2RlID0gY3VycmVudENvZGU7IC8vIEtlZXAgaW4gc3luYwogICAgICAgICAgICAgICAgY3VycmVudFByb21wdFR5cGUgPSBkYXRhLnByb21wdFR5cGUgfHwgJ3JlYWN0JzsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8gQWRkIEFJIHJlc3BvbnNlIHRvIHByb21wdHMgYXJyYXkKICAgICAgICAgICAgICAgIGlmIChkYXRhLmRlc2NyaXB0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgcHJvbXB0cy5wdXNoKG5ldyBQcm9tcHQoJ2FpJywgZGF0YS5kZXNjcmlwdGlvbikpOwogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5wcm9tcHRzID0gcHJvbXB0czsgLy8gS2VlcCBpbiBzeW5jCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBTYW5kcGFjawogICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5zZXRBbGxTYW5kcGFja0ZpbGVzKSB7CiAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRBbGxTYW5kcGFja0ZpbGVzKGNvZGVGaWxlcyk7CiAgICAgICAgICAgICAgICB9IGVsc2Uge