@envive-ai/react-hooks 0.2.6-alpha-4 → 0.2.6-alpha-5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/dist/{AmplitudeOperations-BEhMCOtx.cjs → AmplitudeOperations-CNFlPr53.cjs} +2 -2
  2. package/dist/{AmplitudeOperations-Dpp91XWV.js → AmplitudeOperations-cmAprPCA.js} +2 -2
  3. package/dist/{NewOrgConfig-DRs9Sk4E.cjs → NewOrgConfig-6dFyYjJG.cjs} +2 -2
  4. package/dist/{NewOrgConfig-Cx3R7FM6.js → NewOrgConfig-Bicbf8I7.js} +2 -2
  5. package/dist/{TrackComponentVisibleEvent-CIfRZtFq.js → TrackComponentVisibleEvent-BebTjNtS.js} +3 -3
  6. package/dist/{TrackComponentVisibleEvent-OAFP4CZ6.cjs → TrackComponentVisibleEvent-COwxsJRE.cjs} +3 -3
  7. package/dist/{amplitudeTrackEventAtom-BBkB1LPQ.cjs → amplitudeTrackEventAtom-D9vs8dpE.cjs} +1 -1
  8. package/dist/{amplitudeTrackEventAtom-yP38BuDB.js → amplitudeTrackEventAtom-iEIu11Om.js} +1 -1
  9. package/dist/application/models/index.cjs +2 -2
  10. package/dist/application/models/index.d.cts +1 -1
  11. package/dist/application/models/index.js +2 -2
  12. package/dist/application/utils/index.cjs +10 -10
  13. package/dist/application/utils/index.js +10 -10
  14. package/dist/atoms/app/index.cjs +10 -10
  15. package/dist/atoms/app/index.d.cts +1 -1
  16. package/dist/atoms/app/index.d.ts +6 -6
  17. package/dist/atoms/app/index.js +10 -10
  18. package/dist/atoms/chat/index.cjs +13 -13
  19. package/dist/atoms/chat/index.d.cts +27 -27
  20. package/dist/atoms/chat/index.d.ts +31 -31
  21. package/dist/atoms/chat/index.js +13 -13
  22. package/dist/atoms/globalSearch/index.cjs +1 -1
  23. package/dist/atoms/globalSearch/index.d.cts +6 -6
  24. package/dist/atoms/globalSearch/index.d.ts +6 -6
  25. package/dist/atoms/globalSearch/index.js +1 -1
  26. package/dist/atoms/org/index.d.cts +1 -1
  27. package/dist/atoms/org/index.d.ts +15 -15
  28. package/dist/atoms/search/index.cjs +2 -2
  29. package/dist/atoms/search/index.d.cts +2 -2
  30. package/dist/atoms/search/index.d.ts +14 -14
  31. package/dist/atoms/search/index.js +2 -2
  32. package/dist/atoms/search/utils.d.cts +1 -1
  33. package/dist/{cdnContext-KMAzFHrZ.cjs → cdnContext-ClAEcKhO.cjs} +2 -2
  34. package/dist/{cdnContext-BJZSYlsP.js → cdnContext-CuZwc-PI.js} +2 -2
  35. package/dist/{chat-yICI8tzz.cjs → chat-BJL3nXR7.cjs} +6 -6
  36. package/dist/{chat-DYD6B6em.js → chat-ChCtIEwh.js} +6 -6
  37. package/dist/{chatState-BRYkF2g2.cjs → chatState-BYB77nbx.cjs} +3 -3
  38. package/dist/{chatState-DRKB9bqM.js → chatState-CzH7APPP.js} +3 -3
  39. package/dist/contexts/amplitudeContext/index.cjs +10 -10
  40. package/dist/contexts/amplitudeContext/index.js +10 -10
  41. package/dist/contexts/cdnContext/index.cjs +3 -3
  42. package/dist/contexts/cdnContext/index.js +3 -3
  43. package/dist/contexts/enviveConfigContext/index.cjs +3 -3
  44. package/dist/contexts/enviveConfigContext/index.js +3 -3
  45. package/dist/contexts/enviveCssContext/index.cjs +8 -8
  46. package/dist/contexts/enviveCssContext/index.js +8 -8
  47. package/dist/contexts/featureFlagContext/index.cjs +4 -4
  48. package/dist/contexts/featureFlagContext/index.js +4 -4
  49. package/dist/contexts/featureFlagServiceContext/index.cjs +2 -2
  50. package/dist/contexts/featureFlagServiceContext/index.js +2 -2
  51. package/dist/contexts/graphqlContext/index.cjs +4 -4
  52. package/dist/contexts/graphqlContext/index.js +4 -4
  53. package/dist/contexts/localStorageContext/index.cjs +2 -2
  54. package/dist/contexts/localStorageContext/index.js +2 -2
  55. package/dist/contexts/newOrgConfigContext/index.cjs +7 -7
  56. package/dist/contexts/newOrgConfigContext/index.js +7 -7
  57. package/dist/contexts/searchContext/index.cjs +14 -14
  58. package/dist/contexts/searchContext/index.js +14 -14
  59. package/dist/contexts/sessionStorageContext/index.cjs +1 -1
  60. package/dist/contexts/sessionStorageContext/index.js +1 -1
  61. package/dist/contexts/systemSettingsContext/index.cjs +3 -3
  62. package/dist/contexts/systemSettingsContext/index.d.cts +2 -2
  63. package/dist/contexts/systemSettingsContext/index.js +3 -3
  64. package/dist/contexts/userIdentityContext/index.cjs +10 -10
  65. package/dist/contexts/userIdentityContext/index.js +10 -10
  66. package/dist/{dist-B7BErEyV.cjs → dist-BZX_Mgfn.cjs} +1 -1
  67. package/dist/{dist-CtkINi1R.js → dist-CIM4YRqp.js} +1 -1
  68. package/dist/{enviveConfig-u50Rpz-G.cjs → enviveConfig-BwIaVAAm.cjs} +2 -2
  69. package/dist/{enviveConfig-Be2kZE7j.js → enviveConfig-CBnoutoK.js} +2 -2
  70. package/dist/{enviveConfigContext-1oiQuocd.js → enviveConfigContext-B4nejwV9.js} +2 -2
  71. package/dist/{enviveConfigContext-kQfHEGdJ.cjs → enviveConfigContext-DgewMgYS.cjs} +2 -2
  72. package/dist/events/index.cjs +1 -1
  73. package/dist/events/index.js +1 -1
  74. package/dist/{events-WOOrnUAx.js → events-BHBRLPWS.js} +1 -1
  75. package/dist/{events-CgFGtanE.cjs → events-C8LA-0Tp.cjs} +1 -1
  76. package/dist/exceptions/index.cjs +1 -1
  77. package/dist/exceptions/index.js +1 -1
  78. package/dist/{exceptions-CUGY31Ua.js → exceptions--fSXOzkB.js} +1 -1
  79. package/dist/{exceptions-BjDgLzGi.cjs → exceptions-BBXmiU8P.cjs} +1 -1
  80. package/dist/{featureFlagServiceContext-pPneufeB.cjs → featureFlagServiceContext-BkamHViU.cjs} +2 -2
  81. package/dist/{featureFlagServiceContext-CPsygiHO.js → featureFlagServiceContext-CZj3qPX7.js} +2 -2
  82. package/dist/{globalSearch-OiF96VLG.cjs → globalSearch-C94-vEVh.cjs} +1 -1
  83. package/dist/{globalSearch-B_v9qfCT.js → globalSearch-Dlbnfasm.js} +1 -1
  84. package/dist/{graphqlContext-BVFRNIdi.cjs → graphqlContext-C3HXFiHx.cjs} +3 -3
  85. package/dist/{graphqlContext-D_Wp0LEl.js → graphqlContext-Capum8x6.js} +3 -3
  86. package/dist/hooks/AmplitudeOperations/index.cjs +11 -11
  87. package/dist/hooks/AmplitudeOperations/index.js +11 -11
  88. package/dist/hooks/AppDetails/index.cjs +13 -13
  89. package/dist/hooks/AppDetails/index.js +13 -13
  90. package/dist/hooks/CdnOperations/index.cjs +3 -3
  91. package/dist/hooks/CdnOperations/index.d.ts +1 -1
  92. package/dist/hooks/CdnOperations/index.js +3 -3
  93. package/dist/hooks/ChatToggle/index.cjs +13 -13
  94. package/dist/hooks/ChatToggle/index.js +13 -13
  95. package/dist/hooks/ChatToggleAnalytics/index.cjs +12 -12
  96. package/dist/hooks/ChatToggleAnalytics/index.js +12 -12
  97. package/dist/hooks/GraphQLConfig/index.cjs +5 -5
  98. package/dist/hooks/GraphQLConfig/index.js +5 -5
  99. package/dist/hooks/IdentifyUser/index.cjs +10 -10
  100. package/dist/hooks/IdentifyUser/index.d.ts +1 -1
  101. package/dist/hooks/IdentifyUser/index.js +10 -10
  102. package/dist/hooks/ImageResolver/index.cjs +2 -2
  103. package/dist/hooks/ImageResolver/index.js +2 -2
  104. package/dist/hooks/LocalStorageOperations/index.cjs +2 -2
  105. package/dist/hooks/LocalStorageOperations/index.js +2 -2
  106. package/dist/hooks/MessageFilter/index.cjs +1 -1
  107. package/dist/hooks/MessageFilter/index.js +1 -1
  108. package/dist/hooks/NewOrgConfig/index.cjs +8 -8
  109. package/dist/hooks/NewOrgConfig/index.d.cts +2 -2
  110. package/dist/hooks/NewOrgConfig/index.d.ts +2 -2
  111. package/dist/hooks/NewOrgConfig/index.js +8 -8
  112. package/dist/hooks/Search/index.cjs +14 -14
  113. package/dist/hooks/Search/index.js +14 -14
  114. package/dist/hooks/SearchOperations/index.cjs +14 -14
  115. package/dist/hooks/SearchOperations/index.js +14 -14
  116. package/dist/hooks/SessionStorageOperations/index.cjs +1 -1
  117. package/dist/hooks/SessionStorageOperations/index.js +1 -1
  118. package/dist/hooks/ShopifyUrlOperations/index.d.cts +2 -2
  119. package/dist/hooks/ShopifyUrlOperations/index.d.ts +2 -2
  120. package/dist/hooks/SystemSettingsContext/index.cjs +3 -3
  121. package/dist/hooks/SystemSettingsContext/index.d.cts +4 -4
  122. package/dist/hooks/SystemSettingsContext/index.d.ts +3 -3
  123. package/dist/hooks/SystemSettingsContext/index.js +3 -3
  124. package/dist/hooks/TrackComponentVisibleEvent/index.cjs +11 -11
  125. package/dist/hooks/TrackComponentVisibleEvent/index.js +11 -11
  126. package/dist/hooks/UpdateAnalyticsProps/index.cjs +10 -10
  127. package/dist/hooks/UpdateAnalyticsProps/index.js +10 -10
  128. package/dist/hooks/utils.d.cts +1 -1
  129. package/dist/index-BO-ZLYtR.d.ts +1 -1
  130. package/dist/index-BVZbvpx_.d.cts +1 -1
  131. package/dist/index-CMZcE7pk.d.cts +1 -1
  132. package/dist/index-DNccxbJi.d.ts +1 -1
  133. package/dist/index-ZQMda2Iu.d.ts +1 -1
  134. package/dist/interceptors/index.cjs +1 -1
  135. package/dist/interceptors/index.js +1 -1
  136. package/dist/{localStorageContext-Bb2b_3ue.cjs → localStorageContext-CPrkpt8i.cjs} +2 -2
  137. package/dist/{localStorageContext-D2uXKahw.js → localStorageContext-p_4U0RPI.js} +2 -2
  138. package/dist/{models-DmsMlaHT.js → models-L2w8FYCa.js} +2 -2
  139. package/dist/{models-wh2gh_Qz.cjs → models-OyYkll03.cjs} +2 -2
  140. package/dist/{newOrgConfigContext-Dn9l1f9w.js → newOrgConfigContext-BuqDUkPz.js} +4 -4
  141. package/dist/{newOrgConfigContext-DkBvmY0p.cjs → newOrgConfigContext-N4CQzvlH.cjs} +4 -4
  142. package/dist/nodeSelector-Cj-Xl1LP.d.cts +1 -1
  143. package/dist/{search-D-BGpGJt.cjs → search-8bPfo07V.cjs} +2 -2
  144. package/dist/{search-jNTQGSyl.js → search-C_N_oRVZ.js} +2 -2
  145. package/dist/{searchContext-DjcqQsxp.js → searchContext-BohH5i8s.js} +5 -5
  146. package/dist/{searchContext-C75BHjlY.cjs → searchContext-DdJbpDsU.cjs} +5 -5
  147. package/dist/{sessionStorageContext-ByaTsDUC.cjs → sessionStorageContext-CH37Dkb-.cjs} +1 -1
  148. package/dist/{sessionStorageContext-DKE97oMv.js → sessionStorageContext-CqrutoVq.js} +1 -1
  149. package/dist/{systemSettingsContext-CSXsgBiG.cjs → systemSettingsContext-CYce8iqH.cjs} +2 -2
  150. package/dist/{systemSettingsContext-DTdzjE_O.js → systemSettingsContext-D9BZ9EwQ.js} +2 -2
  151. package/dist/types/index.cjs +1 -1
  152. package/dist/types/index.js +1 -1
  153. package/dist/{types-1iJ_FnQQ.cjs → types-B8HZYWV3.cjs} +1 -1
  154. package/dist/{types-D5du68Vp.js → types-y3mhxOUA.js} +1 -1
  155. package/dist/{useAppDetails-DjdYWTqz.js → useAppDetails-CSpw8teP.js} +4 -4
  156. package/dist/{useAppDetails-Cq8TbvkX.cjs → useAppDetails-DNG_-DI9.cjs} +4 -4
  157. package/dist/{useGraphQLConfig-Dy0ml9xw.cjs → useGraphQLConfig-CKtaLlQ-.cjs} +2 -2
  158. package/dist/{useGraphQLConfig-nY5CE8kj.js → useGraphQLConfig-D1REGfFB.js} +2 -2
  159. package/dist/{utils-IogJwDB9.js → utils-DGpMn2pp.js} +11 -11
  160. package/dist/{utils-DqNhRm2b.cjs → utils-DqxtxrFe.cjs} +12 -12
  161. package/package.json +2 -2
@@ -6016,4 +6016,4 @@ Object.defineProperty(exports, 'VariantTypeEnum', {
6016
6016
  return VariantTypeEnum;
6017
6017
  }
6018
6018
  });
6019
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzdC1CN0JFckV5Vi5janMiLCJuYW1lcyI6WyJleHBvcnRzIiwiQmFzZUFQSSIsImV4cG9ydHMkMSJdLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9AZW52aXZlLWFpL3R5cGVzL2Rpc3QvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8jcmVnaW9uIHJvbGxkb3duOnJ1bnRpbWVcbnZhciBfX2NyZWF0ZSA9IE9iamVjdC5jcmVhdGU7XG52YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19nZXRQcm90b09mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19jb21tb25KUyA9IChjYiwgbW9kKSA9PiBmdW5jdGlvbigpIHtcblx0cmV0dXJuIG1vZCB8fCAoMCwgY2JbX19nZXRPd25Qcm9wTmFtZXMoY2IpWzBdXSkoKG1vZCA9IHsgZXhwb3J0czoge30gfSkuZXhwb3J0cywgbW9kKSwgbW9kLmV4cG9ydHM7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcblx0aWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikgZm9yICh2YXIga2V5cyA9IF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pLCBpID0gMCwgbiA9IGtleXMubGVuZ3RoLCBrZXk7IGkgPCBuOyBpKyspIHtcblx0XHRrZXkgPSBrZXlzW2ldO1xuXHRcdGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpIF9fZGVmUHJvcCh0bywga2V5LCB7XG5cdFx0XHRnZXQ6ICgoaykgPT4gZnJvbVtrXSkuYmluZChudWxsLCBrZXkpLFxuXHRcdFx0ZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGVcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gdG87XG59O1xudmFyIF9fdG9FU00gPSAobW9kLCBpc05vZGVNb2RlLCB0YXJnZXQpID0+ICh0YXJnZXQgPSBtb2QgIT0gbnVsbCA/IF9fY3JlYXRlKF9fZ2V0UHJvdG9PZihtb2QpKSA6IHt9LCBfX2NvcHlQcm9wcyhpc05vZGVNb2RlIHx8ICFtb2QgfHwgIW1vZC5fX2VzTW9kdWxlID8gX19kZWZQcm9wKHRhcmdldCwgXCJkZWZhdWx0XCIsIHtcblx0dmFsdWU6IG1vZCxcblx0ZW51bWVyYWJsZTogdHJ1ZVxufSkgOiB0YXJnZXQsIG1vZCkpO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvYW5hbHl0aWNzL0dvb2dsZUFuYWx5dGljc0V2ZW50cy50c1xubGV0IEdvb2dsZUFuYWx5dGljc0V2ZW50cyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihHb29nbGVBbmFseXRpY3NFdmVudHMkMSkge1xuXHRHb29nbGVBbmFseXRpY3NFdmVudHMkMVtcIkFERF9UT19DQVJUX3YxXCJdID0gXCJhZGRfdG9fY2FydFwiO1xuXHRHb29nbGVBbmFseXRpY3NFdmVudHMkMVtcIkFERF9UT19DQVJUX3YyXCJdID0gXCJhZGRUb0NhcnRcIjtcblx0cmV0dXJuIEdvb2dsZUFuYWx5dGljc0V2ZW50cyQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9hbmFseXRpY3MvUGVyZk1ldHJpY3NFdmVudHMudHNcbmxldCBQZXJmTWV0cmljc0V2ZW50cyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihQZXJmTWV0cmljc0V2ZW50cyQxKSB7XG5cdFBlcmZNZXRyaWNzRXZlbnRzJDFbXCJQYWdlTG9hZE9mZnNldFwiXSA9IFwicGFnZV9sb2FkX29mZnNldF9tc1wiO1xuXHRQZXJmTWV0cmljc0V2ZW50cyQxW1wiTWFpbkJ1bmRsZUxvYWRlZFwiXSA9IFwibWFpbl9idW5kbGVfbG9hZGVkX21zXCI7XG5cdFBlcmZNZXRyaWNzRXZlbnRzJDFbXCJPcmdDb25maWdMb2FkU3RhcnRlZFwiXSA9IFwib3JnX2NvbmZpZ19sb2FkX3N0YXJ0ZWRfbXNcIjtcblx0UGVyZk1ldHJpY3NFdmVudHMkMVtcIk9yZ0NvbmZpZ0xvYWRFbmRlZFwiXSA9IFwib3JnX2NvbmZpZ19sb2FkX2VuZGVkX21zXCI7XG5cdFBlcmZNZXRyaWNzRXZlbnRzJDFbXCJGaXJzdFJlc3BvbnNlU3RhcnRlZFwiXSA9IFwiZmlyc3RfcmVzcG9uc2Vfc3RhcnRlZF9tc1wiO1xuXHRQZXJmTWV0cmljc0V2ZW50cyQxW1wiRmlyc3RSZXNwb25zZUNvbXBsZXRlZFwiXSA9IFwiZmlyc3RfcmVzcG9uc2VfY29tcGxldGVkX21zXCI7XG5cdFBlcmZNZXRyaWNzRXZlbnRzJDFbXCJGaXJzdFN1Z2dlc3Rpb25zU3RhcnRlZFwiXSA9IFwiZmlyc3Rfc3VnZ2VzdGlvbnNfc3RhcnRlZF9tc1wiO1xuXHRQZXJmTWV0cmljc0V2ZW50cyQxW1wiRmlyc3RTdWdnZXN0aW9uc0NvbXBsZXRlZFwiXSA9IFwiZmlyc3Rfc3VnZ2VzdGlvbnNfY29tcGxldGVkX21zXCI7XG5cdFBlcmZNZXRyaWNzRXZlbnRzJDFbXCJFbWJlZGRlZFdpZGdldFJlbmRlcmVkXCJdID0gXCJlbWJlZGRlZF93aWRnZXRfcmVuZGVyZWRfbXNcIjtcblx0UGVyZk1ldHJpY3NFdmVudHMkMVtcIkZsb2F0aW5nQnV0dG9uUmVuZGVyZWRcIl0gPSBcImZsb2F0aW5nX2J1dHRvbl9yZW5kZXJlZF9tc1wiO1xuXHRQZXJmTWV0cmljc0V2ZW50cyQxW1wiVG9wU3VnZ2VzdGlvbnNCYXJSZW5kZXJlZFwiXSA9IFwidG9wX3N1Z2dlc3Rpb25zX2Jhcl9yZW5kZXJlZF9tc1wiO1xuXHRQZXJmTWV0cmljc0V2ZW50cyQxW1wiQm90dG9tU3VnZ2VzdGlvbnNCYXJSZW5kZXJlZFwiXSA9IFwiYm90dG9tX3N1Z2dlc3Rpb25zX2Jhcl9yZW5kZXJlZF9tc1wiO1xuXHRQZXJmTWV0cmljc0V2ZW50cyQxW1wiU2VhcmNoUHJvbXB0UmVuZGVyZWRcIl0gPSBcInNlYXJjaF9wcm9tcHRfcmVuZGVyZWRfbXNcIjtcblx0cmV0dXJuIFBlcmZNZXRyaWNzRXZlbnRzJDE7XG59KHt9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL2FuYWx5dGljcy9TcGlmZnlFdmVudC50c1xubGV0IFNwaWZmeUV2ZW50ID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKFNwaWZmeUV2ZW50JDEpIHtcblx0U3BpZmZ5RXZlbnQkMVtcIkFNUExJVFVERV9FVkVOVFwiXSA9IFwiU1BJRkZZX0FNUExJVFVERV9FVkVOVFwiO1xuXHRTcGlmZnlFdmVudCQxW1wiQVBQX0lOSVRJQUxJWkVEXCJdID0gXCJTUElGRllfQVBQX0lOSVRJQUxJWkVEXCI7XG5cdFNwaWZmeUV2ZW50JDFbXCJDQUxMX01FUkNIQU5UX0FQUFwiXSA9IFwiU1BJRkZZX0NBTExfTUVSQ0hBTlRfQVBQXCI7XG5cdFNwaWZmeUV2ZW50JDFbXCJNT1VOVElOR19NRVJDSEFOVF9BUFBcIl0gPSBcIlNQSUZGWV9NT1VOVElOR19NRVJDSEFOVF9BUFBcIjtcblx0U3BpZmZ5RXZlbnQkMVtcIkNIQVRfRkFDVE9SWV9JTklUSUFMSVpFRFwiXSA9IFwiU1BJRkZZX0NIQVRfRkFDVE9SWV9JTklUSUFMSVpFRFwiO1xuXHRTcGlmZnlFdmVudCQxW1wiRkxPQVRJTkdfQ0hBVF9SRU5ERVJJTkdcIl0gPSBcIlNQSUZGWV9GTE9BVElOR19DSEFUX1JFTkRFUklOR1wiO1xuXHRTcGlmZnlFdmVudCQxW1wiRkxPQVRJTkdfQ0hBVF9OT1RfUkVOREVSSU5HXCJdID0gXCJTUElGRllfRkxPQVRJTkdfQ0hBVF9OT1RfUkVOREVSSU5HXCI7XG5cdFNwaWZmeUV2ZW50JDFbXCJGTE9BVElOR19DSEFUX0JVVFRPTl9SRU5ERVJJTkdcIl0gPSBcIlNQSUZGWV9GTE9BVElOR19DSEFUX0JVVFRPTl9SRU5ERVJJTkdcIjtcblx0U3BpZmZ5RXZlbnQkMVtcIlNIQURPV19ET01fQ09OVEFJTkVSX1JFQURZXCJdID0gXCJTUElGRllfU0hBRE9XX0RPTV9DT05UQUlORVJfUkVBRFlcIjtcblx0cmV0dXJuIFNwaWZmeUV2ZW50JDE7XG59KHt9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL2FuYWx5dGljcy9TcGlmZnlFdmVudE5hbWUudHNcbmxldCBTcGlmZnlFdmVudE5hbWUgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oU3BpZmZ5RXZlbnROYW1lJDEpIHtcblx0U3BpZmZ5RXZlbnROYW1lJDFbXCJXaWRnZXRPcGVuXCJdID0gXCJzcGlmZnk6d2lkZ2V0b3BlblwiO1xuXHRTcGlmZnlFdmVudE5hbWUkMVtcIldpZGdldENsb3NlXCJdID0gXCJzcGlmZnk6d2lkZ2V0Y2xvc2VcIjtcblx0cmV0dXJuIFNwaWZmeUV2ZW50TmFtZSQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9hbmFseXRpY3MvU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS50c1xubGV0IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxKSB7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIkJ1bmRsZUxvYWRlZFwiXSA9IFwiQnVuZGxlIExvYWRlZFwiO1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJDaGF0TGl2ZUFnZW50QnRuQ2xpY2tcIl0gPSBcIkNoYXQgTGl2ZSBBZ2VudCBCdG4gQ2xpY2tcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiQ2hhdEZsb2F0aW5nQnV0dG9uVmlzaWJsZVwiXSA9IFwiQ2hhdCBGbG9hdGluZyBCdXR0b24gVmlzaWJsZVwiO1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJDaGF0Q29tcG9uZW50VmlzaWJsZVwiXSA9IFwiQ2hhdCBDb21wb25lbnQgVmlzaWJsZVwiO1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJDaGF0Q29tcG9uZW50RXhwYW5kZWRcIl0gPSBcIkNoYXQgQ29tcG9uZW50IEV4cGFuZGVkXCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIkNoYXRDb21wb25lbnRDb2xsYXBzZWRcIl0gPSBcIkNoYXQgQ29tcG9uZW50IENvbGxhcHNlZFwiO1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJDaGF0VXNlck1lc3NhZ2VJbnB1dFwiXSA9IFwiQ2hhdCBVc2VyIE1lc3NhZ2UgSW5wdXRcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiQ2hhdFN1Z2dlc3Rpb25DbGlja2VkXCJdID0gXCJDaGF0IFN1Z2dlc3Rpb24gQ2xpY2tlZFwiO1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJDaGF0QXNzaXN0YW50UmVzcG9uc2VcIl0gPSBcIkNoYXQgQXNzaXN0YW50IFJlc3BvbnNlXCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIlByb2R1Y3RDYXJkQ2xpY2tlZFwiXSA9IFwiUHJvZHVjdCBDYXJkIENsaWNrZWRcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiUHJvZHVjdFJldmlld0NhcmRDbGlja2VkXCJdID0gXCJQcm9kdWN0IFJldmlldyBDYXJkIENsaWNrZWRcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiQWRkVG9DYXJ0Q2xpY2tlZFwiXSA9IFwiQWRkIHRvIENhcnQgQ2xpY2tlZFwiO1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJQcm9tcHRDYXJkQ2xpY2tlZFwiXSA9IFwiUHJvbXB0IENhcmQgQ2xpY2tlZFwiO1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJTdXBwb3J0ZWRFdmVudFwiXSA9IFwiU3VwcG9ydGVkIEV2ZW50XCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIlNlYXJjaEJhY2tUb1Jlc3BvbnNlQ2xpY2tlZFwiXSA9IFwiU2VhcmNoIEJhY2sgdG8gUmVzcG9uc2UgQ2xpY2tlZFwiO1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJQZXJmb3JtYW5jZU1ldHJpY3NcIl0gPSBcIlBlcmZvcm1hbmNlIE1ldHJpY3NcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiU2VhcmNoQmFyQ2xpY2tlZFwiXSA9IFwiU2VhcmNoIEJhciBDbGlja2VkXCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIk9yZGVyTG9va3VwU3RhcnRlZFwiXSA9IFwiT3JkZXIgTG9va3VwIFN0YXJ0ZWRcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiT3JkZXJMb29rdXBGb3JtU3VibWl0dGVkXCJdID0gXCJPcmRlciBMb29rdXAgRm9ybSBTdWJtaXR0ZWRcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiU2VhcmNoQ29tcG9uZW50VmlzaWJsZVwiXSA9IFwiU2VhcmNoIENvbXBvbmVudCBWaXNpYmxlXCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIlNlYXJjaFplcm9TdGF0ZVN1Z2dlc3Rpb25DbGlja2VkXCJdID0gXCJTZWFyY2ggWmVybyBTdGF0ZSBTdWdnZXN0aW9uIENsaWNrZWRcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiU2VhcmNoSW5wdXRTdGFydGVkXCJdID0gXCJTZWFyY2ggSW5wdXQgU3RhcnRlZFwiO1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJTZWFyY2hRdWVyeVN1Ym1pdHRlZFwiXSA9IFwiU2VhcmNoIFF1ZXJ5IFN1Ym1pdHRlZFwiO1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJTZWFyY2hSZXN1bHRzVmlld2VkXCJdID0gXCJTZWFyY2ggUmVzdWx0cyBWaWV3ZWRcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiU2VhcmNoVGltZVRvRmlyc3RDbGlja1wiXSA9IFwiU2VhcmNoIFRpbWUgdG8gRmlyc3QgQ2xpY2tcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiU2VhcmNoWmVyb1Jlc3VsdHNSYXRlXCJdID0gXCJTZWFyY2ggWmVybyBSZXN1bHRzIFJhdGVcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiU2VhcmNoRmlsdGVyQ2xpY2tlZFwiXSA9IFwiU2VhcmNoIEZpbHRlciBDbGlja2VkXCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIlNlYXJjaFNvcnRDbGlja2VkXCJdID0gXCJTZWFyY2ggU29ydCBDbGlja2VkXCI7XG5cdHJldHVybiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDE7XG59KHt9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL2NoYXQvQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24udHNcbmxldCBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxKSB7XG5cdENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uJDFbXCJJTl9DSEFUXCJdID0gXCJpbl9jaGF0XCI7XG5cdENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uJDFbXCJDSEFUX1BSRVZJRVdcIl0gPSBcImNoYXRfcHJldmlld1wiO1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiRkxPQVRJTkdfQlVUVE9OXCJdID0gXCJmbG9hdGluZ19idXR0b25cIjtcblx0Q2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24kMVtcIkhFTFBfTUVfQ0hPT1NFXCJdID0gXCJoZWxwX21lX2Nob29zZVwiO1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiUExQX0lNQUdFX0JBTk5FUlwiXSA9IFwicGxwX2ltYWdlX2Jhbm5lclwiO1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiVE9QX1JFVklFV1NfU05JUFBFVFwiXSA9IFwidG9wX3Jldmlld3Nfc25pcHBldFwiO1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiQk9UVE9NX1JFVklFV1NfU05JUFBFVFwiXSA9IFwiYm90dG9tX3Jldmlld3Nfc25pcHBldFwiO1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiQkxPQ0tfQkFDS19CVVRUT05cIl0gPSBcImJsb2NrX2JhY2tfYnV0dG9uXCI7XG5cdENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uJDFbXCJTV0lUQ0hfVE9fQUdFTlRcIl0gPSBcInN3aXRjaF90b19hZ2VudFwiO1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiQ09OVkVSU0FUSU9OQUxfU0VBUkNIXCJdID0gXCJjb252ZXJzYXRpb25hbF9zZWFyY2hcIjtcblx0Q2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24kMVtcIkdMT0JBTF9TRUFSQ0hfRU5UUllQT0lOVFwiXSA9IFwiZ2xvYmFsX3NlYXJjaF9lbnRyeXBvaW50XCI7XG5cdENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uJDFbXCJTRUFSQ0hfTkFWX0VOVFJZUE9JTlRcIl0gPSBcInNlYXJjaF9uYXZfZW50cnlwb2ludFwiO1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiU0VBUkNIX1BST01QVFwiXSA9IFwic2VhcmNoX3Byb21wdFwiO1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiU0VBUkNIX1BST01QVF9CVVRUT05cIl0gPSBcInNlYXJjaF9wcm9tcHRfYnV0dG9uXCI7XG5cdENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uJDFbXCJQUk9EVUNUX0dSSURcIl0gPSBcInByb2R1Y3RfZ3JpZFwiO1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiVU5TUEVDSUZJRURcIl0gPSBcInVuc3BlY2lmaWVkXCI7XG5cdENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uJDFbXCJGSUxURVJfTU9EQUxcIl0gPSBcImZpbHRlcl9tb2RhbFwiO1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiUFJPTVBUX0NBUkRcIl0gPSBcInByb21wdF9jYXJkXCI7XG5cdENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uJDFbXCJXSU5ET1dfQVBJX0NBTExcIl0gPSBcIndpbmRvd19hcGlfY2FsbFwiO1xuXHRyZXR1cm4gQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24kMTtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvY2hhdC9DaGF0U3RhdGUudHNcbmxldCBDaGF0U3RhdGUgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oQ2hhdFN0YXRlJDEpIHtcblx0Q2hhdFN0YXRlJDFbXCJJTklUSUFMXCJdID0gXCJpbml0aWFsXCI7XG5cdENoYXRTdGF0ZSQxW1wiRk9STVwiXSA9IFwiZm9ybVwiO1xuXHRDaGF0U3RhdGUkMVtcIkNIQVRcIl0gPSBcImNoYXRcIjtcblx0cmV0dXJuIENoYXRTdGF0ZSQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9jaGF0L01lc3NhZ2UudHNcbmxldCBNZXNzYWdlUm9sZSA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihNZXNzYWdlUm9sZSQxKSB7XG5cdE1lc3NhZ2VSb2xlJDFbXCJVc2VyXCJdID0gXCJ1c2VyXCI7XG5cdE1lc3NhZ2VSb2xlJDFbXCJBc3Npc3RhbnRcIl0gPSBcImFzc2lzdGFudFwiO1xuXHRyZXR1cm4gTWVzc2FnZVJvbGUkMTtcbn0oe30pO1xubGV0IE1lc3NhZ2VUeXBlID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKE1lc3NhZ2VUeXBlJDEpIHtcblx0TWVzc2FnZVR5cGUkMVtcIlRleHRcIl0gPSBcInRleHRcIjtcblx0TWVzc2FnZVR5cGUkMVtcIlN1Z2dlc3Rpb25DbGlja2VkXCJdID0gXCJzdWdnZXN0aW9uX2NsaWNrZWRcIjtcblx0TWVzc2FnZVR5cGUkMVtcIlByb2R1Y3RcIl0gPSBcInByb2R1Y3RcIjtcblx0TWVzc2FnZVR5cGUkMVtcIlByb2R1Y3RTZWFyY2hcIl0gPSBcInByb2R1Y3Rfc2VhcmNoXCI7XG5cdE1lc3NhZ2VUeXBlJDFbXCJSZXZpZXdcIl0gPSBcInJldmlld1wiO1xuXHRNZXNzYWdlVHlwZSQxW1wiUXVlcnlUeXBlZFwiXSA9IFwicXVlcnlfdHlwZWRcIjtcblx0TWVzc2FnZVR5cGUkMVtcIlNlcGFyYXRvclwiXSA9IFwic2VwYXJhdG9yXCI7XG5cdE1lc3NhZ2VUeXBlJDFbXCJQYWdlXCJdID0gXCJwYWdlXCI7XG5cdE1lc3NhZ2VUeXBlJDFbXCJTZWFyY2hcIl0gPSBcInNlYXJjaFwiO1xuXHRNZXNzYWdlVHlwZSQxW1wiQXR0YWNobWVudFwiXSA9IFwiYXR0YWNobWVudFwiO1xuXHRNZXNzYWdlVHlwZSQxW1wiQ1hBZ2VudFJlc3BvbnNlXCJdID0gXCJjeF9hZ2VudF9yZXNwb25zZVwiO1xuXHRNZXNzYWdlVHlwZSQxW1wiRm9ybVwiXSA9IFwiZm9ybVwiO1xuXHRNZXNzYWdlVHlwZSQxW1wiT3JkZXJcIl0gPSBcIm9yZGVyXCI7XG5cdE1lc3NhZ2VUeXBlJDFbXCJQcm9kdWN0U2VhcmNoRmlsdGVyXCJdID0gXCJwcm9kdWN0X3NlYXJjaF9maWx0ZXJcIjtcblx0cmV0dXJuIE1lc3NhZ2VUeXBlJDE7XG59KHt9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL2NoYXQvU3VnZ2VzdGlvbkJhckxvY2F0aW9uRm9yTWV0cmljcy50c1xubGV0IFN1Z2dlc3Rpb25CYXJMb2NhdGlvbkZvck1ldHJpY3MgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oU3VnZ2VzdGlvbkJhckxvY2F0aW9uRm9yTWV0cmljcyQxKSB7XG5cdFN1Z2dlc3Rpb25CYXJMb2NhdGlvbkZvck1ldHJpY3MkMVtcIlNVR0dFU1RJT05fQkFSX1RPUFwiXSA9IFwidG9wXCI7XG5cdFN1Z2dlc3Rpb25CYXJMb2NhdGlvbkZvck1ldHJpY3MkMVtcIlNVR0dFU1RJT05fQkFSX0JPVFRPTVwiXSA9IFwiYm90dG9tXCI7XG5cdHJldHVybiBTdWdnZXN0aW9uQmFyTG9jYXRpb25Gb3JNZXRyaWNzJDE7XG59KHt9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL2NvbmZpZ3MvQ29sb3JzQ29uZmlnLnRzXG5sZXQgQ29sb3JOYW1lcyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihDb2xvck5hbWVzJDEpIHtcblx0Q29sb3JOYW1lcyQxW1wiVGV4dFByaW1hcnlcIl0gPSBcInRleHQtcHJpbWFyeVwiO1xuXHRDb2xvck5hbWVzJDFbXCJUZXh0U2Vjb25kYXJ5XCJdID0gXCJ0ZXh0LXNlY29uZGFyeVwiO1xuXHRDb2xvck5hbWVzJDFbXCJUZXh0QWNjZW50XCJdID0gXCJ0ZXh0LWFjY2VudFwiO1xuXHRDb2xvck5hbWVzJDFbXCJUZXh0TGlua1wiXSA9IFwidGV4dC1saW5rXCI7XG5cdENvbG9yTmFtZXMkMVtcIlRleHRMaWdodFwiXSA9IFwidGV4dC1saWdodFwiO1xuXHRDb2xvck5hbWVzJDFbXCJCYWNrZ3JvdW5kUHJpbWFyeVwiXSA9IFwiYmFja2dyb3VuZC1wcmltYXJ5XCI7XG5cdENvbG9yTmFtZXMkMVtcIkJhY2tncm91bmRTZWNvbmRhcnlcIl0gPSBcImJhY2tncm91bmQtc2Vjb25kYXJ5XCI7XG5cdENvbG9yTmFtZXMkMVtcIkJhY2tncm91bmRTZWNvbmRhcnlEYXJrXCJdID0gXCJiYWNrZ3JvdW5kLXNlY29uZGFyeS1kYXJrXCI7XG5cdENvbG9yTmFtZXMkMVtcIkJhY2tncm91bmRUZXJ0aWFyeVwiXSA9IFwiYmFja2dyb3VuZC10ZXJ0aWFyeVwiO1xuXHRDb2xvck5hbWVzJDFbXCJCYWNrZ3JvdW5kRGFya1wiXSA9IFwiYmFja2dyb3VuZC1kYXJrXCI7XG5cdENvbG9yTmFtZXMkMVtcIkJhY2tncm91bmRMaWdodFwiXSA9IFwiYmFja2dyb3VuZC1saWdodFwiO1xuXHRDb2xvck5hbWVzJDFbXCJCYWNrZ3JvdW5kU2F0dXJhdGVkXCJdID0gXCJiYWNrZ3JvdW5kLXNhdHVyYXRlZFwiO1xuXHRDb2xvck5hbWVzJDFbXCJCb3JkZXJMaWdodFwiXSA9IFwiYm9yZGVyLWxpZ2h0XCI7XG5cdENvbG9yTmFtZXMkMVtcIkJvcmRlck1lZGl1bVwiXSA9IFwiYm9yZGVyLW1lZGl1bVwiO1xuXHRDb2xvck5hbWVzJDFbXCJCb3JkZXJEYXJrXCJdID0gXCJib3JkZXItZGFya1wiO1xuXHRDb2xvck5hbWVzJDFbXCJCb3JkZXJPdXRsaW5lXCJdID0gXCJib3JkZXItb3V0bGluZVwiO1xuXHRDb2xvck5hbWVzJDFbXCJBY2NlbnRQcmltYXJ5XCJdID0gXCJhY2NlbnQtcHJpbWFyeVwiO1xuXHRDb2xvck5hbWVzJDFbXCJBY2NlbnRTZWNvbmRhcnlcIl0gPSBcImFjY2VudC1zZWNvbmRhcnlcIjtcblx0cmV0dXJuIENvbG9yTmFtZXMkMTtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvY29yZS9DdXN0b21lclNlcnZpY2UudHNcbmxldCBDdXN0b21lclNlcnZpY2VUeXBlID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKEN1c3RvbWVyU2VydmljZVR5cGUkMSkge1xuXHRDdXN0b21lclNlcnZpY2VUeXBlJDFbXCJzaG9waWZ5XCJdID0gXCJzaG9waWZ5XCI7XG5cdEN1c3RvbWVyU2VydmljZVR5cGUkMVtcImdvcmdpYXNcIl0gPSBcImdvcmdpYXNcIjtcblx0Q3VzdG9tZXJTZXJ2aWNlVHlwZSQxW1wia3VzdG9tZXJcIl0gPSBcImt1c3RvbWVyXCI7XG5cdEN1c3RvbWVyU2VydmljZVR5cGUkMVtcImdyb292ZVwiXSA9IFwiZ3Jvb3ZlXCI7XG5cdEN1c3RvbWVyU2VydmljZVR5cGUkMVtcInRpZGlvXCJdID0gXCJ0aWRpb1wiO1xuXHRDdXN0b21lclNlcnZpY2VUeXBlJDFbXCJ6b3dpZVwiXSA9IFwiem93aWVcIjtcblx0Q3VzdG9tZXJTZXJ2aWNlVHlwZSQxW1wicmVkb1wiXSA9IFwicmVkb1wiO1xuXHRDdXN0b21lclNlcnZpY2VUeXBlJDFbXCJnbGFkbHlcIl0gPSBcImdsYWRseVwiO1xuXHRDdXN0b21lclNlcnZpY2VUeXBlJDFbXCJyaWNocGFuZWxcIl0gPSBcInJpY2hwYW5lbFwiO1xuXHRDdXN0b21lclNlcnZpY2VUeXBlJDFbXCJ6ZW5kZXNrXCJdID0gXCJ6ZW5kZXNrXCI7XG5cdEN1c3RvbWVyU2VydmljZVR5cGUkMVtcInVuc3VwcG9ydGVkXCJdID0gXCJ1bnN1cHBvcnRlZFwiO1xuXHRyZXR1cm4gQ3VzdG9tZXJTZXJ2aWNlVHlwZSQxO1xufSh7fSk7XG5sZXQgQ3VzdG9tZXJTZXJ2aWNlSW50ZWdyYXRpb25Nb2RlID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKEN1c3RvbWVyU2VydmljZUludGVncmF0aW9uTW9kZSQxKSB7XG5cdEN1c3RvbWVyU2VydmljZUludGVncmF0aW9uTW9kZSQxW1wibm9uZVwiXSA9IFwibm9uZVwiO1xuXHRDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbk1vZGUkMVtcInNpbXBsZVwiXSA9IFwic2ltcGxlXCI7XG5cdEN1c3RvbWVyU2VydmljZUludGVncmF0aW9uTW9kZSQxW1wiZnVsbFwiXSA9IFwiZnVsbFwiO1xuXHRyZXR1cm4gQ3VzdG9tZXJTZXJ2aWNlSW50ZWdyYXRpb25Nb2RlJDE7XG59KHt9KTtcbmxldCBDdXN0b21lclNlcnZpY2VPdmVycmlkZXMgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oQ3VzdG9tZXJTZXJ2aWNlT3ZlcnJpZGVzJDEpIHtcblx0Q3VzdG9tZXJTZXJ2aWNlT3ZlcnJpZGVzJDFbXCJMRUdBTF9NRVNTQUdFXCJdID0gXCJzcGlmZnktY3VzdG9tZXItc2VydmljZS1sZWdhbC1tZXNzYWdlXCI7XG5cdEN1c3RvbWVyU2VydmljZU92ZXJyaWRlcyQxW1wiREFSS19CVVRUT05fQ09OVEFJTkVSXCJdID0gXCJzcGlmZnktY3VzdG9tZXItc2VydmljZS1kYXJrLWJ1dHRvbi1jb250YWluZXJcIjtcblx0Q3VzdG9tZXJTZXJ2aWNlT3ZlcnJpZGVzJDFbXCJEQVJLX0JVVFRPTlwiXSA9IFwic3BpZmZ5LWN1c3RvbWVyLXNlcnZpY2UtZGFyay1idXR0b25cIjtcblx0Q3VzdG9tZXJTZXJ2aWNlT3ZlcnJpZGVzJDFbXCJEQVJLX0JVVFRPTl9IT1ZFUl9URVhUXCJdID0gXCJzcGlmZnktY3VzdG9tZXItc2VydmljZS1kYXJrLWJ1dHRvbi1ob3Zlci10ZXh0XCI7XG5cdEN1c3RvbWVyU2VydmljZU92ZXJyaWRlcyQxW1wiREFSS19CVVRUT05fVEVYVFwiXSA9IFwic3BpZmZ5LWN1c3RvbWVyLXNlcnZpY2UtZGFyay1idXR0b24tdGV4dFwiO1xuXHRDdXN0b21lclNlcnZpY2VPdmVycmlkZXMkMVtcIkZPUk1fRklFTERcIl0gPSBcInNwaWZmeS1jdXN0b21lci1zZXJ2aWNlLWZvcm0tZmllbGRcIjtcblx0Q3VzdG9tZXJTZXJ2aWNlT3ZlcnJpZGVzJDFbXCJBSV9OQU1FXCJdID0gXCJzcGlmZnktY3VzdG9tZXItc2VydmljZS1haS1uYW1lXCI7XG5cdEN1c3RvbWVyU2VydmljZU92ZXJyaWRlcyQxW1wiV0FJVElOR19NRVNTQUdFXCJdID0gXCJzcGlmZnktY3VzdG9tZXItc2VydmljZS13YWl0aW5nLW1lc3NhZ2VcIjtcblx0Q3VzdG9tZXJTZXJ2aWNlT3ZlcnJpZGVzJDFbXCJXQUlUSU5HX01FU1NBR0VfSUNPTlwiXSA9IFwic3BpZmZ5LWN1c3RvbWVyLXNlcnZpY2Utd2FpdGluZy1tZXNzYWdlLWljb25cIjtcblx0cmV0dXJuIEN1c3RvbWVyU2VydmljZU92ZXJyaWRlcyQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9jb3JlL0RvbUluc2VydGlvbi50c1xubGV0IERPTUluc2VydGlvblR5cGUgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oRE9NSW5zZXJ0aW9uVHlwZSQxKSB7XG5cdERPTUluc2VydGlvblR5cGUkMVtcIkFGVEVSXCJdID0gXCJhZnRlclwiO1xuXHRET01JbnNlcnRpb25UeXBlJDFbXCJCRUZPUkVcIl0gPSBcImJlZm9yZVwiO1xuXHRET01JbnNlcnRpb25UeXBlJDFbXCJBREpBQ0VOVF9BRlRFUl9CRUdJTlwiXSA9IFwiYWRqYWNlbnQtYWZ0ZXItYmVnaW5cIjtcblx0RE9NSW5zZXJ0aW9uVHlwZSQxW1wiQURKQUNFTlRfQkVGT1JFX0JFR0lOXCJdID0gXCJhZGphY2VudC1iZWZvcmUtYmVnaW5cIjtcblx0RE9NSW5zZXJ0aW9uVHlwZSQxW1wiQURKQUNFTlRfQUZURVJfRU5EXCJdID0gXCJhZGphY2VudC1hZnRlci1lbmRcIjtcblx0RE9NSW5zZXJ0aW9uVHlwZSQxW1wiQURKQUNFTlRfQkVGT1JFX0VORFwiXSA9IFwiYWRqYWNlbnQtYmVmb3JlLWVuZFwiO1xuXHRET01JbnNlcnRpb25UeXBlJDFbXCJBUFBFTkRfQ0hJTERcIl0gPSBcImFwcGVuZC1jaGlsZFwiO1xuXHRET01JbnNlcnRpb25UeXBlJDFbXCJOT05FXCJdID0gXCJub25lXCI7XG5cdHJldHVybiBET01JbnNlcnRpb25UeXBlJDE7XG59KHt9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL2NvcmUvRmVhdHVyZUdhdGVzLnRzXG5sZXQgRmVhdHVyZUdhdGVzID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKEZlYXR1cmVHYXRlcyQxKSB7XG5cdEZlYXR1cmVHYXRlcyQxW1wiSXNDbGllbnRTZXNzaW9uRW5hYmxlZFwiXSA9IFwiaXNfY2xpZW50X3Nlc3Npb25fZW5hYmxlZFwiO1xuXHRGZWF0dXJlR2F0ZXMkMVtcIklzTmV3RmVhdHVyZUVuYWJsZWRcIl0gPSBcImlzX25ld19mZWF0dXJlX2VuYWJsZWRcIjtcblx0RmVhdHVyZUdhdGVzJDFbXCJJc0ZpbmVUdW5lZE1vZGVsOGJcIl0gPSBcImlzX2ZpbmVfdHVuZWRfbW9kZWxfOGJcIjtcblx0RmVhdHVyZUdhdGVzJDFbXCJJc0ltYWdlQmFubmVyRW5hYmxlZFwiXSA9IFwiaXNfaW1hZ2VfYmFubmVyX2VuYWJsZWRcIjtcblx0RmVhdHVyZUdhdGVzJDFbXCJJc09yZGVyTG9va3VwRW5hYmxlZFwiXSA9IFwiaXNfb3JkZXJfbG9va3VwX2VuYWJsZWRcIjtcblx0RmVhdHVyZUdhdGVzJDFbXCJJc1N1bW1hcml6ZVJldmlld3NFbmFibGVkXCJdID0gXCJpc19zdW1tYXJpemVfcmV2aWV3c19lbmFibGVkXCI7XG5cdEZlYXR1cmVHYXRlcyQxW1wiSXNHbG9iYWxTZWFyY2hFbmFibGVkXCJdID0gXCJpc19nbG9iYWxfc2VhcmNoX2VuYWJsZWRcIjtcblx0RmVhdHVyZUdhdGVzJDFbXCJJc0ltYWdlUHJvbXB0RW5hYmxlZFwiXSA9IFwiaXNfaW1hZ2VfcHJvbXB0X2VuYWJsZWRcIjtcblx0RmVhdHVyZUdhdGVzJDFbXCJJc1dhdGVybWFya0VuYWJsZWRcIl0gPSBcImlzX3dhdGVybWFya19lbmFibGVkXCI7XG5cdEZlYXR1cmVHYXRlcyQxW1wiSXNJbmZlcmVuY2VSZWdpb24wXCJdID0gXCJpc19pbmZlcmVuY2VfcmVnaW9uXzBcIjtcblx0RmVhdHVyZUdhdGVzJDFbXCJJc0NoYXRWYXJpYW50RW5hYmxlZFwiXSA9IFwiaXNfY2hhdF92YXJpYW50X2VuYWJsZWRcIjtcblx0RmVhdHVyZUdhdGVzJDFbXCJJc0NoYXRWYXJpYW50QUVuYWJsZWRcIl0gPSBcImlzX2NoYXRfdmFyaWFudF9hX2VuYWJsZWRcIjtcblx0RmVhdHVyZUdhdGVzJDFbXCJJc0NoYXRWYXJpYW50QkVuYWJsZWRcIl0gPSBcImlzX2NoYXRfdmFyaWFudF9iX2VuYWJsZWRcIjtcblx0RmVhdHVyZUdhdGVzJDFbXCJJc1VzZXJRdWVyeUFsd2F5c0VuYWJsZWRcIl0gPSBcImlzX3VzZXJfcXVlcnlfYWx3YXlzX2VuYWJsZWRcIjtcblx0RmVhdHVyZUdhdGVzJDFbXCJJc1NlYXJjaEF1dG9jb21wbGV0ZUVuYWJsZWRcIl0gPSBcImlzX3NlYXJjaF9hdXRvY29tcGxldGVfZW5hYmxlZFwiO1xuXHRGZWF0dXJlR2F0ZXMkMVtcIklzRW1wdHlEaXZQTFBFbmFibGVkXCJdID0gXCJpc19lbXB0eV9kaXZfcGxwX2VuYWJsZWRcIjtcblx0RmVhdHVyZUdhdGVzJDFbXCJJc1JlY29tbWVuZGVkUHJvZHVjdHNFbmFibGVkXCJdID0gXCJpc19yZWNvbW1lbmRlZF9wcm9kdWN0c19lbmFibGVkXCI7XG5cdEZlYXR1cmVHYXRlcyQxW1wiSXNDaGF0U2Nyb2xsUGF1c2VkXCJdID0gXCJpc19jaGF0X3Njcm9sbF9wYXVzZWRcIjtcblx0cmV0dXJuIEZlYXR1cmVHYXRlcyQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9jb3JlL0dyaWRJbnNlcnRpb24udHNcbmxldCBHcmlkSW5zZXJ0aW9uVHlwZSA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihHcmlkSW5zZXJ0aW9uVHlwZSQxKSB7XG5cdEdyaWRJbnNlcnRpb25UeXBlJDFbXCJGSVhFRF8xXCJdID0gXCJmaXhlZC0xXCI7XG5cdEdyaWRJbnNlcnRpb25UeXBlJDFbXCJGSVhFRF8yXCJdID0gXCJmaXhlZC0yXCI7XG5cdEdyaWRJbnNlcnRpb25UeXBlJDFbXCJGSVhFRF8zXCJdID0gXCJmaXhlZC0zXCI7XG5cdEdyaWRJbnNlcnRpb25UeXBlJDFbXCJGSVhFRF80XCJdID0gXCJmaXhlZC00XCI7XG5cdEdyaWRJbnNlcnRpb25UeXBlJDFbXCJGSVhFRF81XCJdID0gXCJmaXhlZC01XCI7XG5cdEdyaWRJbnNlcnRpb25UeXBlJDFbXCJGSVhFRF82XCJdID0gXCJmaXhlZC02XCI7XG5cdEdyaWRJbnNlcnRpb25UeXBlJDFbXCJGSVhFRF83XCJdID0gXCJmaXhlZC03XCI7XG5cdEdyaWRJbnNlcnRpb25UeXBlJDFbXCJGSVhFRF84XCJdID0gXCJmaXhlZC04XCI7XG5cdEdyaWRJbnNlcnRpb25UeXBlJDFbXCJGSVhFRF85XCJdID0gXCJmaXhlZC05XCI7XG5cdEdyaWRJbnNlcnRpb25UeXBlJDFbXCJGSVhFRF8xMlwiXSA9IFwiZml4ZWQtMTJcIjtcblx0R3JpZEluc2VydGlvblR5cGUkMVtcIkZJWEVEXzEzXCJdID0gXCJmaXhlZC0xM1wiO1xuXHRHcmlkSW5zZXJ0aW9uVHlwZSQxW1wiUk9XXzFcIl0gPSBcInJvdy0xXCI7XG5cdEdyaWRJbnNlcnRpb25UeXBlJDFbXCJST1dfMlwiXSA9IFwicm93LTJcIjtcblx0R3JpZEluc2VydGlvblR5cGUkMVtcIlJPV18zXCJdID0gXCJyb3ctM1wiO1xuXHRHcmlkSW5zZXJ0aW9uVHlwZSQxW1wiUk9XXzRcIl0gPSBcInJvdy00XCI7XG5cdHJldHVybiBHcmlkSW5zZXJ0aW9uVHlwZSQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9jb3JlL0xvY2FsU3RvcmFnZUtleXMudHNcbmxldCBMb2NhbFN0b3JhZ2VLZXlzID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKExvY2FsU3RvcmFnZUtleXMkMSkge1xuXHRMb2NhbFN0b3JhZ2VLZXlzJDFbXCJDaGF0SWRcIl0gPSBcInYxLXNwaWZmeS1jaGF0LXNlc3Npb24taWRcIjtcblx0TG9jYWxTdG9yYWdlS2V5cyQxW1wiU3BpZmZ5T25PdmVycmlkZVwiXSA9IFwic3BpZmZ5X29uXCI7XG5cdExvY2FsU3RvcmFnZUtleXMkMVtcIkVudml2ZU9uT3ZlcnJpZGVcIl0gPSBcImVudml2ZV9vblwiO1xuXHRyZXR1cm4gTG9jYWxTdG9yYWdlS2V5cyQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9jb3JlL1BhZ2VWYXJpYW50VGVzdC50c1xubGV0IFBhZ2VWYXJpYW50VGVzdFR5cGUgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oUGFnZVZhcmlhbnRUZXN0VHlwZSQxKSB7XG5cdFBhZ2VWYXJpYW50VGVzdFR5cGUkMVtcIlNob3BpZnlQTFBcIl0gPSBcIlNob3BpZnlQTFBcIjtcblx0UGFnZVZhcmlhbnRUZXN0VHlwZSQxW1wiU2hvcGlmeVBEUFwiXSA9IFwiU2hvcGlmeVBEUFwiO1xuXHRQYWdlVmFyaWFudFRlc3RUeXBlJDFbXCJQYWdlQ2F0ZWdvcnlcIl0gPSBcIlBhZ2VDYXRlZ29yeVwiO1xuXHRQYWdlVmFyaWFudFRlc3RUeXBlJDFbXCJDYXRhbG9nQ2F0ZWdvcnlcIl0gPSBcIkNhdGFsb2dDYXRlZ29yeVwiO1xuXHRQYWdlVmFyaWFudFRlc3RUeXBlJDFbXCJUb3BDYXRhbG9nQ2F0ZWdvcnlcIl0gPSBcIlRvcENhdGFsb2dDYXRlZ29yeVwiO1xuXHRQYWdlVmFyaWFudFRlc3RUeXBlJDFbXCJIYXNSZXZpZXdzXCJdID0gXCJIYXNSZXZpZXdzXCI7XG5cdFBhZ2VWYXJpYW50VGVzdFR5cGUkMVtcIkluQ29sbGVjdGlvblwiXSA9IFwiSW5Db2xsZWN0aW9uXCI7XG5cdFBhZ2VWYXJpYW50VGVzdFR5cGUkMVtcIkhhc01lcmNoYW50VGFnXCJdID0gXCJIYXNNZXJjaGFudFRhZ1wiO1xuXHRQYWdlVmFyaWFudFRlc3RUeXBlJDFbXCJGZWF0dXJlR2F0ZVwiXSA9IFwiRmVhdHVyZUdhdGVcIjtcblx0UGFnZVZhcmlhbnRUZXN0VHlwZSQxW1wiUGxwSWRcIl0gPSBcIlBscElkXCI7XG5cdFBhZ2VWYXJpYW50VGVzdFR5cGUkMVtcIlF1ZXJ5UGFyYW1cIl0gPSBcIlF1ZXJ5UGFyYW1cIjtcblx0UGFnZVZhcmlhbnRUZXN0VHlwZSQxW1wiUHJvZHVjdElkXCJdID0gXCJQcm9kdWN0SWRcIjtcblx0UGFnZVZhcmlhbnRUZXN0VHlwZSQxW1wiVXNlckhhc0ludGVyYWN0ZWRcIl0gPSBcIlVzZXJIYXNJbnRlcmFjdGVkXCI7XG5cdFBhZ2VWYXJpYW50VGVzdFR5cGUkMVtcIlVzZXJIYXNOb3RJbnRlcmFjdGVkXCJdID0gXCJVc2VySGFzTm90SW50ZXJhY3RlZFwiO1xuXHRQYWdlVmFyaWFudFRlc3RUeXBlJDFbXCJpc0xvYWRpbmdcIl0gPSBcImlzTG9hZGluZ1wiO1xuXHRQYWdlVmFyaWFudFRlc3RUeXBlJDFbXCJpc1Byb2R1Y3RDb21wYXJpc29uXCJdID0gXCJpc1Byb2R1Y3RDb21wYXJpc29uXCI7XG5cdFBhZ2VWYXJpYW50VGVzdFR5cGUkMVtcIkZhbGxiYWNrXCJdID0gXCJGYWxsYmFja1wiO1xuXHRQYWdlVmFyaWFudFRlc3RUeXBlJDFbXCJVcmxSZXNvbHZlclwiXSA9IFwiVXJsUmVzb2x2ZXJcIjtcblx0UGFnZVZhcmlhbnRUZXN0VHlwZSQxW1wiTnVsbFwiXSA9IFwibnVsbFwiO1xuXHRyZXR1cm4gUGFnZVZhcmlhbnRUZXN0VHlwZSQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9jb3JlL1BhZ2VWaXNpdENhdGVnb3J5LnRzXG5sZXQgUGFnZVZpc2l0Q2F0ZWdvcnkgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oUGFnZVZpc2l0Q2F0ZWdvcnkkMikge1xuXHRQYWdlVmlzaXRDYXRlZ29yeSQyW1wiUHJvZHVjdFwiXSA9IFwicHJvZHVjdFwiO1xuXHRQYWdlVmlzaXRDYXRlZ29yeSQyW1wiU2VhcmNoXCJdID0gXCJzZWFyY2hcIjtcblx0UGFnZVZpc2l0Q2F0ZWdvcnkkMltcIkludGVybmFsXCJdID0gXCJpbnRlcm5hbFwiO1xuXHRQYWdlVmlzaXRDYXRlZ29yeSQyW1wiRXh0ZXJuYWxcIl0gPSBcImV4dGVybmFsXCI7XG5cdHJldHVybiBQYWdlVmlzaXRDYXRlZ29yeSQyO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9vcmdhbml6YXRpb24vT3JnU2hvcnROYW1lLnRzXG5sZXQgT3JnU2hvcnROYW1lID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKE9yZ1Nob3J0TmFtZSQxKSB7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiQ290ZXJpZVwiXSA9IFwiY290ZXJpZVwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIkZvckxvdmVBbmRMZW1vbnNcIl0gPSBcImZvci1sb3ZlLWFuZC1sZW1vbnNcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJHcmVlbnBhblwiXSA9IFwiZ3JlZW5wYW5cIjtcblx0T3JnU2hvcnROYW1lJDFbXCJKb3JkYW5DcmFpZ1wiXSA9IFwiam9yZGFuLWNyYWlnXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiTGFycnlBbmRTZXJnZXNcIl0gPSBcImxhcnJ5X2FuZF9zZXJnZXNcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJMZWFwc0FuZFJlYm91bmRzXCJdID0gXCJsZWFwcy1hbmQtcmVib3VuZHNcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJNYW50cmFCcmFuZFwiXSA9IFwibWFudHJhLWJyYW5kXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiU3BhbnhcIl0gPSBcInNwYW54XCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiU3BhbnhTdGFnaW5nXCJdID0gXCJzdGFnaW5nLXNwYW54XCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiU3VwZXJnb29wXCJdID0gXCJzdXBlcmdvb3BcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJVbmlxdWVWaW50YWdlXCJdID0gXCJ1bmlxdWUtdmludGFnZVwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIkphY2tBcmNoZXJcIl0gPSBcImphY2stYXJjaGVyXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiU2tpblBlcmZlY3Rpb25cIl0gPSBcInNraW4tcGVyZmVjdGlvblwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIkxvb2tPcHRpY1wiXSA9IFwibG9vay1vcHRpY1wiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIkZpdmVDYmRcIl0gPSBcImZpdmUtY2JkXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiU25hcFN1cHBsZW1lbnRzXCJdID0gXCJzbmFwLXN1cHBsZW1lbnRzXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiTG9uZ2V2aXR5cnhcIl0gPSBcImxvbmdldml0eXJ4XCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiVmVuYUNiZFwiXSA9IFwidmVuYS1jYmRcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJNZWR0ZXJyYVwiXSA9IFwibWVkdGVycmFcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJNb2RlbGxzXCJdID0gXCJtb2RlbGxzXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiUHJlc3NlZEZsb3JhbFwiXSA9IFwicHJlc3NlZC1mbG9yYWxcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJLaW5kcmVkQnJhdmVseVwiXSA9IFwia2luZHJlZC1icmF2ZWx5XCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiV2luZUVudGh1c2lhc3RcIl0gPSBcIndpbmUtZW50aHVzaWFzdFwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIkhvbWVncm93bkNhbm5hYmlzXCJdID0gXCJob21lZ3Jvd24tY2FubmFiaXNcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJEcmVhbWxhbmRCYWJ5XCJdID0gXCJkcmVhbWxhbmQtYmFieVwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIkJhbmRvbGllclwiXSA9IFwiYmFuZG9saWVyXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiV2VzdG9uSm9uQm91Y2hlclwiXSA9IFwid2VzdG9uLWpvbi1ib3VjaGVyXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiS3V0RnJvbVRoZUtsb3RoXCJdID0gXCJrdXQtZnJvbS10aGUta2xvdGhcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJHcm9vdmVMaWZlXCJdID0gXCJncm9vdmUtbGlmZVwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIkNhcnBlXCJdID0gXCJjYXJwZVwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIldvbGZUYWN0aWNhbFwiXSA9IFwid29sZi10YWN0aWNhbFwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIldvbGZNYXR0cmVzc1wiXSA9IFwid29sZm1hdHRyZXNzXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiRGVmYXVsdFwiXSA9IFwiZGVmYXVsdFwiO1xuXHRyZXR1cm4gT3JnU2hvcnROYW1lJDE7XG59KHt9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL3Byb2R1Y3QvQ2F0ZWdvcnlFeHRyYWN0b3IudHNcbmxldCBDYXRlZ29yeUV4dHJhY3RvclR5cGUgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oQ2F0ZWdvcnlFeHRyYWN0b3JUeXBlJDEpIHtcblx0Q2F0ZWdvcnlFeHRyYWN0b3JUeXBlJDFbXCJWaXNpdENhdGVnb3J5TWFwXCJdID0gXCJWaXNpdENhdGVnb3J5TWFwXCI7XG5cdENhdGVnb3J5RXh0cmFjdG9yVHlwZSQxW1wiVmlzaXRDYXRlZ29yeURlZmF1bHRcIl0gPSBcIlZpc2l0Q2F0ZWdvcnlEZWZhdWx0XCI7XG5cdHJldHVybiBDYXRlZ29yeUV4dHJhY3RvclR5cGUkMTtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvcHJvZHVjdC9Qcm9kdWN0RXhwZXJpbWVudC50c1xubGV0IFByb2R1Y3RFeHBlcmltZW50ID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKFByb2R1Y3RFeHBlcmltZW50JDEpIHtcblx0UHJvZHVjdEV4cGVyaW1lbnQkMVtcIkRFRkFVTFRcIl0gPSBcImRlZmF1bHRcIjtcblx0cmV0dXJuIFByb2R1Y3RFeHBlcmltZW50JDE7XG59KHt9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL3Byb2R1Y3QvUHJvZHVjdFNvcnRpbmcudHNcbmxldCBQcm9kdWN0U29ydGluZyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihQcm9kdWN0U29ydGluZyQxKSB7XG5cdFByb2R1Y3RTb3J0aW5nJDFbXCJGRUFUVVJFRFwiXSA9IFwiZmVhdHVyZWRcIjtcblx0UHJvZHVjdFNvcnRpbmckMVtcIlBSSUNFX0FTQ1wiXSA9IFwicHJpY2VfYXNjXCI7XG5cdFByb2R1Y3RTb3J0aW5nJDFbXCJQUklDRV9ERVNDXCJdID0gXCJwcmljZV9kZXNjXCI7XG5cdHJldHVybiBQcm9kdWN0U29ydGluZyQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9wcm9kdWN0L1ZhcmlhbnRJbmZvLnRzXG5sZXQgVmFyaWFudFR5cGVFbnVtID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKFZhcmlhbnRUeXBlRW51bSQxKSB7XG5cdFZhcmlhbnRUeXBlRW51bSQxW1wiUGRwXCJdID0gXCJwZHBcIjtcblx0VmFyaWFudFR5cGVFbnVtJDFbXCJQbHBcIl0gPSBcInBscFwiO1xuXHRWYXJpYW50VHlwZUVudW0kMVtcIlBhZ2VWaXNpdFwiXSA9IFwicGFnZV92aXNpdFwiO1xuXHRyZXR1cm4gVmFyaWFudFR5cGVFbnVtJDE7XG59KHt9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL3NlYXJjaC9DaGF0U2VhcmNoU29ydE92ZXJyaWRlcy50c1xubGV0IENoYXRTZWFyY2hTb3J0T3ZlcnJpZGVzID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKENoYXRTZWFyY2hTb3J0T3ZlcnJpZGVzJDEpIHtcblx0Q2hhdFNlYXJjaFNvcnRPdmVycmlkZXMkMVtcIkRFU0tUT1BfRklMVEVSX0NPTlRBSU5FUlwiXSA9IFwic3BpZmZ5LWNoYXQtc2VhcmNoLWZpbHRlci1jb250YWluZXJcIjtcblx0Q2hhdFNlYXJjaFNvcnRPdmVycmlkZXMkMVtcIkRFU0tUT1BfRklMVEVSX1NFTEVDVF9DT01QT05FTlRcIl0gPSBcInNwaWZmeS1jaGF0LXNlYXJjaC1maWx0ZXItc2VsZWN0LWNvbXBvbmVudFwiO1xuXHRDaGF0U2VhcmNoU29ydE92ZXJyaWRlcyQxW1wiREVTS1RPUF9GSUxURVJfU0VMRUNUX0lDT05cIl0gPSBcInNwaWZmeS1jaGF0LXNlYXJjaC1maWx0ZXItc2VsZWN0LWljb25cIjtcblx0Q2hhdFNlYXJjaFNvcnRPdmVycmlkZXMkMVtcIk1PQklMRV9GSUxURVJfQlVUVE9OXCJdID0gXCJzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLWJ1dHRvblwiO1xuXHRDaGF0U2VhcmNoU29ydE92ZXJyaWRlcyQxW1wiTU9CSUxFX0ZJTFRFUl9NT0RBTF9DT05UQUlORVJcIl0gPSBcInNwaWZmeS1jaGF0LXNlYXJjaC1maWx0ZXItbW9kYWwtY29udGFpbmVyXCI7XG5cdENoYXRTZWFyY2hTb3J0T3ZlcnJpZGVzJDFbXCJNT0JJTEVfRklMVEVSX01PREFMX0hFQURFUlwiXSA9IFwic3BpZmZ5LWNoYXQtc2VhcmNoLWZpbHRlci1tb2RhbC1oZWFkZXJcIjtcblx0Q2hhdFNlYXJjaFNvcnRPdmVycmlkZXMkMVtcIk1PQklMRV9GSUxURVJfTU9EQUxfU0VMRUNUSU9OXCJdID0gXCJzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLW1vZGFsLXNlbGVjdGlvblwiO1xuXHRDaGF0U2VhcmNoU29ydE92ZXJyaWRlcyQxW1wiTU9CSUxFX0ZJTFRFUl9NT0RBTF9PUFRJT05cIl0gPSBcInNwaWZmeS1jaGF0LXNlYXJjaC1maWx0ZXItbW9kYWwtb3B0aW9uXCI7XG5cdENoYXRTZWFyY2hTb3J0T3ZlcnJpZGVzJDFbXCJNT0JJTEVfRklMVEVSX01PREFMX09QVElPTl9QSUxMXCJdID0gXCJzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLW1vZGFsLW9wdGlvbi1waWxsXCI7XG5cdENoYXRTZWFyY2hTb3J0T3ZlcnJpZGVzJDFbXCJNT0JJTEVfRklMVEVSX01PREFMX09QVElPTl9ERVNDUklQVElPTlwiXSA9IFwic3BpZmZ5LWNoYXQtc2VhcmNoLWZpbHRlci1tb2RhbC1vcHRpb24tZGVzY1wiO1xuXHRDaGF0U2VhcmNoU29ydE92ZXJyaWRlcyQxW1wiTU9CSUxFX0ZJTFRFUl9NT0RBTF9BUFBMWV9CVVRUT05cIl0gPSBcInNwaWZmeS1jaGF0LXNlYXJjaC1maWx0ZXItbW9kYWwtYXBwbHktYnV0dG9uXCI7XG5cdHJldHVybiBDaGF0U2VhcmNoU29ydE92ZXJyaWRlcyQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9zZWFyY2gvU2VhcmNoUmVzdWx0c1N0YXRlLnRzXG5sZXQgU2VhcmNoUmVzdWx0c1N0YXRlID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKFNlYXJjaFJlc3VsdHNTdGF0ZSQxKSB7XG5cdFNlYXJjaFJlc3VsdHNTdGF0ZSQxW1NlYXJjaFJlc3VsdHNTdGF0ZSQxW1wiTG9hZGluZ1wiXSA9IDBdID0gXCJMb2FkaW5nXCI7XG5cdFNlYXJjaFJlc3VsdHNTdGF0ZSQxW1NlYXJjaFJlc3VsdHNTdGF0ZSQxW1wiUmVzdWx0c1wiXSA9IDFdID0gXCJSZXN1bHRzXCI7XG5cdFNlYXJjaFJlc3VsdHNTdGF0ZSQxW1NlYXJjaFJlc3VsdHNTdGF0ZSQxW1wiTm9SZXN1bHRzXCJdID0gMl0gPSBcIk5vUmVzdWx0c1wiO1xuXHRyZXR1cm4gU2VhcmNoUmVzdWx0c1N0YXRlJDE7XG59KHt9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL3dpZGdldHMvU3BpZmZ5V2lkZ2V0cy50c1xuLyoqXG4qIEVudW0gb2YgYWxsIHdpZGdldCBuYW1lcy4gVGhlc2UgYXJlIHdpZGdldHMgdGhhdCBhcmUgcmVuZGVyZWQgYW5kIGludGVncmF0ZWQgaW50b1xuKiBhIG1lcmNoYW50J3Mgd2Vic2l0ZS5cbiovXG5sZXQgU3BpZmZ5V2lkZ2V0cyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihTcGlmZnlXaWRnZXRzJDEpIHtcblx0U3BpZmZ5V2lkZ2V0cyQxW1wiSW1hZ2VCYW5uZXJcIl0gPSBcImltYWdlX2Jhbm5lclwiO1xuXHRTcGlmZnlXaWRnZXRzJDFbXCJJbWFnZVByb21wdENhcmRcIl0gPSBcImltYWdlX3Byb21wdF9jYXJkXCI7XG5cdFNwaWZmeVdpZGdldHMkMVtcIlNpbmdsZUltYWdlUHJvbXB0XCJdID0gXCJzaW5nbGVfaW1hZ2VfcHJvbXB0XCI7XG5cdFNwaWZmeVdpZGdldHMkMVtcIkVtYmVkZGVkV2lkZ2V0XCJdID0gXCJlbWJlZGRlZF93aWRnZXRcIjtcblx0U3BpZmZ5V2lkZ2V0cyQxW1wiRmxvYXRpbmdCdXR0b25cIl0gPSBcImZsb2F0aW5nX2J1dHRvblwiO1xuXHRTcGlmZnlXaWRnZXRzJDFbXCJTdWdnZXN0aW9uQmFyXCJdID0gXCJzdWdnZXN0aW9uX2JhclwiO1xuXHRTcGlmZnlXaWRnZXRzJDFbXCJTZWFyY2hQcm9tcHRcIl0gPSBcInNlYXJjaF9wcm9tcHRcIjtcblx0U3BpZmZ5V2lkZ2V0cyQxW1wiR2xvYmFsU2VhcmNoXCJdID0gXCJnbG9iYWxfc2VhcmNoXCI7XG5cdFNwaWZmeVdpZGdldHMkMVtcIlNlYXJjaFJlc3VsdHNcIl0gPSBcInNlYXJjaF9yZXN1bHRzXCI7XG5cdFNwaWZmeVdpZGdldHMkMVtcIkdsb2JhbFNlYXJjaEVudHJ5UG9pbnRcIl0gPSBcImdsb2JhbF9zZWFyY2hfZW50cnlfcG9pbnRcIjtcblx0cmV0dXJuIFNwaWZmeVdpZGdldHMkMTtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvd2lkZ2V0cy9XaWRnZXRUeXBlLnRzXG5sZXQgV2lkZ2V0VHlwZSA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihXaWRnZXRUeXBlJDEpIHtcblx0V2lkZ2V0VHlwZSQxW1wiQ2hhdFByZXZpZXdcIl0gPSBcIkNoYXRQcmV2aWV3XCI7XG5cdFdpZGdldFR5cGUkMVtcIlNvY2lhbFByb29mVjJcIl0gPSBcIlNvY2lhbFByb29mVjJcIjtcblx0V2lkZ2V0VHlwZSQxW1wiQ2hhdFByZXZpZXdWMlwiXSA9IFwiQ2hhdFByZXZpZXdWMlwiO1xuXHRXaWRnZXRUeXBlJDFbXCJDaGF0UHJldmlld0lzTG9hZGluZ1wiXSA9IFwiQ2hhdFByZXZpZXdJc0xvYWRpbmdcIjtcblx0V2lkZ2V0VHlwZSQxW1wiQ2hhdFByZXZpZXdQb3N0SW50ZXJhY3Rpb25cIl0gPSBcIkNoYXRQcmV2aWV3UG9zdEludGVyYWN0aW9uXCI7XG5cdFdpZGdldFR5cGUkMVtcIkNoYXRQcmV2aWV3UHJvZHVjdENvbXBhcmlzb25cIl0gPSBcIkNoYXRQcmV2aWV3UHJvZHVjdENvbXBhcmlzb25cIjtcblx0V2lkZ2V0VHlwZSQxW1wiU3VnZ2VzdGlvbkJhclwiXSA9IFwiU3VnZ2VzdGlvbkJhclwiO1xuXHRXaWRnZXRUeXBlJDFbXCJTdWdnZXN0aW9uQmFyVjJcIl0gPSBcIlN1Z2dlc3Rpb25CYXJWMlwiO1xuXHRXaWRnZXRUeXBlJDFbXCJJbWFnZVByb21wdENhcmRcIl0gPSBcIkltYWdlUHJvbXB0Q2FyZFwiO1xuXHRXaWRnZXRUeXBlJDFbXCJJbWFnZUJhbm5lclwiXSA9IFwiSW1hZ2VCYW5uZXJcIjtcblx0V2lkZ2V0VHlwZSQxW1wiU2luZ2xlSW1hZ2VQcm9tcHRcIl0gPSBcIlNpbmdsZUltYWdlUHJvbXB0XCI7XG5cdFdpZGdldFR5cGUkMVtcIlNlYXJjaFByb21wdFwiXSA9IFwiU2VhcmNoUHJvbXB0XCI7XG5cdFdpZGdldFR5cGUkMVtcIlNlYXJjaFplcm9TdGF0ZUVudHJ5UG9pbnRcIl0gPSBcIlNlYXJjaFplcm9TdGF0ZUVudHJ5UG9pbnRcIjtcblx0V2lkZ2V0VHlwZSQxW1wiU2VhcmNoUmVzdWx0c0VudHJ5UG9pbnRcIl0gPSBcIlNlYXJjaFJlc3VsdHNFbnRyeVBvaW50XCI7XG5cdFdpZGdldFR5cGUkMVtcIlNlYXJjaE92ZXJsYXlIb3N0XCJdID0gXCJTZWFyY2hPdmVybGF5SG9zdFwiO1xuXHRXaWRnZXRUeXBlJDFbXCJOb09wXCJdID0gXCJOb09wXCI7XG5cdHJldHVybiBXaWRnZXRUeXBlJDE7XG59KHt9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L3J1bnRpbWUuanNcbnZhciByZXF1aXJlX3J1bnRpbWUgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L3J1bnRpbWUuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHR2YXIgX19hd2FpdGVyJDUgPSBleHBvcnRzICYmIGV4cG9ydHMuX19hd2FpdGVyIHx8IGZ1bmN0aW9uKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuXHRcdGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbihyZXNvbHZlKSB7XG5cdFx0XHRcdHJlc29sdmUodmFsdWUpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0c3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmdW5jdGlvbiBzdGVwKHJlc3VsdCkge1xuXHRcdFx0XHRyZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTtcblx0XHRcdH1cblx0XHRcdHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcblx0XHR9KTtcblx0fTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLlRleHRBcGlSZXNwb25zZSA9IGV4cG9ydHMuQmxvYkFwaVJlc3BvbnNlID0gZXhwb3J0cy5Wb2lkQXBpUmVzcG9uc2UgPSBleHBvcnRzLkpTT05BcGlSZXNwb25zZSA9IGV4cG9ydHMuQ09MTEVDVElPTl9GT1JNQVRTID0gZXhwb3J0cy5SZXF1aXJlZEVycm9yID0gZXhwb3J0cy5GZXRjaEVycm9yID0gZXhwb3J0cy5SZXNwb25zZUVycm9yID0gZXhwb3J0cy5CYXNlQVBJID0gZXhwb3J0cy5EZWZhdWx0Q29uZmlnID0gZXhwb3J0cy5Db25maWd1cmF0aW9uID0gZXhwb3J0cy5CQVNFX1BBVEggPSB2b2lkIDA7XG5cdGV4cG9ydHMucXVlcnlzdHJpbmcgPSBxdWVyeXN0cmluZztcblx0ZXhwb3J0cy5leGlzdHMgPSBleGlzdHM7XG5cdGV4cG9ydHMubWFwVmFsdWVzID0gbWFwVmFsdWVzO1xuXHRleHBvcnRzLmNhbkNvbnN1bWVGb3JtID0gY2FuQ29uc3VtZUZvcm07XG5cdGV4cG9ydHMuQkFTRV9QQVRIID0gXCJodHRwOi8vbG9jYWxob3N0XCIucmVwbGFjZSgvXFwvKyQvLCBcIlwiKTtcblx0dmFyIENvbmZpZ3VyYXRpb24gPSBjbGFzcyB7XG5cdFx0Y29uc3RydWN0b3IoY29uZmlndXJhdGlvbiA9IHt9KSB7XG5cdFx0XHR0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uO1xuXHRcdH1cblx0XHRzZXQgY29uZmlnKGNvbmZpZ3VyYXRpb24pIHtcblx0XHRcdHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XG5cdFx0fVxuXHRcdGdldCBiYXNlUGF0aCgpIHtcblx0XHRcdHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGggIT0gbnVsbCA/IHRoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aCA6IGV4cG9ydHMuQkFTRV9QQVRIO1xuXHRcdH1cblx0XHRnZXQgZmV0Y2hBcGkoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uLmZldGNoQXBpO1xuXHRcdH1cblx0XHRnZXQgbWlkZGxld2FyZSgpIHtcblx0XHRcdHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb24ubWlkZGxld2FyZSB8fCBbXTtcblx0XHR9XG5cdFx0Z2V0IHF1ZXJ5UGFyYW1zU3RyaW5naWZ5KCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi5xdWVyeVBhcmFtc1N0cmluZ2lmeSB8fCBxdWVyeXN0cmluZztcblx0XHR9XG5cdFx0Z2V0IHVzZXJuYW1lKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi51c2VybmFtZTtcblx0XHR9XG5cdFx0Z2V0IHBhc3N3b3JkKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi5wYXNzd29yZDtcblx0XHR9XG5cdFx0Z2V0IGFwaUtleSgpIHtcblx0XHRcdGNvbnN0IGFwaUtleSA9IHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXk7XG5cdFx0XHRpZiAoYXBpS2V5KSByZXR1cm4gdHlwZW9mIGFwaUtleSA9PT0gXCJmdW5jdGlvblwiID8gYXBpS2V5IDogKCkgPT4gYXBpS2V5O1xuXHRcdH1cblx0XHRnZXQgYWNjZXNzVG9rZW4oKSB7XG5cdFx0XHRjb25zdCBhY2Nlc3NUb2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbjtcblx0XHRcdGlmIChhY2Nlc3NUb2tlbikgcmV0dXJuIHR5cGVvZiBhY2Nlc3NUb2tlbiA9PT0gXCJmdW5jdGlvblwiID8gYWNjZXNzVG9rZW4gOiAoKSA9PiBfX2F3YWl0ZXIkNSh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0cmV0dXJuIGFjY2Vzc1Rva2VuO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGdldCBoZWFkZXJzKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi5oZWFkZXJzO1xuXHRcdH1cblx0XHRnZXQgY3JlZGVudGlhbHMoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uLmNyZWRlbnRpYWxzO1xuXHRcdH1cblx0fTtcblx0ZXhwb3J0cy5Db25maWd1cmF0aW9uID0gQ29uZmlndXJhdGlvbjtcblx0ZXhwb3J0cy5EZWZhdWx0Q29uZmlnID0gbmV3IENvbmZpZ3VyYXRpb24oKTtcblx0LyoqXG5cdCogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgYWxsIGdlbmVyYXRlZCBBUEkgY2xhc3Nlcy5cblx0Ki9cblx0dmFyIEJhc2VBUEkgPSBjbGFzcyBCYXNlQVBJIHtcblx0XHRjb25zdHJ1Y3Rvcihjb25maWd1cmF0aW9uID0gZXhwb3J0cy5EZWZhdWx0Q29uZmlnKSB7XG5cdFx0XHR0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uO1xuXHRcdFx0dGhpcy5mZXRjaEFwaSA9ICh1cmwsIGluaXQpID0+IF9fYXdhaXRlciQ1KHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRsZXQgZmV0Y2hQYXJhbXMgPSB7XG5cdFx0XHRcdFx0dXJsLFxuXHRcdFx0XHRcdGluaXRcblx0XHRcdFx0fTtcblx0XHRcdFx0Zm9yIChjb25zdCBtaWRkbGV3YXJlIG9mIHRoaXMubWlkZGxld2FyZSkgaWYgKG1pZGRsZXdhcmUucHJlKSBmZXRjaFBhcmFtcyA9ICh5aWVsZCBtaWRkbGV3YXJlLnByZShPYmplY3QuYXNzaWduKHsgZmV0Y2g6IHRoaXMuZmV0Y2hBcGkgfSwgZmV0Y2hQYXJhbXMpKSkgfHwgZmV0Y2hQYXJhbXM7XG5cdFx0XHRcdGxldCByZXNwb25zZSA9IHZvaWQgMDtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRyZXNwb25zZSA9IHlpZWxkICh0aGlzLmNvbmZpZ3VyYXRpb24uZmV0Y2hBcGkgfHwgZmV0Y2gpKGZldGNoUGFyYW1zLnVybCwgZmV0Y2hQYXJhbXMuaW5pdCk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IG1pZGRsZXdhcmUgb2YgdGhpcy5taWRkbGV3YXJlKSBpZiAobWlkZGxld2FyZS5vbkVycm9yKSByZXNwb25zZSA9ICh5aWVsZCBtaWRkbGV3YXJlLm9uRXJyb3Ioe1xuXHRcdFx0XHRcdFx0ZmV0Y2g6IHRoaXMuZmV0Y2hBcGksXG5cdFx0XHRcdFx0XHR1cmw6IGZldGNoUGFyYW1zLnVybCxcblx0XHRcdFx0XHRcdGluaXQ6IGZldGNoUGFyYW1zLmluaXQsXG5cdFx0XHRcdFx0XHRlcnJvcjogZSxcblx0XHRcdFx0XHRcdHJlc3BvbnNlOiByZXNwb25zZSA/IHJlc3BvbnNlLmNsb25lKCkgOiB2b2lkIDBcblx0XHRcdFx0XHR9KSkgfHwgcmVzcG9uc2U7XG5cdFx0XHRcdFx0aWYgKHJlc3BvbnNlID09PSB2b2lkIDApIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHRocm93IG5ldyBGZXRjaEVycm9yKGUsIFwiVGhlIHJlcXVlc3QgZmFpbGVkIGFuZCB0aGUgaW50ZXJjZXB0b3JzIGRpZCBub3QgcmV0dXJuIGFuIGFsdGVybmF0aXZlIHJlc3BvbnNlXCIpO1xuXHRcdFx0XHRcdGVsc2UgdGhyb3cgZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRmb3IgKGNvbnN0IG1pZGRsZXdhcmUgb2YgdGhpcy5taWRkbGV3YXJlKSBpZiAobWlkZGxld2FyZS5wb3N0KSByZXNwb25zZSA9ICh5aWVsZCBtaWRkbGV3YXJlLnBvc3Qoe1xuXHRcdFx0XHRcdGZldGNoOiB0aGlzLmZldGNoQXBpLFxuXHRcdFx0XHRcdHVybDogZmV0Y2hQYXJhbXMudXJsLFxuXHRcdFx0XHRcdGluaXQ6IGZldGNoUGFyYW1zLmluaXQsXG5cdFx0XHRcdFx0cmVzcG9uc2U6IHJlc3BvbnNlLmNsb25lKClcblx0XHRcdFx0fSkpIHx8IHJlc3BvbnNlO1xuXHRcdFx0XHRyZXR1cm4gcmVzcG9uc2U7XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMubWlkZGxld2FyZSA9IGNvbmZpZ3VyYXRpb24ubWlkZGxld2FyZTtcblx0XHR9XG5cdFx0d2l0aE1pZGRsZXdhcmUoLi4ubWlkZGxld2FyZXMpIHtcblx0XHRcdGNvbnN0IG5leHQgPSB0aGlzLmNsb25lKCk7XG5cdFx0XHRuZXh0Lm1pZGRsZXdhcmUgPSBuZXh0Lm1pZGRsZXdhcmUuY29uY2F0KC4uLm1pZGRsZXdhcmVzKTtcblx0XHRcdHJldHVybiBuZXh0O1xuXHRcdH1cblx0XHR3aXRoUHJlTWlkZGxld2FyZSguLi5wcmVNaWRkbGV3YXJlcykge1xuXHRcdFx0Y29uc3QgbWlkZGxld2FyZXMgPSBwcmVNaWRkbGV3YXJlcy5tYXAoKHByZSkgPT4gKHsgcHJlIH0pKTtcblx0XHRcdHJldHVybiB0aGlzLndpdGhNaWRkbGV3YXJlKC4uLm1pZGRsZXdhcmVzKTtcblx0XHR9XG5cdFx0d2l0aFBvc3RNaWRkbGV3YXJlKC4uLnBvc3RNaWRkbGV3YXJlcykge1xuXHRcdFx0Y29uc3QgbWlkZGxld2FyZXMgPSBwb3N0TWlkZGxld2FyZXMubWFwKChwb3N0KSA9PiAoeyBwb3N0IH0pKTtcblx0XHRcdHJldHVybiB0aGlzLndpdGhNaWRkbGV3YXJlKC4uLm1pZGRsZXdhcmVzKTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBDaGVjayBpZiB0aGUgZ2l2ZW4gTUlNRSBpcyBhIEpTT04gTUlNRS5cblx0XHQqIEpTT04gTUlNRSBleGFtcGxlczpcblx0XHQqICAgYXBwbGljYXRpb24vanNvblxuXHRcdCogICBhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PVVURjhcblx0XHQqICAgQVBQTElDQVRJT04vSlNPTlxuXHRcdCogICBhcHBsaWNhdGlvbi92bmQuY29tcGFueStqc29uXG5cdFx0KiBAcGFyYW0gbWltZSAtIE1JTUUgKE11bHRpcHVycG9zZSBJbnRlcm5ldCBNYWlsIEV4dGVuc2lvbnMpXG5cdFx0KiBAcmV0dXJuIFRydWUgaWYgdGhlIGdpdmVuIE1JTUUgaXMgSlNPTiwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHRcdCovXG5cdFx0aXNKc29uTWltZShtaW1lKSB7XG5cdFx0XHRpZiAoIW1pbWUpIHJldHVybiBmYWxzZTtcblx0XHRcdHJldHVybiBCYXNlQVBJLmpzb25SZWdleC50ZXN0KG1pbWUpO1xuXHRcdH1cblx0XHRyZXF1ZXN0KGNvbnRleHQsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkNSh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0Y29uc3QgeyB1cmwsIGluaXQgfSA9IHlpZWxkIHRoaXMuY3JlYXRlRmV0Y2hQYXJhbXMoY29udGV4dCwgaW5pdE92ZXJyaWRlcyk7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5mZXRjaEFwaSh1cmwsIGluaXQpO1xuXHRcdFx0XHRpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2Uuc3RhdHVzID49IDIwMCAmJiByZXNwb25zZS5zdGF0dXMgPCAzMDApIHJldHVybiByZXNwb25zZTtcblx0XHRcdFx0dGhyb3cgbmV3IFJlc3BvbnNlRXJyb3IocmVzcG9uc2UsIFwiUmVzcG9uc2UgcmV0dXJuZWQgYW4gZXJyb3IgY29kZVwiKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRjcmVhdGVGZXRjaFBhcmFtcyhjb250ZXh0LCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDUodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGxldCB1cmwgPSB0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGggKyBjb250ZXh0LnBhdGg7XG5cdFx0XHRcdGlmIChjb250ZXh0LnF1ZXJ5ICE9PSB2b2lkIDAgJiYgT2JqZWN0LmtleXMoY29udGV4dC5xdWVyeSkubGVuZ3RoICE9PSAwKSB1cmwgKz0gXCI/XCIgKyB0aGlzLmNvbmZpZ3VyYXRpb24ucXVlcnlQYXJhbXNTdHJpbmdpZnkoY29udGV4dC5xdWVyeSk7XG5cdFx0XHRcdGNvbnN0IGhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbmZpZ3VyYXRpb24uaGVhZGVycywgY29udGV4dC5oZWFkZXJzKTtcblx0XHRcdFx0T2JqZWN0LmtleXMoaGVhZGVycykuZm9yRWFjaCgoa2V5KSA9PiBoZWFkZXJzW2tleV0gPT09IHZvaWQgMCA/IGRlbGV0ZSBoZWFkZXJzW2tleV0gOiB7fSk7XG5cdFx0XHRcdGNvbnN0IGluaXRPdmVycmlkZUZuID0gdHlwZW9mIGluaXRPdmVycmlkZXMgPT09IFwiZnVuY3Rpb25cIiA/IGluaXRPdmVycmlkZXMgOiAoKSA9PiBfX2F3YWl0ZXIkNSh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0XHRyZXR1cm4gaW5pdE92ZXJyaWRlcztcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGNvbnN0IGluaXRQYXJhbXMgPSB7XG5cdFx0XHRcdFx0bWV0aG9kOiBjb250ZXh0Lm1ldGhvZCxcblx0XHRcdFx0XHRoZWFkZXJzLFxuXHRcdFx0XHRcdGJvZHk6IGNvbnRleHQuYm9keSxcblx0XHRcdFx0XHRjcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLmNyZWRlbnRpYWxzXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbnN0IG92ZXJyaWRkZW5Jbml0ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBpbml0UGFyYW1zKSwgeWllbGQgaW5pdE92ZXJyaWRlRm4oe1xuXHRcdFx0XHRcdGluaXQ6IGluaXRQYXJhbXMsXG5cdFx0XHRcdFx0Y29udGV4dFxuXHRcdFx0XHR9KSk7XG5cdFx0XHRcdGxldCBib2R5O1xuXHRcdFx0XHRpZiAoaXNGb3JtRGF0YShvdmVycmlkZGVuSW5pdC5ib2R5KSB8fCBvdmVycmlkZGVuSW5pdC5ib2R5IGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zIHx8IGlzQmxvYihvdmVycmlkZGVuSW5pdC5ib2R5KSkgYm9keSA9IG92ZXJyaWRkZW5Jbml0LmJvZHk7XG5cdFx0XHRcdGVsc2UgaWYgKHRoaXMuaXNKc29uTWltZShoZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdKSkgYm9keSA9IEpTT04uc3RyaW5naWZ5KG92ZXJyaWRkZW5Jbml0LmJvZHkpO1xuXHRcdFx0XHRlbHNlIGJvZHkgPSBvdmVycmlkZGVuSW5pdC5ib2R5O1xuXHRcdFx0XHRjb25zdCBpbml0ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvdmVycmlkZGVuSW5pdCksIHsgYm9keSB9KTtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHR1cmwsXG5cdFx0XHRcdFx0aW5pdFxuXHRcdFx0XHR9O1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogQ3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBvZiBgdGhpc2AgYnkgY29uc3RydWN0aW5nIGEgbmV3IGluc3RhbmNlXG5cdFx0KiBhbmQgdGhlbiBzaGFsbG93IGNsb25pbmcgZGF0YSBtZW1iZXJzLlxuXHRcdCovXG5cdFx0Y2xvbmUoKSB7XG5cdFx0XHRjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7XG5cdFx0XHRjb25zdCBuZXh0ID0gbmV3IGNvbnN0cnVjdG9yKHRoaXMuY29uZmlndXJhdGlvbik7XG5cdFx0XHRuZXh0Lm1pZGRsZXdhcmUgPSB0aGlzLm1pZGRsZXdhcmUuc2xpY2UoKTtcblx0XHRcdHJldHVybiBuZXh0O1xuXHRcdH1cblx0fTtcblx0ZXhwb3J0cy5CYXNlQVBJID0gQmFzZUFQSTtcblx0QmFzZUFQSS5qc29uUmVnZXggPSBuZXcgUmVnRXhwKFwiXig6P2FwcGxpY2F0aW9uL2pzb258W147LyBcdF0rL1teOy8gXHRdK1srXWpzb24pWyBcdF0qKDo/Oy4qKT8kXCIsIFwiaVwiKTtcblx0ZnVuY3Rpb24gaXNCbG9iKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHR5cGVvZiBCbG9iICE9PSBcInVuZGVmaW5lZFwiICYmIHZhbHVlIGluc3RhbmNlb2YgQmxvYjtcblx0fVxuXHRmdW5jdGlvbiBpc0Zvcm1EYXRhKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHR5cGVvZiBGb3JtRGF0YSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB2YWx1ZSBpbnN0YW5jZW9mIEZvcm1EYXRhO1xuXHR9XG5cdHZhciBSZXNwb25zZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBFcnJvciB7XG5cdFx0Y29uc3RydWN0b3IocmVzcG9uc2UsIG1zZykge1xuXHRcdFx0c3VwZXIobXNnKTtcblx0XHRcdHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcblx0XHRcdHRoaXMubmFtZSA9IFwiUmVzcG9uc2VFcnJvclwiO1xuXHRcdH1cblx0fTtcblx0ZXhwb3J0cy5SZXNwb25zZUVycm9yID0gUmVzcG9uc2VFcnJvcjtcblx0dmFyIEZldGNoRXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHtcblx0XHRjb25zdHJ1Y3RvcihjYXVzZSwgbXNnKSB7XG5cdFx0XHRzdXBlcihtc2cpO1xuXHRcdFx0dGhpcy5jYXVzZSA9IGNhdXNlO1xuXHRcdFx0dGhpcy5uYW1lID0gXCJGZXRjaEVycm9yXCI7XG5cdFx0fVxuXHR9O1xuXHRleHBvcnRzLkZldGNoRXJyb3IgPSBGZXRjaEVycm9yO1xuXHR2YXIgUmVxdWlyZWRFcnJvciA9IGNsYXNzIGV4dGVuZHMgRXJyb3Ige1xuXHRcdGNvbnN0cnVjdG9yKGZpZWxkLCBtc2cpIHtcblx0XHRcdHN1cGVyKG1zZyk7XG5cdFx0XHR0aGlzLmZpZWxkID0gZmllbGQ7XG5cdFx0XHR0aGlzLm5hbWUgPSBcIlJlcXVpcmVkRXJyb3JcIjtcblx0XHR9XG5cdH07XG5cdGV4cG9ydHMuUmVxdWlyZWRFcnJvciA9IFJlcXVpcmVkRXJyb3I7XG5cdGV4cG9ydHMuQ09MTEVDVElPTl9GT1JNQVRTID0ge1xuXHRcdGNzdjogXCIsXCIsXG5cdFx0c3N2OiBcIiBcIixcblx0XHR0c3Y6IFwiXHRcIixcblx0XHRwaXBlczogXCJ8XCJcblx0fTtcblx0ZnVuY3Rpb24gcXVlcnlzdHJpbmcocGFyYW1zLCBwcmVmaXggPSBcIlwiKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKHBhcmFtcykubWFwKChrZXkpID0+IHF1ZXJ5c3RyaW5nU2luZ2xlS2V5KGtleSwgcGFyYW1zW2tleV0sIHByZWZpeCkpLmZpbHRlcigocGFydCkgPT4gcGFydC5sZW5ndGggPiAwKS5qb2luKFwiJlwiKTtcblx0fVxuXHRmdW5jdGlvbiBxdWVyeXN0cmluZ1NpbmdsZUtleShrZXksIHZhbHVlLCBrZXlQcmVmaXggPSBcIlwiKSB7XG5cdFx0Y29uc3QgZnVsbEtleSA9IGtleVByZWZpeCArIChrZXlQcmVmaXgubGVuZ3RoID8gYFske2tleX1dYCA6IGtleSk7XG5cdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpIHtcblx0XHRcdGNvbnN0IG11bHRpVmFsdWUgPSB2YWx1ZS5tYXAoKHNpbmdsZVZhbHVlKSA9PiBlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKHNpbmdsZVZhbHVlKSkpLmpvaW4oYCYke2VuY29kZVVSSUNvbXBvbmVudChmdWxsS2V5KX09YCk7XG5cdFx0XHRyZXR1cm4gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGZ1bGxLZXkpfT0ke211bHRpVmFsdWV9YDtcblx0XHR9XG5cdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgU2V0KSByZXR1cm4gcXVlcnlzdHJpbmdTaW5nbGVLZXkoa2V5LCBBcnJheS5mcm9tKHZhbHVlKSwga2V5UHJlZml4KTtcblx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGZ1bGxLZXkpfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWx1ZS50b0lTT1N0cmluZygpKX1gO1xuXHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkgcmV0dXJuIHF1ZXJ5c3RyaW5nKHZhbHVlLCBmdWxsS2V5KTtcblx0XHRyZXR1cm4gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGZ1bGxLZXkpfT0ke2VuY29kZVVSSUNvbXBvbmVudChTdHJpbmcodmFsdWUpKX1gO1xuXHR9XG5cdGZ1bmN0aW9uIGV4aXN0cyhqc29uLCBrZXkpIHtcblx0XHRjb25zdCB2YWx1ZSA9IGpzb25ba2V5XTtcblx0XHRyZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHZvaWQgMDtcblx0fVxuXHRmdW5jdGlvbiBtYXBWYWx1ZXMoZGF0YSwgZm4pIHtcblx0XHRyZXR1cm4gT2JqZWN0LmtleXMoZGF0YSkucmVkdWNlKChhY2MsIGtleSkgPT4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBhY2MpLCB7IFtrZXldOiBmbihkYXRhW2tleV0pIH0pLCB7fSk7XG5cdH1cblx0ZnVuY3Rpb24gY2FuQ29uc3VtZUZvcm0oY29uc3VtZXMpIHtcblx0XHRmb3IgKGNvbnN0IGNvbnN1bWUgb2YgY29uc3VtZXMpIGlmIChcIm11bHRpcGFydC9mb3JtLWRhdGFcIiA9PT0gY29uc3VtZS5jb250ZW50VHlwZSkgcmV0dXJuIHRydWU7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHZhciBKU09OQXBpUmVzcG9uc2UgPSBjbGFzcyB7XG5cdFx0Y29uc3RydWN0b3IocmF3LCB0cmFuc2Zvcm1lciA9IChqc29uVmFsdWUpID0+IGpzb25WYWx1ZSkge1xuXHRcdFx0dGhpcy5yYXcgPSByYXc7XG5cdFx0XHR0aGlzLnRyYW5zZm9ybWVyID0gdHJhbnNmb3JtZXI7XG5cdFx0fVxuXHRcdHZhbHVlKCkge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQ1KHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy50cmFuc2Zvcm1lcih5aWVsZCB0aGlzLnJhdy5qc29uKCkpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xuXHRleHBvcnRzLkpTT05BcGlSZXNwb25zZSA9IEpTT05BcGlSZXNwb25zZTtcblx0dmFyIFZvaWRBcGlSZXNwb25zZSA9IGNsYXNzIHtcblx0XHRjb25zdHJ1Y3RvcihyYXcpIHtcblx0XHRcdHRoaXMucmF3ID0gcmF3O1xuXHRcdH1cblx0XHR2YWx1ZSgpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkNSh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHt9KTtcblx0XHR9XG5cdH07XG5cdGV4cG9ydHMuVm9pZEFwaVJlc3BvbnNlID0gVm9pZEFwaVJlc3BvbnNlO1xuXHR2YXIgQmxvYkFwaVJlc3BvbnNlID0gY2xhc3Mge1xuXHRcdGNvbnN0cnVjdG9yKHJhdykge1xuXHRcdFx0dGhpcy5yYXcgPSByYXc7XG5cdFx0fVxuXHRcdHZhbHVlKCkge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQ1KHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgdGhpcy5yYXcuYmxvYigpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xuXHRleHBvcnRzLkJsb2JBcGlSZXNwb25zZSA9IEJsb2JBcGlSZXNwb25zZTtcblx0dmFyIFRleHRBcGlSZXNwb25zZSA9IGNsYXNzIHtcblx0XHRjb25zdHJ1Y3RvcihyYXcpIHtcblx0XHRcdHRoaXMucmF3ID0gcmF3O1xuXHRcdH1cblx0XHR2YWx1ZSgpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkNSh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0cmV0dXJuIHlpZWxkIHRoaXMucmF3LnRleHQoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblx0ZXhwb3J0cy5UZXh0QXBpUmVzcG9uc2UgPSBUZXh0QXBpUmVzcG9uc2U7XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9DdXN0b21lclNlcnZpY2VQcm92aWRlci5qc1xudmFyIHJlcXVpcmVfQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9DdXN0b21lclNlcnZpY2VQcm92aWRlci5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5DdXN0b21lclNlcnZpY2VQcm92aWRlciA9IHZvaWQgMDtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIgPSBpbnN0YW5jZU9mQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXI7XG5cdGV4cG9ydHMuQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJGcm9tSlNPTiA9IEN1c3RvbWVyU2VydmljZVByb3ZpZGVyRnJvbUpTT047XG5cdGV4cG9ydHMuQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJGcm9tSlNPTlR5cGVkID0gQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLkN1c3RvbWVyU2VydmljZVByb3ZpZGVyVG9KU09OID0gQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJUb0pTT047XG5cdGV4cG9ydHMuQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJUb0pTT05UeXBlZCA9IEN1c3RvbWVyU2VydmljZVByb3ZpZGVyVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqXG5cdCogQGV4cG9ydFxuXHQqIEBlbnVtIHtzdHJpbmd9XG5cdCovXG5cdHZhciBDdXN0b21lclNlcnZpY2VQcm92aWRlcjtcblx0KGZ1bmN0aW9uKEN1c3RvbWVyU2VydmljZVByb3ZpZGVyJDEpIHtcblx0XHRDdXN0b21lclNlcnZpY2VQcm92aWRlciQxW1wiR2xhZGx5XCJdID0gXCJHTEFETFlcIjtcblx0XHRDdXN0b21lclNlcnZpY2VQcm92aWRlciQxW1wiS3VzdG9tZXJcIl0gPSBcIktVU1RPTUVSXCI7XG5cdFx0Q3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIkMVtcIkdvcmdpYXNcIl0gPSBcIkdPUkdJQVNcIjtcblx0XHRDdXN0b21lclNlcnZpY2VQcm92aWRlciQxW1wiVW5zdXBwb3J0ZWRcIl0gPSBcIlVOU1VQUE9SVEVEXCI7XG5cdH0pKEN1c3RvbWVyU2VydmljZVByb3ZpZGVyIHx8IChleHBvcnRzLkN1c3RvbWVyU2VydmljZVByb3ZpZGVyID0gQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIgPSB7fSkpO1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIodmFsdWUpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBDdXN0b21lclNlcnZpY2VQcm92aWRlcikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChDdXN0b21lclNlcnZpY2VQcm92aWRlciwga2V5KSkge1xuXHRcdFx0aWYgKEN1c3RvbWVyU2VydmljZVByb3ZpZGVyW2tleV0gPT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RvbWVyU2VydmljZVByb3ZpZGVyRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBDdXN0b21lclNlcnZpY2VQcm92aWRlckZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RvbWVyU2VydmljZVByb3ZpZGVyRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0cmV0dXJuIGpzb247XG5cdH1cblx0ZnVuY3Rpb24gQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJUb0pTT04odmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0ZnVuY3Rpb24gQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdC5qc1xudmFyIHJlcXVpcmVfQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdCA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0FkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlcXVlc3QuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlcXVlc3QgPSBpbnN0YW5jZU9mQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdDtcblx0ZXhwb3J0cy5BZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0RnJvbUpTT04gPSBBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0RnJvbUpTT047XG5cdGV4cG9ydHMuQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdEZyb21KU09OVHlwZWQgPSBBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5BZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0VG9KU09OID0gQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdFRvSlNPTjtcblx0ZXhwb3J0cy5BZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0VG9KU09OVHlwZWQgPSBBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0VG9KU09OVHlwZWQ7XG5cdGNvbnN0IEN1c3RvbWVyU2VydmljZVByb3ZpZGVyXzEkNCA9IHJlcXVpcmVfQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0KHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJlbWFpbFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImVtYWlsXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInNwaWZmeV91c2VyX2lkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wic3BpZmZ5X3VzZXJfaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIEFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlcXVlc3RGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlcXVlc3RGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY3VzdG9tZXJfc2VydmljZV9wcm92aWRlclwiOiBqc29uW1wiY3VzdG9tZXJfc2VydmljZV9wcm92aWRlclwiXSA9PSBudWxsID8gdm9pZCAwIDogKDAsIEN1c3RvbWVyU2VydmljZVByb3ZpZGVyXzEkNC5DdXN0b21lclNlcnZpY2VQcm92aWRlckZyb21KU09OKShqc29uW1wiY3VzdG9tZXJfc2VydmljZV9wcm92aWRlclwiXSksXG5cdFx0XHRcImVtYWlsXCI6IGpzb25bXCJlbWFpbFwiXSxcblx0XHRcdFwibmFtZVwiOiBqc29uW1wibmFtZVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm5hbWVcIl0sXG5cdFx0XHRcInNwaWZmeV91c2VyX2lkXCI6IGpzb25bXCJzcGlmZnlfdXNlcl9pZFwiXSxcblx0XHRcdFwic3ViamVjdFwiOiBqc29uW1wic3ViamVjdFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInN1YmplY3RcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIEFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlcXVlc3RUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0VG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlcXVlc3RUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCI6ICgwLCBDdXN0b21lclNlcnZpY2VQcm92aWRlcl8xJDQuQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJUb0pTT04pKHZhbHVlW1wiY3VzdG9tZXJfc2VydmljZV9wcm92aWRlclwiXSksXG5cdFx0XHRcImVtYWlsXCI6IHZhbHVlW1wiZW1haWxcIl0sXG5cdFx0XHRcIm5hbWVcIjogdmFsdWVbXCJuYW1lXCJdLFxuXHRcdFx0XCJzcGlmZnlfdXNlcl9pZFwiOiB2YWx1ZVtcInNwaWZmeV91c2VyX2lkXCJdLFxuXHRcdFx0XCJzdWJqZWN0XCI6IHZhbHVlW1wic3ViamVjdFwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0FkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlc3BvbnNlLmpzXG52YXIgcmVxdWlyZV9BZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXNwb25zZSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0FkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlc3BvbnNlLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXNwb25zZSA9IGluc3RhbmNlT2ZBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXNwb25zZTtcblx0ZXhwb3J0cy5BZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXNwb25zZUZyb21KU09OID0gQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2VGcm9tSlNPTjtcblx0ZXhwb3J0cy5BZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXNwb25zZUZyb21KU09OVHlwZWQgPSBBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXNwb25zZUZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2VUb0pTT04gPSBBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXNwb25zZVRvSlNPTjtcblx0ZXhwb3J0cy5BZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXNwb25zZVRvSlNPTlR5cGVkID0gQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2VUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2UgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2UodmFsdWUpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXNwb25zZUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2VGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXNwb25zZUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvbnZlcnNhdGlvbl9pZFwiOiBqc29uW1wiY29udmVyc2F0aW9uX2lkXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiY29udmVyc2F0aW9uX2lkXCJdLFxuXHRcdFx0XCJjdXN0b21lcl9pZFwiOiBqc29uW1wiY3VzdG9tZXJfaWRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJjdXN0b21lcl9pZFwiXSxcblx0XHRcdFwibWVzc2FnZVwiOiBqc29uW1wibWVzc2FnZVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm1lc3NhZ2VcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIEFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlc3BvbnNlVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2VUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2VUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb252ZXJzYXRpb25faWRcIjogdmFsdWVbXCJjb252ZXJzYXRpb25faWRcIl0sXG5cdFx0XHRcImN1c3RvbWVyX2lkXCI6IHZhbHVlW1wiY3VzdG9tZXJfaWRcIl0sXG5cdFx0XHRcIm1lc3NhZ2VcIjogdmFsdWVbXCJtZXNzYWdlXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQWRkVG9DYXJ0QXR0cmlidXRlcy5qc1xudmFyIHJlcXVpcmVfQWRkVG9DYXJ0QXR0cmlidXRlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0FkZFRvQ2FydEF0dHJpYnV0ZXMuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkFkZFRvQ2FydEF0dHJpYnV0ZXMgPSBpbnN0YW5jZU9mQWRkVG9DYXJ0QXR0cmlidXRlcztcblx0ZXhwb3J0cy5BZGRUb0NhcnRBdHRyaWJ1dGVzRnJvbUpTT04gPSBBZGRUb0NhcnRBdHRyaWJ1dGVzRnJvbUpTT047XG5cdGV4cG9ydHMuQWRkVG9DYXJ0QXR0cmlidXRlc0Zyb21KU09OVHlwZWQgPSBBZGRUb0NhcnRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5BZGRUb0NhcnRBdHRyaWJ1dGVzVG9KU09OID0gQWRkVG9DYXJ0QXR0cmlidXRlc1RvSlNPTjtcblx0ZXhwb3J0cy5BZGRUb0NhcnRBdHRyaWJ1dGVzVG9KU09OVHlwZWQgPSBBZGRUb0NhcnRBdHRyaWJ1dGVzVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIEFkZFRvQ2FydEF0dHJpYnV0ZXMgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mQWRkVG9DYXJ0QXR0cmlidXRlcyh2YWx1ZSkge1xuXHRcdGlmICghKFwicHJvZHVjdF9pZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInByb2R1Y3RfaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIEFkZFRvQ2FydEF0dHJpYnV0ZXNGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEFkZFRvQ2FydEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBBZGRUb0NhcnRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHsgXCJwcm9kdWN0X2lkXCI6IGpzb25bXCJwcm9kdWN0X2lkXCJdIH07XG5cdH1cblx0ZnVuY3Rpb24gQWRkVG9DYXJ0QXR0cmlidXRlc1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEFkZFRvQ2FydEF0dHJpYnV0ZXNUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQWRkVG9DYXJ0QXR0cmlidXRlc1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7IFwicHJvZHVjdF9pZFwiOiB2YWx1ZVtcInByb2R1Y3RfaWRcIl0gfTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0LmpzXG52YXIgcmVxdWlyZV9BbmFseXRpY3NJZGVudGlmeVJlcXVlc3QgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9BbmFseXRpY3NJZGVudGlmeVJlcXVlc3QuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkFuYWx5dGljc0lkZW50aWZ5UmVxdWVzdCA9IGluc3RhbmNlT2ZBbmFseXRpY3NJZGVudGlmeVJlcXVlc3Q7XG5cdGV4cG9ydHMuQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0RnJvbUpTT04gPSBBbmFseXRpY3NJZGVudGlmeVJlcXVlc3RGcm9tSlNPTjtcblx0ZXhwb3J0cy5BbmFseXRpY3NJZGVudGlmeVJlcXVlc3RGcm9tSlNPTlR5cGVkID0gQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5BbmFseXRpY3NJZGVudGlmeVJlcXVlc3RUb0pTT04gPSBBbmFseXRpY3NJZGVudGlmeVJlcXVlc3RUb0pTT047XG5cdGV4cG9ydHMuQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0VG9KU09OVHlwZWQgPSBBbmFseXRpY3NJZGVudGlmeVJlcXVlc3RUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0IGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkFuYWx5dGljc0lkZW50aWZ5UmVxdWVzdCh2YWx1ZSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIEFuYWx5dGljc0lkZW50aWZ5UmVxdWVzdEZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiYXBwX3ZlcnNpb25cIjoganNvbltcImFwcF92ZXJzaW9uXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiYXBwX3ZlcnNpb25cIl0sXG5cdFx0XHRcImNhcnJpZXJcIjoganNvbltcImNhcnJpZXJcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJjYXJyaWVyXCJdLFxuXHRcdFx0XCJjaXR5XCI6IGpzb25bXCJjaXR5XCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiY2l0eVwiXSxcblx0XHRcdFwiY291bnRyeVwiOiBqc29uW1wiY291bnRyeVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImNvdW50cnlcIl0sXG5cdFx0XHRcImRldmljZV9icmFuZFwiOiBqc29uW1wiZGV2aWNlX2JyYW5kXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiZGV2aWNlX2JyYW5kXCJdLFxuXHRcdFx0XCJkZXZpY2VfaWRcIjoganNvbltcImRldmljZV9pZFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImRldmljZV9pZFwiXSxcblx0XHRcdFwiZGV2aWNlX21hbnVmYWN0dXJlclwiOiBqc29uW1wiZGV2aWNlX21hbnVmYWN0dXJlclwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImRldmljZV9tYW51ZmFjdHVyZXJcIl0sXG5cdFx0XHRcImRldmljZV9tb2RlbFwiOiBqc29uW1wiZGV2aWNlX21vZGVsXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiZGV2aWNlX21vZGVsXCJdLFxuXHRcdFx0XCJkbWFcIjoganNvbltcImRtYVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImRtYVwiXSxcblx0XHRcdFwiZ3JvdXBzXCI6IGpzb25bXCJncm91cHNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJncm91cHNcIl0sXG5cdFx0XHRcIm9zX25hbWVcIjoganNvbltcIm9zX25hbWVcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJvc19uYW1lXCJdLFxuXHRcdFx0XCJvc192ZXJzaW9uXCI6IGpzb25bXCJvc192ZXJzaW9uXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wib3NfdmVyc2lvblwiXSxcblx0XHRcdFwicGxhdGZvcm1cIjoganNvbltcInBsYXRmb3JtXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wicGxhdGZvcm1cIl0sXG5cdFx0XHRcInJlZ2lvblwiOiBqc29uW1wicmVnaW9uXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wicmVnaW9uXCJdLFxuXHRcdFx0XCJ1c2VyX2lkXCI6IGpzb25bXCJ1c2VyX2lkXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1widXNlcl9pZFwiXSxcblx0XHRcdFwidXNlcl9wcm9wZXJ0aWVzXCI6IGpzb25bXCJ1c2VyX3Byb3BlcnRpZXNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJ1c2VyX3Byb3BlcnRpZXNcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIEFuYWx5dGljc0lkZW50aWZ5UmVxdWVzdFRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEFuYWx5dGljc0lkZW50aWZ5UmVxdWVzdFRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBBbmFseXRpY3NJZGVudGlmeVJlcXVlc3RUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJhcHBfdmVyc2lvblwiOiB2YWx1ZVtcImFwcF92ZXJzaW9uXCJdLFxuXHRcdFx0XCJjYXJyaWVyXCI6IHZhbHVlW1wiY2FycmllclwiXSxcblx0XHRcdFwiY2l0eVwiOiB2YWx1ZVtcImNpdHlcIl0sXG5cdFx0XHRcImNvdW50cnlcIjogdmFsdWVbXCJjb3VudHJ5XCJdLFxuXHRcdFx0XCJkZXZpY2VfYnJhbmRcIjogdmFsdWVbXCJkZXZpY2VfYnJhbmRcIl0sXG5cdFx0XHRcImRldmljZV9pZFwiOiB2YWx1ZVtcImRldmljZV9pZFwiXSxcblx0XHRcdFwiZGV2aWNlX21hbnVmYWN0dXJlclwiOiB2YWx1ZVtcImRldmljZV9tYW51ZmFjdHVyZXJcIl0sXG5cdFx0XHRcImRldmljZV9tb2RlbFwiOiB2YWx1ZVtcImRldmljZV9tb2RlbFwiXSxcblx0XHRcdFwiZG1hXCI6IHZhbHVlW1wiZG1hXCJdLFxuXHRcdFx0XCJncm91cHNcIjogdmFsdWVbXCJncm91cHNcIl0sXG5cdFx0XHRcIm9zX25hbWVcIjogdmFsdWVbXCJvc19uYW1lXCJdLFxuXHRcdFx0XCJvc192ZXJzaW9uXCI6IHZhbHVlW1wib3NfdmVyc2lvblwiXSxcblx0XHRcdFwicGxhdGZvcm1cIjogdmFsdWVbXCJwbGF0Zm9ybVwiXSxcblx0XHRcdFwicmVnaW9uXCI6IHZhbHVlW1wicmVnaW9uXCJdLFxuXHRcdFx0XCJ1c2VyX2lkXCI6IHZhbHVlW1widXNlcl9pZFwiXSxcblx0XHRcdFwidXNlcl9wcm9wZXJ0aWVzXCI6IHZhbHVlW1widXNlcl9wcm9wZXJ0aWVzXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQW5hbHl0aWNzVHJhY2tFdmVudFJlcXVlc3QuanNcbnZhciByZXF1aXJlX0FuYWx5dGljc1RyYWNrRXZlbnRSZXF1ZXN0ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQW5hbHl0aWNzVHJhY2tFdmVudFJlcXVlc3QuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkFuYWx5dGljc1RyYWNrRXZlbnRSZXF1ZXN0ID0gaW5zdGFuY2VPZkFuYWx5dGljc1RyYWNrRXZlbnRSZXF1ZXN0O1xuXHRleHBvcnRzLkFuYWx5dGljc1RyYWNrRXZlbnRSZXF1ZXN0RnJvbUpTT04gPSBBbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdEZyb21KU09OO1xuXHRleHBvcnRzLkFuYWx5dGljc1RyYWNrRXZlbnRSZXF1ZXN0RnJvbUpTT05UeXBlZCA9IEFuYWx5dGljc1RyYWNrRXZlbnRSZXF1ZXN0RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5BbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdFRvSlNPTiA9IEFuYWx5dGljc1RyYWNrRXZlbnRSZXF1ZXN0VG9KU09OO1xuXHRleHBvcnRzLkFuYWx5dGljc1RyYWNrRXZlbnRSZXF1ZXN0VG9KU09OVHlwZWQgPSBBbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdFRvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBBbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZBbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdCh2YWx1ZSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIEFuYWx5dGljc1RyYWNrRXZlbnRSZXF1ZXN0RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBBbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEFuYWx5dGljc1RyYWNrRXZlbnRSZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiZXZlbnRcIjoganNvbltcImV2ZW50XCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiZXZlbnRcIl0sXG5cdFx0XHRcImV2ZW50X3Byb3BlcnRpZXNcIjoganNvbltcImV2ZW50X3Byb3BlcnRpZXNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJldmVudF9wcm9wZXJ0aWVzXCJdLFxuXHRcdFx0XCJ1c2VyX2lkXCI6IGpzb25bXCJ1c2VyX2lkXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1widXNlcl9pZFwiXSxcblx0XHRcdFwidXNlcl9wcm9wZXJ0aWVzXCI6IGpzb25bXCJ1c2VyX3Byb3BlcnRpZXNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJ1c2VyX3Byb3BlcnRpZXNcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIEFuYWx5dGljc1RyYWNrRXZlbnRSZXF1ZXN0VG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQW5hbHl0aWNzVHJhY2tFdmVudFJlcXVlc3RUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQW5hbHl0aWNzVHJhY2tFdmVudFJlcXVlc3RUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJldmVudFwiOiB2YWx1ZVtcImV2ZW50XCJdLFxuXHRcdFx0XCJldmVudF9wcm9wZXJ0aWVzXCI6IHZhbHVlW1wiZXZlbnRfcHJvcGVydGllc1wiXSxcblx0XHRcdFwidXNlcl9pZFwiOiB2YWx1ZVtcInVzZXJfaWRcIl0sXG5cdFx0XHRcInVzZXJfcHJvcGVydGllc1wiOiB2YWx1ZVtcInVzZXJfcHJvcGVydGllc1wiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0F0dGFjaG1lbnRSZXF1ZXN0LmpzXG52YXIgcmVxdWlyZV9BdHRhY2htZW50UmVxdWVzdCA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0F0dGFjaG1lbnRSZXF1ZXN0LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZBdHRhY2htZW50UmVxdWVzdCA9IGluc3RhbmNlT2ZBdHRhY2htZW50UmVxdWVzdDtcblx0ZXhwb3J0cy5BdHRhY2htZW50UmVxdWVzdEZyb21KU09OID0gQXR0YWNobWVudFJlcXVlc3RGcm9tSlNPTjtcblx0ZXhwb3J0cy5BdHRhY2htZW50UmVxdWVzdEZyb21KU09OVHlwZWQgPSBBdHRhY2htZW50UmVxdWVzdEZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuQXR0YWNobWVudFJlcXVlc3RUb0pTT04gPSBBdHRhY2htZW50UmVxdWVzdFRvSlNPTjtcblx0ZXhwb3J0cy5BdHRhY2htZW50UmVxdWVzdFRvSlNPTlR5cGVkID0gQXR0YWNobWVudFJlcXVlc3RUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgQXR0YWNobWVudFJlcXVlc3QgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mQXR0YWNobWVudFJlcXVlc3QodmFsdWUpIHtcblx0XHRpZiAoIShcImJhc2U2NF9jb250ZW50XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiYmFzZTY0X2NvbnRlbnRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiY29udGVudF90eXBlXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY29udGVudF90eXBlXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImZpbGVfbmFtZVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImZpbGVfbmFtZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gQXR0YWNobWVudFJlcXVlc3RGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEF0dGFjaG1lbnRSZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQXR0YWNobWVudFJlcXVlc3RGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJiYXNlNjRfY29udGVudFwiOiBqc29uW1wiYmFzZTY0X2NvbnRlbnRcIl0sXG5cdFx0XHRcImNvbnRlbnRfdHlwZVwiOiBqc29uW1wiY29udGVudF90eXBlXCJdLFxuXHRcdFx0XCJmaWxlX25hbWVcIjoganNvbltcImZpbGVfbmFtZVwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gQXR0YWNobWVudFJlcXVlc3RUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBBdHRhY2htZW50UmVxdWVzdFRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBBdHRhY2htZW50UmVxdWVzdFRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImJhc2U2NF9jb250ZW50XCI6IHZhbHVlW1wiYmFzZTY0X2NvbnRlbnRcIl0sXG5cdFx0XHRcImNvbnRlbnRfdHlwZVwiOiB2YWx1ZVtcImNvbnRlbnRfdHlwZVwiXSxcblx0XHRcdFwiZmlsZV9uYW1lXCI6IHZhbHVlW1wiZmlsZV9uYW1lXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvRm9ybVR5cGUuanNcbnZhciByZXF1aXJlX0Zvcm1UeXBlID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvRm9ybVR5cGUuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuRm9ybVR5cGUgPSB2b2lkIDA7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkZvcm1UeXBlID0gaW5zdGFuY2VPZkZvcm1UeXBlO1xuXHRleHBvcnRzLkZvcm1UeXBlRnJvbUpTT04gPSBGb3JtVHlwZUZyb21KU09OO1xuXHRleHBvcnRzLkZvcm1UeXBlRnJvbUpTT05UeXBlZCA9IEZvcm1UeXBlRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5Gb3JtVHlwZVRvSlNPTiA9IEZvcm1UeXBlVG9KU09OO1xuXHRleHBvcnRzLkZvcm1UeXBlVG9KU09OVHlwZWQgPSBGb3JtVHlwZVRvSlNPTlR5cGVkO1xuXHQvKipcblx0KlxuXHQqIEBleHBvcnRcblx0KiBAZW51bSB7c3RyaW5nfVxuXHQqL1xuXHR2YXIgRm9ybVR5cGU7XG5cdChmdW5jdGlvbihGb3JtVHlwZSQxKSB7XG5cdFx0Rm9ybVR5cGUkMVtcIkVzY2FsYXRpb25cIl0gPSBcImVzY2FsYXRpb25cIjtcblx0XHRGb3JtVHlwZSQxW1wiT3JkZXJMb29rdXBcIl0gPSBcIm9yZGVyX2xvb2t1cFwiO1xuXHR9KShGb3JtVHlwZSB8fCAoZXhwb3J0cy5Gb3JtVHlwZSA9IEZvcm1UeXBlID0ge30pKTtcblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkZvcm1UeXBlKHZhbHVlKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gRm9ybVR5cGUpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoRm9ybVR5cGUsIGtleSkpIHtcblx0XHRcdGlmIChGb3JtVHlwZVtrZXldID09PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRmdW5jdGlvbiBGb3JtVHlwZUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gRm9ybVR5cGVGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBGb3JtVHlwZUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdHJldHVybiBqc29uO1xuXHR9XG5cdGZ1bmN0aW9uIEZvcm1UeXBlVG9KU09OKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdGZ1bmN0aW9uIEZvcm1UeXBlVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0F1dG9Gb3JtLmpzXG52YXIgcmVxdWlyZV9BdXRvRm9ybSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0F1dG9Gb3JtLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZBdXRvRm9ybSA9IGluc3RhbmNlT2ZBdXRvRm9ybTtcblx0ZXhwb3J0cy5BdXRvRm9ybUZyb21KU09OID0gQXV0b0Zvcm1Gcm9tSlNPTjtcblx0ZXhwb3J0cy5BdXRvRm9ybUZyb21KU09OVHlwZWQgPSBBdXRvRm9ybUZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuQXV0b0Zvcm1Ub0pTT04gPSBBdXRvRm9ybVRvSlNPTjtcblx0ZXhwb3J0cy5BdXRvRm9ybVRvSlNPTlR5cGVkID0gQXV0b0Zvcm1Ub0pTT05UeXBlZDtcblx0Y29uc3QgRm9ybVR5cGVfMSQyID0gcmVxdWlyZV9Gb3JtVHlwZSgpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBBdXRvRm9ybSBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZBdXRvRm9ybSh2YWx1ZSkge1xuXHRcdGlmICghKFwiZm9ybV90eXBlXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiZm9ybV90eXBlXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBBdXRvRm9ybUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQXV0b0Zvcm1Gcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBBdXRvRm9ybUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7IFwiZm9ybV90eXBlXCI6ICgwLCBGb3JtVHlwZV8xJDIuRm9ybVR5cGVGcm9tSlNPTikoanNvbltcImZvcm1fdHlwZVwiXSkgfTtcblx0fVxuXHRmdW5jdGlvbiBBdXRvRm9ybVRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEF1dG9Gb3JtVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEF1dG9Gb3JtVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHsgXCJmb3JtX3R5cGVcIjogKDAsIEZvcm1UeXBlXzEkMi5Gb3JtVHlwZVRvSlNPTikodmFsdWVbXCJmb3JtX3R5cGVcIl0pIH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0NvbnRleHQuanNcbnZhciByZXF1aXJlX0NvbnRleHQgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Db250ZXh0LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLkNvbnRleHRTb3VyY2VFbnVtID0gZXhwb3J0cy5Db250ZXh0RW52RW51bSA9IHZvaWQgMDtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mQ29udGV4dCA9IGluc3RhbmNlT2ZDb250ZXh0O1xuXHRleHBvcnRzLkNvbnRleHRGcm9tSlNPTiA9IENvbnRleHRGcm9tSlNPTjtcblx0ZXhwb3J0cy5Db250ZXh0RnJvbUpTT05UeXBlZCA9IENvbnRleHRGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLkNvbnRleHRUb0pTT04gPSBDb250ZXh0VG9KU09OO1xuXHRleHBvcnRzLkNvbnRleHRUb0pTT05UeXBlZCA9IENvbnRleHRUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQGV4cG9ydFxuXHQqIEBlbnVtIHtzdHJpbmd9XG5cdCovXG5cdHZhciBDb250ZXh0RW52RW51bTtcblx0KGZ1bmN0aW9uKENvbnRleHRFbnZFbnVtJDEpIHtcblx0XHRDb250ZXh0RW52RW51bSQxW1wiUHJvZFwiXSA9IFwicHJvZFwiO1xuXHRcdENvbnRleHRFbnZFbnVtJDFbXCJEZXZcIl0gPSBcImRldlwiO1xuXHR9KShDb250ZXh0RW52RW51bSB8fCAoZXhwb3J0cy5Db250ZXh0RW52RW51bSA9IENvbnRleHRFbnZFbnVtID0ge30pKTtcblx0LyoqXG5cdCogQGV4cG9ydFxuXHQqIEBlbnVtIHtzdHJpbmd9XG5cdCovXG5cdHZhciBDb250ZXh0U291cmNlRW51bTtcblx0KGZ1bmN0aW9uKENvbnRleHRTb3VyY2VFbnVtJDEpIHtcblx0XHRDb250ZXh0U291cmNlRW51bSQxW1wiRm9ya1wiXSA9IFwiZm9ya1wiO1xuXHRcdENvbnRleHRTb3VyY2VFbnVtJDFbXCJQbGF5Z3JvdW5kXCJdID0gXCJwbGF5Z3JvdW5kXCI7XG5cdFx0Q29udGV4dFNvdXJjZUVudW0kMVtcIkFwcFwiXSA9IFwiYXBwXCI7XG5cdFx0Q29udGV4dFNvdXJjZUVudW0kMVtcIlRlc3RcIl0gPSBcInRlc3RcIjtcblx0fSkoQ29udGV4dFNvdXJjZUVudW0gfHwgKGV4cG9ydHMuQ29udGV4dFNvdXJjZUVudW0gPSBDb250ZXh0U291cmNlRW51bSA9IHt9KSk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIENvbnRleHQgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mQ29udGV4dCh2YWx1ZSkge1xuXHRcdGlmICghKFwidXNlcl9pZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInVzZXJfaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIENvbnRleHRGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIENvbnRleHRGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBDb250ZXh0RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY2hhdF9pZFwiOiBqc29uW1wiY2hhdF9pZFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImNoYXRfaWRcIl0sXG5cdFx0XHRcImVudlwiOiBqc29uW1wiZW52XCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiZW52XCJdLFxuXHRcdFx0XCJvcmdfaWRcIjoganNvbltcIm9yZ19pZFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm9yZ19pZFwiXSxcblx0XHRcdFwib3JnX3Nob3J0X25hbWVcIjoganNvbltcIm9yZ19zaG9ydF9uYW1lXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wib3JnX3Nob3J0X25hbWVcIl0sXG5cdFx0XHRcInNvdXJjZVwiOiBqc29uW1wic291cmNlXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wic291cmNlXCJdLFxuXHRcdFx0XCJ1c2VyX2lkXCI6IGpzb25bXCJ1c2VyX2lkXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBDb250ZXh0VG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQ29udGV4dFRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBDb250ZXh0VG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY2hhdF9pZFwiOiB2YWx1ZVtcImNoYXRfaWRcIl0sXG5cdFx0XHRcImVudlwiOiB2YWx1ZVtcImVudlwiXSxcblx0XHRcdFwib3JnX2lkXCI6IHZhbHVlW1wib3JnX2lkXCJdLFxuXHRcdFx0XCJvcmdfc2hvcnRfbmFtZVwiOiB2YWx1ZVtcIm9yZ19zaG9ydF9uYW1lXCJdLFxuXHRcdFx0XCJzb3VyY2VcIjogdmFsdWVbXCJzb3VyY2VcIl0sXG5cdFx0XHRcInVzZXJfaWRcIjogdmFsdWVbXCJ1c2VyX2lkXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ29udmVyc2F0aW9uU3RhdHVzLmpzXG52YXIgcmVxdWlyZV9Db252ZXJzYXRpb25TdGF0dXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Db252ZXJzYXRpb25TdGF0dXMuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuQ29udmVyc2F0aW9uU3RhdHVzID0gdm9pZCAwO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZDb252ZXJzYXRpb25TdGF0dXMgPSBpbnN0YW5jZU9mQ29udmVyc2F0aW9uU3RhdHVzO1xuXHRleHBvcnRzLkNvbnZlcnNhdGlvblN0YXR1c0Zyb21KU09OID0gQ29udmVyc2F0aW9uU3RhdHVzRnJvbUpTT047XG5cdGV4cG9ydHMuQ29udmVyc2F0aW9uU3RhdHVzRnJvbUpTT05UeXBlZCA9IENvbnZlcnNhdGlvblN0YXR1c0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuQ29udmVyc2F0aW9uU3RhdHVzVG9KU09OID0gQ29udmVyc2F0aW9uU3RhdHVzVG9KU09OO1xuXHRleHBvcnRzLkNvbnZlcnNhdGlvblN0YXR1c1RvSlNPTlR5cGVkID0gQ29udmVyc2F0aW9uU3RhdHVzVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIFN0YW5kYXJkaXplZCBzdGF0dXMgdmFsdWVzIGZvciBjdXN0b21lciBzZXJ2aWNlIGNvbnZlcnNhdGlvbnMgYWNyb3NzIHBsYXRmb3Jtc1xuXHQqIEBleHBvcnRcblx0KiBAZW51bSB7c3RyaW5nfVxuXHQqL1xuXHR2YXIgQ29udmVyc2F0aW9uU3RhdHVzO1xuXHQoZnVuY3Rpb24oQ29udmVyc2F0aW9uU3RhdHVzJDEpIHtcblx0XHRDb252ZXJzYXRpb25TdGF0dXMkMVtcIk9wZW5cIl0gPSBcIk9QRU5cIjtcblx0XHRDb252ZXJzYXRpb25TdGF0dXMkMVtcIkNsb3NlZFwiXSA9IFwiQ0xPU0VEXCI7XG5cdFx0Q29udmVyc2F0aW9uU3RhdHVzJDFbXCJQZW5kaW5nXCJdID0gXCJQRU5ESU5HXCI7XG5cdFx0Q29udmVyc2F0aW9uU3RhdHVzJDFbXCJPdGhlclwiXSA9IFwiT1RIRVJcIjtcblx0fSkoQ29udmVyc2F0aW9uU3RhdHVzIHx8IChleHBvcnRzLkNvbnZlcnNhdGlvblN0YXR1cyA9IENvbnZlcnNhdGlvblN0YXR1cyA9IHt9KSk7XG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZDb252ZXJzYXRpb25TdGF0dXModmFsdWUpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBDb252ZXJzYXRpb25TdGF0dXMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQ29udmVyc2F0aW9uU3RhdHVzLCBrZXkpKSB7XG5cdFx0XHRpZiAoQ29udmVyc2F0aW9uU3RhdHVzW2tleV0gPT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGZ1bmN0aW9uIENvbnZlcnNhdGlvblN0YXR1c0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQ29udmVyc2F0aW9uU3RhdHVzRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQ29udmVyc2F0aW9uU3RhdHVzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0cmV0dXJuIGpzb247XG5cdH1cblx0ZnVuY3Rpb24gQ29udmVyc2F0aW9uU3RhdHVzVG9KU09OKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdGZ1bmN0aW9uIENvbnZlcnNhdGlvblN0YXR1c1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9DcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0LmpzXG52YXIgcmVxdWlyZV9DcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdC5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdCA9IGluc3RhbmNlT2ZDcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0O1xuXHRleHBvcnRzLkNyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3RGcm9tSlNPTiA9IENyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3RGcm9tSlNPTjtcblx0ZXhwb3J0cy5DcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0RnJvbUpTT05UeXBlZCA9IENyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3RGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLkNyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3RUb0pTT04gPSBDcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0VG9KU09OO1xuXHRleHBvcnRzLkNyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3RUb0pTT05UeXBlZCA9IENyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3RUb0pTT05UeXBlZDtcblx0Y29uc3QgQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJfMSQzID0gcmVxdWlyZV9DdXN0b21lclNlcnZpY2VQcm92aWRlcigpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBDcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0IGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkNyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3QodmFsdWUpIHtcblx0XHRpZiAoIShcImVtYWlsXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiZW1haWxcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwic3BpZmZ5X3VzZXJfaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJzcGlmZnlfdXNlcl9pZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdEZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIENyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3RGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCI6IGpzb25bXCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCJdID09IG51bGwgPyB2b2lkIDAgOiAoMCwgQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJfMSQzLkN1c3RvbWVyU2VydmljZVByb3ZpZGVyRnJvbUpTT04pKGpzb25bXCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCJdKSxcblx0XHRcdFwiZW1haWxcIjoganNvbltcImVtYWlsXCJdLFxuXHRcdFx0XCJuYW1lXCI6IGpzb25bXCJuYW1lXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wibmFtZVwiXSxcblx0XHRcdFwic3BpZmZ5X3VzZXJfaWRcIjoganNvbltcInNwaWZmeV91c2VyX2lkXCJdLFxuXHRcdFx0XCJzdWJqZWN0XCI6IGpzb25bXCJzdWJqZWN0XCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wic3ViamVjdFwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdFRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIENyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3RUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdFRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXJcIjogKDAsIEN1c3RvbWVyU2VydmljZVByb3ZpZGVyXzEkMy5DdXN0b21lclNlcnZpY2VQcm92aWRlclRvSlNPTikodmFsdWVbXCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCJdKSxcblx0XHRcdFwiZW1haWxcIjogdmFsdWVbXCJlbWFpbFwiXSxcblx0XHRcdFwibmFtZVwiOiB2YWx1ZVtcIm5hbWVcIl0sXG5cdFx0XHRcInNwaWZmeV91c2VyX2lkXCI6IHZhbHVlW1wic3BpZmZ5X3VzZXJfaWRcIl0sXG5cdFx0XHRcInN1YmplY3RcIjogdmFsdWVbXCJzdWJqZWN0XCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ3VzdFNlcnZpY2VDb252ZXJzYXRpb24uanNcbnZhciByZXF1aXJlX0N1c3RTZXJ2aWNlQ29udmVyc2F0aW9uID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ3VzdFNlcnZpY2VDb252ZXJzYXRpb24uanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uID0gaW5zdGFuY2VPZkN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uO1xuXHRleHBvcnRzLkN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uRnJvbUpTT04gPSBDdXN0U2VydmljZUNvbnZlcnNhdGlvbkZyb21KU09OO1xuXHRleHBvcnRzLkN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uRnJvbUpTT05UeXBlZCA9IEN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5DdXN0U2VydmljZUNvbnZlcnNhdGlvblRvSlNPTiA9IEN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uVG9KU09OO1xuXHRleHBvcnRzLkN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uVG9KU09OVHlwZWQgPSBDdXN0U2VydmljZUNvbnZlcnNhdGlvblRvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBDdXN0U2VydmljZUNvbnZlcnNhdGlvbiBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZDdXN0U2VydmljZUNvbnZlcnNhdGlvbih2YWx1ZSkge1xuXHRcdGlmICghKFwiY3JlYXRlZF9hdFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNyZWF0ZWRfYXRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiY3VzdG9tZXJfaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJjdXN0b21lcl9pZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJpZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImlkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcIm5hbWVcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJuYW1lXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInN0YXR1c1wiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInN0YXR1c1wiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25Gcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25Gcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjcmVhdGVkX2F0XCI6IG5ldyBEYXRlKGpzb25bXCJjcmVhdGVkX2F0XCJdKSxcblx0XHRcdFwiY3VzdG9tZXJfaWRcIjoganNvbltcImN1c3RvbWVyX2lkXCJdLFxuXHRcdFx0XCJpZFwiOiBqc29uW1wiaWRcIl0sXG5cdFx0XHRcIm5hbWVcIjoganNvbltcIm5hbWVcIl0sXG5cdFx0XHRcInN0YXR1c1wiOiBqc29uW1wic3RhdHVzXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBDdXN0U2VydmljZUNvbnZlcnNhdGlvblRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY3JlYXRlZF9hdFwiOiB2YWx1ZVtcImNyZWF0ZWRfYXRcIl0udG9JU09TdHJpbmcoKSxcblx0XHRcdFwiY3VzdG9tZXJfaWRcIjogdmFsdWVbXCJjdXN0b21lcl9pZFwiXSxcblx0XHRcdFwiaWRcIjogdmFsdWVbXCJpZFwiXSxcblx0XHRcdFwibmFtZVwiOiB2YWx1ZVtcIm5hbWVcIl0sXG5cdFx0XHRcInN0YXR1c1wiOiB2YWx1ZVtcInN0YXR1c1wiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0N1c3RTZXJ2aWNlQ3VzdG9tZXIuanNcbnZhciByZXF1aXJlX0N1c3RTZXJ2aWNlQ3VzdG9tZXIgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9DdXN0U2VydmljZUN1c3RvbWVyLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZDdXN0U2VydmljZUN1c3RvbWVyID0gaW5zdGFuY2VPZkN1c3RTZXJ2aWNlQ3VzdG9tZXI7XG5cdGV4cG9ydHMuQ3VzdFNlcnZpY2VDdXN0b21lckZyb21KU09OID0gQ3VzdFNlcnZpY2VDdXN0b21lckZyb21KU09OO1xuXHRleHBvcnRzLkN1c3RTZXJ2aWNlQ3VzdG9tZXJGcm9tSlNPTlR5cGVkID0gQ3VzdFNlcnZpY2VDdXN0b21lckZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuQ3VzdFNlcnZpY2VDdXN0b21lclRvSlNPTiA9IEN1c3RTZXJ2aWNlQ3VzdG9tZXJUb0pTT047XG5cdGV4cG9ydHMuQ3VzdFNlcnZpY2VDdXN0b21lclRvSlNPTlR5cGVkID0gQ3VzdFNlcnZpY2VDdXN0b21lclRvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBDdXN0U2VydmljZUN1c3RvbWVyIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkN1c3RTZXJ2aWNlQ3VzdG9tZXIodmFsdWUpIHtcblx0XHRpZiAoIShcImVtYWlsXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiZW1haWxcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJpZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gQ3VzdFNlcnZpY2VDdXN0b21lckZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQ3VzdFNlcnZpY2VDdXN0b21lckZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RTZXJ2aWNlQ3VzdG9tZXJGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJlbWFpbFwiOiBqc29uW1wiZW1haWxcIl0sXG5cdFx0XHRcImlkXCI6IGpzb25bXCJpZFwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gQ3VzdFNlcnZpY2VDdXN0b21lclRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEN1c3RTZXJ2aWNlQ3VzdG9tZXJUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQ3VzdFNlcnZpY2VDdXN0b21lclRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImVtYWlsXCI6IHZhbHVlW1wiZW1haWxcIl0sXG5cdFx0XHRcImlkXCI6IHZhbHVlW1wiaWRcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9DcmVhdGVDb252ZXJzYXRpb25SZXNwb25zZS5qc1xudmFyIHJlcXVpcmVfQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2UgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9DcmVhdGVDb252ZXJzYXRpb25SZXNwb25zZS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2UgPSBpbnN0YW5jZU9mQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2U7XG5cdGV4cG9ydHMuQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2VGcm9tSlNPTiA9IENyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlRnJvbUpTT047XG5cdGV4cG9ydHMuQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2VGcm9tSlNPTlR5cGVkID0gQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2VGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLkNyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlVG9KU09OID0gQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2VUb0pTT047XG5cdGV4cG9ydHMuQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2VUb0pTT05UeXBlZCA9IENyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlVG9KU09OVHlwZWQ7XG5cdGNvbnN0IEN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uXzEgPSByZXF1aXJlX0N1c3RTZXJ2aWNlQ29udmVyc2F0aW9uKCk7XG5cdGNvbnN0IEN1c3RTZXJ2aWNlQ3VzdG9tZXJfMSA9IHJlcXVpcmVfQ3VzdFNlcnZpY2VDdXN0b21lcigpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBDcmVhdGVDb252ZXJzYXRpb25SZXNwb25zZSBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZDcmVhdGVDb252ZXJzYXRpb25SZXNwb25zZSh2YWx1ZSkge1xuXHRcdGlmICghKFwiY29udmVyc2F0aW9uXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY29udmVyc2F0aW9uXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImN1c3RvbWVyXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY3VzdG9tZXJcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIENyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBDcmVhdGVDb252ZXJzYXRpb25SZXNwb25zZUZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIENyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29udmVyc2F0aW9uXCI6ICgwLCBDdXN0U2VydmljZUNvbnZlcnNhdGlvbl8xLkN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uRnJvbUpTT04pKGpzb25bXCJjb252ZXJzYXRpb25cIl0pLFxuXHRcdFx0XCJjdXN0b21lclwiOiAoMCwgQ3VzdFNlcnZpY2VDdXN0b21lcl8xLkN1c3RTZXJ2aWNlQ3VzdG9tZXJGcm9tSlNPTikoanNvbltcImN1c3RvbWVyXCJdKVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2VUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBDcmVhdGVDb252ZXJzYXRpb25SZXNwb25zZVRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBDcmVhdGVDb252ZXJzYXRpb25SZXNwb25zZVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvbnZlcnNhdGlvblwiOiAoMCwgQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25fMS5DdXN0U2VydmljZUNvbnZlcnNhdGlvblRvSlNPTikodmFsdWVbXCJjb252ZXJzYXRpb25cIl0pLFxuXHRcdFx0XCJjdXN0b21lclwiOiAoMCwgQ3VzdFNlcnZpY2VDdXN0b21lcl8xLkN1c3RTZXJ2aWNlQ3VzdG9tZXJUb0pTT04pKHZhbHVlW1wiY3VzdG9tZXJcIl0pXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ3VzdFNlcnZpY2VBdHRhY2htZW50LmpzXG52YXIgcmVxdWlyZV9DdXN0U2VydmljZUF0dGFjaG1lbnQgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9DdXN0U2VydmljZUF0dGFjaG1lbnQuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkN1c3RTZXJ2aWNlQXR0YWNobWVudCA9IGluc3RhbmNlT2ZDdXN0U2VydmljZUF0dGFjaG1lbnQ7XG5cdGV4cG9ydHMuQ3VzdFNlcnZpY2VBdHRhY2htZW50RnJvbUpTT04gPSBDdXN0U2VydmljZUF0dGFjaG1lbnRGcm9tSlNPTjtcblx0ZXhwb3J0cy5DdXN0U2VydmljZUF0dGFjaG1lbnRGcm9tSlNPTlR5cGVkID0gQ3VzdFNlcnZpY2VBdHRhY2htZW50RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5DdXN0U2VydmljZUF0dGFjaG1lbnRUb0pTT04gPSBDdXN0U2VydmljZUF0dGFjaG1lbnRUb0pTT047XG5cdGV4cG9ydHMuQ3VzdFNlcnZpY2VBdHRhY2htZW50VG9KU09OVHlwZWQgPSBDdXN0U2VydmljZUF0dGFjaG1lbnRUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgQ3VzdFNlcnZpY2VBdHRhY2htZW50IGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkN1c3RTZXJ2aWNlQXR0YWNobWVudCh2YWx1ZSkge1xuXHRcdGlmICghKFwiY29udGVudF9sZW5ndGhcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJjb250ZW50X2xlbmd0aFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJjb250ZW50X3R5cGVcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJjb250ZW50X3R5cGVcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJpZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJuYW1lXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wibmFtZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gQ3VzdFNlcnZpY2VBdHRhY2htZW50RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBDdXN0U2VydmljZUF0dGFjaG1lbnRGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBDdXN0U2VydmljZUF0dGFjaG1lbnRGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb250ZW50X2xlbmd0aFwiOiBqc29uW1wiY29udGVudF9sZW5ndGhcIl0sXG5cdFx0XHRcImNvbnRlbnRfdHlwZVwiOiBqc29uW1wiY29udGVudF90eXBlXCJdLFxuXHRcdFx0XCJpZFwiOiBqc29uW1wiaWRcIl0sXG5cdFx0XHRcIm5hbWVcIjoganNvbltcIm5hbWVcIl0sXG5cdFx0XHRcInVybFwiOiBqc29uW1widXJsXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1widXJsXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBDdXN0U2VydmljZUF0dGFjaG1lbnRUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBDdXN0U2VydmljZUF0dGFjaG1lbnRUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQ3VzdFNlcnZpY2VBdHRhY2htZW50VG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29udGVudF9sZW5ndGhcIjogdmFsdWVbXCJjb250ZW50X2xlbmd0aFwiXSxcblx0XHRcdFwiY29udGVudF90eXBlXCI6IHZhbHVlW1wiY29udGVudF90eXBlXCJdLFxuXHRcdFx0XCJpZFwiOiB2YWx1ZVtcImlkXCJdLFxuXHRcdFx0XCJuYW1lXCI6IHZhbHVlW1wibmFtZVwiXSxcblx0XHRcdFwidXJsXCI6IHZhbHVlW1widXJsXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ3VzdFNlcnZpY2VNZXNzYWdlLmpzXG52YXIgcmVxdWlyZV9DdXN0U2VydmljZU1lc3NhZ2UgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9DdXN0U2VydmljZU1lc3NhZ2UuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkN1c3RTZXJ2aWNlTWVzc2FnZSA9IGluc3RhbmNlT2ZDdXN0U2VydmljZU1lc3NhZ2U7XG5cdGV4cG9ydHMuQ3VzdFNlcnZpY2VNZXNzYWdlRnJvbUpTT04gPSBDdXN0U2VydmljZU1lc3NhZ2VGcm9tSlNPTjtcblx0ZXhwb3J0cy5DdXN0U2VydmljZU1lc3NhZ2VGcm9tSlNPTlR5cGVkID0gQ3VzdFNlcnZpY2VNZXNzYWdlRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5DdXN0U2VydmljZU1lc3NhZ2VUb0pTT04gPSBDdXN0U2VydmljZU1lc3NhZ2VUb0pTT047XG5cdGV4cG9ydHMuQ3VzdFNlcnZpY2VNZXNzYWdlVG9KU09OVHlwZWQgPSBDdXN0U2VydmljZU1lc3NhZ2VUb0pTT05UeXBlZDtcblx0Y29uc3QgQ3VzdFNlcnZpY2VBdHRhY2htZW50XzEgPSByZXF1aXJlX0N1c3RTZXJ2aWNlQXR0YWNobWVudCgpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBDdXN0U2VydmljZU1lc3NhZ2UgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mQ3VzdFNlcnZpY2VNZXNzYWdlKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJib2R5XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiYm9keVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJjcmVhdGVkX2F0XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY3JlYXRlZF9hdFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJjdXN0b21lcl9pZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImN1c3RvbWVyX2lkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImRpcmVjdGlvblwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImRpcmVjdGlvblwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJpZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImlkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImlzX2FnZW50XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaXNfYWdlbnRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiaXNfYXV0b21hdGljX21lc3NhZ2VcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJpc19hdXRvbWF0aWNfbWVzc2FnZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gQ3VzdFNlcnZpY2VNZXNzYWdlRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBDdXN0U2VydmljZU1lc3NhZ2VGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBDdXN0U2VydmljZU1lc3NhZ2VGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJhZ2VudF9pZFwiOiBqc29uW1wiYWdlbnRfaWRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJhZ2VudF9pZFwiXSxcblx0XHRcdFwiYWdlbnRfbmFtZVwiOiBqc29uW1wiYWdlbnRfbmFtZVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImFnZW50X25hbWVcIl0sXG5cdFx0XHRcImF0dGFjaG1lbnRzXCI6IGpzb25bXCJhdHRhY2htZW50c1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImF0dGFjaG1lbnRzXCJdLm1hcChDdXN0U2VydmljZUF0dGFjaG1lbnRfMS5DdXN0U2VydmljZUF0dGFjaG1lbnRGcm9tSlNPTiksXG5cdFx0XHRcImJvZHlcIjoganNvbltcImJvZHlcIl0sXG5cdFx0XHRcImNyZWF0ZWRfYXRcIjogbmV3IERhdGUoanNvbltcImNyZWF0ZWRfYXRcIl0pLFxuXHRcdFx0XCJjdXN0b21lcl9pZFwiOiBqc29uW1wiY3VzdG9tZXJfaWRcIl0sXG5cdFx0XHRcImRpcmVjdGlvblwiOiBqc29uW1wiZGlyZWN0aW9uXCJdLFxuXHRcdFx0XCJpZFwiOiBqc29uW1wiaWRcIl0sXG5cdFx0XHRcImlzX2FnZW50XCI6IGpzb25bXCJpc19hZ2VudFwiXSxcblx0XHRcdFwiaXNfYXV0b21hdGljX21lc3NhZ2VcIjoganNvbltcImlzX2F1dG9tYXRpY19tZXNzYWdlXCJdLFxuXHRcdFx0XCJpc19lbWFpbFwiOiBqc29uW1wiaXNfZW1haWxcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJpc19lbWFpbFwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gQ3VzdFNlcnZpY2VNZXNzYWdlVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQ3VzdFNlcnZpY2VNZXNzYWdlVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RTZXJ2aWNlTWVzc2FnZVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImFnZW50X2lkXCI6IHZhbHVlW1wiYWdlbnRfaWRcIl0sXG5cdFx0XHRcImFnZW50X25hbWVcIjogdmFsdWVbXCJhZ2VudF9uYW1lXCJdLFxuXHRcdFx0XCJhdHRhY2htZW50c1wiOiB2YWx1ZVtcImF0dGFjaG1lbnRzXCJdID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZVtcImF0dGFjaG1lbnRzXCJdLm1hcChDdXN0U2VydmljZUF0dGFjaG1lbnRfMS5DdXN0U2VydmljZUF0dGFjaG1lbnRUb0pTT04pLFxuXHRcdFx0XCJib2R5XCI6IHZhbHVlW1wiYm9keVwiXSxcblx0XHRcdFwiY3JlYXRlZF9hdFwiOiB2YWx1ZVtcImNyZWF0ZWRfYXRcIl0udG9JU09TdHJpbmcoKSxcblx0XHRcdFwiY3VzdG9tZXJfaWRcIjogdmFsdWVbXCJjdXN0b21lcl9pZFwiXSxcblx0XHRcdFwiZGlyZWN0aW9uXCI6IHZhbHVlW1wiZGlyZWN0aW9uXCJdLFxuXHRcdFx0XCJpZFwiOiB2YWx1ZVtcImlkXCJdLFxuXHRcdFx0XCJpc19hZ2VudFwiOiB2YWx1ZVtcImlzX2FnZW50XCJdLFxuXHRcdFx0XCJpc19hdXRvbWF0aWNfbWVzc2FnZVwiOiB2YWx1ZVtcImlzX2F1dG9tYXRpY19tZXNzYWdlXCJdLFxuXHRcdFx0XCJpc19lbWFpbFwiOiB2YWx1ZVtcImlzX2VtYWlsXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25NZXNzYWdlcy5qc1xudmFyIHJlcXVpcmVfQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25NZXNzYWdlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0N1c3RTZXJ2aWNlQ29udmVyc2F0aW9uTWVzc2FnZXMuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uTWVzc2FnZXMgPSBpbnN0YW5jZU9mQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25NZXNzYWdlcztcblx0ZXhwb3J0cy5DdXN0U2VydmljZUNvbnZlcnNhdGlvbk1lc3NhZ2VzRnJvbUpTT04gPSBDdXN0U2VydmljZUNvbnZlcnNhdGlvbk1lc3NhZ2VzRnJvbUpTT047XG5cdGV4cG9ydHMuQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25NZXNzYWdlc0Zyb21KU09OVHlwZWQgPSBDdXN0U2VydmljZUNvbnZlcnNhdGlvbk1lc3NhZ2VzRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5DdXN0U2VydmljZUNvbnZlcnNhdGlvbk1lc3NhZ2VzVG9KU09OID0gQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25NZXNzYWdlc1RvSlNPTjtcblx0ZXhwb3J0cy5DdXN0U2VydmljZUNvbnZlcnNhdGlvbk1lc3NhZ2VzVG9KU09OVHlwZWQgPSBDdXN0U2VydmljZUNvbnZlcnNhdGlvbk1lc3NhZ2VzVG9KU09OVHlwZWQ7XG5cdGNvbnN0IEN1c3RTZXJ2aWNlTWVzc2FnZV8xJDEgPSByZXF1aXJlX0N1c3RTZXJ2aWNlTWVzc2FnZSgpO1xuXHRjb25zdCBDb252ZXJzYXRpb25TdGF0dXNfMSA9IHJlcXVpcmVfQ29udmVyc2F0aW9uU3RhdHVzKCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIEN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uTWVzc2FnZXMgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25NZXNzYWdlcyh2YWx1ZSkge1xuXHRcdGlmICghKFwiZGF0YVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImRhdGFcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uTWVzc2FnZXNGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uTWVzc2FnZXNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBDdXN0U2VydmljZUNvbnZlcnNhdGlvbk1lc3NhZ2VzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29udmVyc2F0aW9uX3N0YXR1c1wiOiBqc29uW1wiY29udmVyc2F0aW9uX3N0YXR1c1wiXSA9PSBudWxsID8gdm9pZCAwIDogKDAsIENvbnZlcnNhdGlvblN0YXR1c18xLkNvbnZlcnNhdGlvblN0YXR1c0Zyb21KU09OKShqc29uW1wiY29udmVyc2F0aW9uX3N0YXR1c1wiXSksXG5cdFx0XHRcImRhdGFcIjoganNvbltcImRhdGFcIl0ubWFwKEN1c3RTZXJ2aWNlTWVzc2FnZV8xJDEuQ3VzdFNlcnZpY2VNZXNzYWdlRnJvbUpTT04pLFxuXHRcdFx0XCJuZXh0X3BhZ2VcIjoganNvbltcIm5leHRfcGFnZVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm5leHRfcGFnZVwiXSxcblx0XHRcdFwicHJldmlvdXNfcGFnZVwiOiBqc29uW1wicHJldmlvdXNfcGFnZVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInByZXZpb3VzX3BhZ2VcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uTWVzc2FnZXNUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBDdXN0U2VydmljZUNvbnZlcnNhdGlvbk1lc3NhZ2VzVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uTWVzc2FnZXNUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb252ZXJzYXRpb25fc3RhdHVzXCI6ICgwLCBDb252ZXJzYXRpb25TdGF0dXNfMS5Db252ZXJzYXRpb25TdGF0dXNUb0pTT04pKHZhbHVlW1wiY29udmVyc2F0aW9uX3N0YXR1c1wiXSksXG5cdFx0XHRcImRhdGFcIjogdmFsdWVbXCJkYXRhXCJdLm1hcChDdXN0U2VydmljZU1lc3NhZ2VfMSQxLkN1c3RTZXJ2aWNlTWVzc2FnZVRvSlNPTiksXG5cdFx0XHRcIm5leHRfcGFnZVwiOiB2YWx1ZVtcIm5leHRfcGFnZVwiXSxcblx0XHRcdFwicHJldmlvdXNfcGFnZVwiOiB2YWx1ZVtcInByZXZpb3VzX3BhZ2VcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9NYW51YWxGb3JtLmpzXG52YXIgcmVxdWlyZV9NYW51YWxGb3JtID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvTWFudWFsRm9ybS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mTWFudWFsRm9ybSA9IGluc3RhbmNlT2ZNYW51YWxGb3JtO1xuXHRleHBvcnRzLk1hbnVhbEZvcm1Gcm9tSlNPTiA9IE1hbnVhbEZvcm1Gcm9tSlNPTjtcblx0ZXhwb3J0cy5NYW51YWxGb3JtRnJvbUpTT05UeXBlZCA9IE1hbnVhbEZvcm1Gcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLk1hbnVhbEZvcm1Ub0pTT04gPSBNYW51YWxGb3JtVG9KU09OO1xuXHRleHBvcnRzLk1hbnVhbEZvcm1Ub0pTT05UeXBlZCA9IE1hbnVhbEZvcm1Ub0pTT05UeXBlZDtcblx0Y29uc3QgRm9ybVR5cGVfMSQxID0gcmVxdWlyZV9Gb3JtVHlwZSgpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBNYW51YWxGb3JtIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZk1hbnVhbEZvcm0odmFsdWUpIHtcblx0XHRpZiAoIShcImZvcm1fdHlwZVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImZvcm1fdHlwZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gTWFudWFsRm9ybUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gTWFudWFsRm9ybUZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIE1hbnVhbEZvcm1Gcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4geyBcImZvcm1fdHlwZVwiOiAoMCwgRm9ybVR5cGVfMSQxLkZvcm1UeXBlRnJvbUpTT04pKGpzb25bXCJmb3JtX3R5cGVcIl0pIH07XG5cdH1cblx0ZnVuY3Rpb24gTWFudWFsRm9ybVRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIE1hbnVhbEZvcm1Ub0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gTWFudWFsRm9ybVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7IFwiZm9ybV90eXBlXCI6ICgwLCBGb3JtVHlwZV8xJDEuRm9ybVR5cGVUb0pTT04pKHZhbHVlW1wiZm9ybV90eXBlXCJdKSB9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Gb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5LmpzXG52YXIgcmVxdWlyZV9Gb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5Gb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5RnJvbUpTT04gPSBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5RnJvbUpTT047XG5cdGV4cG9ydHMuRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeUZyb21KU09OVHlwZWQgPSBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5Gb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5VG9KU09OID0gRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeVRvSlNPTjtcblx0ZXhwb3J0cy5Gb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5VG9KU09OVHlwZWQgPSBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5VG9KU09OVHlwZWQ7XG5cdGNvbnN0IEF1dG9Gb3JtXzEgPSByZXF1aXJlX0F1dG9Gb3JtKCk7XG5cdGNvbnN0IE1hbnVhbEZvcm1fMSA9IHJlcXVpcmVfTWFudWFsRm9ybSgpO1xuXHRmdW5jdGlvbiBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdGlmICgoMCwgQXV0b0Zvcm1fMS5pbnN0YW5jZU9mQXV0b0Zvcm0pKGpzb24pKSByZXR1cm4gKDAsIEF1dG9Gb3JtXzEuQXV0b0Zvcm1Gcm9tSlNPTlR5cGVkKShqc29uLCB0cnVlKTtcblx0XHRpZiAoKDAsIE1hbnVhbEZvcm1fMS5pbnN0YW5jZU9mTWFudWFsRm9ybSkoanNvbikpIHJldHVybiAoMCwgTWFudWFsRm9ybV8xLk1hbnVhbEZvcm1Gcm9tSlNPTlR5cGVkKShqc29uLCB0cnVlKTtcblx0XHRyZXR1cm4ge307XG5cdH1cblx0ZnVuY3Rpb24gRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeVRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEZvcm1SZXNwb25zZUF0dHJpYnV0ZXNGb3JtQ2F0ZWdvcnlUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdGlmICgoMCwgQXV0b0Zvcm1fMS5pbnN0YW5jZU9mQXV0b0Zvcm0pKHZhbHVlKSkgcmV0dXJuICgwLCBBdXRvRm9ybV8xLkF1dG9Gb3JtVG9KU09OKSh2YWx1ZSk7XG5cdFx0aWYgKCgwLCBNYW51YWxGb3JtXzEuaW5zdGFuY2VPZk1hbnVhbEZvcm0pKHZhbHVlKSkgcmV0dXJuICgwLCBNYW51YWxGb3JtXzEuTWFudWFsRm9ybVRvSlNPTikodmFsdWUpO1xuXHRcdHJldHVybiB7fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvRm9ybVJlc3BvbnNlQXR0cmlidXRlcy5qc1xudmFyIHJlcXVpcmVfRm9ybVJlc3BvbnNlQXR0cmlidXRlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0Zvcm1SZXNwb25zZUF0dHJpYnV0ZXMuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkZvcm1SZXNwb25zZUF0dHJpYnV0ZXMgPSBpbnN0YW5jZU9mRm9ybVJlc3BvbnNlQXR0cmlidXRlcztcblx0ZXhwb3J0cy5Gb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRnJvbUpTT04gPSBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRnJvbUpTT047XG5cdGV4cG9ydHMuRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OVHlwZWQgPSBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5Gb3JtUmVzcG9uc2VBdHRyaWJ1dGVzVG9KU09OID0gRm9ybVJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTjtcblx0ZXhwb3J0cy5Gb3JtUmVzcG9uc2VBdHRyaWJ1dGVzVG9KU09OVHlwZWQgPSBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzVG9KU09OVHlwZWQ7XG5cdGNvbnN0IEZvcm1SZXNwb25zZUF0dHJpYnV0ZXNGb3JtQ2F0ZWdvcnlfMSA9IHJlcXVpcmVfRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeSgpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkZvcm1SZXNwb25zZUF0dHJpYnV0ZXModmFsdWUpIHtcblx0XHRpZiAoIShcInNjaGVtYVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInNjaGVtYVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEZvcm1SZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJmb3JtX2NhdGVnb3J5XCI6IGpzb25bXCJmb3JtX2NhdGVnb3J5XCJdID09IG51bGwgPyB2b2lkIDAgOiAoMCwgRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeV8xLkZvcm1SZXNwb25zZUF0dHJpYnV0ZXNGb3JtQ2F0ZWdvcnlGcm9tSlNPTikoanNvbltcImZvcm1fY2F0ZWdvcnlcIl0pLFxuXHRcdFx0XCJzY2hlbWFcIjoganNvbltcInNjaGVtYVwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gRm9ybVJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEZvcm1SZXNwb25zZUF0dHJpYnV0ZXNUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gRm9ybVJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImZvcm1fY2F0ZWdvcnlcIjogKDAsIEZvcm1SZXNwb25zZUF0dHJpYnV0ZXNGb3JtQ2F0ZWdvcnlfMS5Gb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5VG9KU09OKSh2YWx1ZVtcImZvcm1fY2F0ZWdvcnlcIl0pLFxuXHRcdFx0XCJzY2hlbWFcIjogdmFsdWVbXCJzY2hlbWFcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Gb3JtU3VibWl0dGVkQXR0cmlidXRlcy5qc1xudmFyIHJlcXVpcmVfRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Gb3JtU3VibWl0dGVkQXR0cmlidXRlcy5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXMgPSBpbnN0YW5jZU9mRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXM7XG5cdGV4cG9ydHMuRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXNGcm9tSlNPTiA9IEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzRnJvbUpTT047XG5cdGV4cG9ydHMuRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkID0gRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLkZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzVG9KU09OID0gRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXNUb0pTT047XG5cdGV4cG9ydHMuRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXNUb0pTT05UeXBlZCA9IEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzVG9KU09OVHlwZWQ7XG5cdGNvbnN0IEZvcm1UeXBlXzEgPSByZXF1aXJlX0Zvcm1UeXBlKCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJmaWxsZWRfc2NoZW1hXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiZmlsbGVkX3NjaGVtYVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJmb3JtX3Jlc3BvbnNlX2lkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiZm9ybV9yZXNwb25zZV9pZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJmb3JtX3R5cGVcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJmb3JtX3R5cGVcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBGb3JtU3VibWl0dGVkQXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiZmlsbGVkX3NjaGVtYVwiOiBqc29uW1wiZmlsbGVkX3NjaGVtYVwiXSxcblx0XHRcdFwiZm9ybV9yZXNwb25zZV9pZFwiOiBqc29uW1wiZm9ybV9yZXNwb25zZV9pZFwiXSxcblx0XHRcdFwiZm9ybV90eXBlXCI6ICgwLCBGb3JtVHlwZV8xLkZvcm1UeXBlRnJvbUpTT04pKGpzb25bXCJmb3JtX3R5cGVcIl0pXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBGb3JtU3VibWl0dGVkQXR0cmlidXRlc1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiZmlsbGVkX3NjaGVtYVwiOiB2YWx1ZVtcImZpbGxlZF9zY2hlbWFcIl0sXG5cdFx0XHRcImZvcm1fcmVzcG9uc2VfaWRcIjogdmFsdWVbXCJmb3JtX3Jlc3BvbnNlX2lkXCJdLFxuXHRcdFx0XCJmb3JtX3R5cGVcIjogKDAsIEZvcm1UeXBlXzEuRm9ybVR5cGVUb0pTT04pKHZhbHVlW1wiZm9ybV90eXBlXCJdKVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0Z1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5qc1xudmFyIHJlcXVpcmVfRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLkZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyA9IHZvaWQgMDtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzID0gaW5zdGFuY2VPZkZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cztcblx0ZXhwb3J0cy5GdWxmaWxsbWVudERpc3BsYXlTdGF0dXNGcm9tSlNPTiA9IEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1c0Zyb21KU09OO1xuXHRleHBvcnRzLkZ1bGZpbGxtZW50RGlzcGxheVN0YXR1c0Zyb21KU09OVHlwZWQgPSBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXNGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLkZ1bGZpbGxtZW50RGlzcGxheVN0YXR1c1RvSlNPTiA9IEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1c1RvSlNPTjtcblx0ZXhwb3J0cy5GdWxmaWxsbWVudERpc3BsYXlTdGF0dXNUb0pTT05UeXBlZCA9IEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1c1RvSlNPTlR5cGVkO1xuXHQvKipcblx0KlxuXHQqIEBleHBvcnRcblx0KiBAZW51bSB7c3RyaW5nfVxuXHQqL1xuXHR2YXIgRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzO1xuXHQoZnVuY3Rpb24oRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDEpIHtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIkFUVEVNUFRFRF9ERUxJVkVSWVwiXSA9IFwiQXR0ZW1wdGVkIGRlbGl2ZXJ5XCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJDQU5DRUxFRFwiXSA9IFwiQ2FuY2VsZWRcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIkNPTkZJUk1FRFwiXSA9IFwiQ29uZmlybWVkXCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJERUxJVkVSRURcIl0gPSBcIkRlbGl2ZXJlZFwiO1xuXHRcdEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyQxW1wiRkFJTFVSRVwiXSA9IFwiRmFpbHVyZVwiO1xuXHRcdEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyQxW1wiRlVMRklMTEVEXCJdID0gXCJGdWxmaWxsZWRcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIklOX1RSQU5TSVRcIl0gPSBcIkluIHRyYW5zaXRcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIkxBQkVMX1BSSU5URURcIl0gPSBcIkxhYmVsIHByaW50ZWRcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIkxBQkVMX1BVUkNIQVNFRFwiXSA9IFwiTGFiZWwgcHVyY2hhc2VkXCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJMQUJFTF9WT0lERURcIl0gPSBcIkxhYmVsIHZvaWRlZFwiO1xuXHRcdEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyQxW1wiTUFSS0VEX0FTX0ZVTEZJTExFRFwiXSA9IFwiTWFya2VkIGFzIGZ1bGZpbGxlZFwiO1xuXHRcdEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyQxW1wiTk9UX0RFTElWRVJFRFwiXSA9IFwiTm90IGRlbGl2ZXJlZFwiO1xuXHRcdEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyQxW1wiT1VUX0ZPUl9ERUxJVkVSWVwiXSA9IFwiT3V0IGZvciBkZWxpdmVyeVwiO1xuXHRcdEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyQxW1wiUElDS0VEX1VQXCJdID0gXCJQaWNrZWQgdXBcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIlJFQURZX0ZPUl9QSUNLVVBcIl0gPSBcIlJlYWR5IGZvciBwaWNrdXBcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIlNVQk1JVFRFRFwiXSA9IFwiU3VibWl0dGVkXCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJJTl9QUk9HUkVTU1wiXSA9IFwiSW4gcHJvZ3Jlc3NcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIk9OX0hPTERcIl0gPSBcIk9uIGhvbGRcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIk9QRU5cIl0gPSBcIk9wZW5cIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIlBBUlRJQUxMWV9GVUxGSUxMRURcIl0gPSBcIlBhcnRpYWxseSBmdWxmaWxsZWRcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIlBFTkRJTkdfRlVMRklMTE1FTlRcIl0gPSBcIlBlbmRpbmcgZnVsZmlsbG1lbnRcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIlJFUVVFU1RfREVDTElORURcIl0gPSBcIlJlcXVlc3QgZGVjbGluZWRcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIlJFU1RPQ0tFRFwiXSA9IFwiUmVzdG9ja2VkXCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJTQ0hFRFVMRURcIl0gPSBcIlNjaGVkdWxlZFwiO1xuXHRcdEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyQxW1wiVU5GVUxGSUxMRURcIl0gPSBcIlVuZnVsZmlsbGVkXCI7XG5cdH0pKEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyB8fCAoZXhwb3J0cy5GdWxmaWxsbWVudERpc3BsYXlTdGF0dXMgPSBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMgPSB7fSkpO1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzKHZhbHVlKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cywga2V5KSkge1xuXHRcdFx0aWYgKEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1c1trZXldID09PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRmdW5jdGlvbiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXNGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1c0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1c0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdHJldHVybiBqc29uO1xuXHR9XG5cdGZ1bmN0aW9uIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1c1RvSlNPTih2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRmdW5jdGlvbiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXNUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvR2VuZXJhdGlvblBhcmFtcy5qc1xudmFyIHJlcXVpcmVfR2VuZXJhdGlvblBhcmFtcyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0dlbmVyYXRpb25QYXJhbXMuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkdlbmVyYXRpb25QYXJhbXMgPSBpbnN0YW5jZU9mR2VuZXJhdGlvblBhcmFtcztcblx0ZXhwb3J0cy5HZW5lcmF0aW9uUGFyYW1zRnJvbUpTT04gPSBHZW5lcmF0aW9uUGFyYW1zRnJvbUpTT047XG5cdGV4cG9ydHMuR2VuZXJhdGlvblBhcmFtc0Zyb21KU09OVHlwZWQgPSBHZW5lcmF0aW9uUGFyYW1zRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5HZW5lcmF0aW9uUGFyYW1zVG9KU09OID0gR2VuZXJhdGlvblBhcmFtc1RvSlNPTjtcblx0ZXhwb3J0cy5HZW5lcmF0aW9uUGFyYW1zVG9KU09OVHlwZWQgPSBHZW5lcmF0aW9uUGFyYW1zVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIEdlbmVyYXRpb25QYXJhbXMgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mR2VuZXJhdGlvblBhcmFtcyh2YWx1ZSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIEdlbmVyYXRpb25QYXJhbXNGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEdlbmVyYXRpb25QYXJhbXNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBHZW5lcmF0aW9uUGFyYW1zRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwibWF4X3Rva2Vuc1wiOiBqc29uW1wibWF4X3Rva2Vuc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm1heF90b2tlbnNcIl0sXG5cdFx0XHRcIm1vZGVsXCI6IGpzb25bXCJtb2RlbFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm1vZGVsXCJdLFxuXHRcdFx0XCJudW1fc3VnZ2VzdGlvbnNcIjoganNvbltcIm51bV9zdWdnZXN0aW9uc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm51bV9zdWdnZXN0aW9uc1wiXSxcblx0XHRcdFwicmVzcG9uc2VfY2FjaGluZ1wiOiBqc29uW1wicmVzcG9uc2VfY2FjaGluZ1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInJlc3BvbnNlX2NhY2hpbmdcIl0sXG5cdFx0XHRcInJlc3BvbnNlX3N5c3RlbV9wcm9tcHRcIjoganNvbltcInJlc3BvbnNlX3N5c3RlbV9wcm9tcHRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJyZXNwb25zZV9zeXN0ZW1fcHJvbXB0XCJdLFxuXHRcdFx0XCJzdG9wXCI6IGpzb25bXCJzdG9wXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wic3RvcFwiXSxcblx0XHRcdFwic3RyZWFtXCI6IGpzb25bXCJzdHJlYW1cIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJzdHJlYW1cIl0sXG5cdFx0XHRcInN1Z2dlc3Rpb25fc3lzdGVtX3Byb21wdFwiOiBqc29uW1wic3VnZ2VzdGlvbl9zeXN0ZW1fcHJvbXB0XCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wic3VnZ2VzdGlvbl9zeXN0ZW1fcHJvbXB0XCJdLFxuXHRcdFx0XCJ0ZW1wZXJhdHVyZVwiOiBqc29uW1widGVtcGVyYXR1cmVcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJ0ZW1wZXJhdHVyZVwiXSxcblx0XHRcdFwidG9wX3BcIjoganNvbltcInRvcF9wXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1widG9wX3BcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIEdlbmVyYXRpb25QYXJhbXNUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBHZW5lcmF0aW9uUGFyYW1zVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEdlbmVyYXRpb25QYXJhbXNUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJtYXhfdG9rZW5zXCI6IHZhbHVlW1wibWF4X3Rva2Vuc1wiXSxcblx0XHRcdFwibW9kZWxcIjogdmFsdWVbXCJtb2RlbFwiXSxcblx0XHRcdFwibnVtX3N1Z2dlc3Rpb25zXCI6IHZhbHVlW1wibnVtX3N1Z2dlc3Rpb25zXCJdLFxuXHRcdFx0XCJyZXNwb25zZV9jYWNoaW5nXCI6IHZhbHVlW1wicmVzcG9uc2VfY2FjaGluZ1wiXSxcblx0XHRcdFwicmVzcG9uc2Vfc3lzdGVtX3Byb21wdFwiOiB2YWx1ZVtcInJlc3BvbnNlX3N5c3RlbV9wcm9tcHRcIl0sXG5cdFx0XHRcInN0b3BcIjogdmFsdWVbXCJzdG9wXCJdLFxuXHRcdFx0XCJzdHJlYW1cIjogdmFsdWVbXCJzdHJlYW1cIl0sXG5cdFx0XHRcInN1Z2dlc3Rpb25fc3lzdGVtX3Byb21wdFwiOiB2YWx1ZVtcInN1Z2dlc3Rpb25fc3lzdGVtX3Byb21wdFwiXSxcblx0XHRcdFwidGVtcGVyYXR1cmVcIjogdmFsdWVbXCJ0ZW1wZXJhdHVyZVwiXSxcblx0XHRcdFwidG9wX3BcIjogdmFsdWVbXCJ0b3BfcFwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0dldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdC5qc1xudmFyIHJlcXVpcmVfR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZHZXRDb252ZXJzYXRpb25NZXNzYWdlc1JlcXVlc3QgPSBpbnN0YW5jZU9mR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0O1xuXHRleHBvcnRzLkdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdEZyb21KU09OID0gR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0RnJvbUpTT047XG5cdGV4cG9ydHMuR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0RnJvbUpTT05UeXBlZCA9IEdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdEZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0VG9KU09OID0gR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0VG9KU09OO1xuXHRleHBvcnRzLkdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdFRvSlNPTlR5cGVkID0gR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0VG9KU09OVHlwZWQ7XG5cdGNvbnN0IEN1c3RvbWVyU2VydmljZVByb3ZpZGVyXzEkMiA9IHJlcXVpcmVfQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0IGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdCh2YWx1ZSkge1xuXHRcdGlmICghKFwiY29udmVyc2F0aW9uX2lkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY29udmVyc2F0aW9uX2lkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBHZXRDb252ZXJzYXRpb25NZXNzYWdlc1JlcXVlc3RGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvbnZlcnNhdGlvbl9pZFwiOiBqc29uW1wiY29udmVyc2F0aW9uX2lkXCJdLFxuXHRcdFx0XCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCI6IGpzb25bXCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCJdID09IG51bGwgPyB2b2lkIDAgOiAoMCwgQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJfMSQyLkN1c3RvbWVyU2VydmljZVByb3ZpZGVyRnJvbUpTT04pKGpzb25bXCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCJdKVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0VG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0VG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdFRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvbnZlcnNhdGlvbl9pZFwiOiB2YWx1ZVtcImNvbnZlcnNhdGlvbl9pZFwiXSxcblx0XHRcdFwiY3VzdG9tZXJfc2VydmljZV9wcm92aWRlclwiOiAoMCwgQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJfMSQyLkN1c3RvbWVyU2VydmljZVByb3ZpZGVyVG9KU09OKSh2YWx1ZVtcImN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXJcIl0pXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvSXNCdXNpbmVzc0hvdXJzUmVxdWVzdC5qc1xudmFyIHJlcXVpcmVfSXNCdXNpbmVzc0hvdXJzUmVxdWVzdCA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0lzQnVzaW5lc3NIb3Vyc1JlcXVlc3QuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZklzQnVzaW5lc3NIb3Vyc1JlcXVlc3QgPSBpbnN0YW5jZU9mSXNCdXNpbmVzc0hvdXJzUmVxdWVzdDtcblx0ZXhwb3J0cy5Jc0J1c2luZXNzSG91cnNSZXF1ZXN0RnJvbUpTT04gPSBJc0J1c2luZXNzSG91cnNSZXF1ZXN0RnJvbUpTT047XG5cdGV4cG9ydHMuSXNCdXNpbmVzc0hvdXJzUmVxdWVzdEZyb21KU09OVHlwZWQgPSBJc0J1c2luZXNzSG91cnNSZXF1ZXN0RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5Jc0J1c2luZXNzSG91cnNSZXF1ZXN0VG9KU09OID0gSXNCdXNpbmVzc0hvdXJzUmVxdWVzdFRvSlNPTjtcblx0ZXhwb3J0cy5Jc0J1c2luZXNzSG91cnNSZXF1ZXN0VG9KU09OVHlwZWQgPSBJc0J1c2luZXNzSG91cnNSZXF1ZXN0VG9KU09OVHlwZWQ7XG5cdGNvbnN0IEN1c3RvbWVyU2VydmljZVByb3ZpZGVyXzEkMSA9IHJlcXVpcmVfQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgSXNCdXNpbmVzc0hvdXJzUmVxdWVzdCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZJc0J1c2luZXNzSG91cnNSZXF1ZXN0KHZhbHVlKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gSXNCdXNpbmVzc0hvdXJzUmVxdWVzdEZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gSXNCdXNpbmVzc0hvdXJzUmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIElzQnVzaW5lc3NIb3Vyc1JlcXVlc3RGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4geyBcImN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXJcIjoganNvbltcImN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXJcIl0gPT0gbnVsbCA/IHZvaWQgMCA6ICgwLCBDdXN0b21lclNlcnZpY2VQcm92aWRlcl8xJDEuQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJGcm9tSlNPTikoanNvbltcImN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXJcIl0pIH07XG5cdH1cblx0ZnVuY3Rpb24gSXNCdXNpbmVzc0hvdXJzUmVxdWVzdFRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIElzQnVzaW5lc3NIb3Vyc1JlcXVlc3RUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gSXNCdXNpbmVzc0hvdXJzUmVxdWVzdFRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7IFwiY3VzdG9tZXJfc2VydmljZV9wcm92aWRlclwiOiAoMCwgQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJfMSQxLkN1c3RvbWVyU2VydmljZVByb3ZpZGVyVG9KU09OKSh2YWx1ZVtcImN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXJcIl0pIH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0lzQnVzaW5lc3NIb3Vyc1Jlc3BvbnNlLmpzXG52YXIgcmVxdWlyZV9Jc0J1c2luZXNzSG91cnNSZXNwb25zZSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0lzQnVzaW5lc3NIb3Vyc1Jlc3BvbnNlLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZJc0J1c2luZXNzSG91cnNSZXNwb25zZSA9IGluc3RhbmNlT2ZJc0J1c2luZXNzSG91cnNSZXNwb25zZTtcblx0ZXhwb3J0cy5Jc0J1c2luZXNzSG91cnNSZXNwb25zZUZyb21KU09OID0gSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2VGcm9tSlNPTjtcblx0ZXhwb3J0cy5Jc0J1c2luZXNzSG91cnNSZXNwb25zZUZyb21KU09OVHlwZWQgPSBJc0J1c2luZXNzSG91cnNSZXNwb25zZUZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2VUb0pTT04gPSBJc0J1c2luZXNzSG91cnNSZXNwb25zZVRvSlNPTjtcblx0ZXhwb3J0cy5Jc0J1c2luZXNzSG91cnNSZXNwb25zZVRvSlNPTlR5cGVkID0gSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2VUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2UgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2UodmFsdWUpIHtcblx0XHRpZiAoIShcImlzX2J1c2luZXNzX2hvdXJzXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaXNfYnVzaW5lc3NfaG91cnNcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIElzQnVzaW5lc3NIb3Vyc1Jlc3BvbnNlRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBJc0J1c2luZXNzSG91cnNSZXNwb25zZUZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIElzQnVzaW5lc3NIb3Vyc1Jlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiZGV0YWlsc1wiOiBqc29uW1wiZGV0YWlsc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImRldGFpbHNcIl0sXG5cdFx0XHRcImlzX2J1c2luZXNzX2hvdXJzXCI6IGpzb25bXCJpc19idXNpbmVzc19ob3Vyc1wiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2VUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBJc0J1c2luZXNzSG91cnNSZXNwb25zZVRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBJc0J1c2luZXNzSG91cnNSZXNwb25zZVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImRldGFpbHNcIjogdmFsdWVbXCJkZXRhaWxzXCJdLFxuXHRcdFx0XCJpc19idXNpbmVzc19ob3Vyc1wiOiB2YWx1ZVtcImlzX2J1c2luZXNzX2hvdXJzXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvTGFiZWxWYWx1ZS5qc1xudmFyIHJlcXVpcmVfTGFiZWxWYWx1ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0xhYmVsVmFsdWUuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkxhYmVsVmFsdWUgPSBpbnN0YW5jZU9mTGFiZWxWYWx1ZTtcblx0ZXhwb3J0cy5MYWJlbFZhbHVlRnJvbUpTT04gPSBMYWJlbFZhbHVlRnJvbUpTT047XG5cdGV4cG9ydHMuTGFiZWxWYWx1ZUZyb21KU09OVHlwZWQgPSBMYWJlbFZhbHVlRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5MYWJlbFZhbHVlVG9KU09OID0gTGFiZWxWYWx1ZVRvSlNPTjtcblx0ZXhwb3J0cy5MYWJlbFZhbHVlVG9KU09OVHlwZWQgPSBMYWJlbFZhbHVlVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIExhYmVsVmFsdWUgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mTGFiZWxWYWx1ZSh2YWx1ZSkge1xuXHRcdGlmICghKFwibGFiZWxcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJsYWJlbFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJ2YWx1ZVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInZhbHVlXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBMYWJlbFZhbHVlRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBMYWJlbFZhbHVlRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gTGFiZWxWYWx1ZUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImxhYmVsXCI6IGpzb25bXCJsYWJlbFwiXSxcblx0XHRcdFwidmFsdWVcIjoganNvbltcInZhbHVlXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBMYWJlbFZhbHVlVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gTGFiZWxWYWx1ZVRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBMYWJlbFZhbHVlVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwibGFiZWxcIjogdmFsdWVbXCJsYWJlbFwiXSxcblx0XHRcdFwidmFsdWVcIjogdmFsdWVbXCJ2YWx1ZVwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1VzZXJFdmVudENhdGVnb3J5LmpzXG52YXIgcmVxdWlyZV9Vc2VyRXZlbnRDYXRlZ29yeSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1VzZXJFdmVudENhdGVnb3J5LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLlVzZXJFdmVudENhdGVnb3J5ID0gdm9pZCAwO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZVc2VyRXZlbnRDYXRlZ29yeSA9IGluc3RhbmNlT2ZVc2VyRXZlbnRDYXRlZ29yeTtcblx0ZXhwb3J0cy5Vc2VyRXZlbnRDYXRlZ29yeUZyb21KU09OID0gVXNlckV2ZW50Q2F0ZWdvcnlGcm9tSlNPTjtcblx0ZXhwb3J0cy5Vc2VyRXZlbnRDYXRlZ29yeUZyb21KU09OVHlwZWQgPSBVc2VyRXZlbnRDYXRlZ29yeUZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuVXNlckV2ZW50Q2F0ZWdvcnlUb0pTT04gPSBVc2VyRXZlbnRDYXRlZ29yeVRvSlNPTjtcblx0ZXhwb3J0cy5Vc2VyRXZlbnRDYXRlZ29yeVRvSlNPTlR5cGVkID0gVXNlckV2ZW50Q2F0ZWdvcnlUb0pTT05UeXBlZDtcblx0LyoqXG5cdCpcblx0KiBAZXhwb3J0XG5cdCogQGVudW0ge3N0cmluZ31cblx0Ki9cblx0dmFyIFVzZXJFdmVudENhdGVnb3J5O1xuXHQoZnVuY3Rpb24oVXNlckV2ZW50Q2F0ZWdvcnkkMSkge1xuXHRcdFVzZXJFdmVudENhdGVnb3J5JDFbXCJBcHBMb2FkZWRcIl0gPSBcImFwcF9sb2FkZWRcIjtcblx0XHRVc2VyRXZlbnRDYXRlZ29yeSQxW1wiU2VhcmNoXCJdID0gXCJzZWFyY2hcIjtcblx0XHRVc2VyRXZlbnRDYXRlZ29yeSQxW1wiU3VnZ2VzdGlvbkNsaWNrZWRcIl0gPSBcInN1Z2dlc3Rpb25fY2xpY2tlZFwiO1xuXHRcdFVzZXJFdmVudENhdGVnb3J5JDFbXCJRdWVyeVR5cGVkXCJdID0gXCJxdWVyeV90eXBlZFwiO1xuXHRcdFVzZXJFdmVudENhdGVnb3J5JDFbXCJBcHBVbmxvYWRlZFwiXSA9IFwiYXBwX3VubG9hZGVkXCI7XG5cdFx0VXNlckV2ZW50Q2F0ZWdvcnkkMVtcIlBkcFZpc2l0XCJdID0gXCJwZHBfdmlzaXRcIjtcblx0XHRVc2VyRXZlbnRDYXRlZ29yeSQxW1wiUGxwVmlzaXRcIl0gPSBcInBscF92aXNpdFwiO1xuXHRcdFVzZXJFdmVudENhdGVnb3J5JDFbXCJBZGRUb0NhcnRcIl0gPSBcImFkZF90b19jYXJ0XCI7XG5cdFx0VXNlckV2ZW50Q2F0ZWdvcnkkMVtcIkV4aXRTZWFyY2hcIl0gPSBcImV4aXRfc2VhcmNoXCI7XG5cdFx0VXNlckV2ZW50Q2F0ZWdvcnkkMVtcIlBhZ2VWaXNpdFwiXSA9IFwicGFnZV92aXNpdFwiO1xuXHRcdFVzZXJFdmVudENhdGVnb3J5JDFbXCJGb3JtU3VibWl0dGVkXCJdID0gXCJmb3JtX3N1Ym1pdHRlZFwiO1xuXHR9KShVc2VyRXZlbnRDYXRlZ29yeSB8fCAoZXhwb3J0cy5Vc2VyRXZlbnRDYXRlZ29yeSA9IFVzZXJFdmVudENhdGVnb3J5ID0ge30pKTtcblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlVzZXJFdmVudENhdGVnb3J5KHZhbHVlKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gVXNlckV2ZW50Q2F0ZWdvcnkpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXNlckV2ZW50Q2F0ZWdvcnksIGtleSkpIHtcblx0XHRcdGlmIChVc2VyRXZlbnRDYXRlZ29yeVtrZXldID09PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRmdW5jdGlvbiBVc2VyRXZlbnRDYXRlZ29yeUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVXNlckV2ZW50Q2F0ZWdvcnlGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBVc2VyRXZlbnRDYXRlZ29yeUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdHJldHVybiBqc29uO1xuXHR9XG5cdGZ1bmN0aW9uIFVzZXJFdmVudENhdGVnb3J5VG9KU09OKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdGZ1bmN0aW9uIFVzZXJFdmVudENhdGVnb3J5VG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1BEUEF0dHJpYnV0ZXMuanNcbnZhciByZXF1aXJlX1BEUEF0dHJpYnV0ZXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9QRFBBdHRyaWJ1dGVzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZQRFBBdHRyaWJ1dGVzID0gaW5zdGFuY2VPZlBEUEF0dHJpYnV0ZXM7XG5cdGV4cG9ydHMuUERQQXR0cmlidXRlc0Zyb21KU09OID0gUERQQXR0cmlidXRlc0Zyb21KU09OO1xuXHRleHBvcnRzLlBEUEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkID0gUERQQXR0cmlidXRlc0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuUERQQXR0cmlidXRlc1RvSlNPTiA9IFBEUEF0dHJpYnV0ZXNUb0pTT047XG5cdGV4cG9ydHMuUERQQXR0cmlidXRlc1RvSlNPTlR5cGVkID0gUERQQXR0cmlidXRlc1RvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBQRFBBdHRyaWJ1dGVzIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlBEUEF0dHJpYnV0ZXModmFsdWUpIHtcblx0XHRpZiAoIShcInByb2R1Y3RfaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJwcm9kdWN0X2lkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBQRFBBdHRyaWJ1dGVzRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBQRFBBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUERQQXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcInBhcmVudF9wcm9kdWN0X2lkXCI6IGpzb25bXCJwYXJlbnRfcHJvZHVjdF9pZFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInBhcmVudF9wcm9kdWN0X2lkXCJdLFxuXHRcdFx0XCJwcm9kdWN0X2lkXCI6IGpzb25bXCJwcm9kdWN0X2lkXCJdLFxuXHRcdFx0XCJ1cmxcIjoganNvbltcInVybFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInVybFwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gUERQQXR0cmlidXRlc1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFBEUEF0dHJpYnV0ZXNUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUERQQXR0cmlidXRlc1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcInBhcmVudF9wcm9kdWN0X2lkXCI6IHZhbHVlW1wicGFyZW50X3Byb2R1Y3RfaWRcIl0sXG5cdFx0XHRcInByb2R1Y3RfaWRcIjogdmFsdWVbXCJwcm9kdWN0X2lkXCJdLFxuXHRcdFx0XCJ1cmxcIjogdmFsdWVbXCJ1cmxcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9QTFBBdHRyaWJ1dGVDYXRlZ29yeS5qc1xudmFyIHJlcXVpcmVfUExQQXR0cmlidXRlQ2F0ZWdvcnkgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9QTFBBdHRyaWJ1dGVDYXRlZ29yeS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5QTFBBdHRyaWJ1dGVDYXRlZ29yeSA9IHZvaWQgMDtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mUExQQXR0cmlidXRlQ2F0ZWdvcnkgPSBpbnN0YW5jZU9mUExQQXR0cmlidXRlQ2F0ZWdvcnk7XG5cdGV4cG9ydHMuUExQQXR0cmlidXRlQ2F0ZWdvcnlGcm9tSlNPTiA9IFBMUEF0dHJpYnV0ZUNhdGVnb3J5RnJvbUpTT047XG5cdGV4cG9ydHMuUExQQXR0cmlidXRlQ2F0ZWdvcnlGcm9tSlNPTlR5cGVkID0gUExQQXR0cmlidXRlQ2F0ZWdvcnlGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlBMUEF0dHJpYnV0ZUNhdGVnb3J5VG9KU09OID0gUExQQXR0cmlidXRlQ2F0ZWdvcnlUb0pTT047XG5cdGV4cG9ydHMuUExQQXR0cmlidXRlQ2F0ZWdvcnlUb0pTT05UeXBlZCA9IFBMUEF0dHJpYnV0ZUNhdGVnb3J5VG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqXG5cdCogQGV4cG9ydFxuXHQqIEBlbnVtIHtzdHJpbmd9XG5cdCovXG5cdHZhciBQTFBBdHRyaWJ1dGVDYXRlZ29yeTtcblx0KGZ1bmN0aW9uKFBMUEF0dHJpYnV0ZUNhdGVnb3J5JDEpIHtcblx0XHRQTFBBdHRyaWJ1dGVDYXRlZ29yeSQxW1wiVXJsXCJdID0gXCJ1cmxcIjtcblx0XHRQTFBBdHRyaWJ1dGVDYXRlZ29yeSQxW1wiSWRcIl0gPSBcImlkXCI7XG5cdH0pKFBMUEF0dHJpYnV0ZUNhdGVnb3J5IHx8IChleHBvcnRzLlBMUEF0dHJpYnV0ZUNhdGVnb3J5ID0gUExQQXR0cmlidXRlQ2F0ZWdvcnkgPSB7fSkpO1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mUExQQXR0cmlidXRlQ2F0ZWdvcnkodmFsdWUpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBQTFBBdHRyaWJ1dGVDYXRlZ29yeSkgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChQTFBBdHRyaWJ1dGVDYXRlZ29yeSwga2V5KSkge1xuXHRcdFx0aWYgKFBMUEF0dHJpYnV0ZUNhdGVnb3J5W2tleV0gPT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGZ1bmN0aW9uIFBMUEF0dHJpYnV0ZUNhdGVnb3J5RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBQTFBBdHRyaWJ1dGVDYXRlZ29yeUZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFBMUEF0dHJpYnV0ZUNhdGVnb3J5RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0cmV0dXJuIGpzb247XG5cdH1cblx0ZnVuY3Rpb24gUExQQXR0cmlidXRlQ2F0ZWdvcnlUb0pTT04odmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0ZnVuY3Rpb24gUExQQXR0cmlidXRlQ2F0ZWdvcnlUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUExQSWRBdHRyaWJ1dGVzLmpzXG52YXIgcmVxdWlyZV9QTFBJZEF0dHJpYnV0ZXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9QTFBJZEF0dHJpYnV0ZXMuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlBMUElkQXR0cmlidXRlcyA9IGluc3RhbmNlT2ZQTFBJZEF0dHJpYnV0ZXM7XG5cdGV4cG9ydHMuUExQSWRBdHRyaWJ1dGVzRnJvbUpTT04gPSBQTFBJZEF0dHJpYnV0ZXNGcm9tSlNPTjtcblx0ZXhwb3J0cy5QTFBJZEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkID0gUExQSWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5QTFBJZEF0dHJpYnV0ZXNUb0pTT04gPSBQTFBJZEF0dHJpYnV0ZXNUb0pTT047XG5cdGV4cG9ydHMuUExQSWRBdHRyaWJ1dGVzVG9KU09OVHlwZWQgPSBQTFBJZEF0dHJpYnV0ZXNUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgUExQSWRBdHRyaWJ1dGVzIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlBMUElkQXR0cmlidXRlcyh2YWx1ZSkge1xuXHRcdGlmICghKFwiaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJpZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gUExQSWRBdHRyaWJ1dGVzRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBQTFBJZEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBQTFBJZEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4geyBcImlkXCI6IGpzb25bXCJpZFwiXSB9O1xuXHR9XG5cdGZ1bmN0aW9uIFBMUElkQXR0cmlidXRlc1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFBMUElkQXR0cmlidXRlc1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBQTFBJZEF0dHJpYnV0ZXNUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4geyBcImlkXCI6IHZhbHVlW1wiaWRcIl0gfTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUExQVXJsQXR0cmlidXRlcy5qc1xudmFyIHJlcXVpcmVfUExQVXJsQXR0cmlidXRlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1BMUFVybEF0dHJpYnV0ZXMuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlBMUFVybEF0dHJpYnV0ZXMgPSBpbnN0YW5jZU9mUExQVXJsQXR0cmlidXRlcztcblx0ZXhwb3J0cy5QTFBVcmxBdHRyaWJ1dGVzRnJvbUpTT04gPSBQTFBVcmxBdHRyaWJ1dGVzRnJvbUpTT047XG5cdGV4cG9ydHMuUExQVXJsQXR0cmlidXRlc0Zyb21KU09OVHlwZWQgPSBQTFBVcmxBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5QTFBVcmxBdHRyaWJ1dGVzVG9KU09OID0gUExQVXJsQXR0cmlidXRlc1RvSlNPTjtcblx0ZXhwb3J0cy5QTFBVcmxBdHRyaWJ1dGVzVG9KU09OVHlwZWQgPSBQTFBVcmxBdHRyaWJ1dGVzVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFBMUFVybEF0dHJpYnV0ZXMgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mUExQVXJsQXR0cmlidXRlcyh2YWx1ZSkge1xuXHRcdGlmICghKFwidXJsXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1widXJsXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBQTFBVcmxBdHRyaWJ1dGVzRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBQTFBVcmxBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUExQVXJsQXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7IFwidXJsXCI6IGpzb25bXCJ1cmxcIl0gfTtcblx0fVxuXHRmdW5jdGlvbiBQTFBVcmxBdHRyaWJ1dGVzVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUExQVXJsQXR0cmlidXRlc1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBQTFBVcmxBdHRyaWJ1dGVzVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHsgXCJ1cmxcIjogdmFsdWVbXCJ1cmxcIl0gfTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUExQQXR0cmlidXRlc0F0dHJpYnV0ZXMuanNcbnZhciByZXF1aXJlX1BMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUExQQXR0cmlidXRlc0F0dHJpYnV0ZXMuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuUExQQXR0cmlidXRlc0F0dHJpYnV0ZXNGcm9tSlNPTiA9IFBMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzRnJvbUpTT047XG5cdGV4cG9ydHMuUExQQXR0cmlidXRlc0F0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkID0gUExQQXR0cmlidXRlc0F0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlBMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzVG9KU09OID0gUExQQXR0cmlidXRlc0F0dHJpYnV0ZXNUb0pTT047XG5cdGV4cG9ydHMuUExQQXR0cmlidXRlc0F0dHJpYnV0ZXNUb0pTT05UeXBlZCA9IFBMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzVG9KU09OVHlwZWQ7XG5cdGNvbnN0IFBMUElkQXR0cmlidXRlc18xID0gcmVxdWlyZV9QTFBJZEF0dHJpYnV0ZXMoKTtcblx0Y29uc3QgUExQVXJsQXR0cmlidXRlc18xID0gcmVxdWlyZV9QTFBVcmxBdHRyaWJ1dGVzKCk7XG5cdGZ1bmN0aW9uIFBMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBQTFBBdHRyaWJ1dGVzQXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFBMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0aWYgKCgwLCBQTFBJZEF0dHJpYnV0ZXNfMS5pbnN0YW5jZU9mUExQSWRBdHRyaWJ1dGVzKShqc29uKSkgcmV0dXJuICgwLCBQTFBJZEF0dHJpYnV0ZXNfMS5QTFBJZEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKShqc29uLCB0cnVlKTtcblx0XHRpZiAoKDAsIFBMUFVybEF0dHJpYnV0ZXNfMS5pbnN0YW5jZU9mUExQVXJsQXR0cmlidXRlcykoanNvbikpIHJldHVybiAoMCwgUExQVXJsQXR0cmlidXRlc18xLlBMUFVybEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKShqc29uLCB0cnVlKTtcblx0XHRyZXR1cm4ge307XG5cdH1cblx0ZnVuY3Rpb24gUExQQXR0cmlidXRlc0F0dHJpYnV0ZXNUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBQTFBBdHRyaWJ1dGVzQXR0cmlidXRlc1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBQTFBBdHRyaWJ1dGVzQXR0cmlidXRlc1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdGlmICgoMCwgUExQSWRBdHRyaWJ1dGVzXzEuaW5zdGFuY2VPZlBMUElkQXR0cmlidXRlcykodmFsdWUpKSByZXR1cm4gKDAsIFBMUElkQXR0cmlidXRlc18xLlBMUElkQXR0cmlidXRlc1RvSlNPTikodmFsdWUpO1xuXHRcdGlmICgoMCwgUExQVXJsQXR0cmlidXRlc18xLmluc3RhbmNlT2ZQTFBVcmxBdHRyaWJ1dGVzKSh2YWx1ZSkpIHJldHVybiAoMCwgUExQVXJsQXR0cmlidXRlc18xLlBMUFVybEF0dHJpYnV0ZXNUb0pTT04pKHZhbHVlKTtcblx0XHRyZXR1cm4ge307XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1BMUEF0dHJpYnV0ZXMuanNcbnZhciByZXF1aXJlX1BMUEF0dHJpYnV0ZXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9QTFBBdHRyaWJ1dGVzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZQTFBBdHRyaWJ1dGVzID0gaW5zdGFuY2VPZlBMUEF0dHJpYnV0ZXM7XG5cdGV4cG9ydHMuUExQQXR0cmlidXRlc0Zyb21KU09OID0gUExQQXR0cmlidXRlc0Zyb21KU09OO1xuXHRleHBvcnRzLlBMUEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkID0gUExQQXR0cmlidXRlc0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuUExQQXR0cmlidXRlc1RvSlNPTiA9IFBMUEF0dHJpYnV0ZXNUb0pTT047XG5cdGV4cG9ydHMuUExQQXR0cmlidXRlc1RvSlNPTlR5cGVkID0gUExQQXR0cmlidXRlc1RvSlNPTlR5cGVkO1xuXHRjb25zdCBQTFBBdHRyaWJ1dGVDYXRlZ29yeV8xID0gcmVxdWlyZV9QTFBBdHRyaWJ1dGVDYXRlZ29yeSgpO1xuXHRjb25zdCBQTFBBdHRyaWJ1dGVzQXR0cmlidXRlc18xID0gcmVxdWlyZV9QTFBBdHRyaWJ1dGVzQXR0cmlidXRlcygpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBQTFBBdHRyaWJ1dGVzIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlBMUEF0dHJpYnV0ZXModmFsdWUpIHtcblx0XHRpZiAoIShcImF0dHJpYnV0ZXNcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJhdHRyaWJ1dGVzXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImNhdGVnb3J5XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY2F0ZWdvcnlcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFBMUEF0dHJpYnV0ZXNGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFBMUEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBQTFBBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiYXR0cmlidXRlc1wiOiAoMCwgUExQQXR0cmlidXRlc0F0dHJpYnV0ZXNfMS5QTFBBdHRyaWJ1dGVzQXR0cmlidXRlc0Zyb21KU09OKShqc29uW1wiYXR0cmlidXRlc1wiXSksXG5cdFx0XHRcImNhdGVnb3J5XCI6ICgwLCBQTFBBdHRyaWJ1dGVDYXRlZ29yeV8xLlBMUEF0dHJpYnV0ZUNhdGVnb3J5RnJvbUpTT04pKGpzb25bXCJjYXRlZ29yeVwiXSlcblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFBMUEF0dHJpYnV0ZXNUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBQTFBBdHRyaWJ1dGVzVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFBMUEF0dHJpYnV0ZXNUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJhdHRyaWJ1dGVzXCI6ICgwLCBQTFBBdHRyaWJ1dGVzQXR0cmlidXRlc18xLlBMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzVG9KU09OKSh2YWx1ZVtcImF0dHJpYnV0ZXNcIl0pLFxuXHRcdFx0XCJjYXRlZ29yeVwiOiAoMCwgUExQQXR0cmlidXRlQ2F0ZWdvcnlfMS5QTFBBdHRyaWJ1dGVDYXRlZ29yeVRvSlNPTikodmFsdWVbXCJjYXRlZ29yeVwiXSlcblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9QYWdlVmlzaXRDYXRlZ29yeS5qc1xudmFyIHJlcXVpcmVfUGFnZVZpc2l0Q2F0ZWdvcnkgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9QYWdlVmlzaXRDYXRlZ29yeS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5QYWdlVmlzaXRDYXRlZ29yeSA9IHZvaWQgMDtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mUGFnZVZpc2l0Q2F0ZWdvcnkgPSBpbnN0YW5jZU9mUGFnZVZpc2l0Q2F0ZWdvcnk7XG5cdGV4cG9ydHMuUGFnZVZpc2l0Q2F0ZWdvcnlGcm9tSlNPTiA9IFBhZ2VWaXNpdENhdGVnb3J5RnJvbUpTT047XG5cdGV4cG9ydHMuUGFnZVZpc2l0Q2F0ZWdvcnlGcm9tSlNPTlR5cGVkID0gUGFnZVZpc2l0Q2F0ZWdvcnlGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlBhZ2VWaXNpdENhdGVnb3J5VG9KU09OID0gUGFnZVZpc2l0Q2F0ZWdvcnlUb0pTT047XG5cdGV4cG9ydHMuUGFnZVZpc2l0Q2F0ZWdvcnlUb0pTT05UeXBlZCA9IFBhZ2VWaXNpdENhdGVnb3J5VG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqXG5cdCogQGV4cG9ydFxuXHQqIEBlbnVtIHtzdHJpbmd9XG5cdCovXG5cdHZhciBQYWdlVmlzaXRDYXRlZ29yeSQxO1xuXHQoZnVuY3Rpb24oUGFnZVZpc2l0Q2F0ZWdvcnkkMikge1xuXHRcdFBhZ2VWaXNpdENhdGVnb3J5JDJbXCJIZWxwXCJdID0gXCJoZWxwXCI7XG5cdFx0UGFnZVZpc2l0Q2F0ZWdvcnkkMltcIkhvbWVwYWdlXCJdID0gXCJob21lcGFnZVwiO1xuXHRcdFBhZ2VWaXNpdENhdGVnb3J5JDJbXCJPdGhlclwiXSA9IFwib3RoZXJcIjtcblx0XHRQYWdlVmlzaXRDYXRlZ29yeSQyW1wiUHJvZHVjdExpa2VcIl0gPSBcInByb2R1Y3RfbGlrZVwiO1xuXHRcdFBhZ2VWaXNpdENhdGVnb3J5JDJbXCJTZWFyY2hcIl0gPSBcInNlYXJjaFwiO1xuXHR9KShQYWdlVmlzaXRDYXRlZ29yeSQxIHx8IChleHBvcnRzLlBhZ2VWaXNpdENhdGVnb3J5ID0gUGFnZVZpc2l0Q2F0ZWdvcnkkMSA9IHt9KSk7XG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZQYWdlVmlzaXRDYXRlZ29yeSh2YWx1ZSkge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIFBhZ2VWaXNpdENhdGVnb3J5JDEpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUGFnZVZpc2l0Q2F0ZWdvcnkkMSwga2V5KSkge1xuXHRcdFx0aWYgKFBhZ2VWaXNpdENhdGVnb3J5JDFba2V5XSA9PT0gdmFsdWUpIHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0ZnVuY3Rpb24gUGFnZVZpc2l0Q2F0ZWdvcnlGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFBhZ2VWaXNpdENhdGVnb3J5RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUGFnZVZpc2l0Q2F0ZWdvcnlGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRyZXR1cm4ganNvbjtcblx0fVxuXHRmdW5jdGlvbiBQYWdlVmlzaXRDYXRlZ29yeVRvSlNPTih2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRmdW5jdGlvbiBQYWdlVmlzaXRDYXRlZ29yeVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9QYWdlVmlzaXRBdHRyaWJ1dGVzLmpzXG52YXIgcmVxdWlyZV9QYWdlVmlzaXRBdHRyaWJ1dGVzID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUGFnZVZpc2l0QXR0cmlidXRlcy5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mUGFnZVZpc2l0QXR0cmlidXRlcyA9IGluc3RhbmNlT2ZQYWdlVmlzaXRBdHRyaWJ1dGVzO1xuXHRleHBvcnRzLlBhZ2VWaXNpdEF0dHJpYnV0ZXNGcm9tSlNPTiA9IFBhZ2VWaXNpdEF0dHJpYnV0ZXNGcm9tSlNPTjtcblx0ZXhwb3J0cy5QYWdlVmlzaXRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZCA9IFBhZ2VWaXNpdEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlBhZ2VWaXNpdEF0dHJpYnV0ZXNUb0pTT04gPSBQYWdlVmlzaXRBdHRyaWJ1dGVzVG9KU09OO1xuXHRleHBvcnRzLlBhZ2VWaXNpdEF0dHJpYnV0ZXNUb0pTT05UeXBlZCA9IFBhZ2VWaXNpdEF0dHJpYnV0ZXNUb0pTT05UeXBlZDtcblx0Y29uc3QgUGFnZVZpc2l0Q2F0ZWdvcnlfMSA9IHJlcXVpcmVfUGFnZVZpc2l0Q2F0ZWdvcnkoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgUGFnZVZpc2l0QXR0cmlidXRlcyBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZQYWdlVmlzaXRBdHRyaWJ1dGVzKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJwYWdlX3Zpc2l0X2NhdGVnb3J5XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wicGFnZV92aXNpdF9jYXRlZ29yeVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJ1cmxcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJ1cmxcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFBhZ2VWaXNpdEF0dHJpYnV0ZXNGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFBhZ2VWaXNpdEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBQYWdlVmlzaXRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwicGFnZV92aXNpdF9jYXRlZ29yeVwiOiAoMCwgUGFnZVZpc2l0Q2F0ZWdvcnlfMS5QYWdlVmlzaXRDYXRlZ29yeUZyb21KU09OKShqc29uW1wicGFnZV92aXNpdF9jYXRlZ29yeVwiXSksXG5cdFx0XHRcInVybFwiOiBqc29uW1widXJsXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBQYWdlVmlzaXRBdHRyaWJ1dGVzVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUGFnZVZpc2l0QXR0cmlidXRlc1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBQYWdlVmlzaXRBdHRyaWJ1dGVzVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwicGFnZV92aXNpdF9jYXRlZ29yeVwiOiAoMCwgUGFnZVZpc2l0Q2F0ZWdvcnlfMS5QYWdlVmlzaXRDYXRlZ29yeVRvSlNPTikodmFsdWVbXCJwYWdlX3Zpc2l0X2NhdGVnb3J5XCJdKSxcblx0XHRcdFwidXJsXCI6IHZhbHVlW1widXJsXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUXVlcnlUeXBlZEF0dHJpYnV0ZXMuanNcbnZhciByZXF1aXJlX1F1ZXJ5VHlwZWRBdHRyaWJ1dGVzID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUXVlcnlUeXBlZEF0dHJpYnV0ZXMuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlF1ZXJ5VHlwZWRBdHRyaWJ1dGVzID0gaW5zdGFuY2VPZlF1ZXJ5VHlwZWRBdHRyaWJ1dGVzO1xuXHRleHBvcnRzLlF1ZXJ5VHlwZWRBdHRyaWJ1dGVzRnJvbUpTT04gPSBRdWVyeVR5cGVkQXR0cmlidXRlc0Zyb21KU09OO1xuXHRleHBvcnRzLlF1ZXJ5VHlwZWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZCA9IFF1ZXJ5VHlwZWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5RdWVyeVR5cGVkQXR0cmlidXRlc1RvSlNPTiA9IFF1ZXJ5VHlwZWRBdHRyaWJ1dGVzVG9KU09OO1xuXHRleHBvcnRzLlF1ZXJ5VHlwZWRBdHRyaWJ1dGVzVG9KU09OVHlwZWQgPSBRdWVyeVR5cGVkQXR0cmlidXRlc1RvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBRdWVyeVR5cGVkQXR0cmlidXRlcyBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZRdWVyeVR5cGVkQXR0cmlidXRlcyh2YWx1ZSkge1xuXHRcdGlmICghKFwicXVlcnlcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJxdWVyeVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gUXVlcnlUeXBlZEF0dHJpYnV0ZXNGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFF1ZXJ5VHlwZWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUXVlcnlUeXBlZEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4geyBcInF1ZXJ5XCI6IGpzb25bXCJxdWVyeVwiXSB9O1xuXHR9XG5cdGZ1bmN0aW9uIFF1ZXJ5VHlwZWRBdHRyaWJ1dGVzVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUXVlcnlUeXBlZEF0dHJpYnV0ZXNUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUXVlcnlUeXBlZEF0dHJpYnV0ZXNUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4geyBcInF1ZXJ5XCI6IHZhbHVlW1wicXVlcnlcIl0gfTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU2VhcmNoQXR0cmlidXRlcy5qc1xudmFyIHJlcXVpcmVfU2VhcmNoQXR0cmlidXRlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1NlYXJjaEF0dHJpYnV0ZXMuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlNlYXJjaEF0dHJpYnV0ZXMgPSBpbnN0YW5jZU9mU2VhcmNoQXR0cmlidXRlcztcblx0ZXhwb3J0cy5TZWFyY2hBdHRyaWJ1dGVzRnJvbUpTT04gPSBTZWFyY2hBdHRyaWJ1dGVzRnJvbUpTT047XG5cdGV4cG9ydHMuU2VhcmNoQXR0cmlidXRlc0Zyb21KU09OVHlwZWQgPSBTZWFyY2hBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5TZWFyY2hBdHRyaWJ1dGVzVG9KU09OID0gU2VhcmNoQXR0cmlidXRlc1RvSlNPTjtcblx0ZXhwb3J0cy5TZWFyY2hBdHRyaWJ1dGVzVG9KU09OVHlwZWQgPSBTZWFyY2hBdHRyaWJ1dGVzVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFNlYXJjaEF0dHJpYnV0ZXMgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mU2VhcmNoQXR0cmlidXRlcyh2YWx1ZSkge1xuXHRcdGlmICghKFwic2VhcmNoX3Rlcm1cIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJzZWFyY2hfdGVybVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gU2VhcmNoQXR0cmlidXRlc0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU2VhcmNoQXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFNlYXJjaEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJzZWFyY2hfdGVybVwiOiBqc29uW1wic2VhcmNoX3Rlcm1cIl0sXG5cdFx0XHRcInNlbGVjdGVkX2ZpbHRlcnNcIjoganNvbltcInNlbGVjdGVkX2ZpbHRlcnNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJzZWxlY3RlZF9maWx0ZXJzXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBTZWFyY2hBdHRyaWJ1dGVzVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU2VhcmNoQXR0cmlidXRlc1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBTZWFyY2hBdHRyaWJ1dGVzVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwic2VhcmNoX3Rlcm1cIjogdmFsdWVbXCJzZWFyY2hfdGVybVwiXSxcblx0XHRcdFwic2VsZWN0ZWRfZmlsdGVyc1wiOiB2YWx1ZVtcInNlbGVjdGVkX2ZpbHRlcnNcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXMuanNcbnZhciByZXF1aXJlX1N1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1N1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcy5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzID0gaW5zdGFuY2VPZlN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcztcblx0ZXhwb3J0cy5TdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNGcm9tSlNPTiA9IFN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlc0Zyb21KU09OO1xuXHRleHBvcnRzLlN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlc0Zyb21KU09OVHlwZWQgPSBTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlc1RvSlNPTiA9IFN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlc1RvSlNPTjtcblx0ZXhwb3J0cy5TdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNUb0pTT05UeXBlZCA9IFN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlc1RvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXMgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJzdWdnZXN0aW9uX2lkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wic3VnZ2VzdGlvbl9pZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4geyBcInN1Z2dlc3Rpb25faWRcIjoganNvbltcInN1Z2dlc3Rpb25faWRcIl0gfTtcblx0fVxuXHRmdW5jdGlvbiBTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHsgXCJzdWdnZXN0aW9uX2lkXCI6IHZhbHVlW1wic3VnZ2VzdGlvbl9pZFwiXSB9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Vc2VyRXZlbnRBdHRyaWJ1dGVzLmpzXG52YXIgcmVxdWlyZV9Vc2VyRXZlbnRBdHRyaWJ1dGVzID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVXNlckV2ZW50QXR0cmlidXRlcy5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5Vc2VyRXZlbnRBdHRyaWJ1dGVzRnJvbUpTT04gPSBVc2VyRXZlbnRBdHRyaWJ1dGVzRnJvbUpTT047XG5cdGV4cG9ydHMuVXNlckV2ZW50QXR0cmlidXRlc0Zyb21KU09OVHlwZWQgPSBVc2VyRXZlbnRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5Vc2VyRXZlbnRBdHRyaWJ1dGVzVG9KU09OID0gVXNlckV2ZW50QXR0cmlidXRlc1RvSlNPTjtcblx0ZXhwb3J0cy5Vc2VyRXZlbnRBdHRyaWJ1dGVzVG9KU09OVHlwZWQgPSBVc2VyRXZlbnRBdHRyaWJ1dGVzVG9KU09OVHlwZWQ7XG5cdGNvbnN0IEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzXzEgPSByZXF1aXJlX0Zvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzKCk7XG5cdGNvbnN0IFBEUEF0dHJpYnV0ZXNfMSQxID0gcmVxdWlyZV9QRFBBdHRyaWJ1dGVzKCk7XG5cdGNvbnN0IFBMUEF0dHJpYnV0ZXNfMSQxID0gcmVxdWlyZV9QTFBBdHRyaWJ1dGVzKCk7XG5cdGNvbnN0IFBhZ2VWaXNpdEF0dHJpYnV0ZXNfMSA9IHJlcXVpcmVfUGFnZVZpc2l0QXR0cmlidXRlcygpO1xuXHRjb25zdCBRdWVyeVR5cGVkQXR0cmlidXRlc18xID0gcmVxdWlyZV9RdWVyeVR5cGVkQXR0cmlidXRlcygpO1xuXHRjb25zdCBTZWFyY2hBdHRyaWJ1dGVzXzEgPSByZXF1aXJlX1NlYXJjaEF0dHJpYnV0ZXMoKTtcblx0Y29uc3QgU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzXzEgPSByZXF1aXJlX1N1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcygpO1xuXHRmdW5jdGlvbiBVc2VyRXZlbnRBdHRyaWJ1dGVzRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBVc2VyRXZlbnRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVXNlckV2ZW50QXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdGlmICgoMCwgRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXNfMS5pbnN0YW5jZU9mRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXMpKGpzb24pKSByZXR1cm4gKDAsIEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzXzEuRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKShqc29uLCB0cnVlKTtcblx0XHRpZiAoKDAsIFBEUEF0dHJpYnV0ZXNfMSQxLmluc3RhbmNlT2ZQRFBBdHRyaWJ1dGVzKShqc29uKSkgcmV0dXJuICgwLCBQRFBBdHRyaWJ1dGVzXzEkMS5QRFBBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZCkoanNvbiwgdHJ1ZSk7XG5cdFx0aWYgKCgwLCBQTFBBdHRyaWJ1dGVzXzEkMS5pbnN0YW5jZU9mUExQQXR0cmlidXRlcykoanNvbikpIHJldHVybiAoMCwgUExQQXR0cmlidXRlc18xJDEuUExQQXR0cmlidXRlc0Zyb21KU09OVHlwZWQpKGpzb24sIHRydWUpO1xuXHRcdGlmICgoMCwgUGFnZVZpc2l0QXR0cmlidXRlc18xLmluc3RhbmNlT2ZQYWdlVmlzaXRBdHRyaWJ1dGVzKShqc29uKSkgcmV0dXJuICgwLCBQYWdlVmlzaXRBdHRyaWJ1dGVzXzEuUGFnZVZpc2l0QXR0cmlidXRlc0Zyb21KU09OVHlwZWQpKGpzb24sIHRydWUpO1xuXHRcdGlmICgoMCwgUXVlcnlUeXBlZEF0dHJpYnV0ZXNfMS5pbnN0YW5jZU9mUXVlcnlUeXBlZEF0dHJpYnV0ZXMpKGpzb24pKSByZXR1cm4gKDAsIFF1ZXJ5VHlwZWRBdHRyaWJ1dGVzXzEuUXVlcnlUeXBlZEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKShqc29uLCB0cnVlKTtcblx0XHRpZiAoKDAsIFNlYXJjaEF0dHJpYnV0ZXNfMS5pbnN0YW5jZU9mU2VhcmNoQXR0cmlidXRlcykoanNvbikpIHJldHVybiAoMCwgU2VhcmNoQXR0cmlidXRlc18xLlNlYXJjaEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKShqc29uLCB0cnVlKTtcblx0XHRpZiAoKDAsIFN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlc18xLmluc3RhbmNlT2ZTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXMpKGpzb24pKSByZXR1cm4gKDAsIFN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlc18xLlN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlc0Zyb21KU09OVHlwZWQpKGpzb24sIHRydWUpO1xuXHRcdHJldHVybiB7fTtcblx0fVxuXHRmdW5jdGlvbiBVc2VyRXZlbnRBdHRyaWJ1dGVzVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVXNlckV2ZW50QXR0cmlidXRlc1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBVc2VyRXZlbnRBdHRyaWJ1dGVzVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0aWYgKCgwLCBGb3JtU3VibWl0dGVkQXR0cmlidXRlc18xLmluc3RhbmNlT2ZGb3JtU3VibWl0dGVkQXR0cmlidXRlcykodmFsdWUpKSByZXR1cm4gKDAsIEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzXzEuRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXNUb0pTT04pKHZhbHVlKTtcblx0XHRpZiAoKDAsIFBEUEF0dHJpYnV0ZXNfMSQxLmluc3RhbmNlT2ZQRFBBdHRyaWJ1dGVzKSh2YWx1ZSkpIHJldHVybiAoMCwgUERQQXR0cmlidXRlc18xJDEuUERQQXR0cmlidXRlc1RvSlNPTikodmFsdWUpO1xuXHRcdGlmICgoMCwgUExQQXR0cmlidXRlc18xJDEuaW5zdGFuY2VPZlBMUEF0dHJpYnV0ZXMpKHZhbHVlKSkgcmV0dXJuICgwLCBQTFBBdHRyaWJ1dGVzXzEkMS5QTFBBdHRyaWJ1dGVzVG9KU09OKSh2YWx1ZSk7XG5cdFx0aWYgKCgwLCBQYWdlVmlzaXRBdHRyaWJ1dGVzXzEuaW5zdGFuY2VPZlBhZ2VWaXNpdEF0dHJpYnV0ZXMpKHZhbHVlKSkgcmV0dXJuICgwLCBQYWdlVmlzaXRBdHRyaWJ1dGVzXzEuUGFnZVZpc2l0QXR0cmlidXRlc1RvSlNPTikodmFsdWUpO1xuXHRcdGlmICgoMCwgUXVlcnlUeXBlZEF0dHJpYnV0ZXNfMS5pbnN0YW5jZU9mUXVlcnlUeXBlZEF0dHJpYnV0ZXMpKHZhbHVlKSkgcmV0dXJuICgwLCBRdWVyeVR5cGVkQXR0cmlidXRlc18xLlF1ZXJ5VHlwZWRBdHRyaWJ1dGVzVG9KU09OKSh2YWx1ZSk7XG5cdFx0aWYgKCgwLCBTZWFyY2hBdHRyaWJ1dGVzXzEuaW5zdGFuY2VPZlNlYXJjaEF0dHJpYnV0ZXMpKHZhbHVlKSkgcmV0dXJuICgwLCBTZWFyY2hBdHRyaWJ1dGVzXzEuU2VhcmNoQXR0cmlidXRlc1RvSlNPTikodmFsdWUpO1xuXHRcdGlmICgoMCwgU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzXzEuaW5zdGFuY2VPZlN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcykodmFsdWUpKSByZXR1cm4gKDAsIFN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlc18xLlN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlc1RvSlNPTikodmFsdWUpO1xuXHRcdHJldHVybiB7fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVXNlckV2ZW50LmpzXG52YXIgcmVxdWlyZV9Vc2VyRXZlbnQgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Vc2VyRXZlbnQuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlVzZXJFdmVudCA9IGluc3RhbmNlT2ZVc2VyRXZlbnQ7XG5cdGV4cG9ydHMuVXNlckV2ZW50RnJvbUpTT04gPSBVc2VyRXZlbnRGcm9tSlNPTjtcblx0ZXhwb3J0cy5Vc2VyRXZlbnRGcm9tSlNPTlR5cGVkID0gVXNlckV2ZW50RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5Vc2VyRXZlbnRUb0pTT04gPSBVc2VyRXZlbnRUb0pTT047XG5cdGV4cG9ydHMuVXNlckV2ZW50VG9KU09OVHlwZWQgPSBVc2VyRXZlbnRUb0pTT05UeXBlZDtcblx0Y29uc3QgVXNlckV2ZW50Q2F0ZWdvcnlfMSA9IHJlcXVpcmVfVXNlckV2ZW50Q2F0ZWdvcnkoKTtcblx0Y29uc3QgVXNlckV2ZW50QXR0cmlidXRlc18xID0gcmVxdWlyZV9Vc2VyRXZlbnRBdHRyaWJ1dGVzKCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFVzZXJFdmVudCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZVc2VyRXZlbnQodmFsdWUpIHtcblx0XHRpZiAoIShcImNhdGVnb3J5XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY2F0ZWdvcnlcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiY3JlYXRlZF9hdFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNyZWF0ZWRfYXRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiZXZlbnRfaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJldmVudF9pZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gVXNlckV2ZW50RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBVc2VyRXZlbnRGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBVc2VyRXZlbnRGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJhdHRyaWJ1dGVzXCI6IGpzb25bXCJhdHRyaWJ1dGVzXCJdID09IG51bGwgPyB2b2lkIDAgOiAoMCwgVXNlckV2ZW50QXR0cmlidXRlc18xLlVzZXJFdmVudEF0dHJpYnV0ZXNGcm9tSlNPTikoanNvbltcImF0dHJpYnV0ZXNcIl0pLFxuXHRcdFx0XCJjYXRlZ29yeVwiOiAoMCwgVXNlckV2ZW50Q2F0ZWdvcnlfMS5Vc2VyRXZlbnRDYXRlZ29yeUZyb21KU09OKShqc29uW1wiY2F0ZWdvcnlcIl0pLFxuXHRcdFx0XCJjcmVhdGVkX2F0XCI6IGpzb25bXCJjcmVhdGVkX2F0XCJdLFxuXHRcdFx0XCJldmVudF9pZFwiOiBqc29uW1wiZXZlbnRfaWRcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFVzZXJFdmVudFRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFVzZXJFdmVudFRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBVc2VyRXZlbnRUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJhdHRyaWJ1dGVzXCI6ICgwLCBVc2VyRXZlbnRBdHRyaWJ1dGVzXzEuVXNlckV2ZW50QXR0cmlidXRlc1RvSlNPTikodmFsdWVbXCJhdHRyaWJ1dGVzXCJdKSxcblx0XHRcdFwiY2F0ZWdvcnlcIjogKDAsIFVzZXJFdmVudENhdGVnb3J5XzEuVXNlckV2ZW50Q2F0ZWdvcnlUb0pTT04pKHZhbHVlW1wiY2F0ZWdvcnlcIl0pLFxuXHRcdFx0XCJjcmVhdGVkX2F0XCI6IHZhbHVlW1wiY3JlYXRlZF9hdFwiXSxcblx0XHRcdFwiZXZlbnRfaWRcIjogdmFsdWVbXCJldmVudF9pZFwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL05leHRNZXNzYWdlUmVxdWVzdC5qc1xudmFyIHJlcXVpcmVfTmV4dE1lc3NhZ2VSZXF1ZXN0ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvTmV4dE1lc3NhZ2VSZXF1ZXN0LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZOZXh0TWVzc2FnZVJlcXVlc3QgPSBpbnN0YW5jZU9mTmV4dE1lc3NhZ2VSZXF1ZXN0O1xuXHRleHBvcnRzLk5leHRNZXNzYWdlUmVxdWVzdEZyb21KU09OID0gTmV4dE1lc3NhZ2VSZXF1ZXN0RnJvbUpTT047XG5cdGV4cG9ydHMuTmV4dE1lc3NhZ2VSZXF1ZXN0RnJvbUpTT05UeXBlZCA9IE5leHRNZXNzYWdlUmVxdWVzdEZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuTmV4dE1lc3NhZ2VSZXF1ZXN0VG9KU09OID0gTmV4dE1lc3NhZ2VSZXF1ZXN0VG9KU09OO1xuXHRleHBvcnRzLk5leHRNZXNzYWdlUmVxdWVzdFRvSlNPTlR5cGVkID0gTmV4dE1lc3NhZ2VSZXF1ZXN0VG9KU09OVHlwZWQ7XG5cdGNvbnN0IENvbnRleHRfMSQzID0gcmVxdWlyZV9Db250ZXh0KCk7XG5cdGNvbnN0IEdlbmVyYXRpb25QYXJhbXNfMSA9IHJlcXVpcmVfR2VuZXJhdGlvblBhcmFtcygpO1xuXHRjb25zdCBVc2VyRXZlbnRfMSQzID0gcmVxdWlyZV9Vc2VyRXZlbnQoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgTmV4dE1lc3NhZ2VSZXF1ZXN0IGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZk5leHRNZXNzYWdlUmVxdWVzdCh2YWx1ZSkge1xuXHRcdGlmICghKFwiY29udGV4dFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNvbnRleHRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJpZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gTmV4dE1lc3NhZ2VSZXF1ZXN0RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBOZXh0TWVzc2FnZVJlcXVlc3RGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBOZXh0TWVzc2FnZVJlcXVlc3RGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb250ZXh0XCI6ICgwLCBDb250ZXh0XzEkMy5Db250ZXh0RnJvbUpTT04pKGpzb25bXCJjb250ZXh0XCJdKSxcblx0XHRcdFwiZmVhdHVyZV9mbGFnc1wiOiBqc29uW1wiZmVhdHVyZV9mbGFnc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImZlYXR1cmVfZmxhZ3NcIl0sXG5cdFx0XHRcImdlbmVyYXRpb25fcGFyYW1zXCI6IGpzb25bXCJnZW5lcmF0aW9uX3BhcmFtc1wiXSA9PSBudWxsID8gdm9pZCAwIDogKDAsIEdlbmVyYXRpb25QYXJhbXNfMS5HZW5lcmF0aW9uUGFyYW1zRnJvbUpTT04pKGpzb25bXCJnZW5lcmF0aW9uX3BhcmFtc1wiXSksXG5cdFx0XHRcImlkXCI6IGpzb25bXCJpZFwiXSxcblx0XHRcdFwib3JnX2Jhc2VfY29uZmlnX3ZlcnNpb25cIjoganNvbltcIm9yZ19iYXNlX2NvbmZpZ192ZXJzaW9uXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wib3JnX2Jhc2VfY29uZmlnX3ZlcnNpb25cIl0sXG5cdFx0XHRcInVzZXJfZXZlbnRzXCI6IGpzb25bXCJ1c2VyX2V2ZW50c1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInVzZXJfZXZlbnRzXCJdLm1hcChVc2VyRXZlbnRfMSQzLlVzZXJFdmVudEZyb21KU09OKVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gTmV4dE1lc3NhZ2VSZXF1ZXN0VG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gTmV4dE1lc3NhZ2VSZXF1ZXN0VG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIE5leHRNZXNzYWdlUmVxdWVzdFRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvbnRleHRcIjogKDAsIENvbnRleHRfMSQzLkNvbnRleHRUb0pTT04pKHZhbHVlW1wiY29udGV4dFwiXSksXG5cdFx0XHRcImZlYXR1cmVfZmxhZ3NcIjogdmFsdWVbXCJmZWF0dXJlX2ZsYWdzXCJdLFxuXHRcdFx0XCJnZW5lcmF0aW9uX3BhcmFtc1wiOiAoMCwgR2VuZXJhdGlvblBhcmFtc18xLkdlbmVyYXRpb25QYXJhbXNUb0pTT04pKHZhbHVlW1wiZ2VuZXJhdGlvbl9wYXJhbXNcIl0pLFxuXHRcdFx0XCJpZFwiOiB2YWx1ZVtcImlkXCJdLFxuXHRcdFx0XCJvcmdfYmFzZV9jb25maWdfdmVyc2lvblwiOiB2YWx1ZVtcIm9yZ19iYXNlX2NvbmZpZ192ZXJzaW9uXCJdLFxuXHRcdFx0XCJ1c2VyX2V2ZW50c1wiOiB2YWx1ZVtcInVzZXJfZXZlbnRzXCJdID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZVtcInVzZXJfZXZlbnRzXCJdLm1hcChVc2VyRXZlbnRfMSQzLlVzZXJFdmVudFRvSlNPTilcblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9PcmRlckl0ZW1JbmZvLmpzXG52YXIgcmVxdWlyZV9PcmRlckl0ZW1JbmZvID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvT3JkZXJJdGVtSW5mby5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mT3JkZXJJdGVtSW5mbyA9IGluc3RhbmNlT2ZPcmRlckl0ZW1JbmZvO1xuXHRleHBvcnRzLk9yZGVySXRlbUluZm9Gcm9tSlNPTiA9IE9yZGVySXRlbUluZm9Gcm9tSlNPTjtcblx0ZXhwb3J0cy5PcmRlckl0ZW1JbmZvRnJvbUpTT05UeXBlZCA9IE9yZGVySXRlbUluZm9Gcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLk9yZGVySXRlbUluZm9Ub0pTT04gPSBPcmRlckl0ZW1JbmZvVG9KU09OO1xuXHRleHBvcnRzLk9yZGVySXRlbUluZm9Ub0pTT05UeXBlZCA9IE9yZGVySXRlbUluZm9Ub0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgT3JkZXJJdGVtSW5mbyBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZPcmRlckl0ZW1JbmZvKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJpdGVtX3ByaWNlXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaXRlbV9wcmljZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJpdGVtX3F1YW50aXR5XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaXRlbV9xdWFudGl0eVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJpdGVtX3RpdGxlXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaXRlbV90aXRsZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJvcmRlcl9pdGVtX2lkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wib3JkZXJfaXRlbV9pZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gT3JkZXJJdGVtSW5mb0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gT3JkZXJJdGVtSW5mb0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIE9yZGVySXRlbUluZm9Gcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJkZWxpdmVyZWRfYXRcIjoganNvbltcImRlbGl2ZXJlZF9hdFwiXSA9PSBudWxsID8gdm9pZCAwIDogbmV3IERhdGUoanNvbltcImRlbGl2ZXJlZF9hdFwiXSksXG5cdFx0XHRcImVzdGltYXRlZF9kZWxpdmVyeV9hdFwiOiBqc29uW1wiZXN0aW1hdGVkX2RlbGl2ZXJ5X2F0XCJdID09IG51bGwgPyB2b2lkIDAgOiBuZXcgRGF0ZShqc29uW1wiZXN0aW1hdGVkX2RlbGl2ZXJ5X2F0XCJdKSxcblx0XHRcdFwiZnVsZmlsbG1lbnRfZGlzcGxheV9zdGF0dXNcIjoganNvbltcImZ1bGZpbGxtZW50X2Rpc3BsYXlfc3RhdHVzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiZnVsZmlsbG1lbnRfZGlzcGxheV9zdGF0dXNcIl0sXG5cdFx0XHRcImltYWdlXCI6IGpzb25bXCJpbWFnZVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImltYWdlXCJdLFxuXHRcdFx0XCJpbl90cmFuc2l0X2F0XCI6IGpzb25bXCJpbl90cmFuc2l0X2F0XCJdID09IG51bGwgPyB2b2lkIDAgOiBuZXcgRGF0ZShqc29uW1wiaW5fdHJhbnNpdF9hdFwiXSksXG5cdFx0XHRcIml0ZW1fcHJpY2VcIjoganNvbltcIml0ZW1fcHJpY2VcIl0sXG5cdFx0XHRcIml0ZW1fcXVhbnRpdHlcIjoganNvbltcIml0ZW1fcXVhbnRpdHlcIl0sXG5cdFx0XHRcIml0ZW1fdGl0bGVcIjoganNvbltcIml0ZW1fdGl0bGVcIl0sXG5cdFx0XHRcIm9yZGVyX2l0ZW1faWRcIjoganNvbltcIm9yZGVyX2l0ZW1faWRcIl0sXG5cdFx0XHRcInRyYWNraW5nX3VybFwiOiBqc29uW1widHJhY2tpbmdfdXJsXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1widHJhY2tpbmdfdXJsXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBPcmRlckl0ZW1JbmZvVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gT3JkZXJJdGVtSW5mb1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBPcmRlckl0ZW1JbmZvVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiZGVsaXZlcmVkX2F0XCI6IHZhbHVlW1wiZGVsaXZlcmVkX2F0XCJdID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZVtcImRlbGl2ZXJlZF9hdFwiXS50b0lTT1N0cmluZygpLFxuXHRcdFx0XCJlc3RpbWF0ZWRfZGVsaXZlcnlfYXRcIjogdmFsdWVbXCJlc3RpbWF0ZWRfZGVsaXZlcnlfYXRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IHZhbHVlW1wiZXN0aW1hdGVkX2RlbGl2ZXJ5X2F0XCJdLnRvSVNPU3RyaW5nKCksXG5cdFx0XHRcImZ1bGZpbGxtZW50X2Rpc3BsYXlfc3RhdHVzXCI6IHZhbHVlW1wiZnVsZmlsbG1lbnRfZGlzcGxheV9zdGF0dXNcIl0sXG5cdFx0XHRcImltYWdlXCI6IHZhbHVlW1wiaW1hZ2VcIl0sXG5cdFx0XHRcImluX3RyYW5zaXRfYXRcIjogdmFsdWVbXCJpbl90cmFuc2l0X2F0XCJdID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZVtcImluX3RyYW5zaXRfYXRcIl0udG9JU09TdHJpbmcoKSxcblx0XHRcdFwiaXRlbV9wcmljZVwiOiB2YWx1ZVtcIml0ZW1fcHJpY2VcIl0sXG5cdFx0XHRcIml0ZW1fcXVhbnRpdHlcIjogdmFsdWVbXCJpdGVtX3F1YW50aXR5XCJdLFxuXHRcdFx0XCJpdGVtX3RpdGxlXCI6IHZhbHVlW1wiaXRlbV90aXRsZVwiXSxcblx0XHRcdFwib3JkZXJfaXRlbV9pZFwiOiB2YWx1ZVtcIm9yZGVyX2l0ZW1faWRcIl0sXG5cdFx0XHRcInRyYWNraW5nX3VybFwiOiB2YWx1ZVtcInRyYWNraW5nX3VybFwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL09yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzLmpzXG52YXIgcmVxdWlyZV9PcmRlclJlc3BvbnNlQXR0cmlidXRlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL09yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZPcmRlclJlc3BvbnNlQXR0cmlidXRlcyA9IGluc3RhbmNlT2ZPcmRlclJlc3BvbnNlQXR0cmlidXRlcztcblx0ZXhwb3J0cy5PcmRlclJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OID0gT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTjtcblx0ZXhwb3J0cy5PcmRlclJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OVHlwZWQgPSBPcmRlclJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT04gPSBPcmRlclJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTjtcblx0ZXhwb3J0cy5PcmRlclJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTlR5cGVkID0gT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT05UeXBlZDtcblx0Y29uc3QgT3JkZXJJdGVtSW5mb18xID0gcmVxdWlyZV9PcmRlckl0ZW1JbmZvKCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIE9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZk9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJjcmVhdGVkX2F0XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY3JlYXRlZF9hdFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJsYXRlc3RfZXZlbnRfZGF0ZVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImxhdGVzdF9ldmVudF9kYXRlXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImxpbmVfaXRlbXNcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJsaW5lX2l0ZW1zXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcIm9yZGVyX2lkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wib3JkZXJfaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwib3JkZXJfbnVtYmVyXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wib3JkZXJfbnVtYmVyXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBPcmRlclJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBPcmRlclJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNyZWF0ZWRfYXRcIjogbmV3IERhdGUoanNvbltcImNyZWF0ZWRfYXRcIl0pLFxuXHRcdFx0XCJsYXRlc3RfZXZlbnRfZGF0ZVwiOiBuZXcgRGF0ZShqc29uW1wibGF0ZXN0X2V2ZW50X2RhdGVcIl0pLFxuXHRcdFx0XCJsaW5lX2l0ZW1zXCI6IGpzb25bXCJsaW5lX2l0ZW1zXCJdLm1hcChPcmRlckl0ZW1JbmZvXzEuT3JkZXJJdGVtSW5mb0Zyb21KU09OKSxcblx0XHRcdFwib3JkZXJfaWRcIjoganNvbltcIm9yZGVyX2lkXCJdLFxuXHRcdFx0XCJvcmRlcl9udW1iZXJcIjoganNvbltcIm9yZGVyX251bWJlclwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBPcmRlclJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBPcmRlclJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNyZWF0ZWRfYXRcIjogdmFsdWVbXCJjcmVhdGVkX2F0XCJdLnRvSVNPU3RyaW5nKCksXG5cdFx0XHRcImxhdGVzdF9ldmVudF9kYXRlXCI6IHZhbHVlW1wibGF0ZXN0X2V2ZW50X2RhdGVcIl0udG9JU09TdHJpbmcoKSxcblx0XHRcdFwibGluZV9pdGVtc1wiOiB2YWx1ZVtcImxpbmVfaXRlbXNcIl0ubWFwKE9yZGVySXRlbUluZm9fMS5PcmRlckl0ZW1JbmZvVG9KU09OKSxcblx0XHRcdFwib3JkZXJfaWRcIjogdmFsdWVbXCJvcmRlcl9pZFwiXSxcblx0XHRcdFwib3JkZXJfbnVtYmVyXCI6IHZhbHVlW1wib3JkZXJfbnVtYmVyXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvT3JnYW5pemF0aW9uLmpzXG52YXIgcmVxdWlyZV9Pcmdhbml6YXRpb24gPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Pcmdhbml6YXRpb24uanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuT3JnYW5pemF0aW9uU3RhdHVzRW51bSA9IHZvaWQgMDtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mT3JnYW5pemF0aW9uID0gaW5zdGFuY2VPZk9yZ2FuaXphdGlvbjtcblx0ZXhwb3J0cy5Pcmdhbml6YXRpb25Gcm9tSlNPTiA9IE9yZ2FuaXphdGlvbkZyb21KU09OO1xuXHRleHBvcnRzLk9yZ2FuaXphdGlvbkZyb21KU09OVHlwZWQgPSBPcmdhbml6YXRpb25Gcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLk9yZ2FuaXphdGlvblRvSlNPTiA9IE9yZ2FuaXphdGlvblRvSlNPTjtcblx0ZXhwb3J0cy5Pcmdhbml6YXRpb25Ub0pTT05UeXBlZCA9IE9yZ2FuaXphdGlvblRvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBAZXhwb3J0XG5cdCogQGVudW0ge3N0cmluZ31cblx0Ki9cblx0dmFyIE9yZ2FuaXphdGlvblN0YXR1c0VudW07XG5cdChmdW5jdGlvbihPcmdhbml6YXRpb25TdGF0dXNFbnVtJDEpIHtcblx0XHRPcmdhbml6YXRpb25TdGF0dXNFbnVtJDFbXCJBY3RpdmVcIl0gPSBcImFjdGl2ZVwiO1xuXHRcdE9yZ2FuaXphdGlvblN0YXR1c0VudW0kMVtcIkluYWN0aXZlXCJdID0gXCJpbmFjdGl2ZVwiO1xuXHR9KShPcmdhbml6YXRpb25TdGF0dXNFbnVtIHx8IChleHBvcnRzLk9yZ2FuaXphdGlvblN0YXR1c0VudW0gPSBPcmdhbml6YXRpb25TdGF0dXNFbnVtID0ge30pKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgT3JnYW5pemF0aW9uIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZk9yZ2FuaXphdGlvbih2YWx1ZSkge1xuXHRcdGlmICghKFwiZGlzcGxheV9uYW1lXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiZGlzcGxheV9uYW1lXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImRvbWFpblwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImRvbWFpblwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJpZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImlkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInNob3J0X25hbWVcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJzaG9ydF9uYW1lXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInN0YXR1c1wiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInN0YXR1c1wiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gT3JnYW5pemF0aW9uRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBPcmdhbml6YXRpb25Gcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBPcmdhbml6YXRpb25Gcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjcmVhdGVkX2F0XCI6IGpzb25bXCJjcmVhdGVkX2F0XCJdID09IG51bGwgPyB2b2lkIDAgOiBuZXcgRGF0ZShqc29uW1wiY3JlYXRlZF9hdFwiXSksXG5cdFx0XHRcImRpc3BsYXlfbmFtZVwiOiBqc29uW1wiZGlzcGxheV9uYW1lXCJdLFxuXHRcdFx0XCJkb21haW5cIjoganNvbltcImRvbWFpblwiXSxcblx0XHRcdFwiaWRcIjoganNvbltcImlkXCJdLFxuXHRcdFx0XCJzaG9ydF9uYW1lXCI6IGpzb25bXCJzaG9ydF9uYW1lXCJdLFxuXHRcdFx0XCJzdGF0dXNcIjoganNvbltcInN0YXR1c1wiXSxcblx0XHRcdFwidXBkYXRlZF9hdFwiOiBqc29uW1widXBkYXRlZF9hdFwiXSA9PSBudWxsID8gdm9pZCAwIDogbmV3IERhdGUoanNvbltcInVwZGF0ZWRfYXRcIl0pXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBPcmdhbml6YXRpb25Ub0pTT04oanNvbikge1xuXHRcdHJldHVybiBPcmdhbml6YXRpb25Ub0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gT3JnYW5pemF0aW9uVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY3JlYXRlZF9hdFwiOiB2YWx1ZVtcImNyZWF0ZWRfYXRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IHZhbHVlW1wiY3JlYXRlZF9hdFwiXS50b0lTT1N0cmluZygpLFxuXHRcdFx0XCJkaXNwbGF5X25hbWVcIjogdmFsdWVbXCJkaXNwbGF5X25hbWVcIl0sXG5cdFx0XHRcImRvbWFpblwiOiB2YWx1ZVtcImRvbWFpblwiXSxcblx0XHRcdFwiaWRcIjogdmFsdWVbXCJpZFwiXSxcblx0XHRcdFwic2hvcnRfbmFtZVwiOiB2YWx1ZVtcInNob3J0X25hbWVcIl0sXG5cdFx0XHRcInN0YXR1c1wiOiB2YWx1ZVtcInN0YXR1c1wiXSxcblx0XHRcdFwidXBkYXRlZF9hdFwiOiB2YWx1ZVtcInVwZGF0ZWRfYXRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IHZhbHVlW1widXBkYXRlZF9hdFwiXS50b0lTT1N0cmluZygpXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvT3JnYW5pemF0aW9uQ29uZmlnLmpzXG52YXIgcmVxdWlyZV9Pcmdhbml6YXRpb25Db25maWcgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Pcmdhbml6YXRpb25Db25maWcuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZk9yZ2FuaXphdGlvbkNvbmZpZyA9IGluc3RhbmNlT2ZPcmdhbml6YXRpb25Db25maWc7XG5cdGV4cG9ydHMuT3JnYW5pemF0aW9uQ29uZmlnRnJvbUpTT04gPSBPcmdhbml6YXRpb25Db25maWdGcm9tSlNPTjtcblx0ZXhwb3J0cy5Pcmdhbml6YXRpb25Db25maWdGcm9tSlNPTlR5cGVkID0gT3JnYW5pemF0aW9uQ29uZmlnRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5Pcmdhbml6YXRpb25Db25maWdUb0pTT04gPSBPcmdhbml6YXRpb25Db25maWdUb0pTT047XG5cdGV4cG9ydHMuT3JnYW5pemF0aW9uQ29uZmlnVG9KU09OVHlwZWQgPSBPcmdhbml6YXRpb25Db25maWdUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgT3JnYW5pemF0aW9uQ29uZmlnIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZk9yZ2FuaXphdGlvbkNvbmZpZyh2YWx1ZSkge1xuXHRcdGlmICghKFwiY29uZmlnXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY29uZmlnXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImNyZWF0ZWRfYXRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJjcmVhdGVkX2F0XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImlzX2xhdGVzdFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImlzX2xhdGVzdFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJuYW1lc3BhY2VcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJuYW1lc3BhY2VcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwidXBkYXRlZF9hdFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInVwZGF0ZWRfYXRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwidXBkYXRlZF9ieV9lbnRpdHlcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJ1cGRhdGVkX2J5X2VudGl0eVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJ1cGRhdGVkX2J5X2VudGl0eV9pZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInVwZGF0ZWRfYnlfZW50aXR5X2lkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInZlcnNpb25cIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJ2ZXJzaW9uXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBPcmdhbml6YXRpb25Db25maWdGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIE9yZ2FuaXphdGlvbkNvbmZpZ0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIE9yZ2FuaXphdGlvbkNvbmZpZ0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvbmZpZ1wiOiBqc29uW1wiY29uZmlnXCJdLFxuXHRcdFx0XCJjcmVhdGVkX2F0XCI6IG5ldyBEYXRlKGpzb25bXCJjcmVhdGVkX2F0XCJdKSxcblx0XHRcdFwiaWRcIjoganNvbltcImlkXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiaWRcIl0sXG5cdFx0XHRcImlzX2xhdGVzdFwiOiBqc29uW1wiaXNfbGF0ZXN0XCJdLFxuXHRcdFx0XCJuYW1lc3BhY2VcIjoganNvbltcIm5hbWVzcGFjZVwiXSxcblx0XHRcdFwib3JnYW5pemF0aW9uX2lkXCI6IGpzb25bXCJvcmdhbml6YXRpb25faWRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJvcmdhbml6YXRpb25faWRcIl0sXG5cdFx0XHRcInVwZGF0ZWRfYXRcIjogbmV3IERhdGUoanNvbltcInVwZGF0ZWRfYXRcIl0pLFxuXHRcdFx0XCJ1cGRhdGVkX2J5X2VudGl0eVwiOiBqc29uW1widXBkYXRlZF9ieV9lbnRpdHlcIl0sXG5cdFx0XHRcInVwZGF0ZWRfYnlfZW50aXR5X2lkXCI6IGpzb25bXCJ1cGRhdGVkX2J5X2VudGl0eV9pZFwiXSxcblx0XHRcdFwidmVyc2lvblwiOiBqc29uW1widmVyc2lvblwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gT3JnYW5pemF0aW9uQ29uZmlnVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gT3JnYW5pemF0aW9uQ29uZmlnVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIE9yZ2FuaXphdGlvbkNvbmZpZ1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvbmZpZ1wiOiB2YWx1ZVtcImNvbmZpZ1wiXSxcblx0XHRcdFwiY3JlYXRlZF9hdFwiOiB2YWx1ZVtcImNyZWF0ZWRfYXRcIl0udG9JU09TdHJpbmcoKSxcblx0XHRcdFwiaWRcIjogdmFsdWVbXCJpZFwiXSxcblx0XHRcdFwiaXNfbGF0ZXN0XCI6IHZhbHVlW1wiaXNfbGF0ZXN0XCJdLFxuXHRcdFx0XCJuYW1lc3BhY2VcIjogdmFsdWVbXCJuYW1lc3BhY2VcIl0sXG5cdFx0XHRcIm9yZ2FuaXphdGlvbl9pZFwiOiB2YWx1ZVtcIm9yZ2FuaXphdGlvbl9pZFwiXSxcblx0XHRcdFwidXBkYXRlZF9hdFwiOiB2YWx1ZVtcInVwZGF0ZWRfYXRcIl0udG9JU09TdHJpbmcoKSxcblx0XHRcdFwidXBkYXRlZF9ieV9lbnRpdHlcIjogdmFsdWVbXCJ1cGRhdGVkX2J5X2VudGl0eVwiXSxcblx0XHRcdFwidXBkYXRlZF9ieV9lbnRpdHlfaWRcIjogdmFsdWVbXCJ1cGRhdGVkX2J5X2VudGl0eV9pZFwiXSxcblx0XHRcdFwidmVyc2lvblwiOiB2YWx1ZVtcInZlcnNpb25cIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Pcmdhbml6YXRpb25TZXR0aW5ncy5qc1xudmFyIHJlcXVpcmVfT3JnYW5pemF0aW9uU2V0dGluZ3MgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Pcmdhbml6YXRpb25TZXR0aW5ncy5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mT3JnYW5pemF0aW9uU2V0dGluZ3MgPSBpbnN0YW5jZU9mT3JnYW5pemF0aW9uU2V0dGluZ3M7XG5cdGV4cG9ydHMuT3JnYW5pemF0aW9uU2V0dGluZ3NGcm9tSlNPTiA9IE9yZ2FuaXphdGlvblNldHRpbmdzRnJvbUpTT047XG5cdGV4cG9ydHMuT3JnYW5pemF0aW9uU2V0dGluZ3NGcm9tSlNPTlR5cGVkID0gT3JnYW5pemF0aW9uU2V0dGluZ3NGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLk9yZ2FuaXphdGlvblNldHRpbmdzVG9KU09OID0gT3JnYW5pemF0aW9uU2V0dGluZ3NUb0pTT047XG5cdGV4cG9ydHMuT3JnYW5pemF0aW9uU2V0dGluZ3NUb0pTT05UeXBlZCA9IE9yZ2FuaXphdGlvblNldHRpbmdzVG9KU09OVHlwZWQ7XG5cdGNvbnN0IE9yZ2FuaXphdGlvbl8xID0gcmVxdWlyZV9Pcmdhbml6YXRpb24oKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgT3JnYW5pemF0aW9uU2V0dGluZ3MgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mT3JnYW5pemF0aW9uU2V0dGluZ3ModmFsdWUpIHtcblx0XHRpZiAoIShcIm9yZ1wiIGluIHZhbHVlKSB8fCB2YWx1ZVtcIm9yZ1wiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJzZXR0aW5nc1wiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInNldHRpbmdzXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBPcmdhbml6YXRpb25TZXR0aW5nc0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gT3JnYW5pemF0aW9uU2V0dGluZ3NGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBPcmdhbml6YXRpb25TZXR0aW5nc0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcIm9yZ1wiOiAoMCwgT3JnYW5pemF0aW9uXzEuT3JnYW5pemF0aW9uRnJvbUpTT04pKGpzb25bXCJvcmdcIl0pLFxuXHRcdFx0XCJzZXR0aW5nc1wiOiBqc29uW1wic2V0dGluZ3NcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIE9yZ2FuaXphdGlvblNldHRpbmdzVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gT3JnYW5pemF0aW9uU2V0dGluZ3NUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gT3JnYW5pemF0aW9uU2V0dGluZ3NUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJvcmdcIjogKDAsIE9yZ2FuaXphdGlvbl8xLk9yZ2FuaXphdGlvblRvSlNPTikodmFsdWVbXCJvcmdcIl0pLFxuXHRcdFx0XCJzZXR0aW5nc1wiOiB2YWx1ZVtcInNldHRpbmdzXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU3RhdHNpZ0V4cGVyaW1lbnQuanNcbnZhciByZXF1aXJlX1N0YXRzaWdFeHBlcmltZW50ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU3RhdHNpZ0V4cGVyaW1lbnQuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlN0YXRzaWdFeHBlcmltZW50ID0gaW5zdGFuY2VPZlN0YXRzaWdFeHBlcmltZW50O1xuXHRleHBvcnRzLlN0YXRzaWdFeHBlcmltZW50RnJvbUpTT04gPSBTdGF0c2lnRXhwZXJpbWVudEZyb21KU09OO1xuXHRleHBvcnRzLlN0YXRzaWdFeHBlcmltZW50RnJvbUpTT05UeXBlZCA9IFN0YXRzaWdFeHBlcmltZW50RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5TdGF0c2lnRXhwZXJpbWVudFRvSlNPTiA9IFN0YXRzaWdFeHBlcmltZW50VG9KU09OO1xuXHRleHBvcnRzLlN0YXRzaWdFeHBlcmltZW50VG9KU09OVHlwZWQgPSBTdGF0c2lnRXhwZXJpbWVudFRvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBTdGF0c2lnRXhwZXJpbWVudCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZTdGF0c2lnRXhwZXJpbWVudCh2YWx1ZSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFN0YXRzaWdFeHBlcmltZW50RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBTdGF0c2lnRXhwZXJpbWVudEZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFN0YXRzaWdFeHBlcmltZW50RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiZ3JvdXBcIjoganNvbltcImdyb3VwXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiZ3JvdXBcIl0sXG5cdFx0XHRcImdyb3VwX25hbWVcIjoganNvbltcImdyb3VwX25hbWVcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJncm91cF9uYW1lXCJdLFxuXHRcdFx0XCJuYW1lXCI6IGpzb25bXCJuYW1lXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wibmFtZVwiXSxcblx0XHRcdFwicnVsZV9pZFwiOiBqc29uW1wicnVsZV9pZFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInJ1bGVfaWRcIl0sXG5cdFx0XHRcInZhbHVlXCI6IGpzb25bXCJ2YWx1ZVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInZhbHVlXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBTdGF0c2lnRXhwZXJpbWVudFRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFN0YXRzaWdFeHBlcmltZW50VG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFN0YXRzaWdFeHBlcmltZW50VG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiZ3JvdXBcIjogdmFsdWVbXCJncm91cFwiXSxcblx0XHRcdFwiZ3JvdXBfbmFtZVwiOiB2YWx1ZVtcImdyb3VwX25hbWVcIl0sXG5cdFx0XHRcIm5hbWVcIjogdmFsdWVbXCJuYW1lXCJdLFxuXHRcdFx0XCJydWxlX2lkXCI6IHZhbHVlW1wicnVsZV9pZFwiXSxcblx0XHRcdFwidmFsdWVcIjogdmFsdWVbXCJ2YWx1ZVwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1N0YXRzaWdGZWF0dXJlR2F0ZS5qc1xudmFyIHJlcXVpcmVfU3RhdHNpZ0ZlYXR1cmVHYXRlID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU3RhdHNpZ0ZlYXR1cmVHYXRlLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZTdGF0c2lnRmVhdHVyZUdhdGUgPSBpbnN0YW5jZU9mU3RhdHNpZ0ZlYXR1cmVHYXRlO1xuXHRleHBvcnRzLlN0YXRzaWdGZWF0dXJlR2F0ZUZyb21KU09OID0gU3RhdHNpZ0ZlYXR1cmVHYXRlRnJvbUpTT047XG5cdGV4cG9ydHMuU3RhdHNpZ0ZlYXR1cmVHYXRlRnJvbUpTT05UeXBlZCA9IFN0YXRzaWdGZWF0dXJlR2F0ZUZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuU3RhdHNpZ0ZlYXR1cmVHYXRlVG9KU09OID0gU3RhdHNpZ0ZlYXR1cmVHYXRlVG9KU09OO1xuXHRleHBvcnRzLlN0YXRzaWdGZWF0dXJlR2F0ZVRvSlNPTlR5cGVkID0gU3RhdHNpZ0ZlYXR1cmVHYXRlVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFN0YXRzaWdGZWF0dXJlR2F0ZSBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZTdGF0c2lnRmVhdHVyZUdhdGUodmFsdWUpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBTdGF0c2lnRmVhdHVyZUdhdGVGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFN0YXRzaWdGZWF0dXJlR2F0ZUZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFN0YXRzaWdGZWF0dXJlR2F0ZUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImdyb3VwX25hbWVcIjoganNvbltcImdyb3VwX25hbWVcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJncm91cF9uYW1lXCJdLFxuXHRcdFx0XCJuYW1lXCI6IGpzb25bXCJuYW1lXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wibmFtZVwiXSxcblx0XHRcdFwicnVsZV9pZFwiOiBqc29uW1wicnVsZV9pZFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInJ1bGVfaWRcIl0sXG5cdFx0XHRcInZhbHVlXCI6IGpzb25bXCJ2YWx1ZVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInZhbHVlXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBTdGF0c2lnRmVhdHVyZUdhdGVUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBTdGF0c2lnRmVhdHVyZUdhdGVUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gU3RhdHNpZ0ZlYXR1cmVHYXRlVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiZ3JvdXBfbmFtZVwiOiB2YWx1ZVtcImdyb3VwX25hbWVcIl0sXG5cdFx0XHRcIm5hbWVcIjogdmFsdWVbXCJuYW1lXCJdLFxuXHRcdFx0XCJydWxlX2lkXCI6IHZhbHVlW1wicnVsZV9pZFwiXSxcblx0XHRcdFwidmFsdWVcIjogdmFsdWVbXCJ2YWx1ZVwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL09yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHMuanNcbnZhciByZXF1aXJlX09yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Pcmdhbml6YXRpb25Db25maWdSZXN1bHRzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZPcmdhbml6YXRpb25Db25maWdSZXN1bHRzID0gaW5zdGFuY2VPZk9yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHM7XG5cdGV4cG9ydHMuT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0c0Zyb21KU09OID0gT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0c0Zyb21KU09OO1xuXHRleHBvcnRzLk9yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHNGcm9tSlNPTlR5cGVkID0gT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0c0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0c1RvSlNPTiA9IE9yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHNUb0pTT047XG5cdGV4cG9ydHMuT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0c1RvSlNPTlR5cGVkID0gT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0c1RvSlNPTlR5cGVkO1xuXHRjb25zdCBPcmdhbml6YXRpb25Db25maWdfMSA9IHJlcXVpcmVfT3JnYW5pemF0aW9uQ29uZmlnKCk7XG5cdGNvbnN0IE9yZ2FuaXphdGlvblNldHRpbmdzXzEgPSByZXF1aXJlX09yZ2FuaXphdGlvblNldHRpbmdzKCk7XG5cdGNvbnN0IFN0YXRzaWdFeHBlcmltZW50XzEgPSByZXF1aXJlX1N0YXRzaWdFeHBlcmltZW50KCk7XG5cdGNvbnN0IFN0YXRzaWdGZWF0dXJlR2F0ZV8xID0gcmVxdWlyZV9TdGF0c2lnRmVhdHVyZUdhdGUoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0cyBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZPcmdhbml6YXRpb25Db25maWdSZXN1bHRzKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0c0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0c0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIE9yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHNGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb25maWdzXCI6IGpzb25bXCJjb25maWdzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiY29uZmlnc1wiXS5tYXAoT3JnYW5pemF0aW9uQ29uZmlnXzEuT3JnYW5pemF0aW9uQ29uZmlnRnJvbUpTT04pLFxuXHRcdFx0XCJleHBlcmltZW50c1wiOiBqc29uW1wiZXhwZXJpbWVudHNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJleHBlcmltZW50c1wiXS5tYXAoU3RhdHNpZ0V4cGVyaW1lbnRfMS5TdGF0c2lnRXhwZXJpbWVudEZyb21KU09OKSxcblx0XHRcdFwiZ2F0ZXNcIjoganNvbltcImdhdGVzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiZ2F0ZXNcIl0ubWFwKFN0YXRzaWdGZWF0dXJlR2F0ZV8xLlN0YXRzaWdGZWF0dXJlR2F0ZUZyb21KU09OKSxcblx0XHRcdFwib3JnXCI6IGpzb25bXCJvcmdcIl0gPT0gbnVsbCA/IHZvaWQgMCA6ICgwLCBPcmdhbml6YXRpb25TZXR0aW5nc18xLk9yZ2FuaXphdGlvblNldHRpbmdzRnJvbUpTT04pKGpzb25bXCJvcmdcIl0pXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBPcmdhbml6YXRpb25Db25maWdSZXN1bHRzVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0c1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBPcmdhbml6YXRpb25Db25maWdSZXN1bHRzVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29uZmlnc1wiOiB2YWx1ZVtcImNvbmZpZ3NcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IHZhbHVlW1wiY29uZmlnc1wiXS5tYXAoT3JnYW5pemF0aW9uQ29uZmlnXzEuT3JnYW5pemF0aW9uQ29uZmlnVG9KU09OKSxcblx0XHRcdFwiZXhwZXJpbWVudHNcIjogdmFsdWVbXCJleHBlcmltZW50c1wiXSA9PSBudWxsID8gdm9pZCAwIDogdmFsdWVbXCJleHBlcmltZW50c1wiXS5tYXAoU3RhdHNpZ0V4cGVyaW1lbnRfMS5TdGF0c2lnRXhwZXJpbWVudFRvSlNPTiksXG5cdFx0XHRcImdhdGVzXCI6IHZhbHVlW1wiZ2F0ZXNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IHZhbHVlW1wiZ2F0ZXNcIl0ubWFwKFN0YXRzaWdGZWF0dXJlR2F0ZV8xLlN0YXRzaWdGZWF0dXJlR2F0ZVRvSlNPTiksXG5cdFx0XHRcIm9yZ1wiOiAoMCwgT3JnYW5pemF0aW9uU2V0dGluZ3NfMS5Pcmdhbml6YXRpb25TZXR0aW5nc1RvSlNPTikodmFsdWVbXCJvcmdcIl0pXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUHJvZHVjdFJldHJpZXZhbFJlcXVlc3QuanNcbnZhciByZXF1aXJlX1Byb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUHJvZHVjdFJldHJpZXZhbFJlcXVlc3QuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlByb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0ID0gaW5zdGFuY2VPZlByb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0O1xuXHRleHBvcnRzLlByb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0RnJvbUpTT04gPSBQcm9kdWN0UmV0cmlldmFsUmVxdWVzdEZyb21KU09OO1xuXHRleHBvcnRzLlByb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0RnJvbUpTT05UeXBlZCA9IFByb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5Qcm9kdWN0UmV0cmlldmFsUmVxdWVzdFRvSlNPTiA9IFByb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0VG9KU09OO1xuXHRleHBvcnRzLlByb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0VG9KU09OVHlwZWQgPSBQcm9kdWN0UmV0cmlldmFsUmVxdWVzdFRvSlNPTlR5cGVkO1xuXHRjb25zdCBDb250ZXh0XzEkMiA9IHJlcXVpcmVfQ29udGV4dCgpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBQcm9kdWN0UmV0cmlldmFsUmVxdWVzdCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZQcm9kdWN0UmV0cmlldmFsUmVxdWVzdCh2YWx1ZSkge1xuXHRcdGlmICghKFwiY29udGV4dFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNvbnRleHRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwicHJvZHVjdF9pZHNcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJwcm9kdWN0X2lkc1wiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gUHJvZHVjdFJldHJpZXZhbFJlcXVlc3RGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFByb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUHJvZHVjdFJldHJpZXZhbFJlcXVlc3RGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb250ZXh0XCI6ICgwLCBDb250ZXh0XzEkMi5Db250ZXh0RnJvbUpTT04pKGpzb25bXCJjb250ZXh0XCJdKSxcblx0XHRcdFwicHJvZHVjdF9pZHNcIjoganNvbltcInByb2R1Y3RfaWRzXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBQcm9kdWN0UmV0cmlldmFsUmVxdWVzdFRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFByb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0VG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFByb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0VG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29udGV4dFwiOiAoMCwgQ29udGV4dF8xJDIuQ29udGV4dFRvSlNPTikodmFsdWVbXCJjb250ZXh0XCJdKSxcblx0XHRcdFwicHJvZHVjdF9pZHNcIjogdmFsdWVbXCJwcm9kdWN0X2lkc1wiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1Jlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXMuanNcbnZhciByZXF1aXJlX1Jlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9SZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzID0gaW5zdGFuY2VPZlJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXM7XG5cdGV4cG9ydHMuUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlc0Zyb21KU09OID0gUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlc0Zyb21KU09OO1xuXHRleHBvcnRzLlJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkID0gUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlc0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlc1RvSlNPTiA9IFJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXNUb0pTT047XG5cdGV4cG9ydHMuUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlc1RvSlNPTlR5cGVkID0gUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlc1RvSlNPTlR5cGVkO1xuXHRjb25zdCBMYWJlbFZhbHVlXzEkMSA9IHJlcXVpcmVfTGFiZWxWYWx1ZSgpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXModmFsdWUpIHtcblx0XHRpZiAoIShcImlkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwidGl0bGVcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJ0aXRsZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJ1cmxcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJ1cmxcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXNGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiYXZlcmFnZV9yYXRpbmdcIjoganNvbltcImF2ZXJhZ2VfcmF0aW5nXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiYXZlcmFnZV9yYXRpbmdcIl0sXG5cdFx0XHRcImNvbG9yc1wiOiBqc29uW1wiY29sb3JzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiY29sb3JzXCJdLFxuXHRcdFx0XCJkZXNjcmlwdGlvblwiOiBqc29uW1wiZGVzY3JpcHRpb25cIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJkZXNjcmlwdGlvblwiXSxcblx0XHRcdFwiZmlsdGVyc1wiOiBqc29uW1wiZmlsdGVyc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImZpbHRlcnNcIl0sXG5cdFx0XHRcImlkXCI6IGpzb25bXCJpZFwiXSxcblx0XHRcdFwiaW1hZ2VfdXJsXCI6IGpzb25bXCJpbWFnZV91cmxcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJpbWFnZV91cmxcIl0sXG5cdFx0XHRcImltYWdlX3VybHNcIjoganNvbltcImltYWdlX3VybHNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJpbWFnZV91cmxzXCJdLFxuXHRcdFx0XCJpc19mb3JfZ3JpZFwiOiBqc29uW1wiaXNfZm9yX2dyaWRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJpc19mb3JfZ3JpZFwiXSxcblx0XHRcdFwibWV0YWRhdGFcIjoganNvbltcIm1ldGFkYXRhXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wibWV0YWRhdGFcIl0ubWFwKExhYmVsVmFsdWVfMSQxLkxhYmVsVmFsdWVGcm9tSlNPTiksXG5cdFx0XHRcIm51bWJlcl9yZXZpZXdzXCI6IGpzb25bXCJudW1iZXJfcmV2aWV3c1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm51bWJlcl9yZXZpZXdzXCJdLFxuXHRcdFx0XCJvcmlnaW5hbF9wcmljZVwiOiBqc29uW1wib3JpZ2luYWxfcHJpY2VcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJvcmlnaW5hbF9wcmljZVwiXSxcblx0XHRcdFwic2FsZV9wcmljZVwiOiBqc29uW1wic2FsZV9wcmljZVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInNhbGVfcHJpY2VcIl0sXG5cdFx0XHRcInNpemVzXCI6IGpzb25bXCJzaXplc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInNpemVzXCJdLFxuXHRcdFx0XCJ0aXRsZVwiOiBqc29uW1widGl0bGVcIl0sXG5cdFx0XHRcInVybFwiOiBqc29uW1widXJsXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlc1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiYXZlcmFnZV9yYXRpbmdcIjogdmFsdWVbXCJhdmVyYWdlX3JhdGluZ1wiXSxcblx0XHRcdFwiY29sb3JzXCI6IHZhbHVlW1wiY29sb3JzXCJdLFxuXHRcdFx0XCJkZXNjcmlwdGlvblwiOiB2YWx1ZVtcImRlc2NyaXB0aW9uXCJdLFxuXHRcdFx0XCJmaWx0ZXJzXCI6IHZhbHVlW1wiZmlsdGVyc1wiXSxcblx0XHRcdFwiaWRcIjogdmFsdWVbXCJpZFwiXSxcblx0XHRcdFwiaW1hZ2VfdXJsXCI6IHZhbHVlW1wiaW1hZ2VfdXJsXCJdLFxuXHRcdFx0XCJpbWFnZV91cmxzXCI6IHZhbHVlW1wiaW1hZ2VfdXJsc1wiXSxcblx0XHRcdFwiaXNfZm9yX2dyaWRcIjogdmFsdWVbXCJpc19mb3JfZ3JpZFwiXSxcblx0XHRcdFwibWV0YWRhdGFcIjogdmFsdWVbXCJtZXRhZGF0YVwiXSA9PSBudWxsID8gdm9pZCAwIDogdmFsdWVbXCJtZXRhZGF0YVwiXS5tYXAoTGFiZWxWYWx1ZV8xJDEuTGFiZWxWYWx1ZVRvSlNPTiksXG5cdFx0XHRcIm51bWJlcl9yZXZpZXdzXCI6IHZhbHVlW1wibnVtYmVyX3Jldmlld3NcIl0sXG5cdFx0XHRcIm9yaWdpbmFsX3ByaWNlXCI6IHZhbHVlW1wib3JpZ2luYWxfcHJpY2VcIl0sXG5cdFx0XHRcInNhbGVfcHJpY2VcIjogdmFsdWVbXCJzYWxlX3ByaWNlXCJdLFxuXHRcdFx0XCJzaXplc1wiOiB2YWx1ZVtcInNpemVzXCJdLFxuXHRcdFx0XCJ0aXRsZVwiOiB2YWx1ZVtcInRpdGxlXCJdLFxuXHRcdFx0XCJ1cmxcIjogdmFsdWVbXCJ1cmxcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Qcm9kdWN0UmV0cmlldmFsUmVzcG9uc2UuanNcbnZhciByZXF1aXJlX1Byb2R1Y3RSZXRyaWV2YWxSZXNwb25zZSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1Byb2R1Y3RSZXRyaWV2YWxSZXNwb25zZS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mUHJvZHVjdFJldHJpZXZhbFJlc3BvbnNlID0gaW5zdGFuY2VPZlByb2R1Y3RSZXRyaWV2YWxSZXNwb25zZTtcblx0ZXhwb3J0cy5Qcm9kdWN0UmV0cmlldmFsUmVzcG9uc2VGcm9tSlNPTiA9IFByb2R1Y3RSZXRyaWV2YWxSZXNwb25zZUZyb21KU09OO1xuXHRleHBvcnRzLlByb2R1Y3RSZXRyaWV2YWxSZXNwb25zZUZyb21KU09OVHlwZWQgPSBQcm9kdWN0UmV0cmlldmFsUmVzcG9uc2VGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlByb2R1Y3RSZXRyaWV2YWxSZXNwb25zZVRvSlNPTiA9IFByb2R1Y3RSZXRyaWV2YWxSZXNwb25zZVRvSlNPTjtcblx0ZXhwb3J0cy5Qcm9kdWN0UmV0cmlldmFsUmVzcG9uc2VUb0pTT05UeXBlZCA9IFByb2R1Y3RSZXRyaWV2YWxSZXNwb25zZVRvSlNPTlR5cGVkO1xuXHRjb25zdCBSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzXzEgPSByZXF1aXJlX1Jlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXMoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgUHJvZHVjdFJldHJpZXZhbFJlc3BvbnNlIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlByb2R1Y3RSZXRyaWV2YWxSZXNwb25zZSh2YWx1ZSkge1xuXHRcdGlmICghKFwicHJvZHVjdHNcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJwcm9kdWN0c1wiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gUHJvZHVjdFJldHJpZXZhbFJlc3BvbnNlRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBQcm9kdWN0UmV0cmlldmFsUmVzcG9uc2VGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBQcm9kdWN0UmV0cmlldmFsUmVzcG9uc2VGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4geyBcInByb2R1Y3RzXCI6IGpzb25bXCJwcm9kdWN0c1wiXS5tYXAoUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlc18xLlJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXNGcm9tSlNPTikgfTtcblx0fVxuXHRmdW5jdGlvbiBQcm9kdWN0UmV0cmlldmFsUmVzcG9uc2VUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBQcm9kdWN0UmV0cmlldmFsUmVzcG9uc2VUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUHJvZHVjdFJldHJpZXZhbFJlc3BvbnNlVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHsgXCJwcm9kdWN0c1wiOiB2YWx1ZVtcInByb2R1Y3RzXCJdLm1hcChSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzXzEuUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlc1RvSlNPTikgfTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlcy5qc1xudmFyIHJlcXVpcmVfUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1Byb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXMuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXMgPSBpbnN0YW5jZU9mUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlcztcblx0ZXhwb3J0cy5Qcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzRnJvbUpTT04gPSBQcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzRnJvbUpTT047XG5cdGV4cG9ydHMuUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OVHlwZWQgPSBQcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5Qcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzVG9KU09OID0gUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTjtcblx0ZXhwb3J0cy5Qcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzVG9KU09OVHlwZWQgPSBQcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXMgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlcyh2YWx1ZSkge1xuXHRcdGlmICghKFwiZmlsdGVyX25hbWVcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJmaWx0ZXJfbmFtZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4geyBcImZpbHRlcl9uYW1lXCI6IGpzb25bXCJmaWx0ZXJfbmFtZVwiXSB9O1xuXHR9XG5cdGZ1bmN0aW9uIFByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBQcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4geyBcImZpbHRlcl9uYW1lXCI6IHZhbHVlW1wiZmlsdGVyX25hbWVcIl0gfTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU2VhcmNoUmVzcG9uc2VQcm9kdWN0LmpzXG52YXIgcmVxdWlyZV9TZWFyY2hSZXNwb25zZVByb2R1Y3QgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TZWFyY2hSZXNwb25zZVByb2R1Y3QuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlNlYXJjaFJlc3BvbnNlUHJvZHVjdCA9IGluc3RhbmNlT2ZTZWFyY2hSZXNwb25zZVByb2R1Y3Q7XG5cdGV4cG9ydHMuU2VhcmNoUmVzcG9uc2VQcm9kdWN0RnJvbUpTT04gPSBTZWFyY2hSZXNwb25zZVByb2R1Y3RGcm9tSlNPTjtcblx0ZXhwb3J0cy5TZWFyY2hSZXNwb25zZVByb2R1Y3RGcm9tSlNPTlR5cGVkID0gU2VhcmNoUmVzcG9uc2VQcm9kdWN0RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5TZWFyY2hSZXNwb25zZVByb2R1Y3RUb0pTT04gPSBTZWFyY2hSZXNwb25zZVByb2R1Y3RUb0pTT047XG5cdGV4cG9ydHMuU2VhcmNoUmVzcG9uc2VQcm9kdWN0VG9KU09OVHlwZWQgPSBTZWFyY2hSZXNwb25zZVByb2R1Y3RUb0pTT05UeXBlZDtcblx0Y29uc3QgTGFiZWxWYWx1ZV8xID0gcmVxdWlyZV9MYWJlbFZhbHVlKCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFNlYXJjaFJlc3BvbnNlUHJvZHVjdCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZTZWFyY2hSZXNwb25zZVByb2R1Y3QodmFsdWUpIHtcblx0XHRpZiAoIShcImlkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwidGl0bGVcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJ0aXRsZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJ1cmxcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJ1cmxcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFNlYXJjaFJlc3BvbnNlUHJvZHVjdEZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU2VhcmNoUmVzcG9uc2VQcm9kdWN0RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gU2VhcmNoUmVzcG9uc2VQcm9kdWN0RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiYXZlcmFnZV9yYXRpbmdcIjoganNvbltcImF2ZXJhZ2VfcmF0aW5nXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiYXZlcmFnZV9yYXRpbmdcIl0sXG5cdFx0XHRcImNvbG9yc1wiOiBqc29uW1wiY29sb3JzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiY29sb3JzXCJdLFxuXHRcdFx0XCJkZXNjcmlwdGlvblwiOiBqc29uW1wiZGVzY3JpcHRpb25cIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJkZXNjcmlwdGlvblwiXSxcblx0XHRcdFwiZmlsdGVyc1wiOiBqc29uW1wiZmlsdGVyc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImZpbHRlcnNcIl0sXG5cdFx0XHRcImlkXCI6IGpzb25bXCJpZFwiXSxcblx0XHRcdFwiaW1hZ2VfdXJsXCI6IGpzb25bXCJpbWFnZV91cmxcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJpbWFnZV91cmxcIl0sXG5cdFx0XHRcImltYWdlX3VybHNcIjoganNvbltcImltYWdlX3VybHNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJpbWFnZV91cmxzXCJdLFxuXHRcdFx0XCJpc19mb3JfZ3JpZFwiOiBqc29uW1wiaXNfZm9yX2dyaWRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJpc19mb3JfZ3JpZFwiXSxcblx0XHRcdFwibWV0YWRhdGFcIjoganNvbltcIm1ldGFkYXRhXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wibWV0YWRhdGFcIl0ubWFwKExhYmVsVmFsdWVfMS5MYWJlbFZhbHVlRnJvbUpTT04pLFxuXHRcdFx0XCJudW1iZXJfcmV2aWV3c1wiOiBqc29uW1wibnVtYmVyX3Jldmlld3NcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJudW1iZXJfcmV2aWV3c1wiXSxcblx0XHRcdFwib3JpZ2luYWxfcHJpY2VcIjoganNvbltcIm9yaWdpbmFsX3ByaWNlXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wib3JpZ2luYWxfcHJpY2VcIl0sXG5cdFx0XHRcInNhbGVfcHJpY2VcIjoganNvbltcInNhbGVfcHJpY2VcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJzYWxlX3ByaWNlXCJdLFxuXHRcdFx0XCJzaXplc1wiOiBqc29uW1wic2l6ZXNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJzaXplc1wiXSxcblx0XHRcdFwidGl0bGVcIjoganNvbltcInRpdGxlXCJdLFxuXHRcdFx0XCJ1cmxcIjoganNvbltcInVybFwiXSxcblx0XHRcdFwicmVzcG9uc2VfaWRcIjoganNvbltcInJlc3BvbnNlX2lkXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wicmVzcG9uc2VfaWRcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFNlYXJjaFJlc3BvbnNlUHJvZHVjdFRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFNlYXJjaFJlc3BvbnNlUHJvZHVjdFRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBTZWFyY2hSZXNwb25zZVByb2R1Y3RUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJhdmVyYWdlX3JhdGluZ1wiOiB2YWx1ZVtcImF2ZXJhZ2VfcmF0aW5nXCJdLFxuXHRcdFx0XCJjb2xvcnNcIjogdmFsdWVbXCJjb2xvcnNcIl0sXG5cdFx0XHRcImRlc2NyaXB0aW9uXCI6IHZhbHVlW1wiZGVzY3JpcHRpb25cIl0sXG5cdFx0XHRcImZpbHRlcnNcIjogdmFsdWVbXCJmaWx0ZXJzXCJdLFxuXHRcdFx0XCJpZFwiOiB2YWx1ZVtcImlkXCJdLFxuXHRcdFx0XCJpbWFnZV91cmxcIjogdmFsdWVbXCJpbWFnZV91cmxcIl0sXG5cdFx0XHRcImltYWdlX3VybHNcIjogdmFsdWVbXCJpbWFnZV91cmxzXCJdLFxuXHRcdFx0XCJpc19mb3JfZ3JpZFwiOiB2YWx1ZVtcImlzX2Zvcl9ncmlkXCJdLFxuXHRcdFx0XCJtZXRhZGF0YVwiOiB2YWx1ZVtcIm1ldGFkYXRhXCJdID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZVtcIm1ldGFkYXRhXCJdLm1hcChMYWJlbFZhbHVlXzEuTGFiZWxWYWx1ZVRvSlNPTiksXG5cdFx0XHRcIm51bWJlcl9yZXZpZXdzXCI6IHZhbHVlW1wibnVtYmVyX3Jldmlld3NcIl0sXG5cdFx0XHRcIm9yaWdpbmFsX3ByaWNlXCI6IHZhbHVlW1wib3JpZ2luYWxfcHJpY2VcIl0sXG5cdFx0XHRcInNhbGVfcHJpY2VcIjogdmFsdWVbXCJzYWxlX3ByaWNlXCJdLFxuXHRcdFx0XCJzaXplc1wiOiB2YWx1ZVtcInNpemVzXCJdLFxuXHRcdFx0XCJ0aXRsZVwiOiB2YWx1ZVtcInRpdGxlXCJdLFxuXHRcdFx0XCJ1cmxcIjogdmFsdWVbXCJ1cmxcIl0sXG5cdFx0XHRcInJlc3BvbnNlX2lkXCI6IHZhbHVlW1wicmVzcG9uc2VfaWRcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Qcm9kdWN0U2VhcmNoUmVzcG9uc2UuanNcbnZhciByZXF1aXJlX1Byb2R1Y3RTZWFyY2hSZXNwb25zZSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1Byb2R1Y3RTZWFyY2hSZXNwb25zZS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mUHJvZHVjdFNlYXJjaFJlc3BvbnNlID0gaW5zdGFuY2VPZlByb2R1Y3RTZWFyY2hSZXNwb25zZTtcblx0ZXhwb3J0cy5Qcm9kdWN0U2VhcmNoUmVzcG9uc2VGcm9tSlNPTiA9IFByb2R1Y3RTZWFyY2hSZXNwb25zZUZyb21KU09OO1xuXHRleHBvcnRzLlByb2R1Y3RTZWFyY2hSZXNwb25zZUZyb21KU09OVHlwZWQgPSBQcm9kdWN0U2VhcmNoUmVzcG9uc2VGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlByb2R1Y3RTZWFyY2hSZXNwb25zZVRvSlNPTiA9IFByb2R1Y3RTZWFyY2hSZXNwb25zZVRvSlNPTjtcblx0ZXhwb3J0cy5Qcm9kdWN0U2VhcmNoUmVzcG9uc2VUb0pTT05UeXBlZCA9IFByb2R1Y3RTZWFyY2hSZXNwb25zZVRvSlNPTlR5cGVkO1xuXHRjb25zdCBTZWFyY2hSZXNwb25zZVByb2R1Y3RfMSA9IHJlcXVpcmVfU2VhcmNoUmVzcG9uc2VQcm9kdWN0KCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFByb2R1Y3RTZWFyY2hSZXNwb25zZSBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZQcm9kdWN0U2VhcmNoUmVzcG9uc2UodmFsdWUpIHtcblx0XHRpZiAoIShcImZpbHRlcnNcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJmaWx0ZXJzXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInByb2R1Y3RzXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wicHJvZHVjdHNcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFByb2R1Y3RTZWFyY2hSZXNwb25zZUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUHJvZHVjdFNlYXJjaFJlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUHJvZHVjdFNlYXJjaFJlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiZmlsdGVyc1wiOiBqc29uW1wiZmlsdGVyc1wiXSxcblx0XHRcdFwicHJvZHVjdHNcIjoganNvbltcInByb2R1Y3RzXCJdLm1hcChTZWFyY2hSZXNwb25zZVByb2R1Y3RfMS5TZWFyY2hSZXNwb25zZVByb2R1Y3RGcm9tSlNPTiksXG5cdFx0XHRcInNlYXJjaF9yZXNwb25zZV9pZFwiOiBqc29uW1wic2VhcmNoX3Jlc3BvbnNlX2lkXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wic2VhcmNoX3Jlc3BvbnNlX2lkXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBQcm9kdWN0U2VhcmNoUmVzcG9uc2VUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBQcm9kdWN0U2VhcmNoUmVzcG9uc2VUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUHJvZHVjdFNlYXJjaFJlc3BvbnNlVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiZmlsdGVyc1wiOiB2YWx1ZVtcImZpbHRlcnNcIl0sXG5cdFx0XHRcInByb2R1Y3RzXCI6IHZhbHVlW1wicHJvZHVjdHNcIl0ubWFwKFNlYXJjaFJlc3BvbnNlUHJvZHVjdF8xLlNlYXJjaFJlc3BvbnNlUHJvZHVjdFRvSlNPTiksXG5cdFx0XHRcInNlYXJjaF9yZXNwb25zZV9pZFwiOiB2YWx1ZVtcInNlYXJjaF9yZXNwb25zZV9pZFwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1Byb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXMuanNcbnZhciByZXF1aXJlX1Byb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Qcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZQcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzID0gaW5zdGFuY2VPZlByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXM7XG5cdGV4cG9ydHMuUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OID0gUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OO1xuXHRleHBvcnRzLlByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkID0gUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTiA9IFByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT047XG5cdGV4cG9ydHMuUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTlR5cGVkID0gUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBQcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXModmFsdWUpIHtcblx0XHRpZiAoIShcImdlbmVyYXRlZF9xdWVyeVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImdlbmVyYXRlZF9xdWVyeVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJwcm9kdWN0X2NvdW50XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wicHJvZHVjdF9jb3VudFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJnZW5lcmF0ZWRfcXVlcnlcIjoganNvbltcImdlbmVyYXRlZF9xdWVyeVwiXSxcblx0XHRcdFwicHJvZHVjdF9jb3VudFwiOiBqc29uW1wicHJvZHVjdF9jb3VudFwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImdlbmVyYXRlZF9xdWVyeVwiOiB2YWx1ZVtcImdlbmVyYXRlZF9xdWVyeVwiXSxcblx0XHRcdFwicHJvZHVjdF9jb3VudFwiOiB2YWx1ZVtcInByb2R1Y3RfY291bnRcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9SZXBvcnRDb250ZW50LmpzXG52YXIgcmVxdWlyZV9SZXBvcnRDb250ZW50ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUmVwb3J0Q29udGVudC5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mUmVwb3J0Q29udGVudCA9IGluc3RhbmNlT2ZSZXBvcnRDb250ZW50O1xuXHRleHBvcnRzLlJlcG9ydENvbnRlbnRGcm9tSlNPTiA9IFJlcG9ydENvbnRlbnRGcm9tSlNPTjtcblx0ZXhwb3J0cy5SZXBvcnRDb250ZW50RnJvbUpTT05UeXBlZCA9IFJlcG9ydENvbnRlbnRGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlJlcG9ydENvbnRlbnRUb0pTT04gPSBSZXBvcnRDb250ZW50VG9KU09OO1xuXHRleHBvcnRzLlJlcG9ydENvbnRlbnRUb0pTT05UeXBlZCA9IFJlcG9ydENvbnRlbnRUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgUmVwb3J0Q29udGVudCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZSZXBvcnRDb250ZW50KHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJpZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImlkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBSZXBvcnRDb250ZW50RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBSZXBvcnRDb250ZW50RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUmVwb3J0Q29udGVudEZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvbnRlbnRcIjoganNvbltcImNvbnRlbnRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJjb250ZW50XCJdLFxuXHRcdFx0XCJpZFwiOiBqc29uW1wiaWRcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFJlcG9ydENvbnRlbnRUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBSZXBvcnRDb250ZW50VG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFJlcG9ydENvbnRlbnRUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb250ZW50XCI6IHZhbHVlW1wiY29udGVudFwiXSxcblx0XHRcdFwiaWRcIjogdmFsdWVbXCJpZFwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1R1cm5JbmZvUHJldlVzZXJFdmVudC5qc1xudmFyIHJlcXVpcmVfVHVybkluZm9QcmV2VXNlckV2ZW50ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVHVybkluZm9QcmV2VXNlckV2ZW50LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZUdXJuSW5mb1ByZXZVc2VyRXZlbnQgPSBpbnN0YW5jZU9mVHVybkluZm9QcmV2VXNlckV2ZW50O1xuXHRleHBvcnRzLlR1cm5JbmZvUHJldlVzZXJFdmVudEZyb21KU09OID0gVHVybkluZm9QcmV2VXNlckV2ZW50RnJvbUpTT047XG5cdGV4cG9ydHMuVHVybkluZm9QcmV2VXNlckV2ZW50RnJvbUpTT05UeXBlZCA9IFR1cm5JbmZvUHJldlVzZXJFdmVudEZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuVHVybkluZm9QcmV2VXNlckV2ZW50VG9KU09OID0gVHVybkluZm9QcmV2VXNlckV2ZW50VG9KU09OO1xuXHRleHBvcnRzLlR1cm5JbmZvUHJldlVzZXJFdmVudFRvSlNPTlR5cGVkID0gVHVybkluZm9QcmV2VXNlckV2ZW50VG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFR1cm5JbmZvUHJldlVzZXJFdmVudCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZUdXJuSW5mb1ByZXZVc2VyRXZlbnQodmFsdWUpIHtcblx0XHRpZiAoIShcImNhdGVnb3J5XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY2F0ZWdvcnlcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJpZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gVHVybkluZm9QcmV2VXNlckV2ZW50RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBUdXJuSW5mb1ByZXZVc2VyRXZlbnRGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBUdXJuSW5mb1ByZXZVc2VyRXZlbnRGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjYXRlZ29yeVwiOiBqc29uW1wiY2F0ZWdvcnlcIl0sXG5cdFx0XHRcImlkXCI6IGpzb25bXCJpZFwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gVHVybkluZm9QcmV2VXNlckV2ZW50VG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVHVybkluZm9QcmV2VXNlckV2ZW50VG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFR1cm5JbmZvUHJldlVzZXJFdmVudFRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNhdGVnb3J5XCI6IHZhbHVlW1wiY2F0ZWdvcnlcIl0sXG5cdFx0XHRcImlkXCI6IHZhbHVlW1wiaWRcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9UdXJuSW5mby5qc1xudmFyIHJlcXVpcmVfVHVybkluZm8gPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9UdXJuSW5mby5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mVHVybkluZm8gPSBpbnN0YW5jZU9mVHVybkluZm87XG5cdGV4cG9ydHMuVHVybkluZm9Gcm9tSlNPTiA9IFR1cm5JbmZvRnJvbUpTT047XG5cdGV4cG9ydHMuVHVybkluZm9Gcm9tSlNPTlR5cGVkID0gVHVybkluZm9Gcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlR1cm5JbmZvVG9KU09OID0gVHVybkluZm9Ub0pTT047XG5cdGV4cG9ydHMuVHVybkluZm9Ub0pTT05UeXBlZCA9IFR1cm5JbmZvVG9KU09OVHlwZWQ7XG5cdGNvbnN0IFJlcG9ydENvbnRlbnRfMSA9IHJlcXVpcmVfUmVwb3J0Q29udGVudCgpO1xuXHRjb25zdCBUdXJuSW5mb1ByZXZVc2VyRXZlbnRfMSA9IHJlcXVpcmVfVHVybkluZm9QcmV2VXNlckV2ZW50KCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFR1cm5JbmZvIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlR1cm5JbmZvKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gVHVybkluZm9Gcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFR1cm5JbmZvRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVHVybkluZm9Gcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJtZXNzYWdlX2NvcnJlY3Rpb25cIjoganNvbltcIm1lc3NhZ2VfY29ycmVjdGlvblwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm1lc3NhZ2VfY29ycmVjdGlvblwiXSxcblx0XHRcdFwibWVzc2FnZXNcIjoganNvbltcIm1lc3NhZ2VzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wibWVzc2FnZXNcIl0ubWFwKFJlcG9ydENvbnRlbnRfMS5SZXBvcnRDb250ZW50RnJvbUpTT04pLFxuXHRcdFx0XCJwcmV2X3VzZXJfZXZlbnRcIjoganNvbltcInByZXZfdXNlcl9ldmVudFwiXSA9PSBudWxsID8gdm9pZCAwIDogKDAsIFR1cm5JbmZvUHJldlVzZXJFdmVudF8xLlR1cm5JbmZvUHJldlVzZXJFdmVudEZyb21KU09OKShqc29uW1wicHJldl91c2VyX2V2ZW50XCJdKSxcblx0XHRcdFwic3VnZ2VzdGlvbnNcIjoganNvbltcInN1Z2dlc3Rpb25zXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wic3VnZ2VzdGlvbnNcIl0ubWFwKFJlcG9ydENvbnRlbnRfMS5SZXBvcnRDb250ZW50RnJvbUpTT04pLFxuXHRcdFx0XCJzdWdnZXN0aW9uc19jb3JyZWN0aW9uXCI6IGpzb25bXCJzdWdnZXN0aW9uc19jb3JyZWN0aW9uXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wic3VnZ2VzdGlvbnNfY29ycmVjdGlvblwiXSxcblx0XHRcdFwidHVybl9pZHhcIjoganNvbltcInR1cm5faWR4XCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1widHVybl9pZHhcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFR1cm5JbmZvVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVHVybkluZm9Ub0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVHVybkluZm9Ub0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJtZXNzYWdlX2NvcnJlY3Rpb25cIjogdmFsdWVbXCJtZXNzYWdlX2NvcnJlY3Rpb25cIl0sXG5cdFx0XHRcIm1lc3NhZ2VzXCI6IHZhbHVlW1wibWVzc2FnZXNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IHZhbHVlW1wibWVzc2FnZXNcIl0ubWFwKFJlcG9ydENvbnRlbnRfMS5SZXBvcnRDb250ZW50VG9KU09OKSxcblx0XHRcdFwicHJldl91c2VyX2V2ZW50XCI6ICgwLCBUdXJuSW5mb1ByZXZVc2VyRXZlbnRfMS5UdXJuSW5mb1ByZXZVc2VyRXZlbnRUb0pTT04pKHZhbHVlW1wicHJldl91c2VyX2V2ZW50XCJdKSxcblx0XHRcdFwic3VnZ2VzdGlvbnNcIjogdmFsdWVbXCJzdWdnZXN0aW9uc1wiXSA9PSBudWxsID8gdm9pZCAwIDogdmFsdWVbXCJzdWdnZXN0aW9uc1wiXS5tYXAoUmVwb3J0Q29udGVudF8xLlJlcG9ydENvbnRlbnRUb0pTT04pLFxuXHRcdFx0XCJzdWdnZXN0aW9uc19jb3JyZWN0aW9uXCI6IHZhbHVlW1wic3VnZ2VzdGlvbnNfY29ycmVjdGlvblwiXSxcblx0XHRcdFwidHVybl9pZHhcIjogdmFsdWVbXCJ0dXJuX2lkeFwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1JlcG9ydFNlc3Npb25SZXF1ZXN0LmpzXG52YXIgcmVxdWlyZV9SZXBvcnRTZXNzaW9uUmVxdWVzdCA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1JlcG9ydFNlc3Npb25SZXF1ZXN0LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLlJlcG9ydFNlc3Npb25SZXF1ZXN0UmVwb3J0VHlwZUVudW0gPSBleHBvcnRzLlJlcG9ydFNlc3Npb25SZXF1ZXN0UmVwb3J0UHJpb3JpdHlFbnVtID0gdm9pZCAwO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZSZXBvcnRTZXNzaW9uUmVxdWVzdCA9IGluc3RhbmNlT2ZSZXBvcnRTZXNzaW9uUmVxdWVzdDtcblx0ZXhwb3J0cy5SZXBvcnRTZXNzaW9uUmVxdWVzdEZyb21KU09OID0gUmVwb3J0U2Vzc2lvblJlcXVlc3RGcm9tSlNPTjtcblx0ZXhwb3J0cy5SZXBvcnRTZXNzaW9uUmVxdWVzdEZyb21KU09OVHlwZWQgPSBSZXBvcnRTZXNzaW9uUmVxdWVzdEZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuUmVwb3J0U2Vzc2lvblJlcXVlc3RUb0pTT04gPSBSZXBvcnRTZXNzaW9uUmVxdWVzdFRvSlNPTjtcblx0ZXhwb3J0cy5SZXBvcnRTZXNzaW9uUmVxdWVzdFRvSlNPTlR5cGVkID0gUmVwb3J0U2Vzc2lvblJlcXVlc3RUb0pTT05UeXBlZDtcblx0Y29uc3QgVHVybkluZm9fMSA9IHJlcXVpcmVfVHVybkluZm8oKTtcblx0LyoqXG5cdCogQGV4cG9ydFxuXHQqIEBlbnVtIHtzdHJpbmd9XG5cdCovXG5cdHZhciBSZXBvcnRTZXNzaW9uUmVxdWVzdFJlcG9ydFByaW9yaXR5RW51bTtcblx0KGZ1bmN0aW9uKFJlcG9ydFNlc3Npb25SZXF1ZXN0UmVwb3J0UHJpb3JpdHlFbnVtJDEpIHtcblx0XHRSZXBvcnRTZXNzaW9uUmVxdWVzdFJlcG9ydFByaW9yaXR5RW51bSQxW1wiUDBcIl0gPSBcInAwXCI7XG5cdFx0UmVwb3J0U2Vzc2lvblJlcXVlc3RSZXBvcnRQcmlvcml0eUVudW0kMVtcIlAxXCJdID0gXCJwMVwiO1xuXHRcdFJlcG9ydFNlc3Npb25SZXF1ZXN0UmVwb3J0UHJpb3JpdHlFbnVtJDFbXCJQMlwiXSA9IFwicDJcIjtcblx0XHRSZXBvcnRTZXNzaW9uUmVxdWVzdFJlcG9ydFByaW9yaXR5RW51bSQxW1wiUDNcIl0gPSBcInAzXCI7XG5cdFx0UmVwb3J0U2Vzc2lvblJlcXVlc3RSZXBvcnRQcmlvcml0eUVudW0kMVtcIk5vUHJpb3JpdHlcIl0gPSBcIm5vIHByaW9yaXR5XCI7XG5cdH0pKFJlcG9ydFNlc3Npb25SZXF1ZXN0UmVwb3J0UHJpb3JpdHlFbnVtIHx8IChleHBvcnRzLlJlcG9ydFNlc3Npb25SZXF1ZXN0UmVwb3J0UHJpb3JpdHlFbnVtID0gUmVwb3J0U2Vzc2lvblJlcXVlc3RSZXBvcnRQcmlvcml0eUVudW0gPSB7fSkpO1xuXHQvKipcblx0KiBAZXhwb3J0XG5cdCogQGVudW0ge3N0cmluZ31cblx0Ki9cblx0dmFyIFJlcG9ydFNlc3Npb25SZXF1ZXN0UmVwb3J0VHlwZUVudW07XG5cdChmdW5jdGlvbihSZXBvcnRTZXNzaW9uUmVxdWVzdFJlcG9ydFR5cGVFbnVtJDEpIHtcblx0XHRSZXBvcnRTZXNzaW9uUmVxdWVzdFJlcG9ydFR5cGVFbnVtJDFbXCJNZXNzYWdlXCJdID0gXCJtZXNzYWdlXCI7XG5cdFx0UmVwb3J0U2Vzc2lvblJlcXVlc3RSZXBvcnRUeXBlRW51bSQxW1wiU3VnZ2VzdGlvblwiXSA9IFwic3VnZ2VzdGlvblwiO1xuXHRcdFJlcG9ydFNlc3Npb25SZXF1ZXN0UmVwb3J0VHlwZUVudW0kMVtcIlNlc3Npb25cIl0gPSBcInNlc3Npb25cIjtcblx0XHRSZXBvcnRTZXNzaW9uUmVxdWVzdFJlcG9ydFR5cGVFbnVtJDFbXCJUdXJuXCJdID0gXCJ0dXJuXCI7XG5cdH0pKFJlcG9ydFNlc3Npb25SZXF1ZXN0UmVwb3J0VHlwZUVudW0gfHwgKGV4cG9ydHMuUmVwb3J0U2Vzc2lvblJlcXVlc3RSZXBvcnRUeXBlRW51bSA9IFJlcG9ydFNlc3Npb25SZXF1ZXN0UmVwb3J0VHlwZUVudW0gPSB7fSkpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBSZXBvcnRTZXNzaW9uUmVxdWVzdCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZSZXBvcnRTZXNzaW9uUmVxdWVzdCh2YWx1ZSkge1xuXHRcdGlmICghKFwidXNlcl9pZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInVzZXJfaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFJlcG9ydFNlc3Npb25SZXF1ZXN0RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBSZXBvcnRTZXNzaW9uUmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFJlcG9ydFNlc3Npb25SZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29ycmVjdF9zZXNzaW9uXCI6IGpzb25bXCJjb3JyZWN0X3Nlc3Npb25cIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJjb3JyZWN0X3Nlc3Npb25cIl0sXG5cdFx0XHRcImNvcnJlY3RlZFwiOiBqc29uW1wiY29ycmVjdGVkXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiY29ycmVjdGVkXCJdLFxuXHRcdFx0XCJvcmdfc2hvcnRfbmFtZVwiOiBqc29uW1wib3JnX3Nob3J0X25hbWVcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJvcmdfc2hvcnRfbmFtZVwiXSxcblx0XHRcdFwicmVhc29uXCI6IGpzb25bXCJyZWFzb25cIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJyZWFzb25cIl0sXG5cdFx0XHRcInJlcG9ydF9wcmlvcml0eVwiOiBqc29uW1wicmVwb3J0X3ByaW9yaXR5XCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wicmVwb3J0X3ByaW9yaXR5XCJdLFxuXHRcdFx0XCJyZXBvcnRfdHlwZVwiOiBqc29uW1wicmVwb3J0X3R5cGVcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJyZXBvcnRfdHlwZVwiXSxcblx0XHRcdFwicmVwb3J0ZWRfYnlcIjoganNvbltcInJlcG9ydGVkX2J5XCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wicmVwb3J0ZWRfYnlcIl0sXG5cdFx0XHRcInR1cm5faW5mb1wiOiBqc29uW1widHVybl9pbmZvXCJdID09IG51bGwgPyB2b2lkIDAgOiAoMCwgVHVybkluZm9fMS5UdXJuSW5mb0Zyb21KU09OKShqc29uW1widHVybl9pbmZvXCJdKSxcblx0XHRcdFwidXNlcl9pZFwiOiBqc29uW1widXNlcl9pZFwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gUmVwb3J0U2Vzc2lvblJlcXVlc3RUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBSZXBvcnRTZXNzaW9uUmVxdWVzdFRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBSZXBvcnRTZXNzaW9uUmVxdWVzdFRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvcnJlY3Rfc2Vzc2lvblwiOiB2YWx1ZVtcImNvcnJlY3Rfc2Vzc2lvblwiXSxcblx0XHRcdFwiY29ycmVjdGVkXCI6IHZhbHVlW1wiY29ycmVjdGVkXCJdLFxuXHRcdFx0XCJvcmdfc2hvcnRfbmFtZVwiOiB2YWx1ZVtcIm9yZ19zaG9ydF9uYW1lXCJdLFxuXHRcdFx0XCJyZWFzb25cIjogdmFsdWVbXCJyZWFzb25cIl0sXG5cdFx0XHRcInJlcG9ydF9wcmlvcml0eVwiOiB2YWx1ZVtcInJlcG9ydF9wcmlvcml0eVwiXSxcblx0XHRcdFwicmVwb3J0X3R5cGVcIjogdmFsdWVbXCJyZXBvcnRfdHlwZVwiXSxcblx0XHRcdFwicmVwb3J0ZWRfYnlcIjogdmFsdWVbXCJyZXBvcnRlZF9ieVwiXSxcblx0XHRcdFwidHVybl9pbmZvXCI6ICgwLCBUdXJuSW5mb18xLlR1cm5JbmZvVG9KU09OKSh2YWx1ZVtcInR1cm5faW5mb1wiXSksXG5cdFx0XHRcInVzZXJfaWRcIjogdmFsdWVbXCJ1c2VyX2lkXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUmVzcG9uc2VDYXRlZ29yeS5qc1xudmFyIHJlcXVpcmVfUmVzcG9uc2VDYXRlZ29yeSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1Jlc3BvbnNlQ2F0ZWdvcnkuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuUmVzcG9uc2VDYXRlZ29yeSA9IHZvaWQgMDtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mUmVzcG9uc2VDYXRlZ29yeSA9IGluc3RhbmNlT2ZSZXNwb25zZUNhdGVnb3J5O1xuXHRleHBvcnRzLlJlc3BvbnNlQ2F0ZWdvcnlGcm9tSlNPTiA9IFJlc3BvbnNlQ2F0ZWdvcnlGcm9tSlNPTjtcblx0ZXhwb3J0cy5SZXNwb25zZUNhdGVnb3J5RnJvbUpTT05UeXBlZCA9IFJlc3BvbnNlQ2F0ZWdvcnlGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlJlc3BvbnNlQ2F0ZWdvcnlUb0pTT04gPSBSZXNwb25zZUNhdGVnb3J5VG9KU09OO1xuXHRleHBvcnRzLlJlc3BvbnNlQ2F0ZWdvcnlUb0pTT05UeXBlZCA9IFJlc3BvbnNlQ2F0ZWdvcnlUb0pTT05UeXBlZDtcblx0LyoqXG5cdCpcblx0KiBAZXhwb3J0XG5cdCogQGVudW0ge3N0cmluZ31cblx0Ki9cblx0dmFyIFJlc3BvbnNlQ2F0ZWdvcnk7XG5cdChmdW5jdGlvbihSZXNwb25zZUNhdGVnb3J5JDEpIHtcblx0XHRSZXNwb25zZUNhdGVnb3J5JDFbXCJUZXh0XCJdID0gXCJ0ZXh0XCI7XG5cdFx0UmVzcG9uc2VDYXRlZ29yeSQxW1wiUHJvZHVjdFwiXSA9IFwicHJvZHVjdFwiO1xuXHRcdFJlc3BvbnNlQ2F0ZWdvcnkkMVtcIlJldmlld1wiXSA9IFwicmV2aWV3XCI7XG5cdFx0UmVzcG9uc2VDYXRlZ29yeSQxW1wiTm9uZVwiXSA9IFwibm9uZVwiO1xuXHRcdFJlc3BvbnNlQ2F0ZWdvcnkkMVtcIlNlcGFyYXRvclwiXSA9IFwic2VwYXJhdG9yXCI7XG5cdFx0UmVzcG9uc2VDYXRlZ29yeSQxW1wiUGFnZVwiXSA9IFwicGFnZVwiO1xuXHRcdFJlc3BvbnNlQ2F0ZWdvcnkkMVtcIkZvcm1cIl0gPSBcImZvcm1cIjtcblx0XHRSZXNwb25zZUNhdGVnb3J5JDFbXCJQcm9kdWN0U2VhcmNoXCJdID0gXCJwcm9kdWN0X3NlYXJjaFwiO1xuXHRcdFJlc3BvbnNlQ2F0ZWdvcnkkMVtcIk9yZGVyXCJdID0gXCJvcmRlclwiO1xuXHRcdFJlc3BvbnNlQ2F0ZWdvcnkkMVtcIlByb2R1Y3RTZWFyY2hGaWx0ZXJcIl0gPSBcInByb2R1Y3Rfc2VhcmNoX2ZpbHRlclwiO1xuXHR9KShSZXNwb25zZUNhdGVnb3J5IHx8IChleHBvcnRzLlJlc3BvbnNlQ2F0ZWdvcnkgPSBSZXNwb25zZUNhdGVnb3J5ID0ge30pKTtcblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlJlc3BvbnNlQ2F0ZWdvcnkodmFsdWUpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBSZXNwb25zZUNhdGVnb3J5KSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFJlc3BvbnNlQ2F0ZWdvcnksIGtleSkpIHtcblx0XHRcdGlmIChSZXNwb25zZUNhdGVnb3J5W2tleV0gPT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGZ1bmN0aW9uIFJlc3BvbnNlQ2F0ZWdvcnlGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFJlc3BvbnNlQ2F0ZWdvcnlGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBSZXNwb25zZUNhdGVnb3J5RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0cmV0dXJuIGpzb247XG5cdH1cblx0ZnVuY3Rpb24gUmVzcG9uc2VDYXRlZ29yeVRvSlNPTih2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRmdW5jdGlvbiBSZXNwb25zZUNhdGVnb3J5VG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1Jlc3BvbnNlLmpzXG52YXIgcmVxdWlyZV9SZXNwb25zZSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1Jlc3BvbnNlLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZSZXNwb25zZSA9IGluc3RhbmNlT2ZSZXNwb25zZTtcblx0ZXhwb3J0cy5SZXNwb25zZUZyb21KU09OID0gUmVzcG9uc2VGcm9tSlNPTjtcblx0ZXhwb3J0cy5SZXNwb25zZUZyb21KU09OVHlwZWQgPSBSZXNwb25zZUZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuUmVzcG9uc2VUb0pTT04gPSBSZXNwb25zZVRvSlNPTjtcblx0ZXhwb3J0cy5SZXNwb25zZVRvSlNPTlR5cGVkID0gUmVzcG9uc2VUb0pTT05UeXBlZDtcblx0Y29uc3QgUmVzcG9uc2VDYXRlZ29yeV8xID0gcmVxdWlyZV9SZXNwb25zZUNhdGVnb3J5KCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFJlc3BvbnNlIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlJlc3BvbnNlKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJhdHRyaWJ1dGVzXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiYXR0cmlidXRlc1wiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJjYXRlZ29yeVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNhdGVnb3J5XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImNyZWF0ZWRfYXRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJjcmVhdGVkX2F0XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImlkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFJlc3BvbnNlRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBSZXNwb25zZUZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFJlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiYXR0cmlidXRlc1wiOiBqc29uW1wiYXR0cmlidXRlc1wiXSxcblx0XHRcdFwiY2F0ZWdvcnlcIjogKDAsIFJlc3BvbnNlQ2F0ZWdvcnlfMS5SZXNwb25zZUNhdGVnb3J5RnJvbUpTT04pKGpzb25bXCJjYXRlZ29yeVwiXSksXG5cdFx0XHRcImNyZWF0ZWRfYXRcIjoganNvbltcImNyZWF0ZWRfYXRcIl0sXG5cdFx0XHRcImlkXCI6IGpzb25bXCJpZFwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gUmVzcG9uc2VUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBSZXNwb25zZVRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBSZXNwb25zZVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImF0dHJpYnV0ZXNcIjogdmFsdWVbXCJhdHRyaWJ1dGVzXCJdLFxuXHRcdFx0XCJjYXRlZ29yeVwiOiAoMCwgUmVzcG9uc2VDYXRlZ29yeV8xLlJlc3BvbnNlQ2F0ZWdvcnlUb0pTT04pKHZhbHVlW1wiY2F0ZWdvcnlcIl0pLFxuXHRcdFx0XCJjcmVhdGVkX2F0XCI6IHZhbHVlW1wiY3JlYXRlZF9hdFwiXSxcblx0XHRcdFwiaWRcIjogdmFsdWVbXCJpZFwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1NlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2UuanNcbnZhciByZXF1aXJlX1NlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2UgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TZWFyY2hTdWdnZXN0aW9uc1Jlc3BvbnNlLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZTZWFyY2hTdWdnZXN0aW9uc1Jlc3BvbnNlID0gaW5zdGFuY2VPZlNlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2U7XG5cdGV4cG9ydHMuU2VhcmNoU3VnZ2VzdGlvbnNSZXNwb25zZUZyb21KU09OID0gU2VhcmNoU3VnZ2VzdGlvbnNSZXNwb25zZUZyb21KU09OO1xuXHRleHBvcnRzLlNlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2VGcm9tSlNPTlR5cGVkID0gU2VhcmNoU3VnZ2VzdGlvbnNSZXNwb25zZUZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuU2VhcmNoU3VnZ2VzdGlvbnNSZXNwb25zZVRvSlNPTiA9IFNlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2VUb0pTT047XG5cdGV4cG9ydHMuU2VhcmNoU3VnZ2VzdGlvbnNSZXNwb25zZVRvSlNPTlR5cGVkID0gU2VhcmNoU3VnZ2VzdGlvbnNSZXNwb25zZVRvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBTZWFyY2hTdWdnZXN0aW9uc1Jlc3BvbnNlIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlNlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2UodmFsdWUpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBTZWFyY2hTdWdnZXN0aW9uc1Jlc3BvbnNlRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBTZWFyY2hTdWdnZXN0aW9uc1Jlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gU2VhcmNoU3VnZ2VzdGlvbnNSZXNwb25zZUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcInNlYXJjaF90ZXJtc1wiOiBqc29uW1wic2VhcmNoX3Rlcm1zXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wic2VhcmNoX3Rlcm1zXCJdLFxuXHRcdFx0XCJzdWdnZXN0ZWRfc2VhcmNoZXNcIjoganNvbltcInN1Z2dlc3RlZF9zZWFyY2hlc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInN1Z2dlc3RlZF9zZWFyY2hlc1wiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gU2VhcmNoU3VnZ2VzdGlvbnNSZXNwb25zZVRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFNlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2VUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gU2VhcmNoU3VnZ2VzdGlvbnNSZXNwb25zZVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcInNlYXJjaF90ZXJtc1wiOiB2YWx1ZVtcInNlYXJjaF90ZXJtc1wiXSxcblx0XHRcdFwic3VnZ2VzdGVkX3NlYXJjaGVzXCI6IHZhbHVlW1wic3VnZ2VzdGVkX3NlYXJjaGVzXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU2VuZE1lc3NhZ2VSZXF1ZXN0LmpzXG52YXIgcmVxdWlyZV9TZW5kTWVzc2FnZVJlcXVlc3QgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TZW5kTWVzc2FnZVJlcXVlc3QuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlNlbmRNZXNzYWdlUmVxdWVzdCA9IGluc3RhbmNlT2ZTZW5kTWVzc2FnZVJlcXVlc3Q7XG5cdGV4cG9ydHMuU2VuZE1lc3NhZ2VSZXF1ZXN0RnJvbUpTT04gPSBTZW5kTWVzc2FnZVJlcXVlc3RGcm9tSlNPTjtcblx0ZXhwb3J0cy5TZW5kTWVzc2FnZVJlcXVlc3RGcm9tSlNPTlR5cGVkID0gU2VuZE1lc3NhZ2VSZXF1ZXN0RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5TZW5kTWVzc2FnZVJlcXVlc3RUb0pTT04gPSBTZW5kTWVzc2FnZVJlcXVlc3RUb0pTT047XG5cdGV4cG9ydHMuU2VuZE1lc3NhZ2VSZXF1ZXN0VG9KU09OVHlwZWQgPSBTZW5kTWVzc2FnZVJlcXVlc3RUb0pTT05UeXBlZDtcblx0Y29uc3QgQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJfMSA9IHJlcXVpcmVfQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIoKTtcblx0Y29uc3QgQXR0YWNobWVudFJlcXVlc3RfMSA9IHJlcXVpcmVfQXR0YWNobWVudFJlcXVlc3QoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgU2VuZE1lc3NhZ2VSZXF1ZXN0IGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlNlbmRNZXNzYWdlUmVxdWVzdCh2YWx1ZSkge1xuXHRcdGlmICghKFwiY29udmVyc2F0aW9uX2lkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY29udmVyc2F0aW9uX2lkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImN1c3RvbWVyX2lkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY3VzdG9tZXJfaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwibWVzc2FnZVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcIm1lc3NhZ2VcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFNlbmRNZXNzYWdlUmVxdWVzdEZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU2VuZE1lc3NhZ2VSZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gU2VuZE1lc3NhZ2VSZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiYXR0YWNobWVudHNcIjoganNvbltcImF0dGFjaG1lbnRzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiYXR0YWNobWVudHNcIl0ubWFwKEF0dGFjaG1lbnRSZXF1ZXN0XzEuQXR0YWNobWVudFJlcXVlc3RGcm9tSlNPTiksXG5cdFx0XHRcImNvbnZlcnNhdGlvbl9pZFwiOiBqc29uW1wiY29udmVyc2F0aW9uX2lkXCJdLFxuXHRcdFx0XCJjdXN0b21lcl9pZFwiOiBqc29uW1wiY3VzdG9tZXJfaWRcIl0sXG5cdFx0XHRcImN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXJcIjoganNvbltcImN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXJcIl0gPT0gbnVsbCA/IHZvaWQgMCA6ICgwLCBDdXN0b21lclNlcnZpY2VQcm92aWRlcl8xLkN1c3RvbWVyU2VydmljZVByb3ZpZGVyRnJvbUpTT04pKGpzb25bXCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCJdKSxcblx0XHRcdFwibWVzc2FnZVwiOiBqc29uW1wibWVzc2FnZVwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gU2VuZE1lc3NhZ2VSZXF1ZXN0VG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU2VuZE1lc3NhZ2VSZXF1ZXN0VG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFNlbmRNZXNzYWdlUmVxdWVzdFRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImF0dGFjaG1lbnRzXCI6IHZhbHVlW1wiYXR0YWNobWVudHNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IHZhbHVlW1wiYXR0YWNobWVudHNcIl0ubWFwKEF0dGFjaG1lbnRSZXF1ZXN0XzEuQXR0YWNobWVudFJlcXVlc3RUb0pTT04pLFxuXHRcdFx0XCJjb252ZXJzYXRpb25faWRcIjogdmFsdWVbXCJjb252ZXJzYXRpb25faWRcIl0sXG5cdFx0XHRcImN1c3RvbWVyX2lkXCI6IHZhbHVlW1wiY3VzdG9tZXJfaWRcIl0sXG5cdFx0XHRcImN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXJcIjogKDAsIEN1c3RvbWVyU2VydmljZVByb3ZpZGVyXzEuQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJUb0pTT04pKHZhbHVlW1wiY3VzdG9tZXJfc2VydmljZV9wcm92aWRlclwiXSksXG5cdFx0XHRcIm1lc3NhZ2VcIjogdmFsdWVbXCJtZXNzYWdlXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU2VuZE1lc3NhZ2VSZXNwb25zZS5qc1xudmFyIHJlcXVpcmVfU2VuZE1lc3NhZ2VSZXNwb25zZSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1NlbmRNZXNzYWdlUmVzcG9uc2UuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlNlbmRNZXNzYWdlUmVzcG9uc2UgPSBpbnN0YW5jZU9mU2VuZE1lc3NhZ2VSZXNwb25zZTtcblx0ZXhwb3J0cy5TZW5kTWVzc2FnZVJlc3BvbnNlRnJvbUpTT04gPSBTZW5kTWVzc2FnZVJlc3BvbnNlRnJvbUpTT047XG5cdGV4cG9ydHMuU2VuZE1lc3NhZ2VSZXNwb25zZUZyb21KU09OVHlwZWQgPSBTZW5kTWVzc2FnZVJlc3BvbnNlRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5TZW5kTWVzc2FnZVJlc3BvbnNlVG9KU09OID0gU2VuZE1lc3NhZ2VSZXNwb25zZVRvSlNPTjtcblx0ZXhwb3J0cy5TZW5kTWVzc2FnZVJlc3BvbnNlVG9KU09OVHlwZWQgPSBTZW5kTWVzc2FnZVJlc3BvbnNlVG9KU09OVHlwZWQ7XG5cdGNvbnN0IEN1c3RTZXJ2aWNlTWVzc2FnZV8xID0gcmVxdWlyZV9DdXN0U2VydmljZU1lc3NhZ2UoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgU2VuZE1lc3NhZ2VSZXNwb25zZSBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZTZW5kTWVzc2FnZVJlc3BvbnNlKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJtZXNzYWdlXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wibWVzc2FnZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gU2VuZE1lc3NhZ2VSZXNwb25zZUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU2VuZE1lc3NhZ2VSZXNwb25zZUZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFNlbmRNZXNzYWdlUmVzcG9uc2VGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4geyBcIm1lc3NhZ2VcIjogKDAsIEN1c3RTZXJ2aWNlTWVzc2FnZV8xLkN1c3RTZXJ2aWNlTWVzc2FnZUZyb21KU09OKShqc29uW1wibWVzc2FnZVwiXSkgfTtcblx0fVxuXHRmdW5jdGlvbiBTZW5kTWVzc2FnZVJlc3BvbnNlVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU2VuZE1lc3NhZ2VSZXNwb25zZVRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBTZW5kTWVzc2FnZVJlc3BvbnNlVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHsgXCJtZXNzYWdlXCI6ICgwLCBDdXN0U2VydmljZU1lc3NhZ2VfMS5DdXN0U2VydmljZU1lc3NhZ2VUb0pTT04pKHZhbHVlW1wibWVzc2FnZVwiXSkgfTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU3VnZ2VzdGlvbkNhdGVnb3J5LmpzXG52YXIgcmVxdWlyZV9TdWdnZXN0aW9uQ2F0ZWdvcnkgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TdWdnZXN0aW9uQ2F0ZWdvcnkuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuU3VnZ2VzdGlvbkNhdGVnb3J5ID0gdm9pZCAwO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZTdWdnZXN0aW9uQ2F0ZWdvcnkgPSBpbnN0YW5jZU9mU3VnZ2VzdGlvbkNhdGVnb3J5O1xuXHRleHBvcnRzLlN1Z2dlc3Rpb25DYXRlZ29yeUZyb21KU09OID0gU3VnZ2VzdGlvbkNhdGVnb3J5RnJvbUpTT047XG5cdGV4cG9ydHMuU3VnZ2VzdGlvbkNhdGVnb3J5RnJvbUpTT05UeXBlZCA9IFN1Z2dlc3Rpb25DYXRlZ29yeUZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuU3VnZ2VzdGlvbkNhdGVnb3J5VG9KU09OID0gU3VnZ2VzdGlvbkNhdGVnb3J5VG9KU09OO1xuXHRleHBvcnRzLlN1Z2dlc3Rpb25DYXRlZ29yeVRvSlNPTlR5cGVkID0gU3VnZ2VzdGlvbkNhdGVnb3J5VG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqXG5cdCogQGV4cG9ydFxuXHQqIEBlbnVtIHtzdHJpbmd9XG5cdCovXG5cdHZhciBTdWdnZXN0aW9uQ2F0ZWdvcnk7XG5cdChmdW5jdGlvbihTdWdnZXN0aW9uQ2F0ZWdvcnkkMSkge1xuXHRcdFN1Z2dlc3Rpb25DYXRlZ29yeSQxW1wiTm9Db250ZXh0XCJdID0gXCJub19jb250ZXh0XCI7XG5cdFx0U3VnZ2VzdGlvbkNhdGVnb3J5JDFbXCJQcm9kdWN0QmFzZWRcIl0gPSBcInByb2R1Y3RfYmFzZWRcIjtcblx0XHRTdWdnZXN0aW9uQ2F0ZWdvcnkkMVtcIlJldmlld0Jhc2VkXCJdID0gXCJyZXZpZXdfYmFzZWRcIjtcblx0fSkoU3VnZ2VzdGlvbkNhdGVnb3J5IHx8IChleHBvcnRzLlN1Z2dlc3Rpb25DYXRlZ29yeSA9IFN1Z2dlc3Rpb25DYXRlZ29yeSA9IHt9KSk7XG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZTdWdnZXN0aW9uQ2F0ZWdvcnkodmFsdWUpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBTdWdnZXN0aW9uQ2F0ZWdvcnkpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoU3VnZ2VzdGlvbkNhdGVnb3J5LCBrZXkpKSB7XG5cdFx0XHRpZiAoU3VnZ2VzdGlvbkNhdGVnb3J5W2tleV0gPT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGZ1bmN0aW9uIFN1Z2dlc3Rpb25DYXRlZ29yeUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU3VnZ2VzdGlvbkNhdGVnb3J5RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gU3VnZ2VzdGlvbkNhdGVnb3J5RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0cmV0dXJuIGpzb247XG5cdH1cblx0ZnVuY3Rpb24gU3VnZ2VzdGlvbkNhdGVnb3J5VG9KU09OKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdGZ1bmN0aW9uIFN1Z2dlc3Rpb25DYXRlZ29yeVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TdWdnZXN0aW9uLmpzXG52YXIgcmVxdWlyZV9TdWdnZXN0aW9uID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU3VnZ2VzdGlvbi5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mU3VnZ2VzdGlvbiA9IGluc3RhbmNlT2ZTdWdnZXN0aW9uO1xuXHRleHBvcnRzLlN1Z2dlc3Rpb25Gcm9tSlNPTiA9IFN1Z2dlc3Rpb25Gcm9tSlNPTjtcblx0ZXhwb3J0cy5TdWdnZXN0aW9uRnJvbUpTT05UeXBlZCA9IFN1Z2dlc3Rpb25Gcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlN1Z2dlc3Rpb25Ub0pTT04gPSBTdWdnZXN0aW9uVG9KU09OO1xuXHRleHBvcnRzLlN1Z2dlc3Rpb25Ub0pTT05UeXBlZCA9IFN1Z2dlc3Rpb25Ub0pTT05UeXBlZDtcblx0Y29uc3QgU3VnZ2VzdGlvbkNhdGVnb3J5XzEgPSByZXF1aXJlX1N1Z2dlc3Rpb25DYXRlZ29yeSgpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBTdWdnZXN0aW9uIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlN1Z2dlc3Rpb24odmFsdWUpIHtcblx0XHRpZiAoIShcImNhdGVnb3J5XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY2F0ZWdvcnlcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiY29udGVudFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNvbnRlbnRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiY3JlYXRlZF9hdFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNyZWF0ZWRfYXRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJpZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gU3VnZ2VzdGlvbkZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU3VnZ2VzdGlvbkZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFN1Z2dlc3Rpb25Gcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjYXRlZ29yeVwiOiAoMCwgU3VnZ2VzdGlvbkNhdGVnb3J5XzEuU3VnZ2VzdGlvbkNhdGVnb3J5RnJvbUpTT04pKGpzb25bXCJjYXRlZ29yeVwiXSksXG5cdFx0XHRcImNvbnRlbnRcIjoganNvbltcImNvbnRlbnRcIl0sXG5cdFx0XHRcImNyZWF0ZWRfYXRcIjoganNvbltcImNyZWF0ZWRfYXRcIl0sXG5cdFx0XHRcImlkXCI6IGpzb25bXCJpZFwiXSxcblx0XHRcdFwiaXNfYW5zd2VyXCI6IGpzb25bXCJpc19hbnN3ZXJcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJpc19hbnN3ZXJcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFN1Z2dlc3Rpb25Ub0pTT04oanNvbikge1xuXHRcdHJldHVybiBTdWdnZXN0aW9uVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFN1Z2dlc3Rpb25Ub0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjYXRlZ29yeVwiOiAoMCwgU3VnZ2VzdGlvbkNhdGVnb3J5XzEuU3VnZ2VzdGlvbkNhdGVnb3J5VG9KU09OKSh2YWx1ZVtcImNhdGVnb3J5XCJdKSxcblx0XHRcdFwiY29udGVudFwiOiB2YWx1ZVtcImNvbnRlbnRcIl0sXG5cdFx0XHRcImNyZWF0ZWRfYXRcIjogdmFsdWVbXCJjcmVhdGVkX2F0XCJdLFxuXHRcdFx0XCJpZFwiOiB2YWx1ZVtcImlkXCJdLFxuXHRcdFx0XCJpc19hbnN3ZXJcIjogdmFsdWVbXCJpc19hbnN3ZXJcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeS5qc1xudmFyIHJlcXVpcmVfU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnkgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5TdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeSA9IHZvaWQgMDtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnkgPSBpbnN0YW5jZU9mU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnk7XG5cdGV4cG9ydHMuU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnlGcm9tSlNPTiA9IFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5RnJvbUpTT047XG5cdGV4cG9ydHMuU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnlGcm9tSlNPTlR5cGVkID0gU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnlGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5VG9KU09OID0gU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnlUb0pTT047XG5cdGV4cG9ydHMuU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnlUb0pTT05UeXBlZCA9IFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5VG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqXG5cdCogQGV4cG9ydFxuXHQqIEBlbnVtIHtzdHJpbmd9XG5cdCovXG5cdHZhciBTdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeTtcblx0KGZ1bmN0aW9uKFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5JDEpIHtcblx0XHRTdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeSQxW1wiUHJvZHVjdFwiXSA9IFwicHJvZHVjdFwiO1xuXHRcdFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5JDFbXCJTaGFwZXdlYXJcIl0gPSBcInNoYXBld2VhclwiO1xuXHRcdFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5JDFbXCJOb25TaGFwZXdlYXJcIl0gPSBcIm5vbi1zaGFwZXdlYXJcIjtcblx0fSkoU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnkgfHwgKGV4cG9ydHMuU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnkgPSBTdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeSA9IHt9KSk7XG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZTdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeSh2YWx1ZSkge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5KSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5LCBrZXkpKSB7XG5cdFx0XHRpZiAoU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnlba2V5XSA9PT0gdmFsdWUpIHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0ZnVuY3Rpb24gU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnlGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnlGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRyZXR1cm4ganNvbjtcblx0fVxuXHRmdW5jdGlvbiBTdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeVRvSlNPTih2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRmdW5jdGlvbiBTdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TdXBwb3J0ZWRFdmVudFJlcXVlc3QuanNcbnZhciByZXF1aXJlX1N1cHBvcnRlZEV2ZW50UmVxdWVzdCA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1N1cHBvcnRlZEV2ZW50UmVxdWVzdC5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mU3VwcG9ydGVkRXZlbnRSZXF1ZXN0ID0gaW5zdGFuY2VPZlN1cHBvcnRlZEV2ZW50UmVxdWVzdDtcblx0ZXhwb3J0cy5TdXBwb3J0ZWRFdmVudFJlcXVlc3RGcm9tSlNPTiA9IFN1cHBvcnRlZEV2ZW50UmVxdWVzdEZyb21KU09OO1xuXHRleHBvcnRzLlN1cHBvcnRlZEV2ZW50UmVxdWVzdEZyb21KU09OVHlwZWQgPSBTdXBwb3J0ZWRFdmVudFJlcXVlc3RGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlN1cHBvcnRlZEV2ZW50UmVxdWVzdFRvSlNPTiA9IFN1cHBvcnRlZEV2ZW50UmVxdWVzdFRvSlNPTjtcblx0ZXhwb3J0cy5TdXBwb3J0ZWRFdmVudFJlcXVlc3RUb0pTT05UeXBlZCA9IFN1cHBvcnRlZEV2ZW50UmVxdWVzdFRvSlNPTlR5cGVkO1xuXHRjb25zdCBDb250ZXh0XzEkMSA9IHJlcXVpcmVfQ29udGV4dCgpO1xuXHRjb25zdCBVc2VyRXZlbnRfMSQyID0gcmVxdWlyZV9Vc2VyRXZlbnQoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgU3VwcG9ydGVkRXZlbnRSZXF1ZXN0IGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlN1cHBvcnRlZEV2ZW50UmVxdWVzdCh2YWx1ZSkge1xuXHRcdGlmICghKFwiY29udGV4dFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNvbnRleHRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJpZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJ1c2VyX2V2ZW50XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1widXNlcl9ldmVudFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gU3VwcG9ydGVkRXZlbnRSZXF1ZXN0RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBTdXBwb3J0ZWRFdmVudFJlcXVlc3RGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBTdXBwb3J0ZWRFdmVudFJlcXVlc3RGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb250ZXh0XCI6ICgwLCBDb250ZXh0XzEkMS5Db250ZXh0RnJvbUpTT04pKGpzb25bXCJjb250ZXh0XCJdKSxcblx0XHRcdFwiaWRcIjoganNvbltcImlkXCJdLFxuXHRcdFx0XCJ1c2VyX2V2ZW50XCI6ICgwLCBVc2VyRXZlbnRfMSQyLlVzZXJFdmVudEZyb21KU09OKShqc29uW1widXNlcl9ldmVudFwiXSlcblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFN1cHBvcnRlZEV2ZW50UmVxdWVzdFRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFN1cHBvcnRlZEV2ZW50UmVxdWVzdFRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBTdXBwb3J0ZWRFdmVudFJlcXVlc3RUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb250ZXh0XCI6ICgwLCBDb250ZXh0XzEkMS5Db250ZXh0VG9KU09OKSh2YWx1ZVtcImNvbnRleHRcIl0pLFxuXHRcdFx0XCJpZFwiOiB2YWx1ZVtcImlkXCJdLFxuXHRcdFx0XCJ1c2VyX2V2ZW50XCI6ICgwLCBVc2VyRXZlbnRfMSQyLlVzZXJFdmVudFRvSlNPTikodmFsdWVbXCJ1c2VyX2V2ZW50XCJdKVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1N1cHBvcnRlZEV2ZW50UmVzcG9uc2UuanNcbnZhciByZXF1aXJlX1N1cHBvcnRlZEV2ZW50UmVzcG9uc2UgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TdXBwb3J0ZWRFdmVudFJlc3BvbnNlLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZTdXBwb3J0ZWRFdmVudFJlc3BvbnNlID0gaW5zdGFuY2VPZlN1cHBvcnRlZEV2ZW50UmVzcG9uc2U7XG5cdGV4cG9ydHMuU3VwcG9ydGVkRXZlbnRSZXNwb25zZUZyb21KU09OID0gU3VwcG9ydGVkRXZlbnRSZXNwb25zZUZyb21KU09OO1xuXHRleHBvcnRzLlN1cHBvcnRlZEV2ZW50UmVzcG9uc2VGcm9tSlNPTlR5cGVkID0gU3VwcG9ydGVkRXZlbnRSZXNwb25zZUZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuU3VwcG9ydGVkRXZlbnRSZXNwb25zZVRvSlNPTiA9IFN1cHBvcnRlZEV2ZW50UmVzcG9uc2VUb0pTT047XG5cdGV4cG9ydHMuU3VwcG9ydGVkRXZlbnRSZXNwb25zZVRvSlNPTlR5cGVkID0gU3VwcG9ydGVkRXZlbnRSZXNwb25zZVRvSlNPTlR5cGVkO1xuXHRjb25zdCBTdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeV8xID0gcmVxdWlyZV9TdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeSgpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBTdXBwb3J0ZWRFdmVudFJlc3BvbnNlIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlN1cHBvcnRlZEV2ZW50UmVzcG9uc2UodmFsdWUpIHtcblx0XHRpZiAoIShcImNyZWF0ZWRfYXRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJjcmVhdGVkX2F0XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImlkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwicmVhZHlcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJyZWFkeVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJzdXBwb3J0ZWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJzdXBwb3J0ZWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFN1cHBvcnRlZEV2ZW50UmVzcG9uc2VGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFN1cHBvcnRlZEV2ZW50UmVzcG9uc2VGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBTdXBwb3J0ZWRFdmVudFJlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY2F0ZWdvcnlcIjoganNvbltcImNhdGVnb3J5XCJdID09IG51bGwgPyB2b2lkIDAgOiAoMCwgU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnlfMS5TdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeUZyb21KU09OKShqc29uW1wiY2F0ZWdvcnlcIl0pLFxuXHRcdFx0XCJjb2xsZWN0aW9uc1wiOiBqc29uW1wiY29sbGVjdGlvbnNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJjb2xsZWN0aW9uc1wiXSxcblx0XHRcdFwiY3JlYXRlZF9hdFwiOiBqc29uW1wiY3JlYXRlZF9hdFwiXSxcblx0XHRcdFwiaWRcIjoganNvbltcImlkXCJdLFxuXHRcdFx0XCJtZXJjaGFudF90YWdzXCI6IGpzb25bXCJtZXJjaGFudF90YWdzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wibWVyY2hhbnRfdGFnc1wiXSxcblx0XHRcdFwibnVtX29mX3Jldmlld3NcIjoganNvbltcIm51bV9vZl9yZXZpZXdzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wibnVtX29mX3Jldmlld3NcIl0sXG5cdFx0XHRcInJlYWR5XCI6IGpzb25bXCJyZWFkeVwiXSxcblx0XHRcdFwic3VwcG9ydGVkXCI6IGpzb25bXCJzdXBwb3J0ZWRcIl0sXG5cdFx0XHRcInRvcF9jYXRlZ29yeVwiOiBqc29uW1widG9wX2NhdGVnb3J5XCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1widG9wX2NhdGVnb3J5XCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBTdXBwb3J0ZWRFdmVudFJlc3BvbnNlVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU3VwcG9ydGVkRXZlbnRSZXNwb25zZVRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBTdXBwb3J0ZWRFdmVudFJlc3BvbnNlVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY2F0ZWdvcnlcIjogKDAsIFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5XzEuU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnlUb0pTT04pKHZhbHVlW1wiY2F0ZWdvcnlcIl0pLFxuXHRcdFx0XCJjb2xsZWN0aW9uc1wiOiB2YWx1ZVtcImNvbGxlY3Rpb25zXCJdLFxuXHRcdFx0XCJjcmVhdGVkX2F0XCI6IHZhbHVlW1wiY3JlYXRlZF9hdFwiXSxcblx0XHRcdFwiaWRcIjogdmFsdWVbXCJpZFwiXSxcblx0XHRcdFwibWVyY2hhbnRfdGFnc1wiOiB2YWx1ZVtcIm1lcmNoYW50X3RhZ3NcIl0sXG5cdFx0XHRcIm51bV9vZl9yZXZpZXdzXCI6IHZhbHVlW1wibnVtX29mX3Jldmlld3NcIl0sXG5cdFx0XHRcInJlYWR5XCI6IHZhbHVlW1wicmVhZHlcIl0sXG5cdFx0XHRcInN1cHBvcnRlZFwiOiB2YWx1ZVtcInN1cHBvcnRlZFwiXSxcblx0XHRcdFwidG9wX2NhdGVnb3J5XCI6IHZhbHVlW1widG9wX2NhdGVnb3J5XCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZy5qc1xudmFyIHJlcXVpcmVfVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1VybFJlc29sdmluZ0dlbmVyaWNDb25maWcuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlVybFJlc29sdmluZ0dlbmVyaWNDb25maWcgPSBpbnN0YW5jZU9mVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZztcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnRnJvbUpTT04gPSBVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnRnJvbUpTT047XG5cdGV4cG9ydHMuVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZ0Zyb21KU09OVHlwZWQgPSBVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnVG9KU09OID0gVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZ1RvSlNPTjtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnVG9KU09OVHlwZWQgPSBVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFVybFJlc29sdmluZ0dlbmVyaWNDb25maWcgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZyh2YWx1ZSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ0dlbmVyaWNDb25maWdGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFVybFJlc29sdmluZ0dlbmVyaWNDb25maWdGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHsgXCJkZXRhaWxzXCI6IGpzb25bXCJkZXRhaWxzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiZGV0YWlsc1wiXSB9O1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ0dlbmVyaWNDb25maWdUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ0dlbmVyaWNDb25maWdUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4geyBcImRldGFpbHNcIjogdmFsdWVbXCJkZXRhaWxzXCJdIH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1VybFJlc29sdmluZ1BEUENvbmZpZy5qc1xudmFyIHJlcXVpcmVfVXJsUmVzb2x2aW5nUERQQ29uZmlnID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVXJsUmVzb2x2aW5nUERQQ29uZmlnLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZVcmxSZXNvbHZpbmdQRFBDb25maWcgPSBpbnN0YW5jZU9mVXJsUmVzb2x2aW5nUERQQ29uZmlnO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1BEUENvbmZpZ0Zyb21KU09OID0gVXJsUmVzb2x2aW5nUERQQ29uZmlnRnJvbUpTT047XG5cdGV4cG9ydHMuVXJsUmVzb2x2aW5nUERQQ29uZmlnRnJvbUpTT05UeXBlZCA9IFVybFJlc29sdmluZ1BEUENvbmZpZ0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuVXJsUmVzb2x2aW5nUERQQ29uZmlnVG9KU09OID0gVXJsUmVzb2x2aW5nUERQQ29uZmlnVG9KU09OO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1BEUENvbmZpZ1RvSlNPTlR5cGVkID0gVXJsUmVzb2x2aW5nUERQQ29uZmlnVG9KU09OVHlwZWQ7XG5cdGNvbnN0IFBEUEF0dHJpYnV0ZXNfMSA9IHJlcXVpcmVfUERQQXR0cmlidXRlcygpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBVcmxSZXNvbHZpbmdQRFBDb25maWcgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mVXJsUmVzb2x2aW5nUERQQ29uZmlnKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJwZHBfYXR0cmlidXRlc1wiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInBkcF9hdHRyaWJ1dGVzXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdQRFBDb25maWdGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFVybFJlc29sdmluZ1BEUENvbmZpZ0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ1BEUENvbmZpZ0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvbGxlY3Rpb25zXCI6IGpzb25bXCJjb2xsZWN0aW9uc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImNvbGxlY3Rpb25zXCJdLFxuXHRcdFx0XCJtZXJjaGFudF90YWdzXCI6IGpzb25bXCJtZXJjaGFudF90YWdzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wibWVyY2hhbnRfdGFnc1wiXSxcblx0XHRcdFwibnVtYmVyX29mX3Jldmlld3NcIjoganNvbltcIm51bWJlcl9vZl9yZXZpZXdzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wibnVtYmVyX29mX3Jldmlld3NcIl0sXG5cdFx0XHRcInBkcF9hdHRyaWJ1dGVzXCI6ICgwLCBQRFBBdHRyaWJ1dGVzXzEuUERQQXR0cmlidXRlc0Zyb21KU09OKShqc29uW1wicGRwX2F0dHJpYnV0ZXNcIl0pXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdQRFBDb25maWdUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBVcmxSZXNvbHZpbmdQRFBDb25maWdUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVXJsUmVzb2x2aW5nUERQQ29uZmlnVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29sbGVjdGlvbnNcIjogdmFsdWVbXCJjb2xsZWN0aW9uc1wiXSxcblx0XHRcdFwibWVyY2hhbnRfdGFnc1wiOiB2YWx1ZVtcIm1lcmNoYW50X3RhZ3NcIl0sXG5cdFx0XHRcIm51bWJlcl9vZl9yZXZpZXdzXCI6IHZhbHVlW1wibnVtYmVyX29mX3Jldmlld3NcIl0sXG5cdFx0XHRcInBkcF9hdHRyaWJ1dGVzXCI6ICgwLCBQRFBBdHRyaWJ1dGVzXzEuUERQQXR0cmlidXRlc1RvSlNPTikodmFsdWVbXCJwZHBfYXR0cmlidXRlc1wiXSlcblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9VcmxSZXNvbHZpbmdQTFBDb25maWcuanNcbnZhciByZXF1aXJlX1VybFJlc29sdmluZ1BMUENvbmZpZyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1VybFJlc29sdmluZ1BMUENvbmZpZy5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mVXJsUmVzb2x2aW5nUExQQ29uZmlnID0gaW5zdGFuY2VPZlVybFJlc29sdmluZ1BMUENvbmZpZztcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdQTFBDb25maWdGcm9tSlNPTiA9IFVybFJlc29sdmluZ1BMUENvbmZpZ0Zyb21KU09OO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1BMUENvbmZpZ0Zyb21KU09OVHlwZWQgPSBVcmxSZXNvbHZpbmdQTFBDb25maWdGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1BMUENvbmZpZ1RvSlNPTiA9IFVybFJlc29sdmluZ1BMUENvbmZpZ1RvSlNPTjtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdQTFBDb25maWdUb0pTT05UeXBlZCA9IFVybFJlc29sdmluZ1BMUENvbmZpZ1RvSlNPTlR5cGVkO1xuXHRjb25zdCBQTFBBdHRyaWJ1dGVzXzEgPSByZXF1aXJlX1BMUEF0dHJpYnV0ZXMoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgVXJsUmVzb2x2aW5nUExQQ29uZmlnIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlVybFJlc29sdmluZ1BMUENvbmZpZyh2YWx1ZSkge1xuXHRcdGlmICghKFwicGxwX2F0dHJpYnV0ZXNcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJwbHBfYXR0cmlidXRlc1wiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gVXJsUmVzb2x2aW5nUExQQ29uZmlnRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBVcmxSZXNvbHZpbmdQTFBDb25maWdGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdQTFBDb25maWdGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJwbHBfYXR0cmlidXRlc1wiOiAoMCwgUExQQXR0cmlidXRlc18xLlBMUEF0dHJpYnV0ZXNGcm9tSlNPTikoanNvbltcInBscF9hdHRyaWJ1dGVzXCJdKSxcblx0XHRcdFwidG9wX2NhdGVnb3J5XCI6IGpzb25bXCJ0b3BfY2F0ZWdvcnlcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJ0b3BfY2F0ZWdvcnlcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ1BMUENvbmZpZ1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFVybFJlc29sdmluZ1BMUENvbmZpZ1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdQTFBDb25maWdUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJwbHBfYXR0cmlidXRlc1wiOiAoMCwgUExQQXR0cmlidXRlc18xLlBMUEF0dHJpYnV0ZXNUb0pTT04pKHZhbHVlW1wicGxwX2F0dHJpYnV0ZXNcIl0pLFxuXHRcdFx0XCJ0b3BfY2F0ZWdvcnlcIjogdmFsdWVbXCJ0b3BfY2F0ZWdvcnlcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9VcmxSZXNvbHZpbmdSZXF1ZXN0LmpzXG52YXIgcmVxdWlyZV9VcmxSZXNvbHZpbmdSZXF1ZXN0ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVXJsUmVzb2x2aW5nUmVxdWVzdC5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mVXJsUmVzb2x2aW5nUmVxdWVzdCA9IGluc3RhbmNlT2ZVcmxSZXNvbHZpbmdSZXF1ZXN0O1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1JlcXVlc3RGcm9tSlNPTiA9IFVybFJlc29sdmluZ1JlcXVlc3RGcm9tSlNPTjtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdSZXF1ZXN0RnJvbUpTT05UeXBlZCA9IFVybFJlc29sdmluZ1JlcXVlc3RGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1JlcXVlc3RUb0pTT04gPSBVcmxSZXNvbHZpbmdSZXF1ZXN0VG9KU09OO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1JlcXVlc3RUb0pTT05UeXBlZCA9IFVybFJlc29sdmluZ1JlcXVlc3RUb0pTT05UeXBlZDtcblx0Y29uc3QgQ29udGV4dF8xID0gcmVxdWlyZV9Db250ZXh0KCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFVybFJlc29sdmluZ1JlcXVlc3QgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mVXJsUmVzb2x2aW5nUmVxdWVzdCh2YWx1ZSkge1xuXHRcdGlmICghKFwiY29udGV4dFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNvbnRleHRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiZmVhdHVyZV9nYXRlc1wiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImZlYXR1cmVfZ2F0ZXNcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwidXJsXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1widXJsXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdSZXF1ZXN0RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBVcmxSZXNvbHZpbmdSZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVXJsUmVzb2x2aW5nUmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvbnRleHRcIjogKDAsIENvbnRleHRfMS5Db250ZXh0RnJvbUpTT04pKGpzb25bXCJjb250ZXh0XCJdKSxcblx0XHRcdFwiZmVhdHVyZV9nYXRlc1wiOiBqc29uW1wiZmVhdHVyZV9nYXRlc1wiXSxcblx0XHRcdFwidXJsXCI6IGpzb25bXCJ1cmxcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ1JlcXVlc3RUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBVcmxSZXNvbHZpbmdSZXF1ZXN0VG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ1JlcXVlc3RUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb250ZXh0XCI6ICgwLCBDb250ZXh0XzEuQ29udGV4dFRvSlNPTikodmFsdWVbXCJjb250ZXh0XCJdKSxcblx0XHRcdFwiZmVhdHVyZV9nYXRlc1wiOiB2YWx1ZVtcImZlYXR1cmVfZ2F0ZXNcIl0sXG5cdFx0XHRcInVybFwiOiB2YWx1ZVtcInVybFwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1VybFJlc29sdmluZ1Jlc3BvbnNlU3BlY2lmaWNEZXRhaWxzLmpzXG52YXIgcmVxdWlyZV9VcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlscyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1VybFJlc29sdmluZ1Jlc3BvbnNlU3BlY2lmaWNEZXRhaWxzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1Jlc3BvbnNlU3BlY2lmaWNEZXRhaWxzRnJvbUpTT04gPSBVcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc0Zyb21KU09OO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1Jlc3BvbnNlU3BlY2lmaWNEZXRhaWxzRnJvbUpTT05UeXBlZCA9IFVybFJlc29sdmluZ1Jlc3BvbnNlU3BlY2lmaWNEZXRhaWxzRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc1RvSlNPTiA9IFVybFJlc29sdmluZ1Jlc3BvbnNlU3BlY2lmaWNEZXRhaWxzVG9KU09OO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1Jlc3BvbnNlU3BlY2lmaWNEZXRhaWxzVG9KU09OVHlwZWQgPSBVcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc1RvSlNPTlR5cGVkO1xuXHRjb25zdCBVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnXzEgPSByZXF1aXJlX1VybFJlc29sdmluZ0dlbmVyaWNDb25maWcoKTtcblx0Y29uc3QgVXJsUmVzb2x2aW5nUERQQ29uZmlnXzEgPSByZXF1aXJlX1VybFJlc29sdmluZ1BEUENvbmZpZygpO1xuXHRjb25zdCBVcmxSZXNvbHZpbmdQTFBDb25maWdfMSA9IHJlcXVpcmVfVXJsUmVzb2x2aW5nUExQQ29uZmlnKCk7XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ1Jlc3BvbnNlU3BlY2lmaWNEZXRhaWxzRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBVcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ1Jlc3BvbnNlU3BlY2lmaWNEZXRhaWxzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0aWYgKCgwLCBVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnXzEuaW5zdGFuY2VPZlVybFJlc29sdmluZ0dlbmVyaWNDb25maWcpKGpzb24pKSByZXR1cm4gKDAsIFVybFJlc29sdmluZ0dlbmVyaWNDb25maWdfMS5VcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnRnJvbUpTT05UeXBlZCkoanNvbiwgdHJ1ZSk7XG5cdFx0aWYgKCgwLCBVcmxSZXNvbHZpbmdQRFBDb25maWdfMS5pbnN0YW5jZU9mVXJsUmVzb2x2aW5nUERQQ29uZmlnKShqc29uKSkgcmV0dXJuICgwLCBVcmxSZXNvbHZpbmdQRFBDb25maWdfMS5VcmxSZXNvbHZpbmdQRFBDb25maWdGcm9tSlNPTlR5cGVkKShqc29uLCB0cnVlKTtcblx0XHRpZiAoKDAsIFVybFJlc29sdmluZ1BMUENvbmZpZ18xLmluc3RhbmNlT2ZVcmxSZXNvbHZpbmdQTFBDb25maWcpKGpzb24pKSByZXR1cm4gKDAsIFVybFJlc29sdmluZ1BMUENvbmZpZ18xLlVybFJlc29sdmluZ1BMUENvbmZpZ0Zyb21KU09OVHlwZWQpKGpzb24sIHRydWUpO1xuXHRcdHJldHVybiB7fTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFVybFJlc29sdmluZ1Jlc3BvbnNlU3BlY2lmaWNEZXRhaWxzVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ1Jlc3BvbnNlU3BlY2lmaWNEZXRhaWxzVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0aWYgKCgwLCBVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnXzEuaW5zdGFuY2VPZlVybFJlc29sdmluZ0dlbmVyaWNDb25maWcpKHZhbHVlKSkgcmV0dXJuICgwLCBVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnXzEuVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZ1RvSlNPTikodmFsdWUpO1xuXHRcdGlmICgoMCwgVXJsUmVzb2x2aW5nUERQQ29uZmlnXzEuaW5zdGFuY2VPZlVybFJlc29sdmluZ1BEUENvbmZpZykodmFsdWUpKSByZXR1cm4gKDAsIFVybFJlc29sdmluZ1BEUENvbmZpZ18xLlVybFJlc29sdmluZ1BEUENvbmZpZ1RvSlNPTikodmFsdWUpO1xuXHRcdGlmICgoMCwgVXJsUmVzb2x2aW5nUExQQ29uZmlnXzEuaW5zdGFuY2VPZlVybFJlc29sdmluZ1BMUENvbmZpZykodmFsdWUpKSByZXR1cm4gKDAsIFVybFJlc29sdmluZ1BMUENvbmZpZ18xLlVybFJlc29sdmluZ1BMUENvbmZpZ1RvSlNPTikodmFsdWUpO1xuXHRcdHJldHVybiB7fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVXJsUmVzb2x2aW5nVHlwZS5qc1xudmFyIHJlcXVpcmVfVXJsUmVzb2x2aW5nVHlwZSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1VybFJlc29sdmluZ1R5cGUuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuVXJsUmVzb2x2aW5nVHlwZSA9IHZvaWQgMDtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mVXJsUmVzb2x2aW5nVHlwZSA9IGluc3RhbmNlT2ZVcmxSZXNvbHZpbmdUeXBlO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1R5cGVGcm9tSlNPTiA9IFVybFJlc29sdmluZ1R5cGVGcm9tSlNPTjtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdUeXBlRnJvbUpTT05UeXBlZCA9IFVybFJlc29sdmluZ1R5cGVGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1R5cGVUb0pTT04gPSBVcmxSZXNvbHZpbmdUeXBlVG9KU09OO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1R5cGVUb0pTT05UeXBlZCA9IFVybFJlc29sdmluZ1R5cGVUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogVHlwZSBvZiBwYWdlIHZhcmlhbnRcblx0KiBAZXhwb3J0XG5cdCogQGVudW0ge3N0cmluZ31cblx0Ki9cblx0dmFyIFVybFJlc29sdmluZ1R5cGU7XG5cdChmdW5jdGlvbihVcmxSZXNvbHZpbmdUeXBlJDEpIHtcblx0XHRVcmxSZXNvbHZpbmdUeXBlJDFbXCJQZHBcIl0gPSBcInBkcFwiO1xuXHRcdFVybFJlc29sdmluZ1R5cGUkMVtcIlBscFwiXSA9IFwicGxwXCI7XG5cdFx0VXJsUmVzb2x2aW5nVHlwZSQxW1wiU2VhcmNoXCJdID0gXCJzZWFyY2hcIjtcblx0XHRVcmxSZXNvbHZpbmdUeXBlJDFbXCJPdGhlclwiXSA9IFwib3RoZXJcIjtcblx0XHRVcmxSZXNvbHZpbmdUeXBlJDFbXCJIb21lcGFnZVwiXSA9IFwiaG9tZXBhZ2VcIjtcblx0XHRVcmxSZXNvbHZpbmdUeXBlJDFbXCJQYWdlXCJdID0gXCJwYWdlXCI7XG5cdFx0VXJsUmVzb2x2aW5nVHlwZSQxW1wiVW5zdXBwb3J0ZWRcIl0gPSBcInVuc3VwcG9ydGVkXCI7XG5cdH0pKFVybFJlc29sdmluZ1R5cGUgfHwgKGV4cG9ydHMuVXJsUmVzb2x2aW5nVHlwZSA9IFVybFJlc29sdmluZ1R5cGUgPSB7fSkpO1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mVXJsUmVzb2x2aW5nVHlwZSh2YWx1ZSkge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIFVybFJlc29sdmluZ1R5cGUpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXJsUmVzb2x2aW5nVHlwZSwga2V5KSkge1xuXHRcdFx0aWYgKFVybFJlc29sdmluZ1R5cGVba2V5XSA9PT0gdmFsdWUpIHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0ZnVuY3Rpb24gVXJsUmVzb2x2aW5nVHlwZUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVXJsUmVzb2x2aW5nVHlwZUZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ1R5cGVGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRyZXR1cm4ganNvbjtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdUeXBlVG9KU09OKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ1R5cGVUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVXJsUmVzb2x2aW5nUmVzcG9uc2UuanNcbnZhciByZXF1aXJlX1VybFJlc29sdmluZ1Jlc3BvbnNlID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVXJsUmVzb2x2aW5nUmVzcG9uc2UuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlVybFJlc29sdmluZ1Jlc3BvbnNlID0gaW5zdGFuY2VPZlVybFJlc29sdmluZ1Jlc3BvbnNlO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1Jlc3BvbnNlRnJvbUpTT04gPSBVcmxSZXNvbHZpbmdSZXNwb25zZUZyb21KU09OO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1Jlc3BvbnNlRnJvbUpTT05UeXBlZCA9IFVybFJlc29sdmluZ1Jlc3BvbnNlRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdSZXNwb25zZVRvSlNPTiA9IFVybFJlc29sdmluZ1Jlc3BvbnNlVG9KU09OO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1Jlc3BvbnNlVG9KU09OVHlwZWQgPSBVcmxSZXNvbHZpbmdSZXNwb25zZVRvSlNPTlR5cGVkO1xuXHRjb25zdCBVcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc18xID0gcmVxdWlyZV9VcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlscygpO1xuXHRjb25zdCBVcmxSZXNvbHZpbmdUeXBlXzEgPSByZXF1aXJlX1VybFJlc29sdmluZ1R5cGUoKTtcblx0Y29uc3QgVXNlckV2ZW50XzEkMSA9IHJlcXVpcmVfVXNlckV2ZW50KCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFVybFJlc29sdmluZ1Jlc3BvbnNlIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlVybFJlc29sdmluZ1Jlc3BvbnNlKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJyZWFkeVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInJlYWR5XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInNwZWNpZmljX2RldGFpbHNcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJzcGVjaWZpY19kZXRhaWxzXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInZhcmlhbnRfdHlwZVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInZhcmlhbnRfdHlwZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gVXJsUmVzb2x2aW5nUmVzcG9uc2VGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFVybFJlc29sdmluZ1Jlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVXJsUmVzb2x2aW5nUmVzcG9uc2VGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJwYWdlX3ZhcmlhbnRcIjoganNvbltcInBhZ2VfdmFyaWFudFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInBhZ2VfdmFyaWFudFwiXSxcblx0XHRcdFwicmVhZHlcIjoganNvbltcInJlYWR5XCJdLFxuXHRcdFx0XCJzcGVjaWZpY19kZXRhaWxzXCI6ICgwLCBVcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc18xLlVybFJlc29sdmluZ1Jlc3BvbnNlU3BlY2lmaWNEZXRhaWxzRnJvbUpTT04pKGpzb25bXCJzcGVjaWZpY19kZXRhaWxzXCJdKSxcblx0XHRcdFwidXNlcl9ldmVudFwiOiBqc29uW1widXNlcl9ldmVudFwiXSA9PSBudWxsID8gdm9pZCAwIDogKDAsIFVzZXJFdmVudF8xJDEuVXNlckV2ZW50RnJvbUpTT04pKGpzb25bXCJ1c2VyX2V2ZW50XCJdKSxcblx0XHRcdFwidmFyaWFudF90eXBlXCI6ICgwLCBVcmxSZXNvbHZpbmdUeXBlXzEuVXJsUmVzb2x2aW5nVHlwZUZyb21KU09OKShqc29uW1widmFyaWFudF90eXBlXCJdKVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gVXJsUmVzb2x2aW5nUmVzcG9uc2VUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBVcmxSZXNvbHZpbmdSZXNwb25zZVRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdSZXNwb25zZVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcInBhZ2VfdmFyaWFudFwiOiB2YWx1ZVtcInBhZ2VfdmFyaWFudFwiXSxcblx0XHRcdFwicmVhZHlcIjogdmFsdWVbXCJyZWFkeVwiXSxcblx0XHRcdFwic3BlY2lmaWNfZGV0YWlsc1wiOiAoMCwgVXJsUmVzb2x2aW5nUmVzcG9uc2VTcGVjaWZpY0RldGFpbHNfMS5VcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc1RvSlNPTikodmFsdWVbXCJzcGVjaWZpY19kZXRhaWxzXCJdKSxcblx0XHRcdFwidXNlcl9ldmVudFwiOiAoMCwgVXNlckV2ZW50XzEkMS5Vc2VyRXZlbnRUb0pTT04pKHZhbHVlW1widXNlcl9ldmVudFwiXSksXG5cdFx0XHRcInZhcmlhbnRfdHlwZVwiOiAoMCwgVXJsUmVzb2x2aW5nVHlwZV8xLlVybFJlc29sdmluZ1R5cGVUb0pTT04pKHZhbHVlW1widmFyaWFudF90eXBlXCJdKVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1YxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2UuanNcbnZhciByZXF1aXJlX1YxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2UgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9WMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZWMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlID0gaW5zdGFuY2VPZlYxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2U7XG5cdGV4cG9ydHMuVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZUZyb21KU09OID0gVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZUZyb21KU09OO1xuXHRleHBvcnRzLlYxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2VGcm9tSlNPTlR5cGVkID0gVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZUZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZVRvSlNPTiA9IFYxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2VUb0pTT047XG5cdGV4cG9ydHMuVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZVRvSlNPTlR5cGVkID0gVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZVRvSlNPTlR5cGVkO1xuXHRjb25zdCBTdWdnZXN0aW9uXzEgPSByZXF1aXJlX1N1Z2dlc3Rpb24oKTtcblx0Y29uc3QgVXNlckV2ZW50XzEgPSByZXF1aXJlX1VzZXJFdmVudCgpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBWMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlYxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2UodmFsdWUpIHtcblx0XHRpZiAoIShcInJlc3BvbnNlc1wiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInJlc3BvbnNlc1wiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJzdWdnZXN0aW9uc1wiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInN1Z2dlc3Rpb25zXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInVzZXJfZXZlbnRzXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1widXNlcl9ldmVudHNcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFYxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2VGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFYxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2VGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBWMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwicmVzcG9uc2VzXCI6IGpzb25bXCJyZXNwb25zZXNcIl0sXG5cdFx0XHRcInN1Z2dlc3Rpb25zXCI6IGpzb25bXCJzdWdnZXN0aW9uc1wiXS5tYXAoU3VnZ2VzdGlvbl8xLlN1Z2dlc3Rpb25Gcm9tSlNPTiksXG5cdFx0XHRcInVzZXJfZXZlbnRzXCI6IGpzb25bXCJ1c2VyX2V2ZW50c1wiXS5tYXAoVXNlckV2ZW50XzEuVXNlckV2ZW50RnJvbUpTT04pXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBWMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZVRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBWMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwicmVzcG9uc2VzXCI6IHZhbHVlW1wicmVzcG9uc2VzXCJdLFxuXHRcdFx0XCJzdWdnZXN0aW9uc1wiOiB2YWx1ZVtcInN1Z2dlc3Rpb25zXCJdLm1hcChTdWdnZXN0aW9uXzEuU3VnZ2VzdGlvblRvSlNPTiksXG5cdFx0XHRcInVzZXJfZXZlbnRzXCI6IHZhbHVlW1widXNlcl9ldmVudHNcIl0ubWFwKFVzZXJFdmVudF8xLlVzZXJFdmVudFRvSlNPTilcblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9WMVNlYXJjaEV4cGxhaW5HZXQyMDBSZXNwb25zZS5qc1xudmFyIHJlcXVpcmVfVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2UgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9WMVNlYXJjaEV4cGxhaW5HZXQyMDBSZXNwb25zZS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2UgPSBpbnN0YW5jZU9mVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2U7XG5cdGV4cG9ydHMuVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2VGcm9tSlNPTiA9IFYxU2VhcmNoRXhwbGFpbkdldDIwMFJlc3BvbnNlRnJvbUpTT047XG5cdGV4cG9ydHMuVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2VGcm9tSlNPTlR5cGVkID0gVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2VGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlYxU2VhcmNoRXhwbGFpbkdldDIwMFJlc3BvbnNlVG9KU09OID0gVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2VUb0pTT047XG5cdGV4cG9ydHMuVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2VUb0pTT05UeXBlZCA9IFYxU2VhcmNoRXhwbGFpbkdldDIwMFJlc3BvbnNlVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFYxU2VhcmNoRXhwbGFpbkdldDIwMFJlc3BvbnNlIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlYxU2VhcmNoRXhwbGFpbkdldDIwMFJlc3BvbnNlKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJjaGF0X2lkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY2hhdF9pZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJleHBsYW5hdGlvblwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImV4cGxhbmF0aW9uXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInByb2R1Y3RfaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJwcm9kdWN0X2lkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBWMVNlYXJjaEV4cGxhaW5HZXQyMDBSZXNwb25zZUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2VGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBWMVNlYXJjaEV4cGxhaW5HZXQyMDBSZXNwb25zZUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNoYXRfaWRcIjoganNvbltcImNoYXRfaWRcIl0sXG5cdFx0XHRcImV4cGxhbmF0aW9uXCI6IGpzb25bXCJleHBsYW5hdGlvblwiXSxcblx0XHRcdFwicHJvZHVjdF9pZFwiOiBqc29uW1wicHJvZHVjdF9pZFwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2VUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBWMVNlYXJjaEV4cGxhaW5HZXQyMDBSZXNwb25zZVRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBWMVNlYXJjaEV4cGxhaW5HZXQyMDBSZXNwb25zZVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNoYXRfaWRcIjogdmFsdWVbXCJjaGF0X2lkXCJdLFxuXHRcdFx0XCJleHBsYW5hdGlvblwiOiB2YWx1ZVtcImV4cGxhbmF0aW9uXCJdLFxuXHRcdFx0XCJwcm9kdWN0X2lkXCI6IHZhbHVlW1wicHJvZHVjdF9pZFwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL2luZGV4LmpzXG52YXIgcmVxdWlyZV9tb2RlbHMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9pbmRleC5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0dmFyIF9fY3JlYXRlQmluZGluZyQyID0gZXhwb3J0cyAmJiBleHBvcnRzLl9fY3JlYXRlQmluZGluZyB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuXHRcdGlmIChrMiA9PT0gdm9pZCAwKSBrMiA9IGs7XG5cdFx0dmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuXHRcdGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSBkZXNjID0ge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtW2tdO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcblx0fSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcblx0XHRpZiAoazIgPT09IHZvaWQgMCkgazIgPSBrO1xuXHRcdG9bazJdID0gbVtrXTtcblx0fSkpO1xuXHR2YXIgX19leHBvcnRTdGFyJDIgPSBleHBvcnRzICYmIGV4cG9ydHMuX19leHBvcnRTdGFyIHx8IGZ1bmN0aW9uKG0sIGV4cG9ydHMkMSkge1xuXHRcdGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cyQxLCBwKSkgX19jcmVhdGVCaW5kaW5nJDIoZXhwb3J0cyQxLCBtLCBwKTtcblx0fTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0FkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlcXVlc3QoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2UoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfQWRkVG9DYXJ0QXR0cmlidXRlcygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9BbmFseXRpY3NJZGVudGlmeVJlcXVlc3QoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfQW5hbHl0aWNzVHJhY2tFdmVudFJlcXVlc3QoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfQXR0YWNobWVudFJlcXVlc3QoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfQXV0b0Zvcm0oKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfQ29udGV4dCgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9Db252ZXJzYXRpb25TdGF0dXMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdCgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9DcmVhdGVDb252ZXJzYXRpb25SZXNwb25zZSgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9DdXN0U2VydmljZUF0dGFjaG1lbnQoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfQ3VzdFNlcnZpY2VDb252ZXJzYXRpb24oKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25NZXNzYWdlcygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9DdXN0U2VydmljZUN1c3RvbWVyKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0N1c3RTZXJ2aWNlTWVzc2FnZSgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9DdXN0b21lclNlcnZpY2VQcm92aWRlcigpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9Gb3JtUmVzcG9uc2VBdHRyaWJ1dGVzKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0Zvcm1SZXNwb25zZUF0dHJpYnV0ZXNGb3JtQ2F0ZWdvcnkoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfRm9ybVR5cGUoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0dlbmVyYXRpb25QYXJhbXMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0lzQnVzaW5lc3NIb3Vyc1JlcXVlc3QoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2UoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfTGFiZWxWYWx1ZSgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9NYW51YWxGb3JtKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX05leHRNZXNzYWdlUmVxdWVzdCgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9PcmRlckl0ZW1JbmZvKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX09yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX09yZ2FuaXphdGlvbigpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9Pcmdhbml6YXRpb25Db25maWcoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0cygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9Pcmdhbml6YXRpb25TZXR0aW5ncygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9QRFBBdHRyaWJ1dGVzKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1BMUEF0dHJpYnV0ZUNhdGVnb3J5KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1BMUEF0dHJpYnV0ZXMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfUExQQXR0cmlidXRlc0F0dHJpYnV0ZXMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfUExQSWRBdHRyaWJ1dGVzKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1BMUFVybEF0dHJpYnV0ZXMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfUGFnZVZpc2l0QXR0cmlidXRlcygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9QYWdlVmlzaXRDYXRlZ29yeSgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9Qcm9kdWN0UmV0cmlldmFsUmVxdWVzdCgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9Qcm9kdWN0UmV0cmlldmFsUmVzcG9uc2UoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlcygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9Qcm9kdWN0U2VhcmNoUmVzcG9uc2UoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlcygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9RdWVyeVR5cGVkQXR0cmlidXRlcygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9SZXBvcnRDb250ZW50KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1JlcG9ydFNlc3Npb25SZXF1ZXN0KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1Jlc3BvbnNlKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1Jlc3BvbnNlQ2F0ZWdvcnkoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlcygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9TZWFyY2hBdHRyaWJ1dGVzKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1NlYXJjaFJlc3BvbnNlUHJvZHVjdCgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9TZWFyY2hTdWdnZXN0aW9uc1Jlc3BvbnNlKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1NlbmRNZXNzYWdlUmVxdWVzdCgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9TZW5kTWVzc2FnZVJlc3BvbnNlKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1N0YXRzaWdFeHBlcmltZW50KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1N0YXRzaWdGZWF0dXJlR2F0ZSgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9TdWdnZXN0aW9uKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1N1Z2dlc3Rpb25DYXRlZ29yeSgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9TdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnkoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfU3VwcG9ydGVkRXZlbnRSZXF1ZXN0KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1N1cHBvcnRlZEV2ZW50UmVzcG9uc2UoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfVHVybkluZm8oKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfVHVybkluZm9QcmV2VXNlckV2ZW50KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1VybFJlc29sdmluZ0dlbmVyaWNDb25maWcoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfVXJsUmVzb2x2aW5nUERQQ29uZmlnKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1VybFJlc29sdmluZ1BMUENvbmZpZygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9VcmxSZXNvbHZpbmdSZXF1ZXN0KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1VybFJlc29sdmluZ1Jlc3BvbnNlKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1VybFJlc29sdmluZ1Jlc3BvbnNlU3BlY2lmaWNEZXRhaWxzKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1VybFJlc29sdmluZ1R5cGUoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfVXNlckV2ZW50KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1VzZXJFdmVudEF0dHJpYnV0ZXMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfVXNlckV2ZW50Q2F0ZWdvcnkoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZSgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9WMVNlYXJjaEV4cGxhaW5HZXQyMDBSZXNwb25zZSgpLCBleHBvcnRzKTtcbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvYXBpcy9DdXN0b21lclNlcnZpY2VBcGkuanNcbnZhciByZXF1aXJlX0N1c3RvbWVyU2VydmljZUFwaSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvYXBpcy9DdXN0b21lclNlcnZpY2VBcGkuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHR2YXIgX19hd2FpdGVyJDQgPSBleHBvcnRzICYmIGV4cG9ydHMuX19hd2FpdGVyIHx8IGZ1bmN0aW9uKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuXHRcdGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbihyZXNvbHZlKSB7XG5cdFx0XHRcdHJlc29sdmUodmFsdWUpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0c3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmdW5jdGlvbiBzdGVwKHJlc3VsdCkge1xuXHRcdFx0XHRyZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTtcblx0XHRcdH1cblx0XHRcdHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcblx0XHR9KTtcblx0fTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLkN1c3RvbWVyU2VydmljZUFwaSA9IHZvaWQgMDtcblx0Y29uc3QgcnVudGltZSQ0ID0gcmVxdWlyZV9ydW50aW1lKCk7XG5cdGNvbnN0IGluZGV4XzEkNCA9IHJlcXVpcmVfbW9kZWxzKCk7XG5cdC8qKlxuXHQqXG5cdCovXG5cdHZhciBDdXN0b21lclNlcnZpY2VBcGkgPSBjbGFzcyBleHRlbmRzIHJ1bnRpbWUkNC5CYXNlQVBJIHtcblx0XHQvKipcblx0XHQqIEFkZCBhIG5vdGUgdG8gdGhlIGxhdGVzdCBjb252ZXJzYXRpb24gZm9yIGEgY3VzdG9tZXJcblx0XHQqL1xuXHRcdHYxQ3VzdHNlcnZpY2VBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25Qb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDQodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRjb25zdCBoZWFkZXJQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGhlYWRlclBhcmFtZXRlcnNbXCJDb250ZW50LVR5cGVcIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcblx0XHRcdFx0aWYgKHRoaXMuY29uZmlndXJhdGlvbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW4pIHtcblx0XHRcdFx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbjtcblx0XHRcdFx0XHRjb25zdCB0b2tlblN0cmluZyA9IHlpZWxkIHRva2VuKFwiYmVhcmVyXCIsIFtdKTtcblx0XHRcdFx0XHRpZiAodG9rZW5TdHJpbmcpIGhlYWRlclBhcmFtZXRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEJlYXJlciAke3Rva2VuU3RyaW5nfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSB5aWVsZCB0aGlzLnJlcXVlc3Qoe1xuXHRcdFx0XHRcdHBhdGg6IGAvdjEvY3VzdHNlcnZpY2UvYWRkX25vdGVfdG9fbGF0ZXN0X2NvbnZlcnNhdGlvbmAsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIlBPU1RcIixcblx0XHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiBxdWVyeVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0Ym9keTogKDAsIGluZGV4XzEkNC5BZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0VG9KU09OKShyZXF1ZXN0UGFyYW1ldGVyc1tcIkFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlcXVlc3RcIl0pXG5cdFx0XHRcdH0sIGluaXRPdmVycmlkZXMpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IHJ1bnRpbWUkNC5KU09OQXBpUmVzcG9uc2UocmVzcG9uc2UsIChqc29uVmFsdWUpID0+ICgwLCBpbmRleF8xJDQuQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2VGcm9tSlNPTikoanNvblZhbHVlKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBBZGQgYSBub3RlIHRvIHRoZSBsYXRlc3QgY29udmVyc2F0aW9uIGZvciBhIGN1c3RvbWVyXG5cdFx0Ki9cblx0XHR2MUN1c3RzZXJ2aWNlQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUG9zdCgpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkNCh0aGlzLCBhcmd1bWVudHMsIHZvaWQgMCwgZnVuY3Rpb24qIChyZXF1ZXN0UGFyYW1ldGVycyA9IHt9LCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy52MUN1c3RzZXJ2aWNlQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUG9zdFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykpLnZhbHVlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBDcmVhdGUgYSBuZXcgY29udmVyc2F0aW9uIGZvciBhIGN1c3RvbWVyXG5cdFx0Ki9cblx0XHR2MUN1c3RzZXJ2aWNlQ3JlYXRlQ29udmVyc2F0aW9uUG9zdFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQ0KHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRoZWFkZXJQYXJhbWV0ZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL2N1c3RzZXJ2aWNlL2NyZWF0ZV9jb252ZXJzYXRpb25gLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJQT1NUXCIsXG5cdFx0XHRcdFx0aGVhZGVyczogaGVhZGVyUGFyYW1ldGVycyxcblx0XHRcdFx0XHRxdWVyeTogcXVlcnlQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGJvZHk6ICgwLCBpbmRleF8xJDQuQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdFRvSlNPTikocmVxdWVzdFBhcmFtZXRlcnNbXCJDcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0XCJdKVxuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDQuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlLCAoanNvblZhbHVlKSA9PiAoMCwgaW5kZXhfMSQ0LkNyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlRnJvbUpTT04pKGpzb25WYWx1ZSkpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogQ3JlYXRlIGEgbmV3IGNvbnZlcnNhdGlvbiBmb3IgYSBjdXN0b21lclxuXHRcdCovXG5cdFx0djFDdXN0c2VydmljZUNyZWF0ZUNvbnZlcnNhdGlvblBvc3QoKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDQodGhpcywgYXJndW1lbnRzLCB2b2lkIDAsIGZ1bmN0aW9uKiAocmVxdWVzdFBhcmFtZXRlcnMgPSB7fSwgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMudjFDdXN0c2VydmljZUNyZWF0ZUNvbnZlcnNhdGlvblBvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogR2V0IG1lc3NhZ2VzIGZyb20gYSBjb252ZXJzYXRpb25cblx0XHQqL1xuXHRcdHYxQ3VzdHNlcnZpY2VHZXRDb252ZXJzYXRpb25NZXNzYWdlc1Bvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkNCh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0Y29uc3QgcXVlcnlQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGNvbnN0IGhlYWRlclBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aGVhZGVyUGFyYW1ldGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xuXHRcdFx0XHRpZiAodGhpcy5jb25maWd1cmF0aW9uICYmIHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbikge1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuO1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuU3RyaW5nID0geWllbGQgdG9rZW4oXCJiZWFyZXJcIiwgW10pO1xuXHRcdFx0XHRcdGlmICh0b2tlblN0cmluZykgaGVhZGVyUGFyYW1ldGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQmVhcmVyICR7dG9rZW5TdHJpbmd9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdCh7XG5cdFx0XHRcdFx0cGF0aDogYC92MS9jdXN0c2VydmljZS9nZXRfY29udmVyc2F0aW9uX21lc3NhZ2VzYCxcblx0XHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IGhlYWRlclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0cXVlcnk6IHF1ZXJ5UGFyYW1ldGVycyxcblx0XHRcdFx0XHRib2R5OiAoMCwgaW5kZXhfMSQ0LkdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdFRvSlNPTikocmVxdWVzdFBhcmFtZXRlcnNbXCJHZXRDb252ZXJzYXRpb25NZXNzYWdlc1JlcXVlc3RcIl0pXG5cdFx0XHRcdH0sIGluaXRPdmVycmlkZXMpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IHJ1bnRpbWUkNC5KU09OQXBpUmVzcG9uc2UocmVzcG9uc2UsIChqc29uVmFsdWUpID0+ICgwLCBpbmRleF8xJDQuQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25NZXNzYWdlc0Zyb21KU09OKShqc29uVmFsdWUpKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIEdldCBtZXNzYWdlcyBmcm9tIGEgY29udmVyc2F0aW9uXG5cdFx0Ki9cblx0XHR2MUN1c3RzZXJ2aWNlR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNQb3N0KCkge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQ0KHRoaXMsIGFyZ3VtZW50cywgdm9pZCAwLCBmdW5jdGlvbiogKHJlcXVlc3RQYXJhbWV0ZXJzID0ge30sIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdFx0cmV0dXJuIHlpZWxkICh5aWVsZCB0aGlzLnYxQ3VzdHNlcnZpY2VHZXRDb252ZXJzYXRpb25NZXNzYWdlc1Bvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogQ2hlY2sgaWYgaXQgaXMgY3VycmVudGx5IGJ1c2luZXNzIGhvdXJzXG5cdFx0Ki9cblx0XHR2MUN1c3RzZXJ2aWNlSXNCdXNpbmVzc0hvdXJzUG9zdFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQ0KHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRoZWFkZXJQYXJhbWV0ZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL2N1c3RzZXJ2aWNlL2lzX2J1c2luZXNzX2hvdXJzYCxcblx0XHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IGhlYWRlclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0cXVlcnk6IHF1ZXJ5UGFyYW1ldGVycyxcblx0XHRcdFx0XHRib2R5OiAoMCwgaW5kZXhfMSQ0LklzQnVzaW5lc3NIb3Vyc1JlcXVlc3RUb0pTT04pKHJlcXVlc3RQYXJhbWV0ZXJzW1wiSXNCdXNpbmVzc0hvdXJzUmVxdWVzdFwiXSlcblx0XHRcdFx0fSwgaW5pdE92ZXJyaWRlcyk7XG5cdFx0XHRcdHJldHVybiBuZXcgcnVudGltZSQ0LkpTT05BcGlSZXNwb25zZShyZXNwb25zZSwgKGpzb25WYWx1ZSkgPT4gKDAsIGluZGV4XzEkNC5Jc0J1c2luZXNzSG91cnNSZXNwb25zZUZyb21KU09OKShqc29uVmFsdWUpKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIENoZWNrIGlmIGl0IGlzIGN1cnJlbnRseSBidXNpbmVzcyBob3Vyc1xuXHRcdCovXG5cdFx0djFDdXN0c2VydmljZUlzQnVzaW5lc3NIb3Vyc1Bvc3QoKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDQodGhpcywgYXJndW1lbnRzLCB2b2lkIDAsIGZ1bmN0aW9uKiAocmVxdWVzdFBhcmFtZXRlcnMgPSB7fSwgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMudjFDdXN0c2VydmljZUlzQnVzaW5lc3NIb3Vyc1Bvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogU2VuZCBhIG1lc3NhZ2UgaW4gYW4gZXhpc3RpbmcgY29udmVyc2F0aW9uXG5cdFx0Ki9cblx0XHR2MUN1c3RzZXJ2aWNlU2VuZE1lc3NhZ2VQb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDQodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRjb25zdCBoZWFkZXJQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGhlYWRlclBhcmFtZXRlcnNbXCJDb250ZW50LVR5cGVcIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcblx0XHRcdFx0aWYgKHRoaXMuY29uZmlndXJhdGlvbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW4pIHtcblx0XHRcdFx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbjtcblx0XHRcdFx0XHRjb25zdCB0b2tlblN0cmluZyA9IHlpZWxkIHRva2VuKFwiYmVhcmVyXCIsIFtdKTtcblx0XHRcdFx0XHRpZiAodG9rZW5TdHJpbmcpIGhlYWRlclBhcmFtZXRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEJlYXJlciAke3Rva2VuU3RyaW5nfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSB5aWVsZCB0aGlzLnJlcXVlc3Qoe1xuXHRcdFx0XHRcdHBhdGg6IGAvdjEvY3VzdHNlcnZpY2Uvc2VuZF9tZXNzYWdlYCxcblx0XHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IGhlYWRlclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0cXVlcnk6IHF1ZXJ5UGFyYW1ldGVycyxcblx0XHRcdFx0XHRib2R5OiAoMCwgaW5kZXhfMSQ0LlNlbmRNZXNzYWdlUmVxdWVzdFRvSlNPTikocmVxdWVzdFBhcmFtZXRlcnNbXCJTZW5kTWVzc2FnZVJlcXVlc3RcIl0pXG5cdFx0XHRcdH0sIGluaXRPdmVycmlkZXMpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IHJ1bnRpbWUkNC5KU09OQXBpUmVzcG9uc2UocmVzcG9uc2UsIChqc29uVmFsdWUpID0+ICgwLCBpbmRleF8xJDQuU2VuZE1lc3NhZ2VSZXNwb25zZUZyb21KU09OKShqc29uVmFsdWUpKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIFNlbmQgYSBtZXNzYWdlIGluIGFuIGV4aXN0aW5nIGNvbnZlcnNhdGlvblxuXHRcdCovXG5cdFx0djFDdXN0c2VydmljZVNlbmRNZXNzYWdlUG9zdCgpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkNCh0aGlzLCBhcmd1bWVudHMsIHZvaWQgMCwgZnVuY3Rpb24qIChyZXF1ZXN0UGFyYW1ldGVycyA9IHt9LCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy52MUN1c3RzZXJ2aWNlU2VuZE1lc3NhZ2VQb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblx0ZXhwb3J0cy5DdXN0b21lclNlcnZpY2VBcGkgPSBDdXN0b21lclNlcnZpY2VBcGk7XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L2FwaXMvRGVmYXVsdEFwaS5qc1xudmFyIHJlcXVpcmVfRGVmYXVsdEFwaSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvYXBpcy9EZWZhdWx0QXBpLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0dmFyIF9fYXdhaXRlciQzID0gZXhwb3J0cyAmJiBleHBvcnRzLl9fYXdhaXRlciB8fCBmdW5jdGlvbih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcblx0XHRmdW5jdGlvbiBhZG9wdCh2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24ocmVzb2x2ZSkge1xuXHRcdFx0XHRyZXNvbHZlKHZhbHVlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdFx0ZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0c3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZnVuY3Rpb24gc3RlcChyZXN1bHQpIHtcblx0XHRcdFx0cmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7XG5cdFx0XHR9XG5cdFx0XHRzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG5cdFx0fSk7XG5cdH07XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5WMU9yZ0NvbmZpZ0dldFNvdXJjZUVudW0gPSBleHBvcnRzLkRlZmF1bHRBcGkgPSB2b2lkIDA7XG5cdGNvbnN0IHJ1bnRpbWUkMyA9IHJlcXVpcmVfcnVudGltZSgpO1xuXHRjb25zdCBpbmRleF8xJDMgPSByZXF1aXJlX21vZGVscygpO1xuXHQvKipcblx0KlxuXHQqL1xuXHR2YXIgRGVmYXVsdEFwaSA9IGNsYXNzIGV4dGVuZHMgcnVudGltZSQzLkJhc2VBUEkge1xuXHRcdC8qKlxuXHRcdCogRXhlY3V0ZSBhIEdyYXBoUUwgcXVlcnlcblx0XHQqL1xuXHRcdGdyYXBocWxQbGF5Z3JvdW5kUmF3KGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMyh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSB5aWVsZCB0aGlzLnJlcXVlc3Qoe1xuXHRcdFx0XHRcdHBhdGg6IGAvdjEvZ3JhcGhxbGAsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IHt9LFxuXHRcdFx0XHRcdHF1ZXJ5OiB7fVxuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDMuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIEV4ZWN1dGUgYSBHcmFwaFFMIHF1ZXJ5XG5cdFx0Ki9cblx0XHRncmFwaHFsUGxheWdyb3VuZChpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy5ncmFwaHFsUGxheWdyb3VuZFJhdyhpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIEV4ZWN1dGUgYSBHcmFwaFFMIHF1ZXJ5XG5cdFx0Ki9cblx0XHRncmFwaHFsU2VydmVyUmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRjb25zdCBoZWFkZXJQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGhlYWRlclBhcmFtZXRlcnNbXCJDb250ZW50LVR5cGVcIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcblx0XHRcdFx0aWYgKHRoaXMuY29uZmlndXJhdGlvbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW4pIHtcblx0XHRcdFx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbjtcblx0XHRcdFx0XHRjb25zdCB0b2tlblN0cmluZyA9IHlpZWxkIHRva2VuKFwiYmVhcmVyXCIsIFtdKTtcblx0XHRcdFx0XHRpZiAodG9rZW5TdHJpbmcpIGhlYWRlclBhcmFtZXRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEJlYXJlciAke3Rva2VuU3RyaW5nfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSB5aWVsZCB0aGlzLnJlcXVlc3Qoe1xuXHRcdFx0XHRcdHBhdGg6IGAvdjEvZ3JhcGhxbGAsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIlBPU1RcIixcblx0XHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiBxdWVyeVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0Ym9keTogcmVxdWVzdFBhcmFtZXRlcnNbXCJib2R5XCJdXG5cdFx0XHRcdH0sIGluaXRPdmVycmlkZXMpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IHJ1bnRpbWUkMy5KU09OQXBpUmVzcG9uc2UocmVzcG9uc2UpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogRXhlY3V0ZSBhIEdyYXBoUUwgcXVlcnlcblx0XHQqL1xuXHRcdGdyYXBocWxTZXJ2ZXIoKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgYXJndW1lbnRzLCB2b2lkIDAsIGZ1bmN0aW9uKiAocmVxdWVzdFBhcmFtZXRlcnMgPSB7fSwgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMuZ3JhcGhxbFNlcnZlclJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykpLnZhbHVlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBIZWFsdGggY2hlY2tcblx0XHQqL1xuXHRcdGhlYWx0aEV4R2V0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJkZWVwXCJdICE9IG51bGwpIHF1ZXJ5UGFyYW1ldGVyc1tcImRlZXBcIl0gPSByZXF1ZXN0UGFyYW1ldGVyc1tcImRlZXBcIl07XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcImxpbWl0X29yZ19zaG9ydF9uYW1lc1wiXSAhPSBudWxsKSBxdWVyeVBhcmFtZXRlcnNbXCJsaW1pdF9vcmdfc2hvcnRfbmFtZXNcIl0gPSByZXF1ZXN0UGFyYW1ldGVyc1tcImxpbWl0X29yZ19zaG9ydF9uYW1lc1wiXTtcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzW1wibGltaXRfcHJvZHVjdHNcIl0gIT0gbnVsbCkgcXVlcnlQYXJhbWV0ZXJzW1wibGltaXRfcHJvZHVjdHNcIl0gPSByZXF1ZXN0UGFyYW1ldGVyc1tcImxpbWl0X3Byb2R1Y3RzXCJdO1xuXHRcdFx0XHRjb25zdCBoZWFkZXJQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL2hlYWx0aGV4YCxcblx0XHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsXG5cdFx0XHRcdFx0aGVhZGVyczogaGVhZGVyUGFyYW1ldGVycyxcblx0XHRcdFx0XHRxdWVyeTogcXVlcnlQYXJhbWV0ZXJzXG5cdFx0XHRcdH0sIGluaXRPdmVycmlkZXMpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IHJ1bnRpbWUkMy5KU09OQXBpUmVzcG9uc2UocmVzcG9uc2UpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogSGVhbHRoIGNoZWNrXG5cdFx0Ki9cblx0XHRoZWFsdGhFeEdldCgpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMyh0aGlzLCBhcmd1bWVudHMsIHZvaWQgMCwgZnVuY3Rpb24qIChyZXF1ZXN0UGFyYW1ldGVycyA9IHt9LCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy5oZWFsdGhFeEdldFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykpLnZhbHVlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBIZWFsdGggY2hlY2tcblx0XHQqL1xuXHRcdGhlYWx0aEdldFJhdyhpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL2hlYWx0aGAsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IHt9LFxuXHRcdFx0XHRcdHF1ZXJ5OiB7fVxuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDMuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIEhlYWx0aCBjaGVja1xuXHRcdCovXG5cdFx0aGVhbHRoR2V0KGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMyh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0cmV0dXJuIHlpZWxkICh5aWVsZCB0aGlzLmhlYWx0aEdldFJhdyhpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIEdldCB0aGUgb3JnYW5pemF0aW9ucyBjb25maWdcblx0XHQqL1xuXHRcdHYxQW5hbHl0aWNzSWRlbnRpZnlQb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRjb25zdCBoZWFkZXJQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGhlYWRlclBhcmFtZXRlcnNbXCJDb250ZW50LVR5cGVcIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcblx0XHRcdFx0aWYgKHRoaXMuY29uZmlndXJhdGlvbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW4pIHtcblx0XHRcdFx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbjtcblx0XHRcdFx0XHRjb25zdCB0b2tlblN0cmluZyA9IHlpZWxkIHRva2VuKFwiYmVhcmVyXCIsIFtdKTtcblx0XHRcdFx0XHRpZiAodG9rZW5TdHJpbmcpIGhlYWRlclBhcmFtZXRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEJlYXJlciAke3Rva2VuU3RyaW5nfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSB5aWVsZCB0aGlzLnJlcXVlc3Qoe1xuXHRcdFx0XHRcdHBhdGg6IGAvdjEvYW5hbHl0aWNzL2lkZW50aWZ5YCxcblx0XHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IGhlYWRlclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0cXVlcnk6IHF1ZXJ5UGFyYW1ldGVycyxcblx0XHRcdFx0XHRib2R5OiAoMCwgaW5kZXhfMSQzLkFuYWx5dGljc0lkZW50aWZ5UmVxdWVzdFRvSlNPTikocmVxdWVzdFBhcmFtZXRlcnNbXCJBbmFseXRpY3NJZGVudGlmeVJlcXVlc3RcIl0pXG5cdFx0XHRcdH0sIGluaXRPdmVycmlkZXMpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IHJ1bnRpbWUkMy5KU09OQXBpUmVzcG9uc2UocmVzcG9uc2UpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogR2V0IHRoZSBvcmdhbml6YXRpb25zIGNvbmZpZ1xuXHRcdCovXG5cdFx0djFBbmFseXRpY3NJZGVudGlmeVBvc3QoKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgYXJndW1lbnRzLCB2b2lkIDAsIGZ1bmN0aW9uKiAocmVxdWVzdFBhcmFtZXRlcnMgPSB7fSwgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMudjFBbmFseXRpY3NJZGVudGlmeVBvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogR2V0IHRoZSBvcmdhbml6YXRpb25zIGNvbmZpZ1xuXHRcdCovXG5cdFx0djFBbmFseXRpY3NUcmFja0V2ZW50UG9zdFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRoZWFkZXJQYXJhbWV0ZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL2FuYWx5dGljcy90cmFja19ldmVudGAsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIlBPU1RcIixcblx0XHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiBxdWVyeVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0Ym9keTogKDAsIGluZGV4XzEkMy5BbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdFRvSlNPTikocmVxdWVzdFBhcmFtZXRlcnNbXCJBbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdFwiXSlcblx0XHRcdFx0fSwgaW5pdE92ZXJyaWRlcyk7XG5cdFx0XHRcdHJldHVybiBuZXcgcnVudGltZSQzLkpTT05BcGlSZXNwb25zZShyZXNwb25zZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBHZXQgdGhlIG9yZ2FuaXphdGlvbnMgY29uZmlnXG5cdFx0Ki9cblx0XHR2MUFuYWx5dGljc1RyYWNrRXZlbnRQb3N0KCkge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIGFyZ3VtZW50cywgdm9pZCAwLCBmdW5jdGlvbiogKHJlcXVlc3RQYXJhbWV0ZXJzID0ge30sIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdFx0cmV0dXJuIHlpZWxkICh5aWVsZCB0aGlzLnYxQW5hbHl0aWNzVHJhY2tFdmVudFBvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogUmVwb3J0IHRoZSBzZXNzaW9uIGFzIGJlaW5nIGEgcHJvYmxlbVxuXHRcdCogUmVwb3J0IFNlc3Npb25cblx0XHQqL1xuXHRcdHYxQ2hhdHNSZXBvcnRTZXNzaW9uSWRQb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRjb25zdCBoZWFkZXJQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGhlYWRlclBhcmFtZXRlcnNbXCJDb250ZW50LVR5cGVcIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcblx0XHRcdFx0aWYgKHRoaXMuY29uZmlndXJhdGlvbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW4pIHtcblx0XHRcdFx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbjtcblx0XHRcdFx0XHRjb25zdCB0b2tlblN0cmluZyA9IHlpZWxkIHRva2VuKFwiYmVhcmVyXCIsIFtdKTtcblx0XHRcdFx0XHRpZiAodG9rZW5TdHJpbmcpIGhlYWRlclBhcmFtZXRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEJlYXJlciAke3Rva2VuU3RyaW5nfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSB5aWVsZCB0aGlzLnJlcXVlc3Qoe1xuXHRcdFx0XHRcdHBhdGg6IGAvdjEvY2hhdHMvcmVwb3J0YCxcblx0XHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IGhlYWRlclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0cXVlcnk6IHF1ZXJ5UGFyYW1ldGVycyxcblx0XHRcdFx0XHRib2R5OiAoMCwgaW5kZXhfMSQzLlJlcG9ydFNlc3Npb25SZXF1ZXN0VG9KU09OKShyZXF1ZXN0UGFyYW1ldGVyc1tcIlJlcG9ydFNlc3Npb25SZXF1ZXN0XCJdKVxuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDMuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIFJlcG9ydCB0aGUgc2Vzc2lvbiBhcyBiZWluZyBhIHByb2JsZW1cblx0XHQqIFJlcG9ydCBTZXNzaW9uXG5cdFx0Ki9cblx0XHR2MUNoYXRzUmVwb3J0U2Vzc2lvbklkUG9zdCgpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMyh0aGlzLCBhcmd1bWVudHMsIHZvaWQgMCwgZnVuY3Rpb24qIChyZXF1ZXN0UGFyYW1ldGVycyA9IHt9LCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy52MUNoYXRzUmVwb3J0U2Vzc2lvbklkUG9zdFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykpLnZhbHVlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBQb3N0IGEgdXNlciBldmVudFxuXHRcdCovXG5cdFx0djFFdmVudFBvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMyh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0Y29uc3QgcXVlcnlQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGNvbnN0IGhlYWRlclBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aGVhZGVyUGFyYW1ldGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xuXHRcdFx0XHRpZiAodGhpcy5jb25maWd1cmF0aW9uICYmIHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbikge1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuO1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuU3RyaW5nID0geWllbGQgdG9rZW4oXCJiZWFyZXJcIiwgW10pO1xuXHRcdFx0XHRcdGlmICh0b2tlblN0cmluZykgaGVhZGVyUGFyYW1ldGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQmVhcmVyICR7dG9rZW5TdHJpbmd9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdCh7XG5cdFx0XHRcdFx0cGF0aDogYC92MS9ldmVudGAsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIlBPU1RcIixcblx0XHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiBxdWVyeVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0Ym9keTogKDAsIGluZGV4XzEkMy5Vc2VyRXZlbnRUb0pTT04pKHJlcXVlc3RQYXJhbWV0ZXJzW1wiVXNlckV2ZW50XCJdKVxuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDMuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIFBvc3QgYSB1c2VyIGV2ZW50XG5cdFx0Ki9cblx0XHR2MUV2ZW50UG9zdCgpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMyh0aGlzLCBhcmd1bWVudHMsIHZvaWQgMCwgZnVuY3Rpb24qIChyZXF1ZXN0UGFyYW1ldGVycyA9IHt9LCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy52MUV2ZW50UG9zdFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykpLnZhbHVlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBHZXQgbWVzc2FnZXMgZm9yIGFuIGFjdGl2ZSBjaGF0IHNlc3Npb24uXG5cdFx0Ki9cblx0XHR2MUdldFNlc3Npb25NZXNzYWdlc1JhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJvcmdfaWRcIl0gPT0gbnVsbCkgdGhyb3cgbmV3IHJ1bnRpbWUkMy5SZXF1aXJlZEVycm9yKFwib3JnX2lkXCIsIFwiUmVxdWlyZWQgcGFyYW1ldGVyIFxcXCJvcmdfaWRcXFwiIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgdjFHZXRTZXNzaW9uTWVzc2FnZXMoKS5cIik7XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcInVzZXJfaWRcIl0gPT0gbnVsbCkgdGhyb3cgbmV3IHJ1bnRpbWUkMy5SZXF1aXJlZEVycm9yKFwidXNlcl9pZFwiLCBcIlJlcXVpcmVkIHBhcmFtZXRlciBcXFwidXNlcl9pZFxcXCIgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyB2MUdldFNlc3Npb25NZXNzYWdlcygpLlwiKTtcblx0XHRcdFx0Y29uc3QgcXVlcnlQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcIm9yZ19pZFwiXSAhPSBudWxsKSBxdWVyeVBhcmFtZXRlcnNbXCJvcmdfaWRcIl0gPSByZXF1ZXN0UGFyYW1ldGVyc1tcIm9yZ19pZFwiXTtcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzW1wiY2hhdF9pZFwiXSAhPSBudWxsKSBxdWVyeVBhcmFtZXRlcnNbXCJjaGF0X2lkXCJdID0gcmVxdWVzdFBhcmFtZXRlcnNbXCJjaGF0X2lkXCJdO1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJ1c2VyX2lkXCJdICE9IG51bGwpIHF1ZXJ5UGFyYW1ldGVyc1tcInVzZXJfaWRcIl0gPSByZXF1ZXN0UGFyYW1ldGVyc1tcInVzZXJfaWRcIl07XG5cdFx0XHRcdGNvbnN0IGhlYWRlclBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aWYgKHRoaXMuY29uZmlndXJhdGlvbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW4pIHtcblx0XHRcdFx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbjtcblx0XHRcdFx0XHRjb25zdCB0b2tlblN0cmluZyA9IHlpZWxkIHRva2VuKFwiYmVhcmVyXCIsIFtdKTtcblx0XHRcdFx0XHRpZiAodG9rZW5TdHJpbmcpIGhlYWRlclBhcmFtZXRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEJlYXJlciAke3Rva2VuU3RyaW5nfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSB5aWVsZCB0aGlzLnJlcXVlc3Qoe1xuXHRcdFx0XHRcdHBhdGg6IGAvdjEvc2Vzc2lvbi9tZXNzYWdlc2AsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IGhlYWRlclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0cXVlcnk6IHF1ZXJ5UGFyYW1ldGVyc1xuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDMuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlLCAoanNvblZhbHVlKSA9PiAoMCwgaW5kZXhfMSQzLlYxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2VGcm9tSlNPTikoanNvblZhbHVlKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBHZXQgbWVzc2FnZXMgZm9yIGFuIGFjdGl2ZSBjaGF0IHNlc3Npb24uXG5cdFx0Ki9cblx0XHR2MUdldFNlc3Npb25NZXNzYWdlcyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMudjFHZXRTZXNzaW9uTWVzc2FnZXNSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogR2V0IHRoZSBvcmdhbml6YXRpb25zIGNvbmZpZ1xuXHRcdCovXG5cdFx0djFPcmdDb25maWdHZXRSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMyh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0Y29uc3QgcXVlcnlQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcIm5hbWVzcGFjZVwiXSAhPSBudWxsKSBxdWVyeVBhcmFtZXRlcnNbXCJuYW1lc3BhY2VcIl0gPSByZXF1ZXN0UGFyYW1ldGVyc1tcIm5hbWVzcGFjZVwiXTtcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzW1wic291cmNlXCJdICE9IG51bGwpIHF1ZXJ5UGFyYW1ldGVyc1tcInNvdXJjZVwiXSA9IHJlcXVlc3RQYXJhbWV0ZXJzW1wic291cmNlXCJdO1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJ1c2VyX2lkXCJdICE9IG51bGwpIHF1ZXJ5UGFyYW1ldGVyc1tcInVzZXJfaWRcIl0gPSByZXF1ZXN0UGFyYW1ldGVyc1tcInVzZXJfaWRcIl07XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcImluY2x1ZGVfZXhwZXJpbWVudHNcIl0gIT0gbnVsbCkgcXVlcnlQYXJhbWV0ZXJzW1wiaW5jbHVkZV9leHBlcmltZW50c1wiXSA9IHJlcXVlc3RQYXJhbWV0ZXJzW1wiaW5jbHVkZV9leHBlcmltZW50c1wiXTtcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzW1wiaW5jbHVkZV9mZWF0dXJlX2dhdGVzXCJdICE9IG51bGwpIHF1ZXJ5UGFyYW1ldGVyc1tcImluY2x1ZGVfZmVhdHVyZV9nYXRlc1wiXSA9IHJlcXVlc3RQYXJhbWV0ZXJzW1wiaW5jbHVkZV9mZWF0dXJlX2dhdGVzXCJdO1xuXHRcdFx0XHRjb25zdCBoZWFkZXJQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL29yZy9jb25maWdgLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcblx0XHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiBxdWVyeVBhcmFtZXRlcnNcblx0XHRcdFx0fSwgaW5pdE92ZXJyaWRlcyk7XG5cdFx0XHRcdHJldHVybiBuZXcgcnVudGltZSQzLkpTT05BcGlSZXNwb25zZShyZXNwb25zZSwgKGpzb25WYWx1ZSkgPT4gKDAsIGluZGV4XzEkMy5Pcmdhbml6YXRpb25Db25maWdSZXN1bHRzRnJvbUpTT04pKGpzb25WYWx1ZSkpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogR2V0IHRoZSBvcmdhbml6YXRpb25zIGNvbmZpZ1xuXHRcdCovXG5cdFx0djFPcmdDb25maWdHZXQoKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgYXJndW1lbnRzLCB2b2lkIDAsIGZ1bmN0aW9uKiAocmVxdWVzdFBhcmFtZXRlcnMgPSB7fSwgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMudjFPcmdDb25maWdHZXRSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogR2V0IHRoZSBvcmdhbml6YXRpb24gYW5kIGl0cyBzZXR0aW5ncyBnaXZlbiBhbiBBUEkga2V5XG5cdFx0Ki9cblx0XHR2MU9yZ0dldFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJrZXlcIl0gPT0gbnVsbCkgdGhyb3cgbmV3IHJ1bnRpbWUkMy5SZXF1aXJlZEVycm9yKFwia2V5XCIsIFwiUmVxdWlyZWQgcGFyYW1ldGVyIFxcXCJrZXlcXFwiIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgdjFPcmdHZXQoKS5cIik7XG5cdFx0XHRcdGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJrZXlcIl0gIT0gbnVsbCkgcXVlcnlQYXJhbWV0ZXJzW1wia2V5XCJdID0gcmVxdWVzdFBhcmFtZXRlcnNbXCJrZXlcIl07XG5cdFx0XHRcdGNvbnN0IGhlYWRlclBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aWYgKHRoaXMuY29uZmlndXJhdGlvbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW4pIHtcblx0XHRcdFx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbjtcblx0XHRcdFx0XHRjb25zdCB0b2tlblN0cmluZyA9IHlpZWxkIHRva2VuKFwiYmVhcmVyXCIsIFtdKTtcblx0XHRcdFx0XHRpZiAodG9rZW5TdHJpbmcpIGhlYWRlclBhcmFtZXRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEJlYXJlciAke3Rva2VuU3RyaW5nfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSB5aWVsZCB0aGlzLnJlcXVlc3Qoe1xuXHRcdFx0XHRcdHBhdGg6IGAvdjEvb3JnYCxcblx0XHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsXG5cdFx0XHRcdFx0aGVhZGVyczogaGVhZGVyUGFyYW1ldGVycyxcblx0XHRcdFx0XHRxdWVyeTogcXVlcnlQYXJhbWV0ZXJzXG5cdFx0XHRcdH0sIGluaXRPdmVycmlkZXMpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IHJ1bnRpbWUkMy5KU09OQXBpUmVzcG9uc2UocmVzcG9uc2UsIChqc29uVmFsdWUpID0+ICgwLCBpbmRleF8xJDMuT3JnYW5pemF0aW9uU2V0dGluZ3NGcm9tSlNPTikoanNvblZhbHVlKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBHZXQgdGhlIG9yZ2FuaXphdGlvbiBhbmQgaXRzIHNldHRpbmdzIGdpdmVuIGFuIEFQSSBrZXlcblx0XHQqL1xuXHRcdHYxT3JnR2V0KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy52MU9yZ0dldFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykpLnZhbHVlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBFeHBsYWluIHdoeSBhIHByb2R1Y3Qgd2FzIHJlY29tbWVuZGVkLlxuXHRcdCovXG5cdFx0djFTZWFyY2hFeHBsYWluR2V0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcIm9yZ19pZFwiXSA9PSBudWxsKSB0aHJvdyBuZXcgcnVudGltZSQzLlJlcXVpcmVkRXJyb3IoXCJvcmdfaWRcIiwgXCJSZXF1aXJlZCBwYXJhbWV0ZXIgXFxcIm9yZ19pZFxcXCIgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyB2MVNlYXJjaEV4cGxhaW5HZXQoKS5cIik7XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcImNoYXRfaWRcIl0gPT0gbnVsbCkgdGhyb3cgbmV3IHJ1bnRpbWUkMy5SZXF1aXJlZEVycm9yKFwiY2hhdF9pZFwiLCBcIlJlcXVpcmVkIHBhcmFtZXRlciBcXFwiY2hhdF9pZFxcXCIgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyB2MVNlYXJjaEV4cGxhaW5HZXQoKS5cIik7XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcInByb2R1Y3RfaWRcIl0gPT0gbnVsbCkgdGhyb3cgbmV3IHJ1bnRpbWUkMy5SZXF1aXJlZEVycm9yKFwicHJvZHVjdF9pZFwiLCBcIlJlcXVpcmVkIHBhcmFtZXRlciBcXFwicHJvZHVjdF9pZFxcXCIgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyB2MVNlYXJjaEV4cGxhaW5HZXQoKS5cIik7XG5cdFx0XHRcdGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJvcmdfaWRcIl0gIT0gbnVsbCkgcXVlcnlQYXJhbWV0ZXJzW1wib3JnX2lkXCJdID0gcmVxdWVzdFBhcmFtZXRlcnNbXCJvcmdfaWRcIl07XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcImNoYXRfaWRcIl0gIT0gbnVsbCkgcXVlcnlQYXJhbWV0ZXJzW1wiY2hhdF9pZFwiXSA9IHJlcXVlc3RQYXJhbWV0ZXJzW1wiY2hhdF9pZFwiXTtcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzW1wicHJvZHVjdF9pZFwiXSAhPSBudWxsKSBxdWVyeVBhcmFtZXRlcnNbXCJwcm9kdWN0X2lkXCJdID0gcmVxdWVzdFBhcmFtZXRlcnNbXCJwcm9kdWN0X2lkXCJdO1xuXHRcdFx0XHRjb25zdCBoZWFkZXJQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL3NlYXJjaC9leHBsYWluYCxcblx0XHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsXG5cdFx0XHRcdFx0aGVhZGVyczogaGVhZGVyUGFyYW1ldGVycyxcblx0XHRcdFx0XHRxdWVyeTogcXVlcnlQYXJhbWV0ZXJzXG5cdFx0XHRcdH0sIGluaXRPdmVycmlkZXMpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IHJ1bnRpbWUkMy5KU09OQXBpUmVzcG9uc2UocmVzcG9uc2UsIChqc29uVmFsdWUpID0+ICgwLCBpbmRleF8xJDMuVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2VGcm9tSlNPTikoanNvblZhbHVlKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBFeHBsYWluIHdoeSBhIHByb2R1Y3Qgd2FzIHJlY29tbWVuZGVkLlxuXHRcdCovXG5cdFx0djFTZWFyY2hFeHBsYWluR2V0KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy52MVNlYXJjaEV4cGxhaW5HZXRSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xuXHRleHBvcnRzLkRlZmF1bHRBcGkgPSBEZWZhdWx0QXBpO1xuXHQvKipcblx0KiBAZXhwb3J0XG5cdCogQGVudW0ge3N0cmluZ31cblx0Ki9cblx0dmFyIFYxT3JnQ29uZmlnR2V0U291cmNlRW51bTtcblx0KGZ1bmN0aW9uKFYxT3JnQ29uZmlnR2V0U291cmNlRW51bSQxKSB7XG5cdFx0VjFPcmdDb25maWdHZXRTb3VyY2VFbnVtJDFbXCJGb3JrXCJdID0gXCJmb3JrXCI7XG5cdFx0VjFPcmdDb25maWdHZXRTb3VyY2VFbnVtJDFbXCJQbGF5Z3JvdW5kXCJdID0gXCJwbGF5Z3JvdW5kXCI7XG5cdFx0VjFPcmdDb25maWdHZXRTb3VyY2VFbnVtJDFbXCJBcHBcIl0gPSBcImFwcFwiO1xuXHRcdFYxT3JnQ29uZmlnR2V0U291cmNlRW51bSQxW1wiVGVzdFwiXSA9IFwidGVzdFwiO1xuXHR9KShWMU9yZ0NvbmZpZ0dldFNvdXJjZUVudW0gfHwgKGV4cG9ydHMuVjFPcmdDb25maWdHZXRTb3VyY2VFbnVtID0gVjFPcmdDb25maWdHZXRTb3VyY2VFbnVtID0ge30pKTtcbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvYXBpcy9JbmZlcmVuY2VBcGkuanNcbnZhciByZXF1aXJlX0luZmVyZW5jZUFwaSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvYXBpcy9JbmZlcmVuY2VBcGkuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHR2YXIgX19hd2FpdGVyJDIgPSBleHBvcnRzICYmIGV4cG9ydHMuX19hd2FpdGVyIHx8IGZ1bmN0aW9uKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuXHRcdGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbihyZXNvbHZlKSB7XG5cdFx0XHRcdHJlc29sdmUodmFsdWUpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0c3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmdW5jdGlvbiBzdGVwKHJlc3VsdCkge1xuXHRcdFx0XHRyZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTtcblx0XHRcdH1cblx0XHRcdHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcblx0XHR9KTtcblx0fTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLkluZmVyZW5jZUFwaSA9IHZvaWQgMDtcblx0Y29uc3QgcnVudGltZSQyID0gcmVxdWlyZV9ydW50aW1lKCk7XG5cdGNvbnN0IGluZGV4XzEkMiA9IHJlcXVpcmVfbW9kZWxzKCk7XG5cdC8qKlxuXHQqXG5cdCovXG5cdHZhciBJbmZlcmVuY2VBcGkgPSBjbGFzcyBleHRlbmRzIHJ1bnRpbWUkMi5CYXNlQVBJIHtcblx0XHQvKipcblx0XHQqIFJlc3BvbnNlIGZvciBhIHVzZXIgaW50ZXJhY3Rpb25cblx0XHQqL1xuXHRcdHYxTmV4dFJlc3BvbnNlc1Bvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0Y29uc3QgcXVlcnlQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGNvbnN0IGhlYWRlclBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aGVhZGVyUGFyYW1ldGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xuXHRcdFx0XHRpZiAodGhpcy5jb25maWd1cmF0aW9uICYmIHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbikge1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuO1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuU3RyaW5nID0geWllbGQgdG9rZW4oXCJiZWFyZXJcIiwgW10pO1xuXHRcdFx0XHRcdGlmICh0b2tlblN0cmluZykgaGVhZGVyUGFyYW1ldGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQmVhcmVyICR7dG9rZW5TdHJpbmd9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdCh7XG5cdFx0XHRcdFx0cGF0aDogYC92MS9uZXh0X3Jlc3BvbnNlc2AsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIlBPU1RcIixcblx0XHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiBxdWVyeVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0Ym9keTogKDAsIGluZGV4XzEkMi5OZXh0TWVzc2FnZVJlcXVlc3RUb0pTT04pKHJlcXVlc3RQYXJhbWV0ZXJzW1wiTmV4dE1lc3NhZ2VSZXF1ZXN0XCJdKVxuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDIuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlLCAoanNvblZhbHVlKSA9PiBqc29uVmFsdWUubWFwKGluZGV4XzEkMi5SZXNwb25zZUZyb21KU09OKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBSZXNwb25zZSBmb3IgYSB1c2VyIGludGVyYWN0aW9uXG5cdFx0Ki9cblx0XHR2MU5leHRSZXNwb25zZXNQb3N0KCkge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQyKHRoaXMsIGFyZ3VtZW50cywgdm9pZCAwLCBmdW5jdGlvbiogKHJlcXVlc3RQYXJhbWV0ZXJzID0ge30sIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdFx0cmV0dXJuIHlpZWxkICh5aWVsZCB0aGlzLnYxTmV4dFJlc3BvbnNlc1Bvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogU3VnZ2VzdGlvbnNcblx0XHQqL1xuXHRcdHYxTmV4dFN1Z2dlc3Rpb25zUG9zdFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRoZWFkZXJQYXJhbWV0ZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL25leHRfc3VnZ2VzdGlvbnNgLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJQT1NUXCIsXG5cdFx0XHRcdFx0aGVhZGVyczogaGVhZGVyUGFyYW1ldGVycyxcblx0XHRcdFx0XHRxdWVyeTogcXVlcnlQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGJvZHk6ICgwLCBpbmRleF8xJDIuTmV4dE1lc3NhZ2VSZXF1ZXN0VG9KU09OKShyZXF1ZXN0UGFyYW1ldGVyc1tcIk5leHRNZXNzYWdlUmVxdWVzdFwiXSlcblx0XHRcdFx0fSwgaW5pdE92ZXJyaWRlcyk7XG5cdFx0XHRcdHJldHVybiBuZXcgcnVudGltZSQyLkpTT05BcGlSZXNwb25zZShyZXNwb25zZSwgKGpzb25WYWx1ZSkgPT4ganNvblZhbHVlLm1hcChpbmRleF8xJDIuU3VnZ2VzdGlvbkZyb21KU09OKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBTdWdnZXN0aW9uc1xuXHRcdCovXG5cdFx0djFOZXh0U3VnZ2VzdGlvbnNQb3N0KCkge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQyKHRoaXMsIGFyZ3VtZW50cywgdm9pZCAwLCBmdW5jdGlvbiogKHJlcXVlc3RQYXJhbWV0ZXJzID0ge30sIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdFx0cmV0dXJuIHlpZWxkICh5aWVsZCB0aGlzLnYxTmV4dFN1Z2dlc3Rpb25zUG9zdFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykpLnZhbHVlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBDaGVjayB3aGV0aGVyIHRoZSBldmVudCBpcyBzdXBwb3J0ZWRcblx0XHQqL1xuXHRcdHYxU3VwcG9ydGVkRXZlbnRQb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRjb25zdCBoZWFkZXJQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGhlYWRlclBhcmFtZXRlcnNbXCJDb250ZW50LVR5cGVcIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcblx0XHRcdFx0aWYgKHRoaXMuY29uZmlndXJhdGlvbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW4pIHtcblx0XHRcdFx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbjtcblx0XHRcdFx0XHRjb25zdCB0b2tlblN0cmluZyA9IHlpZWxkIHRva2VuKFwiYmVhcmVyXCIsIFtdKTtcblx0XHRcdFx0XHRpZiAodG9rZW5TdHJpbmcpIGhlYWRlclBhcmFtZXRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEJlYXJlciAke3Rva2VuU3RyaW5nfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSB5aWVsZCB0aGlzLnJlcXVlc3Qoe1xuXHRcdFx0XHRcdHBhdGg6IGAvdjEvc3VwcG9ydGVkX2V2ZW50YCxcblx0XHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IGhlYWRlclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0cXVlcnk6IHF1ZXJ5UGFyYW1ldGVycyxcblx0XHRcdFx0XHRib2R5OiAoMCwgaW5kZXhfMSQyLlN1cHBvcnRlZEV2ZW50UmVxdWVzdFRvSlNPTikocmVxdWVzdFBhcmFtZXRlcnNbXCJTdXBwb3J0ZWRFdmVudFJlcXVlc3RcIl0pXG5cdFx0XHRcdH0sIGluaXRPdmVycmlkZXMpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IHJ1bnRpbWUkMi5KU09OQXBpUmVzcG9uc2UocmVzcG9uc2UsIChqc29uVmFsdWUpID0+ICgwLCBpbmRleF8xJDIuU3VwcG9ydGVkRXZlbnRSZXNwb25zZUZyb21KU09OKShqc29uVmFsdWUpKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIENoZWNrIHdoZXRoZXIgdGhlIGV2ZW50IGlzIHN1cHBvcnRlZFxuXHRcdCovXG5cdFx0djFTdXBwb3J0ZWRFdmVudFBvc3QoKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDIodGhpcywgYXJndW1lbnRzLCB2b2lkIDAsIGZ1bmN0aW9uKiAocmVxdWVzdFBhcmFtZXRlcnMgPSB7fSwgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMudjFTdXBwb3J0ZWRFdmVudFBvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogUmVzb2x2ZSBhIFVSTCB0byBhIHBhZ2UgdHlwZSBhbmQgZ2V0IGNvbmZpZ3VyYXRpb25cblx0XHQqL1xuXHRcdHYxVXJsUmVzb2x2aW5nUG9zdFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRoZWFkZXJQYXJhbWV0ZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL3VybF9yZXNvbHZpbmdgLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJQT1NUXCIsXG5cdFx0XHRcdFx0aGVhZGVyczogaGVhZGVyUGFyYW1ldGVycyxcblx0XHRcdFx0XHRxdWVyeTogcXVlcnlQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGJvZHk6ICgwLCBpbmRleF8xJDIuVXJsUmVzb2x2aW5nUmVxdWVzdFRvSlNPTikocmVxdWVzdFBhcmFtZXRlcnNbXCJVcmxSZXNvbHZpbmdSZXF1ZXN0XCJdKVxuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDIuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlLCAoanNvblZhbHVlKSA9PiAoMCwgaW5kZXhfMSQyLlVybFJlc29sdmluZ1Jlc3BvbnNlRnJvbUpTT04pKGpzb25WYWx1ZSkpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogUmVzb2x2ZSBhIFVSTCB0byBhIHBhZ2UgdHlwZSBhbmQgZ2V0IGNvbmZpZ3VyYXRpb25cblx0XHQqL1xuXHRcdHYxVXJsUmVzb2x2aW5nUG9zdCgpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMih0aGlzLCBhcmd1bWVudHMsIHZvaWQgMCwgZnVuY3Rpb24qIChyZXF1ZXN0UGFyYW1ldGVycyA9IHt9LCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy52MVVybFJlc29sdmluZ1Bvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xuXHRleHBvcnRzLkluZmVyZW5jZUFwaSA9IEluZmVyZW5jZUFwaTtcbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvYXBpcy9Qcm9kdWN0c0FwaS5qc1xudmFyIHJlcXVpcmVfUHJvZHVjdHNBcGkgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L2FwaXMvUHJvZHVjdHNBcGkuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHR2YXIgX19hd2FpdGVyJDEgPSBleHBvcnRzICYmIGV4cG9ydHMuX19hd2FpdGVyIHx8IGZ1bmN0aW9uKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuXHRcdGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbihyZXNvbHZlKSB7XG5cdFx0XHRcdHJlc29sdmUodmFsdWUpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0c3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmdW5jdGlvbiBzdGVwKHJlc3VsdCkge1xuXHRcdFx0XHRyZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTtcblx0XHRcdH1cblx0XHRcdHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcblx0XHR9KTtcblx0fTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLlByb2R1Y3RzQXBpID0gdm9pZCAwO1xuXHRjb25zdCBydW50aW1lJDEgPSByZXF1aXJlX3J1bnRpbWUoKTtcblx0Y29uc3QgaW5kZXhfMSQxID0gcmVxdWlyZV9tb2RlbHMoKTtcblx0LyoqXG5cdCpcblx0Ki9cblx0dmFyIFByb2R1Y3RzQXBpID0gY2xhc3MgZXh0ZW5kcyBydW50aW1lJDEuQmFzZUFQSSB7XG5cdFx0LyoqXG5cdFx0KiBSZXRyaWV2ZSBwcm9kdWN0c1xuXHRcdCovXG5cdFx0djFQcm9kdWN0c1JldHJpZXZlUG9zdFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQxKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRoZWFkZXJQYXJhbWV0ZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL3Byb2R1Y3RzL3JldHJpZXZlYCxcblx0XHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IGhlYWRlclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0cXVlcnk6IHF1ZXJ5UGFyYW1ldGVycyxcblx0XHRcdFx0XHRib2R5OiAoMCwgaW5kZXhfMSQxLlByb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0VG9KU09OKShyZXF1ZXN0UGFyYW1ldGVyc1tcIlByb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0XCJdKVxuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDEuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlLCAoanNvblZhbHVlKSA9PiAoMCwgaW5kZXhfMSQxLlByb2R1Y3RSZXRyaWV2YWxSZXNwb25zZUZyb21KU09OKShqc29uVmFsdWUpKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIFJldHJpZXZlIHByb2R1Y3RzXG5cdFx0Ki9cblx0XHR2MVByb2R1Y3RzUmV0cmlldmVQb3N0KCkge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQxKHRoaXMsIGFyZ3VtZW50cywgdm9pZCAwLCBmdW5jdGlvbiogKHJlcXVlc3RQYXJhbWV0ZXJzID0ge30sIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdFx0cmV0dXJuIHlpZWxkICh5aWVsZCB0aGlzLnYxUHJvZHVjdHNSZXRyaWV2ZVBvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xuXHRleHBvcnRzLlByb2R1Y3RzQXBpID0gUHJvZHVjdHNBcGk7XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L2FwaXMvU2VhcmNoQXBpLmpzXG52YXIgcmVxdWlyZV9TZWFyY2hBcGkgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L2FwaXMvU2VhcmNoQXBpLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0dmFyIF9fYXdhaXRlciA9IGV4cG9ydHMgJiYgZXhwb3J0cy5fX2F3YWl0ZXIgfHwgZnVuY3Rpb24odGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG5cdFx0ZnVuY3Rpb24gYWRvcHQodmFsdWUpIHtcblx0XHRcdHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uKHJlc29sdmUpIHtcblx0XHRcdFx0cmVzb2x2ZSh2YWx1ZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcblx0XHRcdGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7XG5cdFx0XHRcdHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpO1xuXHRcdFx0fVxuXHRcdFx0c3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuXHRcdH0pO1xuXHR9O1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuU2VhcmNoQXBpID0gdm9pZCAwO1xuXHRjb25zdCBydW50aW1lID0gcmVxdWlyZV9ydW50aW1lKCk7XG5cdGNvbnN0IGluZGV4XzEgPSByZXF1aXJlX21vZGVscygpO1xuXHQvKipcblx0KlxuXHQqL1xuXHR2YXIgU2VhcmNoQXBpID0gY2xhc3MgZXh0ZW5kcyBydW50aW1lLkJhc2VBUEkge1xuXHRcdC8qKlxuXHRcdCovXG5cdFx0djFTZWFyY2hRdWVyeUdldFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzW1wicXVlcnlcIl0gPT0gbnVsbCkgdGhyb3cgbmV3IHJ1bnRpbWUuUmVxdWlyZWRFcnJvcihcInF1ZXJ5XCIsIFwiUmVxdWlyZWQgcGFyYW1ldGVyIFxcXCJxdWVyeVxcXCIgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyB2MVNlYXJjaFF1ZXJ5R2V0KCkuXCIpO1xuXHRcdFx0XHRjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzW1wicXVlcnlcIl0gIT0gbnVsbCkgcXVlcnlQYXJhbWV0ZXJzW1wicXVlcnlcIl0gPSByZXF1ZXN0UGFyYW1ldGVyc1tcInF1ZXJ5XCJdO1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJsaW1pdFwiXSAhPSBudWxsKSBxdWVyeVBhcmFtZXRlcnNbXCJsaW1pdFwiXSA9IHJlcXVlc3RQYXJhbWV0ZXJzW1wibGltaXRcIl07XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcInVzZXJfaWRcIl0gIT0gbnVsbCkgcXVlcnlQYXJhbWV0ZXJzW1widXNlcl9pZFwiXSA9IHJlcXVlc3RQYXJhbWV0ZXJzW1widXNlcl9pZFwiXTtcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzW1wib3JnX2lkXCJdICE9IG51bGwpIHF1ZXJ5UGFyYW1ldGVyc1tcIm9yZ19pZFwiXSA9IHJlcXVlc3RQYXJhbWV0ZXJzW1wib3JnX2lkXCJdO1xuXHRcdFx0XHRjb25zdCBoZWFkZXJQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL3NlYXJjaC9xdWVyeWAsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IGhlYWRlclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0cXVlcnk6IHF1ZXJ5UGFyYW1ldGVyc1xuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lLkpTT05BcGlSZXNwb25zZShyZXNwb25zZSwgKGpzb25WYWx1ZSkgPT4gKDAsIGluZGV4XzEuUHJvZHVjdFNlYXJjaFJlc3BvbnNlRnJvbUpTT04pKGpzb25WYWx1ZSkpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCovXG5cdFx0djFTZWFyY2hRdWVyeUdldChyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0cmV0dXJuIHlpZWxkICh5aWVsZCB0aGlzLnYxU2VhcmNoUXVlcnlHZXRSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCovXG5cdFx0djFTZWFyY2hTdWdnZXN0aW9uc0dldFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0Y29uc3QgcXVlcnlQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcIm9yZ19pZFwiXSAhPSBudWxsKSBxdWVyeVBhcmFtZXRlcnNbXCJvcmdfaWRcIl0gPSByZXF1ZXN0UGFyYW1ldGVyc1tcIm9yZ19pZFwiXTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRpZiAodGhpcy5jb25maWd1cmF0aW9uICYmIHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbikge1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuO1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuU3RyaW5nID0geWllbGQgdG9rZW4oXCJiZWFyZXJcIiwgW10pO1xuXHRcdFx0XHRcdGlmICh0b2tlblN0cmluZykgaGVhZGVyUGFyYW1ldGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQmVhcmVyICR7dG9rZW5TdHJpbmd9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdCh7XG5cdFx0XHRcdFx0cGF0aDogYC92MS9zZWFyY2gvc3VnZ2VzdGlvbnNgLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcblx0XHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiBxdWVyeVBhcmFtZXRlcnNcblx0XHRcdFx0fSwgaW5pdE92ZXJyaWRlcyk7XG5cdFx0XHRcdHJldHVybiBuZXcgcnVudGltZS5KU09OQXBpUmVzcG9uc2UocmVzcG9uc2UsIChqc29uVmFsdWUpID0+ICgwLCBpbmRleF8xLlNlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2VGcm9tSlNPTikoanNvblZhbHVlKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0Ki9cblx0XHR2MVNlYXJjaFN1Z2dlc3Rpb25zR2V0KCkge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlcih0aGlzLCBhcmd1bWVudHMsIHZvaWQgMCwgZnVuY3Rpb24qIChyZXF1ZXN0UGFyYW1ldGVycyA9IHt9LCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy52MVNlYXJjaFN1Z2dlc3Rpb25zR2V0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblx0ZXhwb3J0cy5TZWFyY2hBcGkgPSBTZWFyY2hBcGk7XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L2FwaXMvaW5kZXguanNcbnZhciByZXF1aXJlX2FwaXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L2FwaXMvaW5kZXguanNcIjogKChleHBvcnRzKSA9PiB7XG5cdHZhciBfX2NyZWF0ZUJpbmRpbmckMSA9IGV4cG9ydHMgJiYgZXhwb3J0cy5fX2NyZWF0ZUJpbmRpbmcgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcblx0XHRpZiAoazIgPT09IHZvaWQgMCkgazIgPSBrO1xuXHRcdHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcblx0XHRpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkgZGVzYyA9IHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbVtrXTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG5cdH0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG5cdFx0aWYgKGsyID09PSB2b2lkIDApIGsyID0gaztcblx0XHRvW2syXSA9IG1ba107XG5cdH0pKTtcblx0dmFyIF9fZXhwb3J0U3RhciQxID0gZXhwb3J0cyAmJiBleHBvcnRzLl9fZXhwb3J0U3RhciB8fCBmdW5jdGlvbihtLCBleHBvcnRzJDEpIHtcblx0XHRmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMkMSwgcCkpIF9fY3JlYXRlQmluZGluZyQxKGV4cG9ydHMkMSwgbSwgcCk7XG5cdH07XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0X19leHBvcnRTdGFyJDEocmVxdWlyZV9DdXN0b21lclNlcnZpY2VBcGkoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQxKHJlcXVpcmVfRGVmYXVsdEFwaSgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDEocmVxdWlyZV9JbmZlcmVuY2VBcGkoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQxKHJlcXVpcmVfUHJvZHVjdHNBcGkoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQxKHJlcXVpcmVfU2VhcmNoQXBpKCksIGV4cG9ydHMpO1xufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9pbmRleC5qc1xudmFyIHJlcXVpcmVfZGlzdCA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvaW5kZXguanNcIjogKChleHBvcnRzKSA9PiB7XG5cdHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBleHBvcnRzICYmIGV4cG9ydHMuX19jcmVhdGVCaW5kaW5nIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG5cdFx0aWYgKGsyID09PSB2b2lkIDApIGsyID0gaztcblx0XHR2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG5cdFx0aWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIGRlc2MgPSB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1ba107XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xuXHR9KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuXHRcdGlmIChrMiA9PT0gdm9pZCAwKSBrMiA9IGs7XG5cdFx0b1trMl0gPSBtW2tdO1xuXHR9KSk7XG5cdHZhciBfX2V4cG9ydFN0YXIgPSBleHBvcnRzICYmIGV4cG9ydHMuX19leHBvcnRTdGFyIHx8IGZ1bmN0aW9uKG0sIGV4cG9ydHMkMSkge1xuXHRcdGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cyQxLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMkMSwgbSwgcCk7XG5cdH07XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0X19leHBvcnRTdGFyKHJlcXVpcmVfcnVudGltZSgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyKHJlcXVpcmVfYXBpcygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyKHJlcXVpcmVfbW9kZWxzKCksIGV4cG9ydHMpO1xufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9jb21tZXJjZS1hcGkvaW5kZXgudHNcbnZhciBpbXBvcnRfZGlzdCA9IC8qIEBfX1BVUkVfXyAqLyBfX3RvRVNNKHJlcXVpcmVfZGlzdCgpLCAxKTtcblxuLy8jZW5kcmVnaW9uXG52YXIgQXBpQ29udGV4dEVudkVudW0gPSBpbXBvcnRfZGlzdC5Db250ZXh0RW52RW51bTtcbnZhciBBcGlDb250ZXh0U291cmNlRW51bSA9IGltcG9ydF9kaXN0LkNvbnRleHRTb3VyY2VFbnVtO1xudmFyIEFwaUN1c3RTZXJ2aWNlQXR0YWNobWVudCA9IGltcG9ydF9kaXN0LkN1c3RTZXJ2aWNlQXR0YWNobWVudDtcbnZhciBBcGlGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5ID0gaW1wb3J0X2Rpc3QuRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeTtcbnZhciBBcGlGb3JtVHlwZSA9IGltcG9ydF9kaXN0LkZvcm1UeXBlO1xudmFyIEFwaUZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyA9IGltcG9ydF9kaXN0LkZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cztcbnZhciBBcGlHZW5lcmF0aW9uUGFyYW1zID0gaW1wb3J0X2Rpc3QuR2VuZXJhdGlvblBhcmFtcztcbnZhciBBcGlPcmdDb25maWdFeHBlcmltZW50ID0gaW1wb3J0X2Rpc3QuU3RhdHNpZ0V4cGVyaW1lbnQ7XG52YXIgQXBpT3JnQ29uZmlnRmVhdHVyZUdhdGUgPSBpbXBvcnRfZGlzdC5TdGF0c2lnRmVhdHVyZUdhdGU7XG52YXIgQXBpT3JnQ29uZmlnT3JnYW5pemF0aW9uU2V0dGluZ3MgPSBpbXBvcnRfZGlzdC5Pcmdhbml6YXRpb25TZXR0aW5ncztcbnZhciBBcGlQRFBBdHRyaWJ1dGVzID0gaW1wb3J0X2Rpc3QuUERQQXR0cmlidXRlcztcbnZhciBBcGlQTFBBdHRyaWJ1dGVzID0gaW1wb3J0X2Rpc3QuUExQQXR0cmlidXRlcztcbnZhciBBcGlQYWdlVmlzaXRDYXRlZ29yeSA9IGltcG9ydF9kaXN0LlBhZ2VWaXNpdENhdGVnb3J5O1xudmFyIEFwaVByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXMgPSBpbXBvcnRfZGlzdC5SZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzO1xudmFyIEFwaVByb2R1Y3RTZWFyY2hSZXNwb25zZSA9IGltcG9ydF9kaXN0LlByb2R1Y3RTZWFyY2hSZXNwb25zZTtcbnZhciBBcGlQcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzID0gaW1wb3J0X2Rpc3QuUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlcztcbnZhciBBcGlRdWVyeVR5cGVkQXR0cmlidXRlcyA9IGltcG9ydF9kaXN0LlF1ZXJ5VHlwZWRBdHRyaWJ1dGVzO1xudmFyIEFwaVJlc3BvbnNlQ2F0ZWdvcnkgPSBpbXBvcnRfZGlzdC5SZXNwb25zZUNhdGVnb3J5O1xudmFyIEFwaVNlYXJjaEF0dHJpYnV0ZXMgPSBpbXBvcnRfZGlzdC5TZWFyY2hBdHRyaWJ1dGVzO1xudmFyIEFwaVNlYXJjaFJlc3BvbnNlUHJvZHVjdCA9IGltcG9ydF9kaXN0LlNlYXJjaFJlc3BvbnNlUHJvZHVjdDtcbnZhciBBcGlTdWdnZXN0aW9uID0gaW1wb3J0X2Rpc3QuU3VnZ2VzdGlvbjtcbnZhciBBcGlTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXMgPSBpbXBvcnRfZGlzdC5TdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXM7XG52YXIgQXBpU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnkgPSBpbXBvcnRfZGlzdC5TdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeTtcbnZhciBBcGlTdXBwb3J0ZWRFdmVudFJlc3BvbnNlID0gaW1wb3J0X2Rpc3QuU3VwcG9ydGVkRXZlbnRSZXNwb25zZTtcbnZhciBBcGlVc2VyRXZlbnQgPSBpbXBvcnRfZGlzdC5Vc2VyRXZlbnQ7XG52YXIgQXBpVXNlckV2ZW50Q2F0ZWdvcnkgPSBpbXBvcnRfZGlzdC5Vc2VyRXZlbnRDYXRlZ29yeTtcbmV4cG9ydCB7IEFwaUNvbnRleHRFbnZFbnVtLCBBcGlDb250ZXh0U291cmNlRW51bSwgQXBpQ3VzdFNlcnZpY2VBdHRhY2htZW50LCBBcGlGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5LCBBcGlGb3JtVHlwZSwgQXBpRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzLCBBcGlHZW5lcmF0aW9uUGFyYW1zLCBBcGlPcmdDb25maWdFeHBlcmltZW50LCBBcGlPcmdDb25maWdGZWF0dXJlR2F0ZSwgQXBpT3JnQ29uZmlnT3JnYW5pemF0aW9uU2V0dGluZ3MsIEFwaVBEUEF0dHJpYnV0ZXMsIEFwaVBMUEF0dHJpYnV0ZXMsIEFwaVBhZ2VWaXNpdENhdGVnb3J5LCBBcGlQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzLCBBcGlQcm9kdWN0U2VhcmNoUmVzcG9uc2UsIEFwaVByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXMsIEFwaVF1ZXJ5VHlwZWRBdHRyaWJ1dGVzLCBBcGlSZXNwb25zZUNhdGVnb3J5LCBBcGlTZWFyY2hBdHRyaWJ1dGVzLCBBcGlTZWFyY2hSZXNwb25zZVByb2R1Y3QsIEFwaVN1Z2dlc3Rpb24sIEFwaVN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcywgQXBpU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnksIEFwaVN1cHBvcnRlZEV2ZW50UmVzcG9uc2UsIEFwaVVzZXJFdmVudCwgQXBpVXNlckV2ZW50Q2F0ZWdvcnksIENhdGVnb3J5RXh0cmFjdG9yVHlwZSwgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24sIENoYXRTZWFyY2hTb3J0T3ZlcnJpZGVzLCBDaGF0U3RhdGUsIENvbG9yTmFtZXMsIEN1c3RvbWVyU2VydmljZUludGVncmF0aW9uTW9kZSwgQ3VzdG9tZXJTZXJ2aWNlT3ZlcnJpZGVzLCBDdXN0b21lclNlcnZpY2VUeXBlLCBET01JbnNlcnRpb25UeXBlLCBGZWF0dXJlR2F0ZXMsIEdvb2dsZUFuYWx5dGljc0V2ZW50cywgR3JpZEluc2VydGlvblR5cGUsIExvY2FsU3RvcmFnZUtleXMsIE1lc3NhZ2VSb2xlLCBNZXNzYWdlVHlwZSwgT3JnU2hvcnROYW1lLCBQYWdlVmFyaWFudFRlc3RUeXBlLCBQYWdlVmlzaXRDYXRlZ29yeSwgUGVyZk1ldHJpY3NFdmVudHMsIFByb2R1Y3RFeHBlcmltZW50LCBQcm9kdWN0U29ydGluZywgU2VhcmNoUmVzdWx0c1N0YXRlLCBTcGlmZnlFdmVudCwgU3BpZmZ5RXZlbnROYW1lLCBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLCBTcGlmZnlXaWRnZXRzLCBTdWdnZXN0aW9uQmFyTG9jYXRpb25Gb3JNZXRyaWNzLCBWYXJpYW50VHlwZUVudW0sIFdpZGdldFR5cGUgfTsiXSwieF9nb29nbGVfaWdub3JlTGlzdCI6WzBdLCJtYXBwaW5ncyI6Ijs7QUFDQSxJQUFJLFdBQVcsT0FBTztBQUN0QixJQUFJLFlBQVksT0FBTztBQUN2QixJQUFJLG1CQUFtQixPQUFPO0FBQzlCLElBQUksb0JBQW9CLE9BQU87QUFDL0IsSUFBSSxlQUFlLE9BQU87QUFDMUIsSUFBSSxlQUFlLE9BQU8sVUFBVTtBQUNwQyxJQUFJLGNBQWMsSUFBSSxRQUFRLFdBQVc7QUFDeEMsUUFBTyxRQUFRLEdBQUcsR0FBRyxrQkFBa0IsR0FBRyxDQUFDLE1BQU0sTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsU0FBUyxJQUFJLEVBQUUsSUFBSTs7QUFFNUYsSUFBSSxlQUFlLElBQUksTUFBTSxRQUFRLFNBQVM7QUFDN0MsS0FBSSxRQUFRLE9BQU8sU0FBUyxZQUFZLE9BQU8sU0FBUyxXQUFZLE1BQUssSUFBSSxPQUFPLGtCQUFrQixLQUFLLEVBQUUsSUFBSSxHQUFHLElBQUksS0FBSyxRQUFRLEtBQUssSUFBSSxHQUFHLEtBQUs7QUFDckosUUFBTSxLQUFLO0FBQ1gsTUFBSSxDQUFDLGFBQWEsS0FBSyxJQUFJLElBQUksSUFBSSxRQUFRLE9BQVEsV0FBVSxJQUFJLEtBQUs7R0FDckUsT0FBTyxNQUFNLEtBQUssSUFBSSxLQUFLLE1BQU0sSUFBSTtHQUNyQyxZQUFZLEVBQUUsT0FBTyxpQkFBaUIsTUFBTSxJQUFJLEtBQUssS0FBSztHQUMxRCxDQUFDOztBQUVILFFBQU87O0FBRVIsSUFBSSxXQUFXLEtBQUssWUFBWSxZQUFZLFNBQVMsT0FBTyxPQUFPLFNBQVMsYUFBYSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsWUFBWSxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksYUFBYSxVQUFVLFFBQVEsV0FBVztDQUNyTCxPQUFPO0NBQ1AsWUFBWTtDQUNaLENBQUMsR0FBRyxRQUFRLElBQUk7QUErQmpCLElBQUksY0FBOEIseUJBQVMsZUFBZTtBQUN6RCxlQUFjLHFCQUFxQjtBQUNuQyxlQUFjLHFCQUFxQjtBQUNuQyxlQUFjLHVCQUF1QjtBQUNyQyxlQUFjLDJCQUEyQjtBQUN6QyxlQUFjLDhCQUE4QjtBQUM1QyxlQUFjLDZCQUE2QjtBQUMzQyxlQUFjLGlDQUFpQztBQUMvQyxlQUFjLG9DQUFvQztBQUNsRCxlQUFjLGdDQUFnQztBQUM5QyxRQUFPO0VBQ04sRUFBRSxDQUFDO0FBSUwsSUFBSSxrQkFBa0MseUJBQVMsbUJBQW1CO0FBQ2pFLG1CQUFrQixnQkFBZ0I7QUFDbEMsbUJBQWtCLGlCQUFpQjtBQUNuQyxRQUFPO0VBQ04sRUFBRSxDQUFDO0FBSUwsSUFBSSx5QkFBeUMseUJBQVMsMEJBQTBCO0FBQy9FLDBCQUF5QixrQkFBa0I7QUFDM0MsMEJBQXlCLDJCQUEyQjtBQUNwRCwwQkFBeUIsK0JBQStCO0FBQ3hELDBCQUF5QiwwQkFBMEI7QUFDbkQsMEJBQXlCLDJCQUEyQjtBQUNwRCwwQkFBeUIsNEJBQTRCO0FBQ3JELDBCQUF5QiwwQkFBMEI7QUFDbkQsMEJBQXlCLDJCQUEyQjtBQUNwRCwwQkFBeUIsMkJBQTJCO0FBQ3BELDBCQUF5Qix3QkFBd0I7QUFDakQsMEJBQXlCLDhCQUE4QjtBQUN2RCwwQkFBeUIsc0JBQXNCO0FBQy9DLDBCQUF5Qix1QkFBdUI7QUFDaEQsMEJBQXlCLG9CQUFvQjtBQUM3QywwQkFBeUIsaUNBQWlDO0FBQzFELDBCQUF5Qix3QkFBd0I7QUFDakQsMEJBQXlCLHNCQUFzQjtBQUMvQywwQkFBeUIsd0JBQXdCO0FBQ2pELDBCQUF5Qiw4QkFBOEI7QUFDdkQsMEJBQXlCLDRCQUE0QjtBQUNyRCwwQkFBeUIsc0NBQXNDO0FBQy9ELDBCQUF5Qix3QkFBd0I7QUFDakQsMEJBQXlCLDBCQUEwQjtBQUNuRCwwQkFBeUIseUJBQXlCO0FBQ2xELDBCQUF5Qiw0QkFBNEI7QUFDckQsMEJBQXlCLDJCQUEyQjtBQUNwRCwwQkFBeUIseUJBQXlCO0FBQ2xELDBCQUF5Qix1QkFBdUI7QUFDaEQsUUFBTztFQUNOLEVBQUUsQ0FBQztBQXNDTCxJQUFJLGNBQThCLHlCQUFTLGVBQWU7QUFDekQsZUFBYyxVQUFVO0FBQ3hCLGVBQWMsZUFBZTtBQUM3QixRQUFPO0VBQ04sRUFBRSxDQUFDO0FBQ0wsSUFBSSxjQUE4Qix5QkFBUyxlQUFlO0FBQ3pELGVBQWMsVUFBVTtBQUN4QixlQUFjLHVCQUF1QjtBQUNyQyxlQUFjLGFBQWE7QUFDM0IsZUFBYyxtQkFBbUI7QUFDakMsZUFBYyxZQUFZO0FBQzFCLGVBQWMsZ0JBQWdCO0FBQzlCLGVBQWMsZUFBZTtBQUM3QixlQUFjLFVBQVU7QUFDeEIsZUFBYyxZQUFZO0FBQzFCLGVBQWMsZ0JBQWdCO0FBQzlCLGVBQWMscUJBQXFCO0FBQ25DLGVBQWMsVUFBVTtBQUN4QixlQUFjLFdBQVc7QUFDekIsZUFBYyx5QkFBeUI7QUFDdkMsUUFBTztFQUNOLEVBQUUsQ0FBQztBQXVFTCxJQUFJLG1CQUFtQyx5QkFBUyxvQkFBb0I7QUFDbkUsb0JBQW1CLFdBQVc7QUFDOUIsb0JBQW1CLFlBQVk7QUFDL0Isb0JBQW1CLDBCQUEwQjtBQUM3QyxvQkFBbUIsMkJBQTJCO0FBQzlDLG9CQUFtQix3QkFBd0I7QUFDM0Msb0JBQW1CLHlCQUF5QjtBQUM1QyxvQkFBbUIsa0JBQWtCO0FBQ3JDLG9CQUFtQixVQUFVO0FBQzdCLFFBQU87RUFDTixFQUFFLENBQUM7QUFJTCxJQUFJLGVBQStCLHlCQUFTLGdCQUFnQjtBQUMzRCxnQkFBZSw0QkFBNEI7QUFDM0MsZ0JBQWUseUJBQXlCO0FBQ3hDLGdCQUFlLHdCQUF3QjtBQUN2QyxnQkFBZSwwQkFBMEI7QUFDekMsZ0JBQWUsMEJBQTBCO0FBQ3pDLGdCQUFlLCtCQUErQjtBQUM5QyxnQkFBZSwyQkFBMkI7QUFDMUMsZ0JBQWUsMEJBQTBCO0FBQ3pDLGdCQUFlLHdCQUF3QjtBQUN2QyxnQkFBZSx3QkFBd0I7QUFDdkMsZ0JBQWUsMEJBQTBCO0FBQ3pDLGdCQUFlLDJCQUEyQjtBQUMxQyxnQkFBZSwyQkFBMkI7QUFDMUMsZ0JBQWUsOEJBQThCO0FBQzdDLGdCQUFlLGlDQUFpQztBQUNoRCxnQkFBZSwwQkFBMEI7QUFDekMsZ0JBQWUsa0NBQWtDO0FBQ2pELGdCQUFlLHdCQUF3QjtBQUN2QyxRQUFPO0VBQ04sRUFBRSxDQUFDO0FBSUwsSUFBSSxvQkFBb0MseUJBQVMscUJBQXFCO0FBQ3JFLHFCQUFvQixhQUFhO0FBQ2pDLHFCQUFvQixhQUFhO0FBQ2pDLHFCQUFvQixhQUFhO0FBQ2pDLHFCQUFvQixhQUFhO0FBQ2pDLHFCQUFvQixhQUFhO0FBQ2pDLHFCQUFvQixhQUFhO0FBQ2pDLHFCQUFvQixhQUFhO0FBQ2pDLHFCQUFvQixhQUFhO0FBQ2pDLHFCQUFvQixhQUFhO0FBQ2pDLHFCQUFvQixjQUFjO0FBQ2xDLHFCQUFvQixjQUFjO0FBQ2xDLHFCQUFvQixXQUFXO0FBQy9CLHFCQUFvQixXQUFXO0FBQy9CLHFCQUFvQixXQUFXO0FBQy9CLHFCQUFvQixXQUFXO0FBQy9CLFFBQU87RUFDTixFQUFFLENBQUM7QUFJTCxJQUFJLG1CQUFtQyx5QkFBUyxvQkFBb0I7QUFDbkUsb0JBQW1CLFlBQVk7QUFDL0Isb0JBQW1CLHNCQUFzQjtBQUN6QyxvQkFBbUIsc0JBQXNCO0FBQ3pDLFFBQU87RUFDTixFQUFFLENBQUM7QUFJTCxJQUFJLHNCQUFzQyx5QkFBUyx1QkFBdUI7QUFDekUsdUJBQXNCLGdCQUFnQjtBQUN0Qyx1QkFBc0IsZ0JBQWdCO0FBQ3RDLHVCQUFzQixrQkFBa0I7QUFDeEMsdUJBQXNCLHFCQUFxQjtBQUMzQyx1QkFBc0Isd0JBQXdCO0FBQzlDLHVCQUFzQixnQkFBZ0I7QUFDdEMsdUJBQXNCLGtCQUFrQjtBQUN4Qyx1QkFBc0Isb0JBQW9CO0FBQzFDLHVCQUFzQixpQkFBaUI7QUFDdkMsdUJBQXNCLFdBQVc7QUFDakMsdUJBQXNCLGdCQUFnQjtBQUN0Qyx1QkFBc0IsZUFBZTtBQUNyQyx1QkFBc0IsdUJBQXVCO0FBQzdDLHVCQUFzQiwwQkFBMEI7QUFDaEQsdUJBQXNCLGVBQWU7QUFDckMsdUJBQXNCLHlCQUF5QjtBQUMvQyx1QkFBc0IsY0FBYztBQUNwQyx1QkFBc0IsaUJBQWlCO0FBQ3ZDLHVCQUFzQixVQUFVO0FBQ2hDLFFBQU87RUFDTixFQUFFLENBQUM7QUFjTCxJQUFJLGVBQStCLHlCQUFTLGdCQUFnQjtBQUMzRCxnQkFBZSxhQUFhO0FBQzVCLGdCQUFlLHNCQUFzQjtBQUNyQyxnQkFBZSxjQUFjO0FBQzdCLGdCQUFlLGlCQUFpQjtBQUNoQyxnQkFBZSxvQkFBb0I7QUFDbkMsZ0JBQWUsc0JBQXNCO0FBQ3JDLGdCQUFlLGlCQUFpQjtBQUNoQyxnQkFBZSxXQUFXO0FBQzFCLGdCQUFlLGtCQUFrQjtBQUNqQyxnQkFBZSxlQUFlO0FBQzlCLGdCQUFlLG1CQUFtQjtBQUNsQyxnQkFBZSxnQkFBZ0I7QUFDL0IsZ0JBQWUsb0JBQW9CO0FBQ25DLGdCQUFlLGVBQWU7QUFDOUIsZ0JBQWUsYUFBYTtBQUM1QixnQkFBZSxxQkFBcUI7QUFDcEMsZ0JBQWUsaUJBQWlCO0FBQ2hDLGdCQUFlLGFBQWE7QUFDNUIsZ0JBQWUsY0FBYztBQUM3QixnQkFBZSxhQUFhO0FBQzVCLGdCQUFlLG1CQUFtQjtBQUNsQyxnQkFBZSxvQkFBb0I7QUFDbkMsZ0JBQWUsb0JBQW9CO0FBQ25DLGdCQUFlLHVCQUF1QjtBQUN0QyxnQkFBZSxtQkFBbUI7QUFDbEMsZ0JBQWUsZUFBZTtBQUM5QixnQkFBZSxzQkFBc0I7QUFDckMsZ0JBQWUscUJBQXFCO0FBQ3BDLGdCQUFlLGdCQUFnQjtBQUMvQixnQkFBZSxXQUFXO0FBQzFCLGdCQUFlLGtCQUFrQjtBQUNqQyxnQkFBZSxrQkFBa0I7QUFDakMsZ0JBQWUsYUFBYTtBQUM1QixRQUFPO0VBQ04sRUFBRSxDQUFDO0FBWUwsSUFBSSxvQkFBb0MseUJBQVMscUJBQXFCO0FBQ3JFLHFCQUFvQixhQUFhO0FBQ2pDLFFBQU87RUFDTixFQUFFLENBQUM7QUFJTCxJQUFJLGlCQUFpQyx5QkFBUyxrQkFBa0I7QUFDL0Qsa0JBQWlCLGNBQWM7QUFDL0Isa0JBQWlCLGVBQWU7QUFDaEMsa0JBQWlCLGdCQUFnQjtBQUNqQyxRQUFPO0VBQ04sRUFBRSxDQUFDO0FBSUwsSUFBSSxrQkFBa0MseUJBQVMsbUJBQW1CO0FBQ2pFLG1CQUFrQixTQUFTO0FBQzNCLG1CQUFrQixTQUFTO0FBQzNCLG1CQUFrQixlQUFlO0FBQ2pDLFFBQU87RUFDTixFQUFFLENBQUM7Ozs7O0FBa0NMLElBQUksZ0JBQWdDLHlCQUFTLGlCQUFpQjtBQUM3RCxpQkFBZ0IsaUJBQWlCO0FBQ2pDLGlCQUFnQixxQkFBcUI7QUFDckMsaUJBQWdCLHVCQUF1QjtBQUN2QyxpQkFBZ0Isb0JBQW9CO0FBQ3BDLGlCQUFnQixvQkFBb0I7QUFDcEMsaUJBQWdCLG1CQUFtQjtBQUNuQyxpQkFBZ0Isa0JBQWtCO0FBQ2xDLGlCQUFnQixrQkFBa0I7QUFDbEMsaUJBQWdCLG1CQUFtQjtBQUNuQyxpQkFBZ0IsNEJBQTRCO0FBQzVDLFFBQU87RUFDTixFQUFFLENBQUM7QUEwQkwsSUFBSSxrQkFBa0MsMkJBQVcsRUFBRSx1RUFBdUUsY0FBWTs7Ozs7Ozs7Ozs7O0NBWXJJLElBQUksY0FBY0EsYUFBV0EsVUFBUSxhQUFhLFNBQVMsU0FBUyxZQUFZLEdBQUcsV0FBVztFQUM3RixTQUFTLE1BQU0sT0FBTztBQUNyQixVQUFPLGlCQUFpQixJQUFJLFFBQVEsSUFBSSxFQUFFLFNBQVMsU0FBUztBQUMzRCxZQUFRLE1BQU07S0FDYjs7QUFFSCxTQUFPLEtBQUssTUFBTSxJQUFJLFVBQVUsU0FBUyxTQUFTLFFBQVE7R0FDekQsU0FBUyxVQUFVLE9BQU87QUFDekIsUUFBSTtBQUNILFVBQUssVUFBVSxLQUFLLE1BQU0sQ0FBQzthQUNuQixHQUFHO0FBQ1gsWUFBTyxFQUFFOzs7R0FHWCxTQUFTLFNBQVMsT0FBTztBQUN4QixRQUFJO0FBQ0gsVUFBSyxVQUFVLFNBQVMsTUFBTSxDQUFDO2FBQ3ZCLEdBQUc7QUFDWCxZQUFPLEVBQUU7OztHQUdYLFNBQVMsS0FBSyxRQUFRO0FBQ3JCLFdBQU8sT0FBTyxRQUFRLE9BQU8sTUFBTSxHQUFHLE1BQU0sT0FBTyxNQUFNLENBQUMsS0FBSyxXQUFXLFNBQVM7O0FBRXBGLFNBQU0sWUFBWSxVQUFVLE1BQU0sU0FBUyxjQUFjLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNwRTs7QUFFSCxRQUFPLGVBQWVBLFdBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFdBQVEsa0JBQWtCLFVBQVEsa0JBQWtCLFVBQVEsa0JBQWtCLFVBQVEsa0JBQWtCLFVBQVEscUJBQXFCLFVBQVEsZ0JBQWdCLFVBQVEsYUFBYSxVQUFRLGdCQUFnQixVQUFRLFVBQVUsVUFBUSxnQkFBZ0IsVUFBUSxnQkFBZ0IsVUFBUSxZQUFZLEtBQUs7QUFDclMsV0FBUSxjQUFjO0FBQ3RCLFdBQVEsU0FBUztBQUNqQixXQUFRLFlBQVk7QUFDcEIsV0FBUSxpQkFBaUI7QUFDekIsV0FBUSxZQUFZLG1CQUFtQixRQUFRLFFBQVEsR0FBRztDQUMxRCxJQUFJLGdCQUFnQixNQUFNO0VBQ3pCLFlBQVksZ0JBQWdCLEVBQUUsRUFBRTtBQUMvQixRQUFLLGdCQUFnQjs7RUFFdEIsSUFBSSxPQUFPLGVBQWU7QUFDekIsUUFBSyxnQkFBZ0I7O0VBRXRCLElBQUksV0FBVztBQUNkLFVBQU8sS0FBSyxjQUFjLFlBQVksT0FBTyxLQUFLLGNBQWMsV0FBV0EsVUFBUTs7RUFFcEYsSUFBSSxXQUFXO0FBQ2QsVUFBTyxLQUFLLGNBQWM7O0VBRTNCLElBQUksYUFBYTtBQUNoQixVQUFPLEtBQUssY0FBYyxjQUFjLEVBQUU7O0VBRTNDLElBQUksdUJBQXVCO0FBQzFCLFVBQU8sS0FBSyxjQUFjLHdCQUF3Qjs7RUFFbkQsSUFBSSxXQUFXO0FBQ2QsVUFBTyxLQUFLLGNBQWM7O0VBRTNCLElBQUksV0FBVztBQUNkLFVBQU8sS0FBSyxjQUFjOztFQUUzQixJQUFJLFNBQVM7R0FDWixNQUFNLFNBQVMsS0FBSyxjQUFjO0FBQ2xDLE9BQUksT0FBUSxRQUFPLE9BQU8sV0FBVyxhQUFhLGVBQWU7O0VBRWxFLElBQUksY0FBYztHQUNqQixNQUFNLGNBQWMsS0FBSyxjQUFjO0FBQ3ZDLE9BQUksWUFBYSxRQUFPLE9BQU8sZ0JBQWdCLGFBQWEsb0JBQW9CLFlBQVksTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLGFBQWE7QUFDOUgsV0FBTztLQUNOOztFQUVILElBQUksVUFBVTtBQUNiLFVBQU8sS0FBSyxjQUFjOztFQUUzQixJQUFJLGNBQWM7QUFDakIsVUFBTyxLQUFLLGNBQWM7OztBQUc1QixXQUFRLGdCQUFnQjtBQUN4QixXQUFRLGdCQUFnQixJQUFJLGVBQWU7Ozs7Q0FJM0MsSUFBSSxVQUFVLE1BQU1DLFVBQVE7RUFDM0IsWUFBWSxnQkFBZ0JELFVBQVEsZUFBZTtBQUNsRCxRQUFLLGdCQUFnQjtBQUNyQixRQUFLLFlBQVksS0FBSyxTQUFTLFlBQVksTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLGFBQWE7SUFDN0UsSUFBSSxjQUFjO0tBQ2pCO0tBQ0E7S0FDQTtBQUNELFNBQUssTUFBTSxjQUFjLEtBQUssV0FBWSxLQUFJLFdBQVcsSUFBSyxnQkFBZSxNQUFNLFdBQVcsSUFBSSxPQUFPLE9BQU8sRUFBRSxPQUFPLEtBQUssVUFBVSxFQUFFLFlBQVksQ0FBQyxLQUFLO0lBQzVKLElBQUksV0FBVyxLQUFLO0FBQ3BCLFFBQUk7QUFDSCxnQkFBVyxPQUFPLEtBQUssY0FBYyxZQUFZLE9BQU8sWUFBWSxLQUFLLFlBQVksS0FBSzthQUNsRixHQUFHO0FBQ1gsVUFBSyxNQUFNLGNBQWMsS0FBSyxXQUFZLEtBQUksV0FBVyxRQUFTLGFBQVksTUFBTSxXQUFXLFFBQVE7TUFDdEcsT0FBTyxLQUFLO01BQ1osS0FBSyxZQUFZO01BQ2pCLE1BQU0sWUFBWTtNQUNsQixPQUFPO01BQ1AsVUFBVSxXQUFXLFNBQVMsT0FBTyxHQUFHLEtBQUs7TUFDN0MsQ0FBQyxLQUFLO0FBQ1AsU0FBSSxhQUFhLEtBQUssRUFBRyxLQUFJLGFBQWEsTUFBTyxPQUFNLElBQUksV0FBVyxHQUFHLGlGQUFpRjtTQUNySixPQUFNOztBQUVaLFNBQUssTUFBTSxjQUFjLEtBQUssV0FBWSxLQUFJLFdBQVcsS0FBTSxhQUFZLE1BQU0sV0FBVyxLQUFLO0tBQ2hHLE9BQU8sS0FBSztLQUNaLEtBQUssWUFBWTtLQUNqQixNQUFNLFlBQVk7S0FDbEIsVUFBVSxTQUFTLE9BQU87S0FDMUIsQ0FBQyxLQUFLO0FBQ1AsV0FBTztLQUNOO0FBQ0YsUUFBSyxhQUFhLGNBQWM7O0VBRWpDLGVBQWUsR0FBRyxhQUFhO0dBQzlCLE1BQU0sT0FBTyxLQUFLLE9BQU87QUFDekIsUUFBSyxhQUFhLEtBQUssV0FBVyxPQUFPLEdBQUcsWUFBWTtBQUN4RCxVQUFPOztFQUVSLGtCQUFrQixHQUFHLGdCQUFnQjtHQUNwQyxNQUFNLGNBQWMsZUFBZSxLQUFLLFNBQVMsRUFBRSxLQUFLLEVBQUU7QUFDMUQsVUFBTyxLQUFLLGVBQWUsR0FBRyxZQUFZOztFQUUzQyxtQkFBbUIsR0FBRyxpQkFBaUI7R0FDdEMsTUFBTSxjQUFjLGdCQUFnQixLQUFLLFVBQVUsRUFBRSxNQUFNLEVBQUU7QUFDN0QsVUFBTyxLQUFLLGVBQWUsR0FBRyxZQUFZOzs7Ozs7Ozs7Ozs7RUFZM0MsV0FBVyxNQUFNO0FBQ2hCLE9BQUksQ0FBQyxLQUFNLFFBQU87QUFDbEIsVUFBT0MsVUFBUSxVQUFVLEtBQUssS0FBSzs7RUFFcEMsUUFBUSxTQUFTLGVBQWU7QUFDL0IsVUFBTyxZQUFZLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxhQUFhO0lBQ3JELE1BQU0sRUFBRSxLQUFLLFNBQVMsTUFBTSxLQUFLLGtCQUFrQixTQUFTLGNBQWM7SUFDMUUsTUFBTSxXQUFXLE1BQU0sS0FBSyxTQUFTLEtBQUssS0FBSztBQUMvQyxRQUFJLFlBQVksU0FBUyxVQUFVLE9BQU8sU0FBUyxTQUFTLElBQUssUUFBTztBQUN4RSxVQUFNLElBQUksY0FBYyxVQUFVLGtDQUFrQztLQUNuRTs7RUFFSCxrQkFBa0IsU0FBUyxlQUFlO0FBQ3pDLFVBQU8sWUFBWSxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsYUFBYTtJQUNyRCxJQUFJLE1BQU0sS0FBSyxjQUFjLFdBQVcsUUFBUTtBQUNoRCxRQUFJLFFBQVEsVUFBVSxLQUFLLEtBQUssT0FBTyxLQUFLLFFBQVEsTUFBTSxDQUFDLFdBQVcsRUFBRyxRQUFPLE1BQU0sS0FBSyxjQUFjLHFCQUFxQixRQUFRLE1BQU07SUFDNUksTUFBTSxVQUFVLE9BQU8sT0FBTyxFQUFFLEVBQUUsS0FBSyxjQUFjLFNBQVMsUUFBUSxRQUFRO0FBQzlFLFdBQU8sS0FBSyxRQUFRLENBQUMsU0FBUyxRQUFRLFFBQVEsU0FBUyxLQUFLLElBQUksT0FBTyxRQUFRLE9BQU8sRUFBRSxDQUFDO0lBQ3pGLE1BQU0saUJBQWlCLE9BQU8sa0JBQWtCLGFBQWEsc0JBQXNCLFlBQVksTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLGFBQWE7QUFDakksWUFBTztNQUNOO0lBQ0YsTUFBTSxhQUFhO0tBQ2xCLFFBQVEsUUFBUTtLQUNoQjtLQUNBLE1BQU0sUUFBUTtLQUNkLGFBQWEsS0FBSyxjQUFjO0tBQ2hDO0lBQ0QsTUFBTSxpQkFBaUIsT0FBTyxPQUFPLE9BQU8sT0FBTyxFQUFFLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZTtLQUN4RixNQUFNO0tBQ047S0FDQSxDQUFDLENBQUM7SUFDSCxJQUFJO0FBQ0osUUFBSSxXQUFXLGVBQWUsS0FBSyxJQUFJLGVBQWUsZ0JBQWdCLG1CQUFtQixPQUFPLGVBQWUsS0FBSyxDQUFFLFFBQU8sZUFBZTthQUNuSSxLQUFLLFdBQVcsUUFBUSxnQkFBZ0IsQ0FBRSxRQUFPLEtBQUssVUFBVSxlQUFlLEtBQUs7UUFDeEYsUUFBTyxlQUFlO0lBQzNCLE1BQU0sT0FBTyxPQUFPLE9BQU8sT0FBTyxPQUFPLEVBQUUsRUFBRSxlQUFlLEVBQUUsRUFBRSxNQUFNLENBQUM7QUFDdkUsV0FBTztLQUNOO0tBQ0E7S0FDQTtLQUNBOzs7Ozs7RUFNSCxRQUFRO0dBQ1AsTUFBTSxjQUFjLEtBQUs7R0FDekIsTUFBTSxPQUFPLElBQUksWUFBWSxLQUFLLGNBQWM7QUFDaEQsUUFBSyxhQUFhLEtBQUssV0FBVyxPQUFPO0FBQ3pDLFVBQU87OztBQUdULFdBQVEsVUFBVTtBQUNsQixTQUFRLFlBQVksSUFBSSxPQUFPLGdFQUFnRSxJQUFJO0NBQ25HLFNBQVMsT0FBTyxPQUFPO0FBQ3RCLFNBQU8sT0FBTyxTQUFTLGVBQWUsaUJBQWlCOztDQUV4RCxTQUFTLFdBQVcsT0FBTztBQUMxQixTQUFPLE9BQU8sYUFBYSxlQUFlLGlCQUFpQjs7Q0FFNUQsSUFBSSxnQkFBZ0IsY0FBYyxNQUFNO0VBQ3ZDLFlBQVksVUFBVSxLQUFLO0FBQzFCLFNBQU0sSUFBSTtBQUNWLFFBQUssV0FBVztBQUNoQixRQUFLLE9BQU87OztBQUdkLFdBQVEsZ0JBQWdCO0NBQ3hCLElBQUksYUFBYSxjQUFjLE1BQU07RUFDcEMsWUFBWSxPQUFPLEtBQUs7QUFDdkIsU0FBTSxJQUFJO0FBQ1YsUUFBSyxRQUFRO0FBQ2IsUUFBSyxPQUFPOzs7QUFHZCxXQUFRLGFBQWE7Q0FDckIsSUFBSSxnQkFBZ0IsY0FBYyxNQUFNO0VBQ3ZDLFlBQVksT0FBTyxLQUFLO0FBQ3ZCLFNBQU0sSUFBSTtBQUNWLFFBQUssUUFBUTtBQUNiLFFBQUssT0FBTzs7O0FBR2QsV0FBUSxnQkFBZ0I7QUFDeEIsV0FBUSxxQkFBcUI7RUFDNUIsS0FBSztFQUNMLEtBQUs7RUFDTCxLQUFLO0VBQ0wsT0FBTztFQUNQO0NBQ0QsU0FBUyxZQUFZLFFBQVEsU0FBUyxJQUFJO0FBQ3pDLFNBQU8sT0FBTyxLQUFLLE9BQU8sQ0FBQyxLQUFLLFFBQVEscUJBQXFCLEtBQUssT0FBTyxNQUFNLE9BQU8sQ0FBQyxDQUFDLFFBQVEsU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDLEtBQUssSUFBSTs7Q0FFcEksU0FBUyxxQkFBcUIsS0FBSyxPQUFPLFlBQVksSUFBSTtFQUN6RCxNQUFNLFVBQVUsYUFBYSxVQUFVLFNBQVMsSUFBSSxJQUFJLEtBQUs7QUFDN0QsTUFBSSxpQkFBaUIsT0FBTztHQUMzQixNQUFNLGFBQWEsTUFBTSxLQUFLLGdCQUFnQixtQkFBbUIsT0FBTyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxtQkFBbUIsUUFBUSxDQUFDLEdBQUc7QUFDL0gsVUFBTyxHQUFHLG1CQUFtQixRQUFRLENBQUMsR0FBRzs7QUFFMUMsTUFBSSxpQkFBaUIsSUFBSyxRQUFPLHFCQUFxQixLQUFLLE1BQU0sS0FBSyxNQUFNLEVBQUUsVUFBVTtBQUN4RixNQUFJLGlCQUFpQixLQUFNLFFBQU8sR0FBRyxtQkFBbUIsUUFBUSxDQUFDLEdBQUcsbUJBQW1CLE1BQU0sYUFBYSxDQUFDO0FBQzNHLE1BQUksaUJBQWlCLE9BQVEsUUFBTyxZQUFZLE9BQU8sUUFBUTtBQUMvRCxTQUFPLEdBQUcsbUJBQW1CLFFBQVEsQ0FBQyxHQUFHLG1CQUFtQixPQUFPLE1BQU0sQ0FBQzs7Q0FFM0UsU0FBUyxPQUFPLE1BQU0sS0FBSztFQUMxQixNQUFNLFFBQVEsS0FBSztBQUNuQixTQUFPLFVBQVUsUUFBUSxVQUFVLEtBQUs7O0NBRXpDLFNBQVMsVUFBVSxNQUFNLElBQUk7QUFDNUIsU0FBTyxPQUFPLEtBQUssS0FBSyxDQUFDLFFBQVEsS0FBSyxRQUFRLE9BQU8sT0FBTyxPQUFPLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sR0FBRyxLQUFLLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDOztDQUVuSCxTQUFTLGVBQWUsVUFBVTtBQUNqQyxPQUFLLE1BQU0sV0FBVyxTQUFVLEtBQUksMEJBQTBCLFFBQVEsWUFBYSxRQUFPO0FBQzFGLFNBQU87O0NBRVIsSUFBSSxrQkFBa0IsTUFBTTtFQUMzQixZQUFZLEtBQUssZUFBZSxjQUFjLFdBQVc7QUFDeEQsUUFBSyxNQUFNO0FBQ1gsUUFBSyxjQUFjOztFQUVwQixRQUFRO0FBQ1AsVUFBTyxZQUFZLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxhQUFhO0FBQ3JELFdBQU8sS0FBSyxZQUFZLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQztLQUM3Qzs7O0FBR0osV0FBUSxrQkFBa0I7Q0FDMUIsSUFBSSxrQkFBa0IsTUFBTTtFQUMzQixZQUFZLEtBQUs7QUFDaEIsUUFBSyxNQUFNOztFQUVaLFFBQVE7QUFDUCxVQUFPLFlBQVksTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLGFBQWEsR0FBRzs7O0FBRzNELFdBQVEsa0JBQWtCO0NBQzFCLElBQUksa0JBQWtCLE1BQU07RUFDM0IsWUFBWSxLQUFLO0FBQ2hCLFFBQUssTUFBTTs7RUFFWixRQUFRO0FBQ1AsVUFBTyxZQUFZLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxhQUFhO0FBQ3JELFdBQU8sTUFBTSxLQUFLLElBQUksTUFBTTtLQUMzQjs7O0FBR0osV0FBUSxrQkFBa0I7Q0FDMUIsSUFBSSxrQkFBa0IsTUFBTTtFQUMzQixZQUFZLEtBQUs7QUFDaEIsUUFBSyxNQUFNOztFQUVaLFFBQVE7QUFDUCxVQUFPLFlBQVksTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLGFBQWE7QUFDckQsV0FBTyxNQUFNLEtBQUssSUFBSSxNQUFNO0tBQzNCOzs7QUFHSixXQUFRLGtCQUFrQjtJQUN2QixDQUFDO0FBSUwsSUFBSSxrQ0FBa0QsMkJBQVcsRUFBRSw4RkFBOEYsY0FBWTs7Ozs7Ozs7Ozs7O0FBWTVLLFFBQU8sZUFBZUQsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSwwQkFBMEIsS0FBSztBQUN2QyxXQUFRLG9DQUFvQztBQUM1QyxXQUFRLGtDQUFrQztBQUMxQyxXQUFRLHVDQUF1QztBQUMvQyxXQUFRLGdDQUFnQztBQUN4QyxXQUFRLHFDQUFxQzs7Ozs7O0NBTTdDLElBQUk7QUFDSixFQUFDLFNBQVMsMkJBQTJCO0FBQ3BDLDRCQUEwQixZQUFZO0FBQ3RDLDRCQUEwQixjQUFjO0FBQ3hDLDRCQUEwQixhQUFhO0FBQ3ZDLDRCQUEwQixpQkFBaUI7SUFDekMsNEJBQTRCLFVBQVEsMEJBQTBCLDBCQUEwQixFQUFFLEVBQUU7Q0FDL0YsU0FBUyxrQ0FBa0MsT0FBTztBQUNqRCxPQUFLLE1BQU0sT0FBTyx3QkFBeUIsS0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLHlCQUF5QixJQUFJLEVBQ2hIO09BQUksd0JBQXdCLFNBQVMsTUFBTyxRQUFPOztBQUVwRCxTQUFPOztDQUVSLFNBQVMsZ0NBQWdDLE1BQU07QUFDOUMsU0FBTyxxQ0FBcUMsTUFBTSxNQUFNOztDQUV6RCxTQUFTLHFDQUFxQyxNQUFNLHFCQUFxQjtBQUN4RSxTQUFPOztDQUVSLFNBQVMsOEJBQThCLE9BQU87QUFDN0MsU0FBTzs7Q0FFUixTQUFTLG1DQUFtQyxPQUFPLHFCQUFxQjtBQUN2RSxTQUFPOztJQUVMLENBQUM7QUFJTCxJQUFJLDZDQUE2RCwyQkFBVyxFQUFFLHlHQUF5RyxjQUFZOzs7Ozs7Ozs7Ozs7QUFZbE0sUUFBTyxlQUFlQSxXQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxXQUFRLCtDQUErQztBQUN2RCxXQUFRLDZDQUE2QztBQUNyRCxXQUFRLGtEQUFrRDtBQUMxRCxXQUFRLDJDQUEyQztBQUNuRCxXQUFRLGdEQUFnRDtDQUN4RCxNQUFNLDhCQUE4QixpQ0FBaUM7Ozs7Q0FJckUsU0FBUyw2Q0FBNkMsT0FBTztBQUM1RCxNQUFJLEVBQUUsV0FBVyxVQUFVLE1BQU0sYUFBYSxLQUFLLEVBQUcsUUFBTztBQUM3RCxNQUFJLEVBQUUsb0JBQW9CLFVBQVUsTUFBTSxzQkFBc0IsS0FBSyxFQUFHLFFBQU87QUFDL0UsU0FBTzs7Q0FFUixTQUFTLDJDQUEyQyxNQUFNO0FBQ3pELFNBQU8sZ0RBQWdELE1BQU0sTUFBTTs7Q0FFcEUsU0FBUyxnREFBZ0QsTUFBTSxxQkFBcUI7QUFDbkYsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPO0dBQ04sNkJBQTZCLEtBQUssZ0NBQWdDLE9BQU8sS0FBSyxLQUFLLEdBQUcsNEJBQTRCLGlDQUFpQyxLQUFLLDZCQUE2QjtHQUNyTCxTQUFTLEtBQUs7R0FDZCxRQUFRLEtBQUssV0FBVyxPQUFPLEtBQUssSUFBSSxLQUFLO0dBQzdDLGtCQUFrQixLQUFLO0dBQ3ZCLFdBQVcsS0FBSyxjQUFjLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDbkQ7O0NBRUYsU0FBUyx5Q0FBeUMsTUFBTTtBQUN2RCxTQUFPLDhDQUE4QyxNQUFNLE1BQU07O0NBRWxFLFNBQVMsOENBQThDLE9BQU8sc0JBQXNCLE9BQU87QUFDMUYsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPO0dBQ04sOEJBQThCLEdBQUcsNEJBQTRCLCtCQUErQixNQUFNLDZCQUE2QjtHQUMvSCxTQUFTLE1BQU07R0FDZixRQUFRLE1BQU07R0FDZCxrQkFBa0IsTUFBTTtHQUN4QixXQUFXLE1BQU07R0FDakI7O0lBRUMsQ0FBQztBQUlMLElBQUksOENBQThELDJCQUFXLEVBQUUsMEdBQTBHLGNBQVk7Ozs7Ozs7Ozs7OztBQVlwTSxRQUFPLGVBQWVBLFdBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFdBQVEsZ0RBQWdEO0FBQ3hELFdBQVEsOENBQThDO0FBQ3RELFdBQVEsbURBQW1EO0FBQzNELFdBQVEsNENBQTRDO0FBQ3BELFdBQVEsaURBQWlEOzs7O0NBSXpELFNBQVMsOENBQThDLE9BQU87QUFDN0QsU0FBTzs7Q0FFUixTQUFTLDRDQUE0QyxNQUFNO0FBQzFELFNBQU8saURBQWlELE1BQU0sTUFBTTs7Q0FFckUsU0FBUyxpREFBaUQsTUFBTSxxQkFBcUI7QUFDcEYsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPO0dBQ04sbUJBQW1CLEtBQUssc0JBQXNCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDbkUsZUFBZSxLQUFLLGtCQUFrQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQzNELFdBQVcsS0FBSyxjQUFjLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDbkQ7O0NBRUYsU0FBUywwQ0FBMEMsTUFBTTtBQUN4RCxTQUFPLCtDQUErQyxNQUFNLE1BQU07O0NBRW5FLFNBQVMsK0NBQStDLE9BQU8sc0JBQXNCLE9BQU87QUFDM0YsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPO0dBQ04sbUJBQW1CLE1BQU07R0FDekIsZUFBZSxNQUFNO0dBQ3JCLFdBQVcsTUFBTTtHQUNqQjs7SUFFQyxDQUFDO0FBSUwsSUFBSSw4QkFBOEMsMkJBQVcsRUFBRSwwRkFBMEYsY0FBWTs7Ozs7Ozs7Ozs7O0FBWXBLLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSxnQ0FBZ0M7QUFDeEMsV0FBUSw4QkFBOEI7QUFDdEMsV0FBUSxtQ0FBbUM7QUFDM0MsV0FBUSw0QkFBNEI7QUFDcEMsV0FBUSxpQ0FBaUM7Ozs7Q0FJekMsU0FBUyw4QkFBOEIsT0FBTztBQUM3QyxNQUFJLEVBQUUsZ0JBQWdCLFVBQVUsTUFBTSxrQkFBa0IsS0FBSyxFQUFHLFFBQU87QUFDdkUsU0FBTzs7Q0FFUixTQUFTLDRCQUE0QixNQUFNO0FBQzFDLFNBQU8saUNBQWlDLE1BQU0sTUFBTTs7Q0FFckQsU0FBUyxpQ0FBaUMsTUFBTSxxQkFBcUI7QUFDcEUsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPLEVBQUUsY0FBYyxLQUFLLGVBQWU7O0NBRTVDLFNBQVMsMEJBQTBCLE1BQU07QUFDeEMsU0FBTywrQkFBK0IsTUFBTSxNQUFNOztDQUVuRCxTQUFTLCtCQUErQixPQUFPLHNCQUFzQixPQUFPO0FBQzNFLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTyxFQUFFLGNBQWMsTUFBTSxlQUFlOztJQUUxQyxDQUFDO0FBSUwsSUFBSSxtQ0FBbUQsMkJBQVcsRUFBRSwrRkFBK0YsY0FBWTs7Ozs7Ozs7Ozs7O0FBWTlLLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSxxQ0FBcUM7QUFDN0MsV0FBUSxtQ0FBbUM7QUFDM0MsV0FBUSx3Q0FBd0M7QUFDaEQsV0FBUSxpQ0FBaUM7QUFDekMsV0FBUSxzQ0FBc0M7Ozs7Q0FJOUMsU0FBUyxtQ0FBbUMsT0FBTztBQUNsRCxTQUFPOztDQUVSLFNBQVMsaUNBQWlDLE1BQU07QUFDL0MsU0FBTyxzQ0FBc0MsTUFBTSxNQUFNOztDQUUxRCxTQUFTLHNDQUFzQyxNQUFNLHFCQUFxQjtBQUN6RSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixlQUFlLEtBQUssa0JBQWtCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDM0QsV0FBVyxLQUFLLGNBQWMsT0FBTyxLQUFLLElBQUksS0FBSztHQUNuRCxRQUFRLEtBQUssV0FBVyxPQUFPLEtBQUssSUFBSSxLQUFLO0dBQzdDLFdBQVcsS0FBSyxjQUFjLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDbkQsZ0JBQWdCLEtBQUssbUJBQW1CLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDN0QsYUFBYSxLQUFLLGdCQUFnQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ3ZELHVCQUF1QixLQUFLLDBCQUEwQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQzNFLGdCQUFnQixLQUFLLG1CQUFtQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQzdELE9BQU8sS0FBSyxVQUFVLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDM0MsVUFBVSxLQUFLLGFBQWEsT0FBTyxLQUFLLElBQUksS0FBSztHQUNqRCxXQUFXLEtBQUssY0FBYyxPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ25ELGNBQWMsS0FBSyxpQkFBaUIsT0FBTyxLQUFLLElBQUksS0FBSztHQUN6RCxZQUFZLEtBQUssZUFBZSxPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ3JELFVBQVUsS0FBSyxhQUFhLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDakQsV0FBVyxLQUFLLGNBQWMsT0FBTyxLQUFLLElBQUksS0FBSztHQUNuRCxtQkFBbUIsS0FBSyxzQkFBc0IsT0FBTyxLQUFLLElBQUksS0FBSztHQUNuRTs7Q0FFRixTQUFTLCtCQUErQixNQUFNO0FBQzdDLFNBQU8sb0NBQW9DLE1BQU0sTUFBTTs7Q0FFeEQsU0FBUyxvQ0FBb0MsT0FBTyxzQkFBc0IsT0FBTztBQUNoRixNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixlQUFlLE1BQU07R0FDckIsV0FBVyxNQUFNO0dBQ2pCLFFBQVEsTUFBTTtHQUNkLFdBQVcsTUFBTTtHQUNqQixnQkFBZ0IsTUFBTTtHQUN0QixhQUFhLE1BQU07R0FDbkIsdUJBQXVCLE1BQU07R0FDN0IsZ0JBQWdCLE1BQU07R0FDdEIsT0FBTyxNQUFNO0dBQ2IsVUFBVSxNQUFNO0dBQ2hCLFdBQVcsTUFBTTtHQUNqQixjQUFjLE1BQU07R0FDcEIsWUFBWSxNQUFNO0dBQ2xCLFVBQVUsTUFBTTtHQUNoQixXQUFXLE1BQU07R0FDakIsbUJBQW1CLE1BQU07R0FDekI7O0lBRUMsQ0FBQztBQUlMLElBQUkscUNBQXFELDJCQUFXLEVBQUUsaUdBQWlHLGNBQVk7Ozs7Ozs7Ozs7OztBQVlsTCxRQUFPLGVBQWVBLFdBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFdBQVEsdUNBQXVDO0FBQy9DLFdBQVEscUNBQXFDO0FBQzdDLFdBQVEsMENBQTBDO0FBQ2xELFdBQVEsbUNBQW1DO0FBQzNDLFdBQVEsd0NBQXdDOzs7O0NBSWhELFNBQVMscUNBQXFDLE9BQU87QUFDcEQsU0FBTzs7Q0FFUixTQUFTLG1DQUFtQyxNQUFNO0FBQ2pELFNBQU8sd0NBQXdDLE1BQU0sTUFBTTs7Q0FFNUQsU0FBUyx3Q0FBd0MsTUFBTSxxQkFBcUI7QUFDM0UsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPO0dBQ04sU0FBUyxLQUFLLFlBQVksT0FBTyxLQUFLLElBQUksS0FBSztHQUMvQyxvQkFBb0IsS0FBSyx1QkFBdUIsT0FBTyxLQUFLLElBQUksS0FBSztHQUNyRSxXQUFXLEtBQUssY0FBYyxPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ25ELG1CQUFtQixLQUFLLHNCQUFzQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ25FOztDQUVGLFNBQVMsaUNBQWlDLE1BQU07QUFDL0MsU0FBTyxzQ0FBc0MsTUFBTSxNQUFNOztDQUUxRCxTQUFTLHNDQUFzQyxPQUFPLHNCQUFzQixPQUFPO0FBQ2xGLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLFNBQVMsTUFBTTtHQUNmLG9CQUFvQixNQUFNO0dBQzFCLFdBQVcsTUFBTTtHQUNqQixtQkFBbUIsTUFBTTtHQUN6Qjs7SUFFQyxDQUFDO0FBSUwsSUFBSSw0QkFBNEMsMkJBQVcsRUFBRSx3RkFBd0YsY0FBWTs7Ozs7Ozs7Ozs7O0FBWWhLLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSw4QkFBOEI7QUFDdEMsV0FBUSw0QkFBNEI7QUFDcEMsV0FBUSxpQ0FBaUM7QUFDekMsV0FBUSwwQkFBMEI7QUFDbEMsV0FBUSwrQkFBK0I7Ozs7Q0FJdkMsU0FBUyw0QkFBNEIsT0FBTztBQUMzQyxNQUFJLEVBQUUsb0JBQW9CLFVBQVUsTUFBTSxzQkFBc0IsS0FBSyxFQUFHLFFBQU87QUFDL0UsTUFBSSxFQUFFLGtCQUFrQixVQUFVLE1BQU0sb0JBQW9CLEtBQUssRUFBRyxRQUFPO0FBQzNFLE1BQUksRUFBRSxlQUFlLFVBQVUsTUFBTSxpQkFBaUIsS0FBSyxFQUFHLFFBQU87QUFDckUsU0FBTzs7Q0FFUixTQUFTLDBCQUEwQixNQUFNO0FBQ3hDLFNBQU8sK0JBQStCLE1BQU0sTUFBTTs7Q0FFbkQsU0FBUywrQkFBK0IsTUFBTSxxQkFBcUI7QUFDbEUsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPO0dBQ04sa0JBQWtCLEtBQUs7R0FDdkIsZ0JBQWdCLEtBQUs7R0FDckIsYUFBYSxLQUFLO0dBQ2xCOztDQUVGLFNBQVMsd0JBQXdCLE1BQU07QUFDdEMsU0FBTyw2QkFBNkIsTUFBTSxNQUFNOztDQUVqRCxTQUFTLDZCQUE2QixPQUFPLHNCQUFzQixPQUFPO0FBQ3pFLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLGtCQUFrQixNQUFNO0dBQ3hCLGdCQUFnQixNQUFNO0dBQ3RCLGFBQWEsTUFBTTtHQUNuQjs7SUFFQyxDQUFDO0FBSUwsSUFBSSxtQkFBbUMsMkJBQVcsRUFBRSwrRUFBK0UsY0FBWTs7Ozs7Ozs7Ozs7O0FBWTlJLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSxXQUFXLEtBQUs7QUFDeEIsV0FBUSxxQkFBcUI7QUFDN0IsV0FBUSxtQkFBbUI7QUFDM0IsV0FBUSx3QkFBd0I7QUFDaEMsV0FBUSxpQkFBaUI7QUFDekIsV0FBUSxzQkFBc0I7Ozs7OztDQU05QixJQUFJO0FBQ0osRUFBQyxTQUFTLFlBQVk7QUFDckIsYUFBVyxnQkFBZ0I7QUFDM0IsYUFBVyxpQkFBaUI7SUFDMUIsYUFBYSxVQUFRLFdBQVcsV0FBVyxFQUFFLEVBQUU7Q0FDbEQsU0FBUyxtQkFBbUIsT0FBTztBQUNsQyxPQUFLLE1BQU0sT0FBTyxTQUFVLEtBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxVQUFVLElBQUksRUFDbEY7T0FBSSxTQUFTLFNBQVMsTUFBTyxRQUFPOztBQUVyQyxTQUFPOztDQUVSLFNBQVMsaUJBQWlCLE1BQU07QUFDL0IsU0FBTyxzQkFBc0IsTUFBTSxNQUFNOztDQUUxQyxTQUFTLHNCQUFzQixNQUFNLHFCQUFxQjtBQUN6RCxTQUFPOztDQUVSLFNBQVMsZUFBZSxPQUFPO0FBQzlCLFNBQU87O0NBRVIsU0FBUyxvQkFBb0IsT0FBTyxxQkFBcUI7QUFDeEQsU0FBTzs7SUFFTCxDQUFDO0FBSUwsSUFBSSxtQkFBbUMsMkJBQVcsRUFBRSwrRUFBK0UsY0FBWTs7Ozs7Ozs7Ozs7O0FBWTlJLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSxxQkFBcUI7QUFDN0IsV0FBUSxtQkFBbUI7QUFDM0IsV0FBUSx3QkFBd0I7QUFDaEMsV0FBUSxpQkFBaUI7QUFDekIsV0FBUSxzQkFBc0I7Q0FDOUIsTUFBTSxlQUFlLGtCQUFrQjs7OztDQUl2QyxTQUFTLG1CQUFtQixPQUFPO0FBQ2xDLE1BQUksRUFBRSxlQUFlLFVBQVUsTUFBTSxpQkFBaUIsS0FBSyxFQUFHLFFBQU87QUFDckUsU0FBTzs7Q0FFUixTQUFTLGlCQUFpQixNQUFNO0FBQy9CLFNBQU8sc0JBQXNCLE1BQU0sTUFBTTs7Q0FFMUMsU0FBUyxzQkFBc0IsTUFBTSxxQkFBcUI7QUFDekQsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPLEVBQUUsY0FBYyxHQUFHLGFBQWEsa0JBQWtCLEtBQUssYUFBYSxFQUFFOztDQUU5RSxTQUFTLGVBQWUsTUFBTTtBQUM3QixTQUFPLG9CQUFvQixNQUFNLE1BQU07O0NBRXhDLFNBQVMsb0JBQW9CLE9BQU8sc0JBQXNCLE9BQU87QUFDaEUsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPLEVBQUUsY0FBYyxHQUFHLGFBQWEsZ0JBQWdCLE1BQU0sYUFBYSxFQUFFOztJQUUxRSxDQUFDO0FBSUwsSUFBSSxrQkFBa0MsMkJBQVcsRUFBRSw4RUFBOEUsY0FBWTs7Ozs7Ozs7Ozs7O0FBWTVJLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSxvQkFBb0IsVUFBUSxpQkFBaUIsS0FBSztBQUMxRCxXQUFRLG9CQUFvQjtBQUM1QixXQUFRLGtCQUFrQjtBQUMxQixXQUFRLHVCQUF1QjtBQUMvQixXQUFRLGdCQUFnQjtBQUN4QixXQUFRLHFCQUFxQjs7Ozs7Q0FLN0IsSUFBSTtBQUNKLEVBQUMsU0FBUyxrQkFBa0I7QUFDM0IsbUJBQWlCLFVBQVU7QUFDM0IsbUJBQWlCLFNBQVM7SUFDeEIsbUJBQW1CLFVBQVEsaUJBQWlCLGlCQUFpQixFQUFFLEVBQUU7Ozs7O0NBS3BFLElBQUk7QUFDSixFQUFDLFNBQVMscUJBQXFCO0FBQzlCLHNCQUFvQixVQUFVO0FBQzlCLHNCQUFvQixnQkFBZ0I7QUFDcEMsc0JBQW9CLFNBQVM7QUFDN0Isc0JBQW9CLFVBQVU7SUFDNUIsc0JBQXNCLFVBQVEsb0JBQW9CLG9CQUFvQixFQUFFLEVBQUU7Ozs7Q0FJN0UsU0FBUyxrQkFBa0IsT0FBTztBQUNqQyxNQUFJLEVBQUUsYUFBYSxVQUFVLE1BQU0sZUFBZSxLQUFLLEVBQUcsUUFBTztBQUNqRSxTQUFPOztDQUVSLFNBQVMsZ0JBQWdCLE1BQU07QUFDOUIsU0FBTyxxQkFBcUIsTUFBTSxNQUFNOztDQUV6QyxTQUFTLHFCQUFxQixNQUFNLHFCQUFxQjtBQUN4RCxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixXQUFXLEtBQUssY0FBYyxPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ25ELE9BQU8sS0FBSyxVQUFVLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDM0MsVUFBVSxLQUFLLGFBQWEsT0FBTyxLQUFLLElBQUksS0FBSztHQUNqRCxrQkFBa0IsS0FBSyxxQkFBcUIsT0FBTyxLQUFLLElBQUksS0FBSztHQUNqRSxVQUFVLEtBQUssYUFBYSxPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ2pELFdBQVcsS0FBSztHQUNoQjs7Q0FFRixTQUFTLGNBQWMsTUFBTTtBQUM1QixTQUFPLG1CQUFtQixNQUFNLE1BQU07O0NBRXZDLFNBQVMsbUJBQW1CLE9BQU8sc0JBQXNCLE9BQU87QUFDL0QsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPO0dBQ04sV0FBVyxNQUFNO0dBQ2pCLE9BQU8sTUFBTTtHQUNiLFVBQVUsTUFBTTtHQUNoQixrQkFBa0IsTUFBTTtHQUN4QixVQUFVLE1BQU07R0FDaEIsV0FBVyxNQUFNO0dBQ2pCOztJQUVDLENBQUM7QUFJTCxJQUFJLDZCQUE2QywyQkFBVyxFQUFFLHlGQUF5RixjQUFZOzs7Ozs7Ozs7Ozs7QUFZbEssUUFBTyxlQUFlQSxXQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxXQUFRLHFCQUFxQixLQUFLO0FBQ2xDLFdBQVEsK0JBQStCO0FBQ3ZDLFdBQVEsNkJBQTZCO0FBQ3JDLFdBQVEsa0NBQWtDO0FBQzFDLFdBQVEsMkJBQTJCO0FBQ25DLFdBQVEsZ0NBQWdDOzs7Ozs7Q0FNeEMsSUFBSTtBQUNKLEVBQUMsU0FBUyxzQkFBc0I7QUFDL0IsdUJBQXFCLFVBQVU7QUFDL0IsdUJBQXFCLFlBQVk7QUFDakMsdUJBQXFCLGFBQWE7QUFDbEMsdUJBQXFCLFdBQVc7SUFDOUIsdUJBQXVCLFVBQVEscUJBQXFCLHFCQUFxQixFQUFFLEVBQUU7Q0FDaEYsU0FBUyw2QkFBNkIsT0FBTztBQUM1QyxPQUFLLE1BQU0sT0FBTyxtQkFBb0IsS0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLG9CQUFvQixJQUFJLEVBQ3RHO09BQUksbUJBQW1CLFNBQVMsTUFBTyxRQUFPOztBQUUvQyxTQUFPOztDQUVSLFNBQVMsMkJBQTJCLE1BQU07QUFDekMsU0FBTyxnQ0FBZ0MsTUFBTSxNQUFNOztDQUVwRCxTQUFTLGdDQUFnQyxNQUFNLHFCQUFxQjtBQUNuRSxTQUFPOztDQUVSLFNBQVMseUJBQXlCLE9BQU87QUFDeEMsU0FBTzs7Q0FFUixTQUFTLDhCQUE4QixPQUFPLHFCQUFxQjtBQUNsRSxTQUFPOztJQUVMLENBQUM7QUFJTCxJQUFJLG9DQUFvRCwyQkFBVyxFQUFFLGdHQUFnRyxjQUFZOzs7Ozs7Ozs7Ozs7QUFZaEwsUUFBTyxlQUFlQSxXQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxXQUFRLHNDQUFzQztBQUM5QyxXQUFRLG9DQUFvQztBQUM1QyxXQUFRLHlDQUF5QztBQUNqRCxXQUFRLGtDQUFrQztBQUMxQyxXQUFRLHVDQUF1QztDQUMvQyxNQUFNLDhCQUE4QixpQ0FBaUM7Ozs7Q0FJckUsU0FBUyxvQ0FBb0MsT0FBTztBQUNuRCxNQUFJLEVBQUUsV0FBVyxVQUFVLE1BQU0sYUFBYSxLQUFLLEVBQUcsUUFBTztBQUM3RCxNQUFJLEVBQUUsb0JBQW9CLFVBQVUsTUFBTSxzQkFBc0IsS0FBSyxFQUFHLFFBQU87QUFDL0UsU0FBTzs7Q0FFUixTQUFTLGtDQUFrQyxNQUFNO0FBQ2hELFNBQU8sdUNBQXVDLE1BQU0sTUFBTTs7Q0FFM0QsU0FBUyx1Q0FBdUMsTUFBTSxxQkFBcUI7QUFDMUUsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPO0dBQ04sNkJBQTZCLEtBQUssZ0NBQWdDLE9BQU8sS0FBSyxLQUFLLEdBQUcsNEJBQTRCLGlDQUFpQyxLQUFLLDZCQUE2QjtHQUNyTCxTQUFTLEtBQUs7R0FDZCxRQUFRLEtBQUssV0FBVyxPQUFPLEtBQUssSUFBSSxLQUFLO0dBQzdDLGtCQUFrQixLQUFLO0dBQ3ZCLFdBQVcsS0FBSyxjQUFjLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDbkQ7O0NBRUYsU0FBUyxnQ0FBZ0MsTUFBTTtBQUM5QyxTQUFPLHFDQUFxQyxNQUFNLE1BQU07O0NBRXpELFNBQVMscUNBQXFDLE9BQU8sc0JBQXNCLE9BQU87QUFDakYsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPO0dBQ04sOEJBQThCLEdBQUcsNEJBQTRCLCtCQUErQixNQUFNLDZCQUE2QjtHQUMvSCxTQUFTLE1BQU07R0FDZixRQUFRLE1BQU07R0FDZCxrQkFBa0IsTUFBTTtHQUN4QixXQUFXLE1BQU07R0FDakI7O0lBRUMsQ0FBQztBQUlMLElBQUksa0NBQWtELDJCQUFXLEVBQUUsOEZBQThGLGNBQVk7Ozs7Ozs7Ozs7OztBQVk1SyxRQUFPLGVBQWVBLFdBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFdBQVEsb0NBQW9DO0FBQzVDLFdBQVEsa0NBQWtDO0FBQzFDLFdBQVEsdUNBQXVDO0FBQy9DLFdBQVEsZ0NBQWdDO0FBQ3hDLFdBQVEscUNBQXFDOzs7O0NBSTdDLFNBQVMsa0NBQWtDLE9BQU87QUFDakQsTUFBSSxFQUFFLGdCQUFnQixVQUFVLE1BQU0sa0JBQWtCLEtBQUssRUFBRyxRQUFPO0FBQ3ZFLE1BQUksRUFBRSxpQkFBaUIsVUFBVSxNQUFNLG1CQUFtQixLQUFLLEVBQUcsUUFBTztBQUN6RSxNQUFJLEVBQUUsUUFBUSxVQUFVLE1BQU0sVUFBVSxLQUFLLEVBQUcsUUFBTztBQUN2RCxNQUFJLEVBQUUsVUFBVSxVQUFVLE1BQU0sWUFBWSxLQUFLLEVBQUcsUUFBTztBQUMzRCxNQUFJLEVBQUUsWUFBWSxVQUFVLE1BQU0sY0FBYyxLQUFLLEVBQUcsUUFBTztBQUMvRCxTQUFPOztDQUVSLFNBQVMsZ0NBQWdDLE1BQU07QUFDOUMsU0FBTyxxQ0FBcUMsTUFBTSxNQUFNOztDQUV6RCxTQUFTLHFDQUFxQyxNQUFNLHFCQUFxQjtBQUN4RSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixjQUFjLElBQUksS0FBSyxLQUFLLGNBQWM7R0FDMUMsZUFBZSxLQUFLO0dBQ3BCLE1BQU0sS0FBSztHQUNYLFFBQVEsS0FBSztHQUNiLFVBQVUsS0FBSztHQUNmOztDQUVGLFNBQVMsOEJBQThCLE1BQU07QUFDNUMsU0FBTyxtQ0FBbUMsTUFBTSxNQUFNOztDQUV2RCxTQUFTLG1DQUFtQyxPQUFPLHNCQUFzQixPQUFPO0FBQy9FLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLGNBQWMsTUFBTSxjQUFjLGFBQWE7R0FDL0MsZUFBZSxNQUFNO0dBQ3JCLE1BQU0sTUFBTTtHQUNaLFFBQVEsTUFBTTtHQUNkLFVBQVUsTUFBTTtHQUNoQjs7SUFFQyxDQUFDO0FBSUwsSUFBSSw4QkFBOEMsMkJBQVcsRUFBRSwwRkFBMEYsY0FBWTs7Ozs7Ozs7Ozs7O0FBWXBLLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSxnQ0FBZ0M7QUFDeEMsV0FBUSw4QkFBOEI7QUFDdEMsV0FBUSxtQ0FBbUM7QUFDM0MsV0FBUSw0QkFBNEI7QUFDcEMsV0FBUSxpQ0FBaUM7Ozs7Q0FJekMsU0FBUyw4QkFBOEIsT0FBTztBQUM3QyxNQUFJLEVBQUUsV0FBVyxVQUFVLE1BQU0sYUFBYSxLQUFLLEVBQUcsUUFBTztBQUM3RCxNQUFJLEVBQUUsUUFBUSxVQUFVLE1BQU0sVUFBVSxLQUFLLEVBQUcsUUFBTztBQUN2RCxTQUFPOztDQUVSLFNBQVMsNEJBQTRCLE1BQU07QUFDMUMsU0FBTyxpQ0FBaUMsTUFBTSxNQUFNOztDQUVyRCxTQUFTLGlDQUFpQyxNQUFNLHFCQUFxQjtBQUNwRSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixTQUFTLEtBQUs7R0FDZCxNQUFNLEtBQUs7R0FDWDs7Q0FFRixTQUFTLDBCQUEwQixNQUFNO0FBQ3hDLFNBQU8sK0JBQStCLE1BQU0sTUFBTTs7Q0FFbkQsU0FBUywrQkFBK0IsT0FBTyxzQkFBc0IsT0FBTztBQUMzRSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixTQUFTLE1BQU07R0FDZixNQUFNLE1BQU07R0FDWjs7SUFFQyxDQUFDO0FBSUwsSUFBSSxxQ0FBcUQsMkJBQVcsRUFBRSxpR0FBaUcsY0FBWTs7Ozs7Ozs7Ozs7O0FBWWxMLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSx1Q0FBdUM7QUFDL0MsV0FBUSxxQ0FBcUM7QUFDN0MsV0FBUSwwQ0FBMEM7QUFDbEQsV0FBUSxtQ0FBbUM7QUFDM0MsV0FBUSx3Q0FBd0M7Q0FDaEQsTUFBTSw0QkFBNEIsaUNBQWlDO0NBQ25FLE1BQU0sd0JBQXdCLDZCQUE2Qjs7OztDQUkzRCxTQUFTLHFDQUFxQyxPQUFPO0FBQ3BELE1BQUksRUFBRSxrQkFBa0IsVUFBVSxNQUFNLG9CQUFvQixLQUFLLEVBQUcsUUFBTztBQUMzRSxNQUFJLEVBQUUsY0FBYyxVQUFVLE1BQU0sZ0JBQWdCLEtBQUssRUFBRyxRQUFPO0FBQ25FLFNBQU87O0NBRVIsU0FBUyxtQ0FBbUMsTUFBTTtBQUNqRCxTQUFPLHdDQUF3QyxNQUFNLE1BQU07O0NBRTVELFNBQVMsd0NBQXdDLE1BQU0scUJBQXFCO0FBQzNFLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTztHQUNOLGlCQUFpQixHQUFHLDBCQUEwQixpQ0FBaUMsS0FBSyxnQkFBZ0I7R0FDcEcsYUFBYSxHQUFHLHNCQUFzQiw2QkFBNkIsS0FBSyxZQUFZO0dBQ3BGOztDQUVGLFNBQVMsaUNBQWlDLE1BQU07QUFDL0MsU0FBTyxzQ0FBc0MsTUFBTSxNQUFNOztDQUUxRCxTQUFTLHNDQUFzQyxPQUFPLHNCQUFzQixPQUFPO0FBQ2xGLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLGlCQUFpQixHQUFHLDBCQUEwQiwrQkFBK0IsTUFBTSxnQkFBZ0I7R0FDbkcsYUFBYSxHQUFHLHNCQUFzQiwyQkFBMkIsTUFBTSxZQUFZO0dBQ25GOztJQUVDLENBQUM7QUFJTCxJQUFJLGdDQUFnRCwyQkFBVyxFQUFFLDRGQUE0RixjQUFZOzs7Ozs7Ozs7Ozs7QUFZeEssUUFBTyxlQUFlQSxXQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxXQUFRLGtDQUFrQztBQUMxQyxXQUFRLGdDQUFnQztBQUN4QyxXQUFRLHFDQUFxQztBQUM3QyxXQUFRLDhCQUE4QjtBQUN0QyxXQUFRLG1DQUFtQzs7OztDQUkzQyxTQUFTLGdDQUFnQyxPQUFPO0FBQy9DLE1BQUksRUFBRSxvQkFBb0IsVUFBVSxNQUFNLHNCQUFzQixLQUFLLEVBQUcsUUFBTztBQUMvRSxNQUFJLEVBQUUsa0JBQWtCLFVBQVUsTUFBTSxvQkFBb0IsS0FBSyxFQUFHLFFBQU87QUFDM0UsTUFBSSxFQUFFLFFBQVEsVUFBVSxNQUFNLFVBQVUsS0FBSyxFQUFHLFFBQU87QUFDdkQsTUFBSSxFQUFFLFVBQVUsVUFBVSxNQUFNLFlBQVksS0FBSyxFQUFHLFFBQU87QUFDM0QsU0FBTzs7Q0FFUixTQUFTLDhCQUE4QixNQUFNO0FBQzVDLFNBQU8sbUNBQW1DLE1BQU0sTUFBTTs7Q0FFdkQsU0FBUyxtQ0FBbUMsTUFBTSxxQkFBcUI7QUFDdEUsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPO0dBQ04sa0JBQWtCLEtBQUs7R0FDdkIsZ0JBQWdCLEtBQUs7R0FDckIsTUFBTSxLQUFLO0dBQ1gsUUFBUSxLQUFLO0dBQ2IsT0FBTyxLQUFLLFVBQVUsT0FBTyxLQUFLLElBQUksS0FBSztHQUMzQzs7Q0FFRixTQUFTLDRCQUE0QixNQUFNO0FBQzFDLFNBQU8saUNBQWlDLE1BQU0sTUFBTTs7Q0FFckQsU0FBUyxpQ0FBaUMsT0FBTyxzQkFBc0IsT0FBTztBQUM3RSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixrQkFBa0IsTUFBTTtHQUN4QixnQkFBZ0IsTUFBTTtHQUN0QixNQUFNLE1BQU07R0FDWixRQUFRLE1BQU07R0FDZCxPQUFPLE1BQU07R0FDYjs7SUFFQyxDQUFDO0FBSUwsSUFBSSw2QkFBNkMsMkJBQVcsRUFBRSx5RkFBeUYsY0FBWTs7Ozs7Ozs7Ozs7O0FBWWxLLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSwrQkFBK0I7QUFDdkMsV0FBUSw2QkFBNkI7QUFDckMsV0FBUSxrQ0FBa0M7QUFDMUMsV0FBUSwyQkFBMkI7QUFDbkMsV0FBUSxnQ0FBZ0M7Q0FDeEMsTUFBTSwwQkFBMEIsK0JBQStCOzs7O0NBSS9ELFNBQVMsNkJBQTZCLE9BQU87QUFDNUMsTUFBSSxFQUFFLFVBQVUsVUFBVSxNQUFNLFlBQVksS0FBSyxFQUFHLFFBQU87QUFDM0QsTUFBSSxFQUFFLGdCQUFnQixVQUFVLE1BQU0sa0JBQWtCLEtBQUssRUFBRyxRQUFPO0FBQ3ZFLE1BQUksRUFBRSxpQkFBaUIsVUFBVSxNQUFNLG1CQUFtQixLQUFLLEVBQUcsUUFBTztBQUN6RSxNQUFJLEVBQUUsZUFBZSxVQUFVLE1BQU0saUJBQWlCLEtBQUssRUFBRyxRQUFPO0FBQ3JFLE1BQUksRUFBRSxRQUFRLFVBQVUsTUFBTSxVQUFVLEtBQUssRUFBRyxRQUFPO0FBQ3ZELE1BQUksRUFBRSxjQUFjLFVBQVUsTUFBTSxnQkFBZ0IsS0FBSyxFQUFHLFFBQU87QUFDbkUsTUFBSSxFQUFFLDBCQUEwQixVQUFVLE1BQU0sNEJBQTRCLEtBQUssRUFBRyxRQUFPO0FBQzNGLFNBQU87O0NBRVIsU0FBUywyQkFBMkIsTUFBTTtBQUN6QyxTQUFPLGdDQUFnQyxNQUFNLE1BQU07O0NBRXBELFNBQVMsZ0NBQWdDLE1BQU0scUJBQXFCO0FBQ25FLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTztHQUNOLFlBQVksS0FBSyxlQUFlLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDckQsY0FBYyxLQUFLLGlCQUFpQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ3pELGVBQWUsS0FBSyxrQkFBa0IsT0FBTyxLQUFLLElBQUksS0FBSyxlQUFlLElBQUksd0JBQXdCLDhCQUE4QjtHQUNwSSxRQUFRLEtBQUs7R0FDYixjQUFjLElBQUksS0FBSyxLQUFLLGNBQWM7R0FDMUMsZUFBZSxLQUFLO0dBQ3BCLGFBQWEsS0FBSztHQUNsQixNQUFNLEtBQUs7R0FDWCxZQUFZLEtBQUs7R0FDakIsd0JBQXdCLEtBQUs7R0FDN0IsWUFBWSxLQUFLLGVBQWUsT0FBTyxLQUFLLElBQUksS0FBSztHQUNyRDs7Q0FFRixTQUFTLHlCQUF5QixNQUFNO0FBQ3ZDLFNBQU8sOEJBQThCLE1BQU0sTUFBTTs7Q0FFbEQsU0FBUyw4QkFBOEIsT0FBTyxzQkFBc0IsT0FBTztBQUMxRSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixZQUFZLE1BQU07R0FDbEIsY0FBYyxNQUFNO0dBQ3BCLGVBQWUsTUFBTSxrQkFBa0IsT0FBTyxLQUFLLElBQUksTUFBTSxlQUFlLElBQUksd0JBQXdCLDRCQUE0QjtHQUNwSSxRQUFRLE1BQU07R0FDZCxjQUFjLE1BQU0sY0FBYyxhQUFhO0dBQy9DLGVBQWUsTUFBTTtHQUNyQixhQUFhLE1BQU07R0FDbkIsTUFBTSxNQUFNO0dBQ1osWUFBWSxNQUFNO0dBQ2xCLHdCQUF3QixNQUFNO0dBQzlCLFlBQVksTUFBTTtHQUNsQjs7SUFFQyxDQUFDO0FBSUwsSUFBSSwwQ0FBMEQsMkJBQVcsRUFBRSxzR0FBc0csY0FBWTs7Ozs7Ozs7Ozs7O0FBWTVMLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSw0Q0FBNEM7QUFDcEQsV0FBUSwwQ0FBMEM7QUFDbEQsV0FBUSwrQ0FBK0M7QUFDdkQsV0FBUSx3Q0FBd0M7QUFDaEQsV0FBUSw2Q0FBNkM7Q0FDckQsTUFBTSx5QkFBeUIsNEJBQTRCO0NBQzNELE1BQU0sdUJBQXVCLDRCQUE0Qjs7OztDQUl6RCxTQUFTLDBDQUEwQyxPQUFPO0FBQ3pELE1BQUksRUFBRSxVQUFVLFVBQVUsTUFBTSxZQUFZLEtBQUssRUFBRyxRQUFPO0FBQzNELFNBQU87O0NBRVIsU0FBUyx3Q0FBd0MsTUFBTTtBQUN0RCxTQUFPLDZDQUE2QyxNQUFNLE1BQU07O0NBRWpFLFNBQVMsNkNBQTZDLE1BQU0scUJBQXFCO0FBQ2hGLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTztHQUNOLHVCQUF1QixLQUFLLDBCQUEwQixPQUFPLEtBQUssS0FBSyxHQUFHLHFCQUFxQiw0QkFBNEIsS0FBSyx1QkFBdUI7R0FDdkosUUFBUSxLQUFLLFFBQVEsSUFBSSx1QkFBdUIsMkJBQTJCO0dBQzNFLGFBQWEsS0FBSyxnQkFBZ0IsT0FBTyxLQUFLLElBQUksS0FBSztHQUN2RCxpQkFBaUIsS0FBSyxvQkFBb0IsT0FBTyxLQUFLLElBQUksS0FBSztHQUMvRDs7Q0FFRixTQUFTLHNDQUFzQyxNQUFNO0FBQ3BELFNBQU8sMkNBQTJDLE1BQU0sTUFBTTs7Q0FFL0QsU0FBUywyQ0FBMkMsT0FBTyxzQkFBc0IsT0FBTztBQUN2RixNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTix3QkFBd0IsR0FBRyxxQkFBcUIsMEJBQTBCLE1BQU0sdUJBQXVCO0dBQ3ZHLFFBQVEsTUFBTSxRQUFRLElBQUksdUJBQXVCLHlCQUF5QjtHQUMxRSxhQUFhLE1BQU07R0FDbkIsaUJBQWlCLE1BQU07R0FDdkI7O0lBRUMsQ0FBQztBQUlMLElBQUkscUJBQXFDLDJCQUFXLEVBQUUsaUZBQWlGLGNBQVk7Ozs7Ozs7Ozs7OztBQVlsSixRQUFPLGVBQWVBLFdBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFdBQVEsdUJBQXVCO0FBQy9CLFdBQVEscUJBQXFCO0FBQzdCLFdBQVEsMEJBQTBCO0FBQ2xDLFdBQVEsbUJBQW1CO0FBQzNCLFdBQVEsd0JBQXdCO0NBQ2hDLE1BQU0sZUFBZSxrQkFBa0I7Ozs7Q0FJdkMsU0FBUyxxQkFBcUIsT0FBTztBQUNwQyxNQUFJLEVBQUUsZUFBZSxVQUFVLE1BQU0saUJBQWlCLEtBQUssRUFBRyxRQUFPO0FBQ3JFLFNBQU87O0NBRVIsU0FBUyxtQkFBbUIsTUFBTTtBQUNqQyxTQUFPLHdCQUF3QixNQUFNLE1BQU07O0NBRTVDLFNBQVMsd0JBQXdCLE1BQU0scUJBQXFCO0FBQzNELE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTyxFQUFFLGNBQWMsR0FBRyxhQUFhLGtCQUFrQixLQUFLLGFBQWEsRUFBRTs7Q0FFOUUsU0FBUyxpQkFBaUIsTUFBTTtBQUMvQixTQUFPLHNCQUFzQixNQUFNLE1BQU07O0NBRTFDLFNBQVMsc0JBQXNCLE9BQU8sc0JBQXNCLE9BQU87QUFDbEUsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPLEVBQUUsY0FBYyxHQUFHLGFBQWEsZ0JBQWdCLE1BQU0sYUFBYSxFQUFFOztJQUUxRSxDQUFDO0FBSUwsSUFBSSw2Q0FBNkQsMkJBQVcsRUFBRSx5R0FBeUcsY0FBWTs7Ozs7Ozs7Ozs7O0FBWWxNLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSw2Q0FBNkM7QUFDckQsV0FBUSxrREFBa0Q7QUFDMUQsV0FBUSwyQ0FBMkM7QUFDbkQsV0FBUSxnREFBZ0Q7Q0FDeEQsTUFBTSxhQUFhLGtCQUFrQjtDQUNyQyxNQUFNLGVBQWUsb0JBQW9CO0NBQ3pDLFNBQVMsMkNBQTJDLE1BQU07QUFDekQsU0FBTyxnREFBZ0QsTUFBTSxNQUFNOztDQUVwRSxTQUFTLGdEQUFnRCxNQUFNLHFCQUFxQjtBQUNuRixNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLE9BQUssR0FBRyxXQUFXLG9CQUFvQixLQUFLLENBQUUsU0FBUSxHQUFHLFdBQVcsdUJBQXVCLE1BQU0sS0FBSztBQUN0RyxPQUFLLEdBQUcsYUFBYSxzQkFBc0IsS0FBSyxDQUFFLFNBQVEsR0FBRyxhQUFhLHlCQUF5QixNQUFNLEtBQUs7QUFDOUcsU0FBTyxFQUFFOztDQUVWLFNBQVMseUNBQXlDLE1BQU07QUFDdkQsU0FBTyw4Q0FBOEMsTUFBTSxNQUFNOztDQUVsRSxTQUFTLDhDQUE4QyxPQUFPLHNCQUFzQixPQUFPO0FBQzFGLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsT0FBSyxHQUFHLFdBQVcsb0JBQW9CLE1BQU0sQ0FBRSxTQUFRLEdBQUcsV0FBVyxnQkFBZ0IsTUFBTTtBQUMzRixPQUFLLEdBQUcsYUFBYSxzQkFBc0IsTUFBTSxDQUFFLFNBQVEsR0FBRyxhQUFhLGtCQUFrQixNQUFNO0FBQ25HLFNBQU8sRUFBRTs7SUFFUCxDQUFDO0FBSUwsSUFBSSxpQ0FBaUQsMkJBQVcsRUFBRSw2RkFBNkYsY0FBWTs7Ozs7Ozs7Ozs7O0FBWTFLLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSxtQ0FBbUM7QUFDM0MsV0FBUSxpQ0FBaUM7QUFDekMsV0FBUSxzQ0FBc0M7QUFDOUMsV0FBUSwrQkFBK0I7QUFDdkMsV0FBUSxvQ0FBb0M7Q0FDNUMsTUFBTSx1Q0FBdUMsNENBQTRDOzs7O0NBSXpGLFNBQVMsaUNBQWlDLE9BQU87QUFDaEQsTUFBSSxFQUFFLFlBQVksVUFBVSxNQUFNLGNBQWMsS0FBSyxFQUFHLFFBQU87QUFDL0QsU0FBTzs7Q0FFUixTQUFTLCtCQUErQixNQUFNO0FBQzdDLFNBQU8sb0NBQW9DLE1BQU0sTUFBTTs7Q0FFeEQsU0FBUyxvQ0FBb0MsTUFBTSxxQkFBcUI7QUFDdkUsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPO0dBQ04saUJBQWlCLEtBQUssb0JBQW9CLE9BQU8sS0FBSyxLQUFLLEdBQUcscUNBQXFDLDRDQUE0QyxLQUFLLGlCQUFpQjtHQUNySyxVQUFVLEtBQUs7R0FDZjs7Q0FFRixTQUFTLDZCQUE2QixNQUFNO0FBQzNDLFNBQU8sa0NBQWtDLE1BQU0sTUFBTTs7Q0FFdEQsU0FBUyxrQ0FBa0MsT0FBTyxzQkFBc0IsT0FBTztBQUM5RSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixrQkFBa0IsR0FBRyxxQ0FBcUMsMENBQTBDLE1BQU0saUJBQWlCO0dBQzNILFVBQVUsTUFBTTtHQUNoQjs7SUFFQyxDQUFDO0FBSUwsSUFBSSxrQ0FBa0QsMkJBQVcsRUFBRSw4RkFBOEYsY0FBWTs7Ozs7Ozs7Ozs7O0FBWTVLLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSxvQ0FBb0M7QUFDNUMsV0FBUSxrQ0FBa0M7QUFDMUMsV0FBUSx1Q0FBdUM7QUFDL0MsV0FBUSxnQ0FBZ0M7QUFDeEMsV0FBUSxxQ0FBcUM7Q0FDN0MsTUFBTSxhQUFhLGtCQUFrQjs7OztDQUlyQyxTQUFTLGtDQUFrQyxPQUFPO0FBQ2pELE1BQUksRUFBRSxtQkFBbUIsVUFBVSxNQUFNLHFCQUFxQixLQUFLLEVBQUcsUUFBTztBQUM3RSxNQUFJLEVBQUUsc0JBQXNCLFVBQVUsTUFBTSx3QkFBd0IsS0FBSyxFQUFHLFFBQU87QUFDbkYsTUFBSSxFQUFFLGVBQWUsVUFBVSxNQUFNLGlCQUFpQixLQUFLLEVBQUcsUUFBTztBQUNyRSxTQUFPOztDQUVSLFNBQVMsZ0NBQWdDLE1BQU07QUFDOUMsU0FBTyxxQ0FBcUMsTUFBTSxNQUFNOztDQUV6RCxTQUFTLHFDQUFxQyxNQUFNLHFCQUFxQjtBQUN4RSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixpQkFBaUIsS0FBSztHQUN0QixvQkFBb0IsS0FBSztHQUN6QixjQUFjLEdBQUcsV0FBVyxrQkFBa0IsS0FBSyxhQUFhO0dBQ2hFOztDQUVGLFNBQVMsOEJBQThCLE1BQU07QUFDNUMsU0FBTyxtQ0FBbUMsTUFBTSxNQUFNOztDQUV2RCxTQUFTLG1DQUFtQyxPQUFPLHNCQUFzQixPQUFPO0FBQy9FLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLGlCQUFpQixNQUFNO0dBQ3ZCLG9CQUFvQixNQUFNO0dBQzFCLGNBQWMsR0FBRyxXQUFXLGdCQUFnQixNQUFNLGFBQWE7R0FDL0Q7O0lBRUMsQ0FBQztBQUlMLElBQUksbUNBQW1ELDJCQUFXLEVBQUUsK0ZBQStGLGNBQVk7Ozs7Ozs7Ozs7OztBQVk5SyxRQUFPLGVBQWVBLFdBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFdBQVEsMkJBQTJCLEtBQUs7QUFDeEMsV0FBUSxxQ0FBcUM7QUFDN0MsV0FBUSxtQ0FBbUM7QUFDM0MsV0FBUSx3Q0FBd0M7QUFDaEQsV0FBUSxpQ0FBaUM7QUFDekMsV0FBUSxzQ0FBc0M7Ozs7OztDQU05QyxJQUFJO0FBQ0osRUFBQyxTQUFTLDRCQUE0QjtBQUNyQyw2QkFBMkIsd0JBQXdCO0FBQ25ELDZCQUEyQixjQUFjO0FBQ3pDLDZCQUEyQixlQUFlO0FBQzFDLDZCQUEyQixlQUFlO0FBQzFDLDZCQUEyQixhQUFhO0FBQ3hDLDZCQUEyQixlQUFlO0FBQzFDLDZCQUEyQixnQkFBZ0I7QUFDM0MsNkJBQTJCLG1CQUFtQjtBQUM5Qyw2QkFBMkIscUJBQXFCO0FBQ2hELDZCQUEyQixrQkFBa0I7QUFDN0MsNkJBQTJCLHlCQUF5QjtBQUNwRCw2QkFBMkIsbUJBQW1CO0FBQzlDLDZCQUEyQixzQkFBc0I7QUFDakQsNkJBQTJCLGVBQWU7QUFDMUMsNkJBQTJCLHNCQUFzQjtBQUNqRCw2QkFBMkIsZUFBZTtBQUMxQyw2QkFBMkIsaUJBQWlCO0FBQzVDLDZCQUEyQixhQUFhO0FBQ3hDLDZCQUEyQixVQUFVO0FBQ3JDLDZCQUEyQix5QkFBeUI7QUFDcEQsNkJBQTJCLHlCQUF5QjtBQUNwRCw2QkFBMkIsc0JBQXNCO0FBQ2pELDZCQUEyQixlQUFlO0FBQzFDLDZCQUEyQixlQUFlO0FBQzFDLDZCQUEyQixpQkFBaUI7SUFDMUMsNkJBQTZCLFVBQVEsMkJBQTJCLDJCQUEyQixFQUFFLEVBQUU7Q0FDbEcsU0FBUyxtQ0FBbUMsT0FBTztBQUNsRCxPQUFLLE1BQU0sT0FBTyx5QkFBMEIsS0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLDBCQUEwQixJQUFJLEVBQ2xIO09BQUkseUJBQXlCLFNBQVMsTUFBTyxRQUFPOztBQUVyRCxTQUFPOztDQUVSLFNBQVMsaUNBQWlDLE1BQU07QUFDL0MsU0FBTyxzQ0FBc0MsTUFBTSxNQUFNOztDQUUxRCxTQUFTLHNDQUFzQyxNQUFNLHFCQUFxQjtBQUN6RSxTQUFPOztDQUVSLFNBQVMsK0JBQStCLE9BQU87QUFDOUMsU0FBTzs7Q0FFUixTQUFTLG9DQUFvQyxPQUFPLHFCQUFxQjtBQUN4RSxTQUFPOztJQUVMLENBQUM7QUFJTCxJQUFJLDJCQUEyQywyQkFBVyxFQUFFLHVGQUF1RixjQUFZOzs7Ozs7Ozs7Ozs7QUFZOUosUUFBTyxlQUFlQSxXQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxXQUFRLDZCQUE2QjtBQUNyQyxXQUFRLDJCQUEyQjtBQUNuQyxXQUFRLGdDQUFnQztBQUN4QyxXQUFRLHlCQUF5QjtBQUNqQyxXQUFRLDhCQUE4Qjs7OztDQUl0QyxTQUFTLDJCQUEyQixPQUFPO0FBQzFDLFNBQU87O0NBRVIsU0FBUyx5QkFBeUIsTUFBTTtBQUN2QyxTQUFPLDhCQUE4QixNQUFNLE1BQU07O0NBRWxELFNBQVMsOEJBQThCLE1BQU0scUJBQXFCO0FBQ2pFLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTztHQUNOLGNBQWMsS0FBSyxpQkFBaUIsT0FBTyxLQUFLLElBQUksS0FBSztHQUN6RCxTQUFTLEtBQUssWUFBWSxPQUFPLEtBQUssSUFBSSxLQUFLO0dBQy9DLG1CQUFtQixLQUFLLHNCQUFzQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ25FLG9CQUFvQixLQUFLLHVCQUF1QixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ3JFLDBCQUEwQixLQUFLLDZCQUE2QixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ2pGLFFBQVEsS0FBSyxXQUFXLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDN0MsVUFBVSxLQUFLLGFBQWEsT0FBTyxLQUFLLElBQUksS0FBSztHQUNqRCw0QkFBNEIsS0FBSywrQkFBK0IsT0FBTyxLQUFLLElBQUksS0FBSztHQUNyRixlQUFlLEtBQUssa0JBQWtCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDM0QsU0FBUyxLQUFLLFlBQVksT0FBTyxLQUFLLElBQUksS0FBSztHQUMvQzs7Q0FFRixTQUFTLHVCQUF1QixNQUFNO0FBQ3JDLFNBQU8sNEJBQTRCLE1BQU0sTUFBTTs7Q0FFaEQsU0FBUyw0QkFBNEIsT0FBTyxzQkFBc0IsT0FBTztBQUN4RSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixjQUFjLE1BQU07R0FDcEIsU0FBUyxNQUFNO0dBQ2YsbUJBQW1CLE1BQU07R0FDekIsb0JBQW9CLE1BQU07R0FDMUIsMEJBQTBCLE1BQU07R0FDaEMsUUFBUSxNQUFNO0dBQ2QsVUFBVSxNQUFNO0dBQ2hCLDRCQUE0QixNQUFNO0dBQ2xDLGVBQWUsTUFBTTtHQUNyQixTQUFTLE1BQU07R0FDZjs7SUFFQyxDQUFDO0FBSUwsSUFBSSx5Q0FBeUQsMkJBQVcsRUFBRSxxR0FBcUcsY0FBWTs7Ozs7Ozs7Ozs7O0FBWTFMLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSwyQ0FBMkM7QUFDbkQsV0FBUSx5Q0FBeUM7QUFDakQsV0FBUSw4Q0FBOEM7QUFDdEQsV0FBUSx1Q0FBdUM7QUFDL0MsV0FBUSw0Q0FBNEM7Q0FDcEQsTUFBTSw4QkFBOEIsaUNBQWlDOzs7O0NBSXJFLFNBQVMseUNBQXlDLE9BQU87QUFDeEQsTUFBSSxFQUFFLHFCQUFxQixVQUFVLE1BQU0sdUJBQXVCLEtBQUssRUFBRyxRQUFPO0FBQ2pGLFNBQU87O0NBRVIsU0FBUyx1Q0FBdUMsTUFBTTtBQUNyRCxTQUFPLDRDQUE0QyxNQUFNLE1BQU07O0NBRWhFLFNBQVMsNENBQTRDLE1BQU0scUJBQXFCO0FBQy9FLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTztHQUNOLG1CQUFtQixLQUFLO0dBQ3hCLDZCQUE2QixLQUFLLGdDQUFnQyxPQUFPLEtBQUssS0FBSyxHQUFHLDRCQUE0QixpQ0FBaUMsS0FBSyw2QkFBNkI7R0FDckw7O0NBRUYsU0FBUyxxQ0FBcUMsTUFBTTtBQUNuRCxTQUFPLDBDQUEwQyxNQUFNLE1BQU07O0NBRTlELFNBQVMsMENBQTBDLE9BQU8sc0JBQXNCLE9BQU87QUFDdEYsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPO0dBQ04sbUJBQW1CLE1BQU07R0FDekIsOEJBQThCLEdBQUcsNEJBQTRCLCtCQUErQixNQUFNLDZCQUE2QjtHQUMvSDs7SUFFQyxDQUFDO0FBSUwsSUFBSSxpQ0FBaUQsMkJBQVcsRUFBRSw2RkFBNkYsY0FBWTs7Ozs7Ozs7Ozs7O0FBWTFLLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSxtQ0FBbUM7QUFDM0MsV0FBUSxpQ0FBaUM7QUFDekMsV0FBUSxzQ0FBc0M7QUFDOUMsV0FBUSwrQkFBK0I7QUFDdkMsV0FBUSxvQ0FBb0M7Q0FDNUMsTUFBTSw4QkFBOEIsaUNBQWlDOzs7O0NBSXJFLFNBQVMsaUNBQWlDLE9BQU87QUFDaEQsU0FBTzs7Q0FFUixTQUFTLCtCQUErQixNQUFNO0FBQzdDLFNBQU8sb0NBQW9DLE1BQU0sTUFBTTs7Q0FFeEQsU0FBUyxvQ0FBb0MsTUFBTSxxQkFBcUI7QUFDdkUsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPLEVBQUUsNkJBQTZCLEtBQUssZ0NBQWdDLE9BQU8sS0FBSyxLQUFLLEdBQUcsNEJBQTRCLGlDQUFpQyxLQUFLLDZCQUE2QixFQUFFOztDQUVqTSxTQUFTLDZCQUE2QixNQUFNO0FBQzNDLFNBQU8sa0NBQWtDLE1BQU0sTUFBTTs7Q0FFdEQsU0FBUyxrQ0FBa0MsT0FBTyxzQkFBc0IsT0FBTztBQUM5RSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU8sRUFBRSw4QkFBOEIsR0FBRyw0QkFBNEIsK0JBQStCLE1BQU0sNkJBQTZCLEVBQUU7O0lBRXhJLENBQUM7QUFJTCxJQUFJLGtDQUFrRCwyQkFBVyxFQUFFLDhGQUE4RixjQUFZOzs7Ozs7Ozs7Ozs7QUFZNUssUUFBTyxlQUFlQSxXQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxXQUFRLG9DQUFvQztBQUM1QyxXQUFRLGtDQUFrQztBQUMxQyxXQUFRLHVDQUF1QztBQUMvQyxXQUFRLGdDQUFnQztBQUN4QyxXQUFRLHFDQUFxQzs7OztDQUk3QyxTQUFTLGtDQUFrQyxPQUFPO0FBQ2pELE1BQUksRUFBRSx1QkFBdUIsVUFBVSxNQUFNLHlCQUF5QixLQUFLLEVBQUcsUUFBTztBQUNyRixTQUFPOztDQUVSLFNBQVMsZ0NBQWdDLE1BQU07QUFDOUMsU0FBTyxxQ0FBcUMsTUFBTSxNQUFNOztDQUV6RCxTQUFTLHFDQUFxQyxNQUFNLHFCQUFxQjtBQUN4RSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixXQUFXLEtBQUssY0FBYyxPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ25ELHFCQUFxQixLQUFLO0dBQzFCOztDQUVGLFNBQVMsOEJBQThCLE1BQU07QUFDNUMsU0FBTyxtQ0FBbUMsTUFBTSxNQUFNOztDQUV2RCxTQUFTLG1DQUFtQyxPQUFPLHNCQUFzQixPQUFPO0FBQy9FLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLFdBQVcsTUFBTTtHQUNqQixxQkFBcUIsTUFBTTtHQUMzQjs7SUFFQyxDQUFDO0FBSUwsSUFBSSxxQkFBcUMsMkJBQVcsRUFBRSxpRkFBaUYsY0FBWTs7Ozs7Ozs7Ozs7O0FBWWxKLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSx1QkFBdUI7QUFDL0IsV0FBUSxxQkFBcUI7QUFDN0IsV0FBUSwwQkFBMEI7QUFDbEMsV0FBUSxtQkFBbUI7QUFDM0IsV0FBUSx3QkFBd0I7Ozs7Q0FJaEMsU0FBUyxxQkFBcUIsT0FBTztBQUNwQyxNQUFJLEVBQUUsV0FBVyxVQUFVLE1BQU0sYUFBYSxLQUFLLEVBQUcsUUFBTztBQUM3RCxNQUFJLEVBQUUsV0FBVyxVQUFVLE1BQU0sYUFBYSxLQUFLLEVBQUcsUUFBTztBQUM3RCxTQUFPOztDQUVSLFNBQVMsbUJBQW1CLE1BQU07QUFDakMsU0FBTyx3QkFBd0IsTUFBTSxNQUFNOztDQUU1QyxTQUFTLHdCQUF3QixNQUFNLHFCQUFxQjtBQUMzRCxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixTQUFTLEtBQUs7R0FDZCxTQUFTLEtBQUs7R0FDZDs7Q0FFRixTQUFTLGlCQUFpQixNQUFNO0FBQy9CLFNBQU8sc0JBQXNCLE1BQU0sTUFBTTs7Q0FFMUMsU0FBUyxzQkFBc0IsT0FBTyxzQkFBc0IsT0FBTztBQUNsRSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixTQUFTLE1BQU07R0FDZixTQUFTLE1BQU07R0FDZjs7SUFFQyxDQUFDO0FBSUwsSUFBSSw0QkFBNEMsMkJBQVcsRUFBRSx3RkFBd0YsY0FBWTs7Ozs7Ozs7Ozs7O0FBWWhLLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSxvQkFBb0IsS0FBSztBQUNqQyxXQUFRLDhCQUE4QjtBQUN0QyxXQUFRLDRCQUE0QjtBQUNwQyxXQUFRLGlDQUFpQztBQUN6QyxXQUFRLDBCQUEwQjtBQUNsQyxXQUFRLCtCQUErQjs7Ozs7O0NBTXZDLElBQUk7QUFDSixFQUFDLFNBQVMscUJBQXFCO0FBQzlCLHNCQUFvQixlQUFlO0FBQ25DLHNCQUFvQixZQUFZO0FBQ2hDLHNCQUFvQix1QkFBdUI7QUFDM0Msc0JBQW9CLGdCQUFnQjtBQUNwQyxzQkFBb0IsaUJBQWlCO0FBQ3JDLHNCQUFvQixjQUFjO0FBQ2xDLHNCQUFvQixjQUFjO0FBQ2xDLHNCQUFvQixlQUFlO0FBQ25DLHNCQUFvQixnQkFBZ0I7QUFDcEMsc0JBQW9CLGVBQWU7QUFDbkMsc0JBQW9CLG1CQUFtQjtJQUNyQyxzQkFBc0IsVUFBUSxvQkFBb0Isb0JBQW9CLEVBQUUsRUFBRTtDQUM3RSxTQUFTLDRCQUE0QixPQUFPO0FBQzNDLE9BQUssTUFBTSxPQUFPLGtCQUFtQixLQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssbUJBQW1CLElBQUksRUFDcEc7T0FBSSxrQkFBa0IsU0FBUyxNQUFPLFFBQU87O0FBRTlDLFNBQU87O0NBRVIsU0FBUywwQkFBMEIsTUFBTTtBQUN4QyxTQUFPLCtCQUErQixNQUFNLE1BQU07O0NBRW5ELFNBQVMsK0JBQStCLE1BQU0scUJBQXFCO0FBQ2xFLFNBQU87O0NBRVIsU0FBUyx3QkFBd0IsT0FBTztBQUN2QyxTQUFPOztDQUVSLFNBQVMsNkJBQTZCLE9BQU8scUJBQXFCO0FBQ2pFLFNBQU87O0lBRUwsQ0FBQztBQUlMLElBQUksd0JBQXdDLDJCQUFXLEVBQUUsb0ZBQW9GLGNBQVk7Ozs7Ozs7Ozs7OztBQVl4SixRQUFPLGVBQWVBLFdBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFdBQVEsMEJBQTBCO0FBQ2xDLFdBQVEsd0JBQXdCO0FBQ2hDLFdBQVEsNkJBQTZCO0FBQ3JDLFdBQVEsc0JBQXNCO0FBQzlCLFdBQVEsMkJBQTJCOzs7O0NBSW5DLFNBQVMsd0JBQXdCLE9BQU87QUFDdkMsTUFBSSxFQUFFLGdCQUFnQixVQUFVLE1BQU0sa0JBQWtCLEtBQUssRUFBRyxRQUFPO0FBQ3ZFLFNBQU87O0NBRVIsU0FBUyxzQkFBc0IsTUFBTTtBQUNwQyxTQUFPLDJCQUEyQixNQUFNLE1BQU07O0NBRS9DLFNBQVMsMkJBQTJCLE1BQU0scUJBQXFCO0FBQzlELE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTztHQUNOLHFCQUFxQixLQUFLLHdCQUF3QixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ3ZFLGNBQWMsS0FBSztHQUNuQixPQUFPLEtBQUssVUFBVSxPQUFPLEtBQUssSUFBSSxLQUFLO0dBQzNDOztDQUVGLFNBQVMsb0JBQW9CLE1BQU07QUFDbEMsU0FBTyx5QkFBeUIsTUFBTSxNQUFNOztDQUU3QyxTQUFTLHlCQUF5QixPQUFPLHNCQUFzQixPQUFPO0FBQ3JFLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLHFCQUFxQixNQUFNO0dBQzNCLGNBQWMsTUFBTTtHQUNwQixPQUFPLE1BQU07R0FDYjs7SUFFQyxDQUFDO0FBSUwsSUFBSSwrQkFBK0MsMkJBQVcsRUFBRSwyRkFBMkYsY0FBWTs7Ozs7Ozs7Ozs7O0FBWXRLLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSx1QkFBdUIsS0FBSztBQUNwQyxXQUFRLGlDQUFpQztBQUN6QyxXQUFRLCtCQUErQjtBQUN2QyxXQUFRLG9DQUFvQztBQUM1QyxXQUFRLDZCQUE2QjtBQUNyQyxXQUFRLGtDQUFrQzs7Ozs7O0NBTTFDLElBQUk7QUFDSixFQUFDLFNBQVMsd0JBQXdCO0FBQ2pDLHlCQUF1QixTQUFTO0FBQ2hDLHlCQUF1QixRQUFRO0lBQzdCLHlCQUF5QixVQUFRLHVCQUF1Qix1QkFBdUIsRUFBRSxFQUFFO0NBQ3RGLFNBQVMsK0JBQStCLE9BQU87QUFDOUMsT0FBSyxNQUFNLE9BQU8scUJBQXNCLEtBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxzQkFBc0IsSUFBSSxFQUMxRztPQUFJLHFCQUFxQixTQUFTLE1BQU8sUUFBTzs7QUFFakQsU0FBTzs7Q0FFUixTQUFTLDZCQUE2QixNQUFNO0FBQzNDLFNBQU8sa0NBQWtDLE1BQU0sTUFBTTs7Q0FFdEQsU0FBUyxrQ0FBa0MsTUFBTSxxQkFBcUI7QUFDckUsU0FBTzs7Q0FFUixTQUFTLDJCQUEyQixPQUFPO0FBQzFDLFNBQU87O0NBRVIsU0FBUyxnQ0FBZ0MsT0FBTyxxQkFBcUI7QUFDcEUsU0FBTzs7SUFFTCxDQUFDO0FBSUwsSUFBSSwwQkFBMEMsMkJBQVcsRUFBRSxzRkFBc0YsY0FBWTs7Ozs7Ozs7Ozs7O0FBWTVKLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSw0QkFBNEI7QUFDcEMsV0FBUSwwQkFBMEI7QUFDbEMsV0FBUSwrQkFBK0I7QUFDdkMsV0FBUSx3QkFBd0I7QUFDaEMsV0FBUSw2QkFBNkI7Ozs7Q0FJckMsU0FBUywwQkFBMEIsT0FBTztBQUN6QyxNQUFJLEVBQUUsUUFBUSxVQUFVLE1BQU0sVUFBVSxLQUFLLEVBQUcsUUFBTztBQUN2RCxTQUFPOztDQUVSLFNBQVMsd0JBQXdCLE1BQU07QUFDdEMsU0FBTyw2QkFBNkIsTUFBTSxNQUFNOztDQUVqRCxTQUFTLDZCQUE2QixNQUFNLHFCQUFxQjtBQUNoRSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU8sRUFBRSxNQUFNLEtBQUssT0FBTzs7Q0FFNUIsU0FBUyxzQkFBc0IsTUFBTTtBQUNwQyxTQUFPLDJCQUEyQixNQUFNLE1BQU07O0NBRS9DLFNBQVMsMkJBQTJCLE9BQU8sc0JBQXNCLE9BQU87QUFDdkUsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPLEVBQUUsTUFBTSxNQUFNLE9BQU87O0lBRTFCLENBQUM7QUFJTCxJQUFJLDJCQUEyQywyQkFBVyxFQUFFLHVGQUF1RixjQUFZOzs7Ozs7Ozs7Ozs7QUFZOUosUUFBTyxlQUFlQSxXQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxXQUFRLDZCQUE2QjtBQUNyQyxXQUFRLDJCQUEyQjtBQUNuQyxXQUFRLGdDQUFnQztBQUN4QyxXQUFRLHlCQUF5QjtBQUNqQyxXQUFRLDhCQUE4Qjs7OztDQUl0QyxTQUFTLDJCQUEyQixPQUFPO0FBQzFDLE1BQUksRUFBRSxTQUFTLFVBQVUsTUFBTSxXQUFXLEtBQUssRUFBRyxRQUFPO0FBQ3pELFNBQU87O0NBRVIsU0FBUyx5QkFBeUIsTUFBTTtBQUN2QyxTQUFPLDhCQUE4QixNQUFNLE1BQU07O0NBRWxELFNBQVMsOEJBQThCLE1BQU0scUJBQXFCO0FBQ2pFLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTyxFQUFFLE9BQU8sS0FBSyxRQUFROztDQUU5QixTQUFTLHVCQUF1QixNQUFNO0FBQ3JDLFNBQU8sNEJBQTRCLE1BQU0sTUFBTTs7Q0FFaEQsU0FBUyw0QkFBNEIsT0FBTyxzQkFBc0IsT0FBTztBQUN4RSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU8sRUFBRSxPQUFPLE1BQU0sUUFBUTs7SUFFNUIsQ0FBQztBQUlMLElBQUksa0NBQWtELDJCQUFXLEVBQUUsOEZBQThGLGNBQVk7Ozs7Ozs7Ozs7OztBQVk1SyxRQUFPLGVBQWVBLFdBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFdBQVEsa0NBQWtDO0FBQzFDLFdBQVEsdUNBQXVDO0FBQy9DLFdBQVEsZ0NBQWdDO0FBQ3hDLFdBQVEscUNBQXFDO0NBQzdDLE1BQU0sb0JBQW9CLHlCQUF5QjtDQUNuRCxNQUFNLHFCQUFxQiwwQkFBMEI7Q0FDckQsU0FBUyxnQ0FBZ0MsTUFBTTtBQUM5QyxTQUFPLHFDQUFxQyxNQUFNLE1BQU07O0NBRXpELFNBQVMscUNBQXFDLE1BQU0scUJBQXFCO0FBQ3hFLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsT0FBSyxHQUFHLGtCQUFrQiwyQkFBMkIsS0FBSyxDQUFFLFNBQVEsR0FBRyxrQkFBa0IsOEJBQThCLE1BQU0sS0FBSztBQUNsSSxPQUFLLEdBQUcsbUJBQW1CLDRCQUE0QixLQUFLLENBQUUsU0FBUSxHQUFHLG1CQUFtQiwrQkFBK0IsTUFBTSxLQUFLO0FBQ3RJLFNBQU8sRUFBRTs7Q0FFVixTQUFTLDhCQUE4QixNQUFNO0FBQzVDLFNBQU8sbUNBQW1DLE1BQU0sTUFBTTs7Q0FFdkQsU0FBUyxtQ0FBbUMsT0FBTyxzQkFBc0IsT0FBTztBQUMvRSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLE9BQUssR0FBRyxrQkFBa0IsMkJBQTJCLE1BQU0sQ0FBRSxTQUFRLEdBQUcsa0JBQWtCLHVCQUF1QixNQUFNO0FBQ3ZILE9BQUssR0FBRyxtQkFBbUIsNEJBQTRCLE1BQU0sQ0FBRSxTQUFRLEdBQUcsbUJBQW1CLHdCQUF3QixNQUFNO0FBQzNILFNBQU8sRUFBRTs7SUFFUCxDQUFDO0FBSUwsSUFBSSx3QkFBd0MsMkJBQVcsRUFBRSxvRkFBb0YsY0FBWTs7Ozs7Ozs7Ozs7O0FBWXhKLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSwwQkFBMEI7QUFDbEMsV0FBUSx3QkFBd0I7QUFDaEMsV0FBUSw2QkFBNkI7QUFDckMsV0FBUSxzQkFBc0I7QUFDOUIsV0FBUSwyQkFBMkI7Q0FDbkMsTUFBTSx5QkFBeUIsOEJBQThCO0NBQzdELE1BQU0sNEJBQTRCLGlDQUFpQzs7OztDQUluRSxTQUFTLHdCQUF3QixPQUFPO0FBQ3ZDLE1BQUksRUFBRSxnQkFBZ0IsVUFBVSxNQUFNLGtCQUFrQixLQUFLLEVBQUcsUUFBTztBQUN2RSxNQUFJLEVBQUUsY0FBYyxVQUFVLE1BQU0sZ0JBQWdCLEtBQUssRUFBRyxRQUFPO0FBQ25FLFNBQU87O0NBRVIsU0FBUyxzQkFBc0IsTUFBTTtBQUNwQyxTQUFPLDJCQUEyQixNQUFNLE1BQU07O0NBRS9DLFNBQVMsMkJBQTJCLE1BQU0scUJBQXFCO0FBQzlELE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTztHQUNOLGVBQWUsR0FBRywwQkFBMEIsaUNBQWlDLEtBQUssY0FBYztHQUNoRyxhQUFhLEdBQUcsdUJBQXVCLDhCQUE4QixLQUFLLFlBQVk7R0FDdEY7O0NBRUYsU0FBUyxvQkFBb0IsTUFBTTtBQUNsQyxTQUFPLHlCQUF5QixNQUFNLE1BQU07O0NBRTdDLFNBQVMseUJBQXlCLE9BQU8sc0JBQXNCLE9BQU87QUFDckUsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPO0dBQ04sZUFBZSxHQUFHLDBCQUEwQiwrQkFBK0IsTUFBTSxjQUFjO0dBQy9GLGFBQWEsR0FBRyx1QkFBdUIsNEJBQTRCLE1BQU0sWUFBWTtHQUNyRjs7SUFFQyxDQUFDO0FBSUwsSUFBSSw0QkFBNEMsMkJBQVcsRUFBRSx3RkFBd0YsY0FBWTs7Ozs7Ozs7Ozs7O0FBWWhLLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSxvQkFBb0IsS0FBSztBQUNqQyxXQUFRLDhCQUE4QjtBQUN0QyxXQUFRLDRCQUE0QjtBQUNwQyxXQUFRLGlDQUFpQztBQUN6QyxXQUFRLDBCQUEwQjtBQUNsQyxXQUFRLCtCQUErQjs7Ozs7O0NBTXZDLElBQUk7QUFDSixFQUFDLFNBQVMscUJBQXFCO0FBQzlCLHNCQUFvQixVQUFVO0FBQzlCLHNCQUFvQixjQUFjO0FBQ2xDLHNCQUFvQixXQUFXO0FBQy9CLHNCQUFvQixpQkFBaUI7QUFDckMsc0JBQW9CLFlBQVk7SUFDOUIsd0JBQXdCLFVBQVEsb0JBQW9CLHNCQUFzQixFQUFFLEVBQUU7Q0FDakYsU0FBUyw0QkFBNEIsT0FBTztBQUMzQyxPQUFLLE1BQU0sT0FBTyxvQkFBcUIsS0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLHFCQUFxQixJQUFJLEVBQ3hHO09BQUksb0JBQW9CLFNBQVMsTUFBTyxRQUFPOztBQUVoRCxTQUFPOztDQUVSLFNBQVMsMEJBQTBCLE1BQU07QUFDeEMsU0FBTywrQkFBK0IsTUFBTSxNQUFNOztDQUVuRCxTQUFTLCtCQUErQixNQUFNLHFCQUFxQjtBQUNsRSxTQUFPOztDQUVSLFNBQVMsd0JBQXdCLE9BQU87QUFDdkMsU0FBTzs7Q0FFUixTQUFTLDZCQUE2QixPQUFPLHFCQUFxQjtBQUNqRSxTQUFPOztJQUVMLENBQUM7QUFJTCxJQUFJLDhCQUE4QywyQkFBVyxFQUFFLDBGQUEwRixjQUFZOzs7Ozs7Ozs7Ozs7QUFZcEssUUFBTyxlQUFlQSxXQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxXQUFRLGdDQUFnQztBQUN4QyxXQUFRLDhCQUE4QjtBQUN0QyxXQUFRLG1DQUFtQztBQUMzQyxXQUFRLDRCQUE0QjtBQUNwQyxXQUFRLGlDQUFpQztDQUN6QyxNQUFNLHNCQUFzQiwyQkFBMkI7Ozs7Q0FJdkQsU0FBUyw4QkFBOEIsT0FBTztBQUM3QyxNQUFJLEVBQUUseUJBQXlCLFVBQVUsTUFBTSwyQkFBMkIsS0FBSyxFQUFHLFFBQU87QUFDekYsTUFBSSxFQUFFLFNBQVMsVUFBVSxNQUFNLFdBQVcsS0FBSyxFQUFHLFFBQU87QUFDekQsU0FBTzs7Q0FFUixTQUFTLDRCQUE0QixNQUFNO0FBQzFDLFNBQU8saUNBQWlDLE1BQU0sTUFBTTs7Q0FFckQsU0FBUyxpQ0FBaUMsTUFBTSxxQkFBcUI7QUFDcEUsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPO0dBQ04sd0JBQXdCLEdBQUcsb0JBQW9CLDJCQUEyQixLQUFLLHVCQUF1QjtHQUN0RyxPQUFPLEtBQUs7R0FDWjs7Q0FFRixTQUFTLDBCQUEwQixNQUFNO0FBQ3hDLFNBQU8sK0JBQStCLE1BQU0sTUFBTTs7Q0FFbkQsU0FBUywrQkFBK0IsT0FBTyxzQkFBc0IsT0FBTztBQUMzRSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTix3QkFBd0IsR0FBRyxvQkFBb0IseUJBQXlCLE1BQU0sdUJBQXVCO0dBQ3JHLE9BQU8sTUFBTTtHQUNiOztJQUVDLENBQUM7QUFJTCxJQUFJLCtCQUErQywyQkFBVyxFQUFFLDJGQUEyRixjQUFZOzs7Ozs7Ozs7Ozs7QUFZdEssUUFBTyxlQUFlQSxXQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxXQUFRLGlDQUFpQztBQUN6QyxXQUFRLCtCQUErQjtBQUN2QyxXQUFRLG9DQUFvQztBQUM1QyxXQUFRLDZCQUE2QjtBQUNyQyxXQUFRLGtDQUFrQzs7OztDQUkxQyxTQUFTLCtCQUErQixPQUFPO0FBQzlDLE1BQUksRUFBRSxXQUFXLFVBQVUsTUFBTSxhQUFhLEtBQUssRUFBRyxRQUFPO0FBQzdELFNBQU87O0NBRVIsU0FBUyw2QkFBNkIsTUFBTTtBQUMzQyxTQUFPLGtDQUFrQyxNQUFNLE1BQU07O0NBRXRELFNBQVMsa0NBQWtDLE1BQU0scUJBQXFCO0FBQ3JFLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTyxFQUFFLFNBQVMsS0FBSyxVQUFVOztDQUVsQyxTQUFTLDJCQUEyQixNQUFNO0FBQ3pDLFNBQU8sZ0NBQWdDLE1BQU0sTUFBTTs7Q0FFcEQsU0FBUyxnQ0FBZ0MsT0FBTyxzQkFBc0IsT0FBTztBQUM1RSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU8sRUFBRSxTQUFTLE1BQU0sVUFBVTs7SUFFaEMsQ0FBQztBQUlMLElBQUksMkJBQTJDLDJCQUFXLEVBQUUsdUZBQXVGLGNBQVk7Ozs7Ozs7Ozs7OztBQVk5SixRQUFPLGVBQWVBLFdBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFdBQVEsNkJBQTZCO0FBQ3JDLFdBQVEsMkJBQTJCO0FBQ25DLFdBQVEsZ0NBQWdDO0FBQ3hDLFdBQVEseUJBQXlCO0FBQ2pDLFdBQVEsOEJBQThCOzs7O0NBSXRDLFNBQVMsMkJBQTJCLE9BQU87QUFDMUMsTUFBSSxFQUFFLGlCQUFpQixVQUFVLE1BQU0sbUJBQW1CLEtBQUssRUFBRyxRQUFPO0FBQ3pFLFNBQU87O0NBRVIsU0FBUyx5QkFBeUIsTUFBTTtBQUN2QyxTQUFPLDhCQUE4QixNQUFNLE1BQU07O0NBRWxELFNBQVMsOEJBQThCLE1BQU0scUJBQXFCO0FBQ2pFLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTztHQUNOLGVBQWUsS0FBSztHQUNwQixvQkFBb0IsS0FBSyx1QkFBdUIsT0FBTyxLQUFLLElBQUksS0FBSztHQUNyRTs7Q0FFRixTQUFTLHVCQUF1QixNQUFNO0FBQ3JDLFNBQU8sNEJBQTRCLE1BQU0sTUFBTTs7Q0FFaEQsU0FBUyw0QkFBNEIsT0FBTyxzQkFBc0IsT0FBTztBQUN4RSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixlQUFlLE1BQU07R0FDckIsb0JBQW9CLE1BQU07R0FDMUI7O0lBRUMsQ0FBQztBQUlMLElBQUksc0NBQXNELDJCQUFXLEVBQUUsa0dBQWtHLGNBQVk7Ozs7Ozs7Ozs7OztBQVlwTCxRQUFPLGVBQWVBLFdBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFdBQVEsd0NBQXdDO0FBQ2hELFdBQVEsc0NBQXNDO0FBQzlDLFdBQVEsMkNBQTJDO0FBQ25ELFdBQVEsb0NBQW9DO0FBQzVDLFdBQVEseUNBQXlDOzs7O0NBSWpELFNBQVMsc0NBQXNDLE9BQU87QUFDckQsTUFBSSxFQUFFLG1CQUFtQixVQUFVLE1BQU0scUJBQXFCLEtBQUssRUFBRyxRQUFPO0FBQzdFLFNBQU87O0NBRVIsU0FBUyxvQ0FBb0MsTUFBTTtBQUNsRCxTQUFPLHlDQUF5QyxNQUFNLE1BQU07O0NBRTdELFNBQVMseUNBQXlDLE1BQU0scUJBQXFCO0FBQzVFLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTyxFQUFFLGlCQUFpQixLQUFLLGtCQUFrQjs7Q0FFbEQsU0FBUyxrQ0FBa0MsTUFBTTtBQUNoRCxTQUFPLHVDQUF1QyxNQUFNLE1BQU07O0NBRTNELFNBQVMsdUNBQXVDLE9BQU8sc0JBQXNCLE9BQU87QUFDbkYsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPLEVBQUUsaUJBQWlCLE1BQU0sa0JBQWtCOztJQUVoRCxDQUFDO0FBSUwsSUFBSSw4QkFBOEMsMkJBQVcsRUFBRSwwRkFBMEYsY0FBWTs7Ozs7Ozs7Ozs7O0FBWXBLLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSw4QkFBOEI7QUFDdEMsV0FBUSxtQ0FBbUM7QUFDM0MsV0FBUSw0QkFBNEI7QUFDcEMsV0FBUSxpQ0FBaUM7Q0FDekMsTUFBTSw0QkFBNEIsaUNBQWlDO0NBQ25FLE1BQU0sb0JBQW9CLHVCQUF1QjtDQUNqRCxNQUFNLG9CQUFvQix1QkFBdUI7Q0FDakQsTUFBTSx3QkFBd0IsNkJBQTZCO0NBQzNELE1BQU0seUJBQXlCLDhCQUE4QjtDQUM3RCxNQUFNLHFCQUFxQiwwQkFBMEI7Q0FDckQsTUFBTSxnQ0FBZ0MscUNBQXFDO0NBQzNFLFNBQVMsNEJBQTRCLE1BQU07QUFDMUMsU0FBTyxpQ0FBaUMsTUFBTSxNQUFNOztDQUVyRCxTQUFTLGlDQUFpQyxNQUFNLHFCQUFxQjtBQUNwRSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLE9BQUssR0FBRywwQkFBMEIsbUNBQW1DLEtBQUssQ0FBRSxTQUFRLEdBQUcsMEJBQTBCLHNDQUFzQyxNQUFNLEtBQUs7QUFDbEssT0FBSyxHQUFHLGtCQUFrQix5QkFBeUIsS0FBSyxDQUFFLFNBQVEsR0FBRyxrQkFBa0IsNEJBQTRCLE1BQU0sS0FBSztBQUM5SCxPQUFLLEdBQUcsa0JBQWtCLHlCQUF5QixLQUFLLENBQUUsU0FBUSxHQUFHLGtCQUFrQiw0QkFBNEIsTUFBTSxLQUFLO0FBQzlILE9BQUssR0FBRyxzQkFBc0IsK0JBQStCLEtBQUssQ0FBRSxTQUFRLEdBQUcsc0JBQXNCLGtDQUFrQyxNQUFNLEtBQUs7QUFDbEosT0FBSyxHQUFHLHVCQUF1QixnQ0FBZ0MsS0FBSyxDQUFFLFNBQVEsR0FBRyx1QkFBdUIsbUNBQW1DLE1BQU0sS0FBSztBQUN0SixPQUFLLEdBQUcsbUJBQW1CLDRCQUE0QixLQUFLLENBQUUsU0FBUSxHQUFHLG1CQUFtQiwrQkFBK0IsTUFBTSxLQUFLO0FBQ3RJLE9BQUssR0FBRyw4QkFBOEIsdUNBQXVDLEtBQUssQ0FBRSxTQUFRLEdBQUcsOEJBQThCLDBDQUEwQyxNQUFNLEtBQUs7QUFDbEwsU0FBTyxFQUFFOztDQUVWLFNBQVMsMEJBQTBCLE1BQU07QUFDeEMsU0FBTywrQkFBK0IsTUFBTSxNQUFNOztDQUVuRCxTQUFTLCtCQUErQixPQUFPLHNCQUFzQixPQUFPO0FBQzNFLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsT0FBSyxHQUFHLDBCQUEwQixtQ0FBbUMsTUFBTSxDQUFFLFNBQVEsR0FBRywwQkFBMEIsK0JBQStCLE1BQU07QUFDdkosT0FBSyxHQUFHLGtCQUFrQix5QkFBeUIsTUFBTSxDQUFFLFNBQVEsR0FBRyxrQkFBa0IscUJBQXFCLE1BQU07QUFDbkgsT0FBSyxHQUFHLGtCQUFrQix5QkFBeUIsTUFBTSxDQUFFLFNBQVEsR0FBRyxrQkFBa0IscUJBQXFCLE1BQU07QUFDbkgsT0FBSyxHQUFHLHNCQUFzQiwrQkFBK0IsTUFBTSxDQUFFLFNBQVEsR0FBRyxzQkFBc0IsMkJBQTJCLE1BQU07QUFDdkksT0FBSyxHQUFHLHVCQUF1QixnQ0FBZ0MsTUFBTSxDQUFFLFNBQVEsR0FBRyx1QkFBdUIsNEJBQTRCLE1BQU07QUFDM0ksT0FBSyxHQUFHLG1CQUFtQiw0QkFBNEIsTUFBTSxDQUFFLFNBQVEsR0FBRyxtQkFBbUIsd0JBQXdCLE1BQU07QUFDM0gsT0FBSyxHQUFHLDhCQUE4Qix1Q0FBdUMsTUFBTSxDQUFFLFNBQVEsR0FBRyw4QkFBOEIsbUNBQW1DLE1BQU07QUFDdkssU0FBTyxFQUFFOztJQUVQLENBQUM7QUFJTCxJQUFJLG9CQUFvQywyQkFBVyxFQUFFLGdGQUFnRixjQUFZOzs7Ozs7Ozs7Ozs7QUFZaEosUUFBTyxlQUFlQSxXQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxXQUFRLHNCQUFzQjtBQUM5QixXQUFRLG9CQUFvQjtBQUM1QixXQUFRLHlCQUF5QjtBQUNqQyxXQUFRLGtCQUFrQjtBQUMxQixXQUFRLHVCQUF1QjtDQUMvQixNQUFNLHNCQUFzQiwyQkFBMkI7Q0FDdkQsTUFBTSx3QkFBd0IsNkJBQTZCOzs7O0NBSTNELFNBQVMsb0JBQW9CLE9BQU87QUFDbkMsTUFBSSxFQUFFLGNBQWMsVUFBVSxNQUFNLGdCQUFnQixLQUFLLEVBQUcsUUFBTztBQUNuRSxNQUFJLEVBQUUsZ0JBQWdCLFVBQVUsTUFBTSxrQkFBa0IsS0FBSyxFQUFHLFFBQU87QUFDdkUsTUFBSSxFQUFFLGNBQWMsVUFBVSxNQUFNLGdCQUFnQixLQUFLLEVBQUcsUUFBTztBQUNuRSxTQUFPOztDQUVSLFNBQVMsa0JBQWtCLE1BQU07QUFDaEMsU0FBTyx1QkFBdUIsTUFBTSxNQUFNOztDQUUzQyxTQUFTLHVCQUF1QixNQUFNLHFCQUFxQjtBQUMxRCxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixjQUFjLEtBQUssaUJBQWlCLE9BQU8sS0FBSyxLQUFLLEdBQUcsc0JBQXNCLDZCQUE2QixLQUFLLGNBQWM7R0FDOUgsYUFBYSxHQUFHLG9CQUFvQiwyQkFBMkIsS0FBSyxZQUFZO0dBQ2hGLGNBQWMsS0FBSztHQUNuQixZQUFZLEtBQUs7R0FDakI7O0NBRUYsU0FBUyxnQkFBZ0IsTUFBTTtBQUM5QixTQUFPLHFCQUFxQixNQUFNLE1BQU07O0NBRXpDLFNBQVMscUJBQXFCLE9BQU8sc0JBQXNCLE9BQU87QUFDakUsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPO0dBQ04sZUFBZSxHQUFHLHNCQUFzQiwyQkFBMkIsTUFBTSxjQUFjO0dBQ3ZGLGFBQWEsR0FBRyxvQkFBb0IseUJBQXlCLE1BQU0sWUFBWTtHQUMvRSxjQUFjLE1BQU07R0FDcEIsWUFBWSxNQUFNO0dBQ2xCOztJQUVDLENBQUM7QUFJTCxJQUFJLDZCQUE2QywyQkFBVyxFQUFFLHlGQUF5RixjQUFZOzs7Ozs7Ozs7Ozs7QUFZbEssUUFBTyxlQUFlQSxXQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxXQUFRLCtCQUErQjtBQUN2QyxXQUFRLDZCQUE2QjtBQUNyQyxXQUFRLGtDQUFrQztBQUMxQyxXQUFRLDJCQUEyQjtBQUNuQyxXQUFRLGdDQUFnQztDQUN4QyxNQUFNLGNBQWMsaUJBQWlCO0NBQ3JDLE1BQU0scUJBQXFCLDBCQUEwQjtDQUNyRCxNQUFNLGdCQUFnQixtQkFBbUI7Ozs7Q0FJekMsU0FBUyw2QkFBNkIsT0FBTztBQUM1QyxNQUFJLEVBQUUsYUFBYSxVQUFVLE1BQU0sZUFBZSxLQUFLLEVBQUcsUUFBTztBQUNqRSxNQUFJLEVBQUUsUUFBUSxVQUFVLE1BQU0sVUFBVSxLQUFLLEVBQUcsUUFBTztBQUN2RCxTQUFPOztDQUVSLFNBQVMsMkJBQTJCLE1BQU07QUFDekMsU0FBTyxnQ0FBZ0MsTUFBTSxNQUFNOztDQUVwRCxTQUFTLGdDQUFnQyxNQUFNLHFCQUFxQjtBQUNuRSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixZQUFZLEdBQUcsWUFBWSxpQkFBaUIsS0FBSyxXQUFXO0dBQzVELGlCQUFpQixLQUFLLG9CQUFvQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQy9ELHFCQUFxQixLQUFLLHdCQUF3QixPQUFPLEtBQUssS0FBSyxHQUFHLG1CQUFtQiwwQkFBMEIsS0FBSyxxQkFBcUI7R0FDN0ksTUFBTSxLQUFLO0dBQ1gsMkJBQTJCLEtBQUssOEJBQThCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDbkYsZUFBZSxLQUFLLGtCQUFrQixPQUFPLEtBQUssSUFBSSxLQUFLLGVBQWUsSUFBSSxjQUFjLGtCQUFrQjtHQUM5Rzs7Q0FFRixTQUFTLHlCQUF5QixNQUFNO0FBQ3ZDLFNBQU8sOEJBQThCLE1BQU0sTUFBTTs7Q0FFbEQsU0FBUyw4QkFBOEIsT0FBTyxzQkFBc0IsT0FBTztBQUMxRSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixZQUFZLEdBQUcsWUFBWSxlQUFlLE1BQU0sV0FBVztHQUMzRCxpQkFBaUIsTUFBTTtHQUN2QixzQkFBc0IsR0FBRyxtQkFBbUIsd0JBQXdCLE1BQU0scUJBQXFCO0dBQy9GLE1BQU0sTUFBTTtHQUNaLDJCQUEyQixNQUFNO0dBQ2pDLGVBQWUsTUFBTSxrQkFBa0IsT0FBTyxLQUFLLElBQUksTUFBTSxlQUFlLElBQUksY0FBYyxnQkFBZ0I7R0FDOUc7O0lBRUMsQ0FBQztBQUlMLElBQUksd0JBQXdDLDJCQUFXLEVBQUUsb0ZBQW9GLGNBQVk7Ozs7Ozs7Ozs7OztBQVl4SixRQUFPLGVBQWVBLFdBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFdBQVEsMEJBQTBCO0FBQ2xDLFdBQVEsd0JBQXdCO0FBQ2hDLFdBQVEsNkJBQTZCO0FBQ3JDLFdBQVEsc0JBQXNCO0FBQzlCLFdBQVEsMkJBQTJCOzs7O0NBSW5DLFNBQVMsd0JBQXdCLE9BQU87QUFDdkMsTUFBSSxFQUFFLGdCQUFnQixVQUFVLE1BQU0sa0JBQWtCLEtBQUssRUFBRyxRQUFPO0FBQ3ZFLE1BQUksRUFBRSxtQkFBbUIsVUFBVSxNQUFNLHFCQUFxQixLQUFLLEVBQUcsUUFBTztBQUM3RSxNQUFJLEVBQUUsZ0JBQWdCLFVBQVUsTUFBTSxrQkFBa0IsS0FBSyxFQUFHLFFBQU87QUFDdkUsTUFBSSxFQUFFLG1CQUFtQixVQUFVLE1BQU0scUJBQXFCLEtBQUssRUFBRyxRQUFPO0FBQzdFLFNBQU87O0NBRVIsU0FBUyxzQkFBc0IsTUFBTTtBQUNwQyxTQUFPLDJCQUEyQixNQUFNLE1BQU07O0NBRS9DLFNBQVMsMkJBQTJCLE1BQU0scUJBQXFCO0FBQzlELE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTztHQUNOLGdCQUFnQixLQUFLLG1CQUFtQixPQUFPLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxnQkFBZ0I7R0FDdEYseUJBQXlCLEtBQUssNEJBQTRCLE9BQU8sS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLHlCQUF5QjtHQUNqSCw4QkFBOEIsS0FBSyxpQ0FBaUMsT0FBTyxLQUFLLElBQUksS0FBSztHQUN6RixTQUFTLEtBQUssWUFBWSxPQUFPLEtBQUssSUFBSSxLQUFLO0dBQy9DLGlCQUFpQixLQUFLLG9CQUFvQixPQUFPLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxpQkFBaUI7R0FDekYsY0FBYyxLQUFLO0dBQ25CLGlCQUFpQixLQUFLO0dBQ3RCLGNBQWMsS0FBSztHQUNuQixpQkFBaUIsS0FBSztHQUN0QixnQkFBZ0IsS0FBSyxtQkFBbUIsT0FBTyxLQUFLLElBQUksS0FBSztHQUM3RDs7Q0FFRixTQUFTLG9CQUFvQixNQUFNO0FBQ2xDLFNBQU8seUJBQXlCLE1BQU0sTUFBTTs7Q0FFN0MsU0FBUyx5QkFBeUIsT0FBTyxzQkFBc0IsT0FBTztBQUNyRSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixnQkFBZ0IsTUFBTSxtQkFBbUIsT0FBTyxLQUFLLElBQUksTUFBTSxnQkFBZ0IsYUFBYTtHQUM1Rix5QkFBeUIsTUFBTSw0QkFBNEIsT0FBTyxLQUFLLElBQUksTUFBTSx5QkFBeUIsYUFBYTtHQUN2SCw4QkFBOEIsTUFBTTtHQUNwQyxTQUFTLE1BQU07R0FDZixpQkFBaUIsTUFBTSxvQkFBb0IsT0FBTyxLQUFLLElBQUksTUFBTSxpQkFBaUIsYUFBYTtHQUMvRixjQUFjLE1BQU07R0FDcEIsaUJBQWlCLE1BQU07R0FDdkIsY0FBYyxNQUFNO0dBQ3BCLGlCQUFpQixNQUFNO0dBQ3ZCLGdCQUFnQixNQUFNO0dBQ3RCOztJQUVDLENBQUM7QUFJTCxJQUFJLGtDQUFrRCwyQkFBVyxFQUFFLDhGQUE4RixjQUFZOzs7Ozs7Ozs7Ozs7QUFZNUssUUFBTyxlQUFlQSxXQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxXQUFRLG9DQUFvQztBQUM1QyxXQUFRLGtDQUFrQztBQUMxQyxXQUFRLHVDQUF1QztBQUMvQyxXQUFRLGdDQUFnQztBQUN4QyxXQUFRLHFDQUFxQztDQUM3QyxNQUFNLGtCQUFrQix1QkFBdUI7Ozs7Q0FJL0MsU0FBUyxrQ0FBa0MsT0FBTztBQUNqRCxNQUFJLEVBQUUsZ0JBQWdCLFVBQVUsTUFBTSxrQkFBa0IsS0FBSyxFQUFHLFFBQU87QUFDdkUsTUFBSSxFQUFFLHVCQUF1QixVQUFVLE1BQU0seUJBQXlCLEtBQUssRUFBRyxRQUFPO0FBQ3JGLE1BQUksRUFBRSxnQkFBZ0IsVUFBVSxNQUFNLGtCQUFrQixLQUFLLEVBQUcsUUFBTztBQUN2RSxNQUFJLEVBQUUsY0FBYyxVQUFVLE1BQU0sZ0JBQWdCLEtBQUssRUFBRyxRQUFPO0FBQ25FLE1BQUksRUFBRSxrQkFBa0IsVUFBVSxNQUFNLG9CQUFvQixLQUFLLEVBQUcsUUFBTztBQUMzRSxTQUFPOztDQUVSLFNBQVMsZ0NBQWdDLE1BQU07QUFDOUMsU0FBTyxxQ0FBcUMsTUFBTSxNQUFNOztDQUV6RCxTQUFTLHFDQUFxQyxNQUFNLHFCQUFxQjtBQUN4RSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixjQUFjLElBQUksS0FBSyxLQUFLLGNBQWM7R0FDMUMscUJBQXFCLElBQUksS0FBSyxLQUFLLHFCQUFxQjtHQUN4RCxjQUFjLEtBQUssY0FBYyxJQUFJLGdCQUFnQixzQkFBc0I7R0FDM0UsWUFBWSxLQUFLO0dBQ2pCLGdCQUFnQixLQUFLO0dBQ3JCOztDQUVGLFNBQVMsOEJBQThCLE1BQU07QUFDNUMsU0FBTyxtQ0FBbUMsTUFBTSxNQUFNOztDQUV2RCxTQUFTLG1DQUFtQyxPQUFPLHNCQUFzQixPQUFPO0FBQy9FLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLGNBQWMsTUFBTSxjQUFjLGFBQWE7R0FDL0MscUJBQXFCLE1BQU0scUJBQXFCLGFBQWE7R0FDN0QsY0FBYyxNQUFNLGNBQWMsSUFBSSxnQkFBZ0Isb0JBQW9CO0dBQzFFLFlBQVksTUFBTTtHQUNsQixnQkFBZ0IsTUFBTTtHQUN0Qjs7SUFFQyxDQUFDO0FBSUwsSUFBSSx1QkFBdUMsMkJBQVcsRUFBRSxtRkFBbUYsY0FBWTs7Ozs7Ozs7Ozs7O0FBWXRKLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSx5QkFBeUIsS0FBSztBQUN0QyxXQUFRLHlCQUF5QjtBQUNqQyxXQUFRLHVCQUF1QjtBQUMvQixXQUFRLDRCQUE0QjtBQUNwQyxXQUFRLHFCQUFxQjtBQUM3QixXQUFRLDBCQUEwQjs7Ozs7Q0FLbEMsSUFBSTtBQUNKLEVBQUMsU0FBUywwQkFBMEI7QUFDbkMsMkJBQXlCLFlBQVk7QUFDckMsMkJBQXlCLGNBQWM7SUFDckMsMkJBQTJCLFVBQVEseUJBQXlCLHlCQUF5QixFQUFFLEVBQUU7Ozs7Q0FJNUYsU0FBUyx1QkFBdUIsT0FBTztBQUN0QyxNQUFJLEVBQUUsa0JBQWtCLFVBQVUsTUFBTSxvQkFBb0IsS0FBSyxFQUFHLFFBQU87QUFDM0UsTUFBSSxFQUFFLFlBQVksVUFBVSxNQUFNLGNBQWMsS0FBSyxFQUFHLFFBQU87QUFDL0QsTUFBSSxFQUFFLFFBQVEsVUFBVSxNQUFNLFVBQVUsS0FBSyxFQUFHLFFBQU87QUFDdkQsTUFBSSxFQUFFLGdCQUFnQixVQUFVLE1BQU0sa0JBQWtCLEtBQUssRUFBRyxRQUFPO0FBQ3ZFLE1BQUksRUFBRSxZQUFZLFVBQVUsTUFBTSxjQUFjLEtBQUssRUFBRyxRQUFPO0FBQy9ELFNBQU87O0NBRVIsU0FBUyxxQkFBcUIsTUFBTTtBQUNuQyxTQUFPLDBCQUEwQixNQUFNLE1BQU07O0NBRTlDLFNBQVMsMEJBQTBCLE1BQU0scUJBQXFCO0FBQzdELE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTztHQUNOLGNBQWMsS0FBSyxpQkFBaUIsT0FBTyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssY0FBYztHQUNoRixnQkFBZ0IsS0FBSztHQUNyQixVQUFVLEtBQUs7R0FDZixNQUFNLEtBQUs7R0FDWCxjQUFjLEtBQUs7R0FDbkIsVUFBVSxLQUFLO0dBQ2YsY0FBYyxLQUFLLGlCQUFpQixPQUFPLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxjQUFjO0dBQ2hGOztDQUVGLFNBQVMsbUJBQW1CLE1BQU07QUFDakMsU0FBTyx3QkFBd0IsTUFBTSxNQUFNOztDQUU1QyxTQUFTLHdCQUF3QixPQUFPLHNCQUFzQixPQUFPO0FBQ3BFLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLGNBQWMsTUFBTSxpQkFBaUIsT0FBTyxLQUFLLElBQUksTUFBTSxjQUFjLGFBQWE7R0FDdEYsZ0JBQWdCLE1BQU07R0FDdEIsVUFBVSxNQUFNO0dBQ2hCLE1BQU0sTUFBTTtHQUNaLGNBQWMsTUFBTTtHQUNwQixVQUFVLE1BQU07R0FDaEIsY0FBYyxNQUFNLGlCQUFpQixPQUFPLEtBQUssSUFBSSxNQUFNLGNBQWMsYUFBYTtHQUN0Rjs7SUFFQyxDQUFDO0FBSUwsSUFBSSw2QkFBNkMsMkJBQVcsRUFBRSx5RkFBeUYsY0FBWTs7Ozs7Ozs7Ozs7O0FBWWxLLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSwrQkFBK0I7QUFDdkMsV0FBUSw2QkFBNkI7QUFDckMsV0FBUSxrQ0FBa0M7QUFDMUMsV0FBUSwyQkFBMkI7QUFDbkMsV0FBUSxnQ0FBZ0M7Ozs7Q0FJeEMsU0FBUyw2QkFBNkIsT0FBTztBQUM1QyxNQUFJLEVBQUUsWUFBWSxVQUFVLE1BQU0sY0FBYyxLQUFLLEVBQUcsUUFBTztBQUMvRCxNQUFJLEVBQUUsZ0JBQWdCLFVBQVUsTUFBTSxrQkFBa0IsS0FBSyxFQUFHLFFBQU87QUFDdkUsTUFBSSxFQUFFLGVBQWUsVUFBVSxNQUFNLGlCQUFpQixLQUFLLEVBQUcsUUFBTztBQUNyRSxNQUFJLEVBQUUsZUFBZSxVQUFVLE1BQU0saUJBQWlCLEtBQUssRUFBRyxRQUFPO0FBQ3JFLE1BQUksRUFBRSxnQkFBZ0IsVUFBVSxNQUFNLGtCQUFrQixLQUFLLEVBQUcsUUFBTztBQUN2RSxNQUFJLEVBQUUsdUJBQXVCLFVBQVUsTUFBTSx5QkFBeUIsS0FBSyxFQUFHLFFBQU87QUFDckYsTUFBSSxFQUFFLDBCQUEwQixVQUFVLE1BQU0sNEJBQTRCLEtBQUssRUFBRyxRQUFPO0FBQzNGLE1BQUksRUFBRSxhQUFhLFVBQVUsTUFBTSxlQUFlLEtBQUssRUFBRyxRQUFPO0FBQ2pFLFNBQU87O0NBRVIsU0FBUywyQkFBMkIsTUFBTTtBQUN6QyxTQUFPLGdDQUFnQyxNQUFNLE1BQU07O0NBRXBELFNBQVMsZ0NBQWdDLE1BQU0scUJBQXFCO0FBQ25FLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTztHQUNOLFVBQVUsS0FBSztHQUNmLGNBQWMsSUFBSSxLQUFLLEtBQUssY0FBYztHQUMxQyxNQUFNLEtBQUssU0FBUyxPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ3pDLGFBQWEsS0FBSztHQUNsQixhQUFhLEtBQUs7R0FDbEIsbUJBQW1CLEtBQUssc0JBQXNCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDbkUsY0FBYyxJQUFJLEtBQUssS0FBSyxjQUFjO0dBQzFDLHFCQUFxQixLQUFLO0dBQzFCLHdCQUF3QixLQUFLO0dBQzdCLFdBQVcsS0FBSztHQUNoQjs7Q0FFRixTQUFTLHlCQUF5QixNQUFNO0FBQ3ZDLFNBQU8sOEJBQThCLE1BQU0sTUFBTTs7Q0FFbEQsU0FBUyw4QkFBOEIsT0FBTyxzQkFBc0IsT0FBTztBQUMxRSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixVQUFVLE1BQU07R0FDaEIsY0FBYyxNQUFNLGNBQWMsYUFBYTtHQUMvQyxNQUFNLE1BQU07R0FDWixhQUFhLE1BQU07R0FDbkIsYUFBYSxNQUFNO0dBQ25CLG1CQUFtQixNQUFNO0dBQ3pCLGNBQWMsTUFBTSxjQUFjLGFBQWE7R0FDL0MscUJBQXFCLE1BQU07R0FDM0Isd0JBQXdCLE1BQU07R0FDOUIsV0FBVyxNQUFNO0dBQ2pCOztJQUVDLENBQUM7QUFJTCxJQUFJLCtCQUErQywyQkFBVyxFQUFFLDJGQUEyRixjQUFZOzs7Ozs7Ozs7Ozs7QUFZdEssUUFBTyxlQUFlQSxXQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxXQUFRLGlDQUFpQztBQUN6QyxXQUFRLCtCQUErQjtBQUN2QyxXQUFRLG9DQUFvQztBQUM1QyxXQUFRLDZCQUE2QjtBQUNyQyxXQUFRLGtDQUFrQztDQUMxQyxNQUFNLGlCQUFpQixzQkFBc0I7Ozs7Q0FJN0MsU0FBUywrQkFBK0IsT0FBTztBQUM5QyxNQUFJLEVBQUUsU0FBUyxVQUFVLE1BQU0sV0FBVyxLQUFLLEVBQUcsUUFBTztBQUN6RCxNQUFJLEVBQUUsY0FBYyxVQUFVLE1BQU0sZ0JBQWdCLEtBQUssRUFBRyxRQUFPO0FBQ25FLFNBQU87O0NBRVIsU0FBUyw2QkFBNkIsTUFBTTtBQUMzQyxTQUFPLGtDQUFrQyxNQUFNLE1BQU07O0NBRXRELFNBQVMsa0NBQWtDLE1BQU0scUJBQXFCO0FBQ3JFLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTztHQUNOLFFBQVEsR0FBRyxlQUFlLHNCQUFzQixLQUFLLE9BQU87R0FDNUQsWUFBWSxLQUFLO0dBQ2pCOztDQUVGLFNBQVMsMkJBQTJCLE1BQU07QUFDekMsU0FBTyxnQ0FBZ0MsTUFBTSxNQUFNOztDQUVwRCxTQUFTLGdDQUFnQyxPQUFPLHNCQUFzQixPQUFPO0FBQzVFLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLFFBQVEsR0FBRyxlQUFlLG9CQUFvQixNQUFNLE9BQU87R0FDM0QsWUFBWSxNQUFNO0dBQ2xCOztJQUVDLENBQUM7QUFJTCxJQUFJLDRCQUE0QywyQkFBVyxFQUFFLHdGQUF3RixjQUFZOzs7Ozs7Ozs7Ozs7QUFZaEssUUFBTyxlQUFlQSxXQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxXQUFRLDhCQUE4QjtBQUN0QyxXQUFRLDRCQUE0QjtBQUNwQyxXQUFRLGlDQUFpQztBQUN6QyxXQUFRLDBCQUEwQjtBQUNsQyxXQUFRLCtCQUErQjs7OztDQUl2QyxTQUFTLDRCQUE0QixPQUFPO0FBQzNDLFNBQU87O0NBRVIsU0FBUywwQkFBMEIsTUFBTTtBQUN4QyxTQUFPLCtCQUErQixNQUFNLE1BQU07O0NBRW5ELFNBQVMsK0JBQStCLE1BQU0scUJBQXFCO0FBQ2xFLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTztHQUNOLFNBQVMsS0FBSyxZQUFZLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDL0MsY0FBYyxLQUFLLGlCQUFpQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ3pELFFBQVEsS0FBSyxXQUFXLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDN0MsV0FBVyxLQUFLLGNBQWMsT0FBTyxLQUFLLElBQUksS0FBSztHQUNuRCxTQUFTLEtBQUssWUFBWSxPQUFPLEtBQUssSUFBSSxLQUFLO0dBQy9DOztDQUVGLFNBQVMsd0JBQXdCLE1BQU07QUFDdEMsU0FBTyw2QkFBNkIsTUFBTSxNQUFNOztDQUVqRCxTQUFTLDZCQUE2QixPQUFPLHNCQUFzQixPQUFPO0FBQ3pFLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLFNBQVMsTUFBTTtHQUNmLGNBQWMsTUFBTTtHQUNwQixRQUFRLE1BQU07R0FDZCxXQUFXLE1BQU07R0FDakIsU0FBUyxNQUFNO0dBQ2Y7O0lBRUMsQ0FBQztBQUlMLElBQUksNkJBQTZDLDJCQUFXLEVBQUUseUZBQXlGLGNBQVk7Ozs7Ozs7Ozs7OztBQVlsSyxRQUFPLGVBQWVBLFdBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFdBQVEsK0JBQStCO0FBQ3ZDLFdBQVEsNkJBQTZCO0FBQ3JDLFdBQVEsa0NBQWtDO0FBQzFDLFdBQVEsMkJBQTJCO0FBQ25DLFdBQVEsZ0NBQWdDOzs7O0NBSXhDLFNBQVMsNkJBQTZCLE9BQU87QUFDNUMsU0FBTzs7Q0FFUixTQUFTLDJCQUEyQixNQUFNO0FBQ3pDLFNBQU8sZ0NBQWdDLE1BQU0sTUFBTTs7Q0FFcEQsU0FBUyxnQ0FBZ0MsTUFBTSxxQkFBcUI7QUFDbkUsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPO0dBQ04sY0FBYyxLQUFLLGlCQUFpQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ3pELFFBQVEsS0FBSyxXQUFXLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDN0MsV0FBVyxLQUFLLGNBQWMsT0FBTyxLQUFLLElBQUksS0FBSztHQUNuRCxTQUFTLEtBQUssWUFBWSxPQUFPLEtBQUssSUFBSSxLQUFLO0dBQy9DOztDQUVGLFNBQVMseUJBQXlCLE1BQU07QUFDdkMsU0FBTyw4QkFBOEIsTUFBTSxNQUFNOztDQUVsRCxTQUFTLDhCQUE4QixPQUFPLHNCQUFzQixPQUFPO0FBQzFFLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLGNBQWMsTUFBTTtHQUNwQixRQUFRLE1BQU07R0FDZCxXQUFXLE1BQU07R0FDakIsU0FBUyxNQUFNO0dBQ2Y7O0lBRUMsQ0FBQztBQUlMLElBQUksb0NBQW9ELDJCQUFXLEVBQUUsZ0dBQWdHLGNBQVk7Ozs7Ozs7Ozs7OztBQVloTCxRQUFPLGVBQWVBLFdBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFdBQVEsc0NBQXNDO0FBQzlDLFdBQVEsb0NBQW9DO0FBQzVDLFdBQVEseUNBQXlDO0FBQ2pELFdBQVEsa0NBQWtDO0FBQzFDLFdBQVEsdUNBQXVDO0NBQy9DLE1BQU0sdUJBQXVCLDRCQUE0QjtDQUN6RCxNQUFNLHlCQUF5Qiw4QkFBOEI7Q0FDN0QsTUFBTSxzQkFBc0IsMkJBQTJCO0NBQ3ZELE1BQU0sdUJBQXVCLDRCQUE0Qjs7OztDQUl6RCxTQUFTLG9DQUFvQyxPQUFPO0FBQ25ELFNBQU87O0NBRVIsU0FBUyxrQ0FBa0MsTUFBTTtBQUNoRCxTQUFPLHVDQUF1QyxNQUFNLE1BQU07O0NBRTNELFNBQVMsdUNBQXVDLE1BQU0scUJBQXFCO0FBQzFFLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTztHQUNOLFdBQVcsS0FBSyxjQUFjLE9BQU8sS0FBSyxJQUFJLEtBQUssV0FBVyxJQUFJLHFCQUFxQiwyQkFBMkI7R0FDbEgsZUFBZSxLQUFLLGtCQUFrQixPQUFPLEtBQUssSUFBSSxLQUFLLGVBQWUsSUFBSSxvQkFBb0IsMEJBQTBCO0dBQzVILFNBQVMsS0FBSyxZQUFZLE9BQU8sS0FBSyxJQUFJLEtBQUssU0FBUyxJQUFJLHFCQUFxQiwyQkFBMkI7R0FDNUcsT0FBTyxLQUFLLFVBQVUsT0FBTyxLQUFLLEtBQUssR0FBRyx1QkFBdUIsOEJBQThCLEtBQUssT0FBTztHQUMzRzs7Q0FFRixTQUFTLGdDQUFnQyxNQUFNO0FBQzlDLFNBQU8scUNBQXFDLE1BQU0sTUFBTTs7Q0FFekQsU0FBUyxxQ0FBcUMsT0FBTyxzQkFBc0IsT0FBTztBQUNqRixNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixXQUFXLE1BQU0sY0FBYyxPQUFPLEtBQUssSUFBSSxNQUFNLFdBQVcsSUFBSSxxQkFBcUIseUJBQXlCO0dBQ2xILGVBQWUsTUFBTSxrQkFBa0IsT0FBTyxLQUFLLElBQUksTUFBTSxlQUFlLElBQUksb0JBQW9CLHdCQUF3QjtHQUM1SCxTQUFTLE1BQU0sWUFBWSxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsSUFBSSxxQkFBcUIseUJBQXlCO0dBQzVHLFFBQVEsR0FBRyx1QkFBdUIsNEJBQTRCLE1BQU0sT0FBTztHQUMzRTs7SUFFQyxDQUFDO0FBSUwsSUFBSSxrQ0FBa0QsMkJBQVcsRUFBRSw4RkFBOEYsY0FBWTs7Ozs7Ozs7Ozs7O0FBWTVLLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSxvQ0FBb0M7QUFDNUMsV0FBUSxrQ0FBa0M7QUFDMUMsV0FBUSx1Q0FBdUM7QUFDL0MsV0FBUSxnQ0FBZ0M7QUFDeEMsV0FBUSxxQ0FBcUM7Q0FDN0MsTUFBTSxjQUFjLGlCQUFpQjs7OztDQUlyQyxTQUFTLGtDQUFrQyxPQUFPO0FBQ2pELE1BQUksRUFBRSxhQUFhLFVBQVUsTUFBTSxlQUFlLEtBQUssRUFBRyxRQUFPO0FBQ2pFLE1BQUksRUFBRSxpQkFBaUIsVUFBVSxNQUFNLG1CQUFtQixLQUFLLEVBQUcsUUFBTztBQUN6RSxTQUFPOztDQUVSLFNBQVMsZ0NBQWdDLE1BQU07QUFDOUMsU0FBTyxxQ0FBcUMsTUFBTSxNQUFNOztDQUV6RCxTQUFTLHFDQUFxQyxNQUFNLHFCQUFxQjtBQUN4RSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixZQUFZLEdBQUcsWUFBWSxpQkFBaUIsS0FBSyxXQUFXO0dBQzVELGVBQWUsS0FBSztHQUNwQjs7Q0FFRixTQUFTLDhCQUE4QixNQUFNO0FBQzVDLFNBQU8sbUNBQW1DLE1BQU0sTUFBTTs7Q0FFdkQsU0FBUyxtQ0FBbUMsT0FBTyxzQkFBc0IsT0FBTztBQUMvRSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixZQUFZLEdBQUcsWUFBWSxlQUFlLE1BQU0sV0FBVztHQUMzRCxlQUFlLE1BQU07R0FDckI7O0lBRUMsQ0FBQztBQUlMLElBQUksb0NBQW9ELDJCQUFXLEVBQUUsZ0dBQWdHLGNBQVk7Ozs7Ozs7Ozs7OztBQVloTCxRQUFPLGVBQWVBLFdBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFdBQVEsc0NBQXNDO0FBQzlDLFdBQVEsb0NBQW9DO0FBQzVDLFdBQVEseUNBQXlDO0FBQ2pELFdBQVEsa0NBQWtDO0FBQzFDLFdBQVEsdUNBQXVDO0NBQy9DLE1BQU0saUJBQWlCLG9CQUFvQjs7OztDQUkzQyxTQUFTLG9DQUFvQyxPQUFPO0FBQ25ELE1BQUksRUFBRSxRQUFRLFVBQVUsTUFBTSxVQUFVLEtBQUssRUFBRyxRQUFPO0FBQ3ZELE1BQUksRUFBRSxXQUFXLFVBQVUsTUFBTSxhQUFhLEtBQUssRUFBRyxRQUFPO0FBQzdELE1BQUksRUFBRSxTQUFTLFVBQVUsTUFBTSxXQUFXLEtBQUssRUFBRyxRQUFPO0FBQ3pELFNBQU87O0NBRVIsU0FBUyxrQ0FBa0MsTUFBTTtBQUNoRCxTQUFPLHVDQUF1QyxNQUFNLE1BQU07O0NBRTNELFNBQVMsdUNBQXVDLE1BQU0scUJBQXFCO0FBQzFFLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTztHQUNOLGtCQUFrQixLQUFLLHFCQUFxQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ2pFLFVBQVUsS0FBSyxhQUFhLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDakQsZUFBZSxLQUFLLGtCQUFrQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQzNELFdBQVcsS0FBSyxjQUFjLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDbkQsTUFBTSxLQUFLO0dBQ1gsYUFBYSxLQUFLLGdCQUFnQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ3ZELGNBQWMsS0FBSyxpQkFBaUIsT0FBTyxLQUFLLElBQUksS0FBSztHQUN6RCxlQUFlLEtBQUssa0JBQWtCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDM0QsWUFBWSxLQUFLLGVBQWUsT0FBTyxLQUFLLElBQUksS0FBSyxZQUFZLElBQUksZUFBZSxtQkFBbUI7R0FDdkcsa0JBQWtCLEtBQUsscUJBQXFCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDakUsa0JBQWtCLEtBQUsscUJBQXFCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDakUsY0FBYyxLQUFLLGlCQUFpQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ3pELFNBQVMsS0FBSyxZQUFZLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDL0MsU0FBUyxLQUFLO0dBQ2QsT0FBTyxLQUFLO0dBQ1o7O0NBRUYsU0FBUyxnQ0FBZ0MsTUFBTTtBQUM5QyxTQUFPLHFDQUFxQyxNQUFNLE1BQU07O0NBRXpELFNBQVMscUNBQXFDLE9BQU8sc0JBQXNCLE9BQU87QUFDakYsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPO0dBQ04sa0JBQWtCLE1BQU07R0FDeEIsVUFBVSxNQUFNO0dBQ2hCLGVBQWUsTUFBTTtHQUNyQixXQUFXLE1BQU07R0FDakIsTUFBTSxNQUFNO0dBQ1osYUFBYSxNQUFNO0dBQ25CLGNBQWMsTUFBTTtHQUNwQixlQUFlLE1BQU07R0FDckIsWUFBWSxNQUFNLGVBQWUsT0FBTyxLQUFLLElBQUksTUFBTSxZQUFZLElBQUksZUFBZSxpQkFBaUI7R0FDdkcsa0JBQWtCLE1BQU07R0FDeEIsa0JBQWtCLE1BQU07R0FDeEIsY0FBYyxNQUFNO0dBQ3BCLFNBQVMsTUFBTTtHQUNmLFNBQVMsTUFBTTtHQUNmLE9BQU8sTUFBTTtHQUNiOztJQUVDLENBQUM7QUFJTCxJQUFJLG1DQUFtRCwyQkFBVyxFQUFFLCtGQUErRixjQUFZOzs7Ozs7Ozs7Ozs7QUFZOUssUUFBTyxlQUFlQSxXQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxXQUFRLHFDQUFxQztBQUM3QyxXQUFRLG1DQUFtQztBQUMzQyxXQUFRLHdDQUF3QztBQUNoRCxXQUFRLGlDQUFpQztBQUN6QyxXQUFRLHNDQUFzQztDQUM5QyxNQUFNLDhCQUE4QixtQ0FBbUM7Ozs7Q0FJdkUsU0FBUyxtQ0FBbUMsT0FBTztBQUNsRCxNQUFJLEVBQUUsY0FBYyxVQUFVLE1BQU0sZ0JBQWdCLEtBQUssRUFBRyxRQUFPO0FBQ25FLFNBQU87O0NBRVIsU0FBUyxpQ0FBaUMsTUFBTTtBQUMvQyxTQUFPLHNDQUFzQyxNQUFNLE1BQU07O0NBRTFELFNBQVMsc0NBQXNDLE1BQU0scUJBQXFCO0FBQ3pFLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTyxFQUFFLFlBQVksS0FBSyxZQUFZLElBQUksNEJBQTRCLGtDQUFrQyxFQUFFOztDQUUzRyxTQUFTLCtCQUErQixNQUFNO0FBQzdDLFNBQU8sb0NBQW9DLE1BQU0sTUFBTTs7Q0FFeEQsU0FBUyxvQ0FBb0MsT0FBTyxzQkFBc0IsT0FBTztBQUNoRixNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU8sRUFBRSxZQUFZLE1BQU0sWUFBWSxJQUFJLDRCQUE0QixnQ0FBZ0MsRUFBRTs7SUFFdkcsQ0FBQztBQUlMLElBQUksZ0RBQWdFLDJCQUFXLEVBQUUsNEdBQTRHLGNBQVk7Ozs7Ozs7Ozs7OztBQVl4TSxRQUFPLGVBQWVBLFdBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFdBQVEsa0RBQWtEO0FBQzFELFdBQVEsZ0RBQWdEO0FBQ3hELFdBQVEscURBQXFEO0FBQzdELFdBQVEsOENBQThDO0FBQ3RELFdBQVEsbURBQW1EOzs7O0NBSTNELFNBQVMsZ0RBQWdELE9BQU87QUFDL0QsTUFBSSxFQUFFLGlCQUFpQixVQUFVLE1BQU0sbUJBQW1CLEtBQUssRUFBRyxRQUFPO0FBQ3pFLFNBQU87O0NBRVIsU0FBUyw4Q0FBOEMsTUFBTTtBQUM1RCxTQUFPLG1EQUFtRCxNQUFNLE1BQU07O0NBRXZFLFNBQVMsbURBQW1ELE1BQU0scUJBQXFCO0FBQ3RGLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTyxFQUFFLGVBQWUsS0FBSyxnQkFBZ0I7O0NBRTlDLFNBQVMsNENBQTRDLE1BQU07QUFDMUQsU0FBTyxpREFBaUQsTUFBTSxNQUFNOztDQUVyRSxTQUFTLGlEQUFpRCxPQUFPLHNCQUFzQixPQUFPO0FBQzdGLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTyxFQUFFLGVBQWUsTUFBTSxnQkFBZ0I7O0lBRTVDLENBQUM7QUFJTCxJQUFJLGdDQUFnRCwyQkFBVyxFQUFFLDRGQUE0RixjQUFZOzs7Ozs7Ozs7Ozs7QUFZeEssUUFBTyxlQUFlQSxXQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxXQUFRLGtDQUFrQztBQUMxQyxXQUFRLGdDQUFnQztBQUN4QyxXQUFRLHFDQUFxQztBQUM3QyxXQUFRLDhCQUE4QjtBQUN0QyxXQUFRLG1DQUFtQztDQUMzQyxNQUFNLGVBQWUsb0JBQW9COzs7O0NBSXpDLFNBQVMsZ0NBQWdDLE9BQU87QUFDL0MsTUFBSSxFQUFFLFFBQVEsVUFBVSxNQUFNLFVBQVUsS0FBSyxFQUFHLFFBQU87QUFDdkQsTUFBSSxFQUFFLFdBQVcsVUFBVSxNQUFNLGFBQWEsS0FBSyxFQUFHLFFBQU87QUFDN0QsTUFBSSxFQUFFLFNBQVMsVUFBVSxNQUFNLFdBQVcsS0FBSyxFQUFHLFFBQU87QUFDekQsU0FBTzs7Q0FFUixTQUFTLDhCQUE4QixNQUFNO0FBQzVDLFNBQU8sbUNBQW1DLE1BQU0sTUFBTTs7Q0FFdkQsU0FBUyxtQ0FBbUMsTUFBTSxxQkFBcUI7QUFDdEUsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPO0dBQ04sa0JBQWtCLEtBQUsscUJBQXFCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDakUsVUFBVSxLQUFLLGFBQWEsT0FBTyxLQUFLLElBQUksS0FBSztHQUNqRCxlQUFlLEtBQUssa0JBQWtCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDM0QsV0FBVyxLQUFLLGNBQWMsT0FBTyxLQUFLLElBQUksS0FBSztHQUNuRCxNQUFNLEtBQUs7R0FDWCxhQUFhLEtBQUssZ0JBQWdCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDdkQsY0FBYyxLQUFLLGlCQUFpQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ3pELGVBQWUsS0FBSyxrQkFBa0IsT0FBTyxLQUFLLElBQUksS0FBSztHQUMzRCxZQUFZLEtBQUssZUFBZSxPQUFPLEtBQUssSUFBSSxLQUFLLFlBQVksSUFBSSxhQUFhLG1CQUFtQjtHQUNyRyxrQkFBa0IsS0FBSyxxQkFBcUIsT0FBTyxLQUFLLElBQUksS0FBSztHQUNqRSxrQkFBa0IsS0FBSyxxQkFBcUIsT0FBTyxLQUFLLElBQUksS0FBSztHQUNqRSxjQUFjLEtBQUssaUJBQWlCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDekQsU0FBUyxLQUFLLFlBQVksT0FBTyxLQUFLLElBQUksS0FBSztHQUMvQyxTQUFTLEtBQUs7R0FDZCxPQUFPLEtBQUs7R0FDWixlQUFlLEtBQUssa0JBQWtCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDM0Q7O0NBRUYsU0FBUyw0QkFBNEIsTUFBTTtBQUMxQyxTQUFPLGlDQUFpQyxNQUFNLE1BQU07O0NBRXJELFNBQVMsaUNBQWlDLE9BQU8sc0JBQXNCLE9BQU87QUFDN0UsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPO0dBQ04sa0JBQWtCLE1BQU07R0FDeEIsVUFBVSxNQUFNO0dBQ2hCLGVBQWUsTUFBTTtHQUNyQixXQUFXLE1BQU07R0FDakIsTUFBTSxNQUFNO0dBQ1osYUFBYSxNQUFNO0dBQ25CLGNBQWMsTUFBTTtHQUNwQixlQUFlLE1BQU07R0FDckIsWUFBWSxNQUFNLGVBQWUsT0FBTyxLQUFLLElBQUksTUFBTSxZQUFZLElBQUksYUFBYSxpQkFBaUI7R0FDckcsa0JBQWtCLE1BQU07R0FDeEIsa0JBQWtCLE1BQU07R0FDeEIsY0FBYyxNQUFNO0dBQ3BCLFNBQVMsTUFBTTtHQUNmLFNBQVMsTUFBTTtHQUNmLE9BQU8sTUFBTTtHQUNiLGVBQWUsTUFBTTtHQUNyQjs7SUFFQyxDQUFDO0FBSUwsSUFBSSxnQ0FBZ0QsMkJBQVcsRUFBRSw0RkFBNEYsY0FBWTs7Ozs7Ozs7Ozs7O0FBWXhLLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSxrQ0FBa0M7QUFDMUMsV0FBUSxnQ0FBZ0M7QUFDeEMsV0FBUSxxQ0FBcUM7QUFDN0MsV0FBUSw4QkFBOEI7QUFDdEMsV0FBUSxtQ0FBbUM7Q0FDM0MsTUFBTSwwQkFBMEIsK0JBQStCOzs7O0NBSS9ELFNBQVMsZ0NBQWdDLE9BQU87QUFDL0MsTUFBSSxFQUFFLGFBQWEsVUFBVSxNQUFNLGVBQWUsS0FBSyxFQUFHLFFBQU87QUFDakUsTUFBSSxFQUFFLGNBQWMsVUFBVSxNQUFNLGdCQUFnQixLQUFLLEVBQUcsUUFBTztBQUNuRSxTQUFPOztDQUVSLFNBQVMsOEJBQThCLE1BQU07QUFDNUMsU0FBTyxtQ0FBbUMsTUFBTSxNQUFNOztDQUV2RCxTQUFTLG1DQUFtQyxNQUFNLHFCQUFxQjtBQUN0RSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixXQUFXLEtBQUs7R0FDaEIsWUFBWSxLQUFLLFlBQVksSUFBSSx3QkFBd0IsOEJBQThCO0dBQ3ZGLHNCQUFzQixLQUFLLHlCQUF5QixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ3pFOztDQUVGLFNBQVMsNEJBQTRCLE1BQU07QUFDMUMsU0FBTyxpQ0FBaUMsTUFBTSxNQUFNOztDQUVyRCxTQUFTLGlDQUFpQyxPQUFPLHNCQUFzQixPQUFPO0FBQzdFLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLFdBQVcsTUFBTTtHQUNqQixZQUFZLE1BQU0sWUFBWSxJQUFJLHdCQUF3Qiw0QkFBNEI7R0FDdEYsc0JBQXNCLE1BQU07R0FDNUI7O0lBRUMsQ0FBQztBQUlMLElBQUksMENBQTBELDJCQUFXLEVBQUUsc0dBQXNHLGNBQVk7Ozs7Ozs7Ozs7OztBQVk1TCxRQUFPLGVBQWVBLFdBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFdBQVEsNENBQTRDO0FBQ3BELFdBQVEsMENBQTBDO0FBQ2xELFdBQVEsK0NBQStDO0FBQ3ZELFdBQVEsd0NBQXdDO0FBQ2hELFdBQVEsNkNBQTZDOzs7O0NBSXJELFNBQVMsMENBQTBDLE9BQU87QUFDekQsTUFBSSxFQUFFLHFCQUFxQixVQUFVLE1BQU0sdUJBQXVCLEtBQUssRUFBRyxRQUFPO0FBQ2pGLE1BQUksRUFBRSxtQkFBbUIsVUFBVSxNQUFNLHFCQUFxQixLQUFLLEVBQUcsUUFBTztBQUM3RSxTQUFPOztDQUVSLFNBQVMsd0NBQXdDLE1BQU07QUFDdEQsU0FBTyw2Q0FBNkMsTUFBTSxNQUFNOztDQUVqRSxTQUFTLDZDQUE2QyxNQUFNLHFCQUFxQjtBQUNoRixNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixtQkFBbUIsS0FBSztHQUN4QixpQkFBaUIsS0FBSztHQUN0Qjs7Q0FFRixTQUFTLHNDQUFzQyxNQUFNO0FBQ3BELFNBQU8sMkNBQTJDLE1BQU0sTUFBTTs7Q0FFL0QsU0FBUywyQ0FBMkMsT0FBTyxzQkFBc0IsT0FBTztBQUN2RixNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixtQkFBbUIsTUFBTTtHQUN6QixpQkFBaUIsTUFBTTtHQUN2Qjs7SUFFQyxDQUFDO0FBSUwsSUFBSSx3QkFBd0MsMkJBQVcsRUFBRSxvRkFBb0YsY0FBWTs7Ozs7Ozs7Ozs7O0FBWXhKLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSwwQkFBMEI7QUFDbEMsV0FBUSx3QkFBd0I7QUFDaEMsV0FBUSw2QkFBNkI7QUFDckMsV0FBUSxzQkFBc0I7QUFDOUIsV0FBUSwyQkFBMkI7Ozs7Q0FJbkMsU0FBUyx3QkFBd0IsT0FBTztBQUN2QyxNQUFJLEVBQUUsUUFBUSxVQUFVLE1BQU0sVUFBVSxLQUFLLEVBQUcsUUFBTztBQUN2RCxTQUFPOztDQUVSLFNBQVMsc0JBQXNCLE1BQU07QUFDcEMsU0FBTywyQkFBMkIsTUFBTSxNQUFNOztDQUUvQyxTQUFTLDJCQUEyQixNQUFNLHFCQUFxQjtBQUM5RCxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixXQUFXLEtBQUssY0FBYyxPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ25ELE1BQU0sS0FBSztHQUNYOztDQUVGLFNBQVMsb0JBQW9CLE1BQU07QUFDbEMsU0FBTyx5QkFBeUIsTUFBTSxNQUFNOztDQUU3QyxTQUFTLHlCQUF5QixPQUFPLHNCQUFzQixPQUFPO0FBQ3JFLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLFdBQVcsTUFBTTtHQUNqQixNQUFNLE1BQU07R0FDWjs7SUFFQyxDQUFDO0FBSUwsSUFBSSxnQ0FBZ0QsMkJBQVcsRUFBRSw0RkFBNEYsY0FBWTs7Ozs7Ozs7Ozs7O0FBWXhLLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSxrQ0FBa0M7QUFDMUMsV0FBUSxnQ0FBZ0M7QUFDeEMsV0FBUSxxQ0FBcUM7QUFDN0MsV0FBUSw4QkFBOEI7QUFDdEMsV0FBUSxtQ0FBbUM7Ozs7Q0FJM0MsU0FBUyxnQ0FBZ0MsT0FBTztBQUMvQyxNQUFJLEVBQUUsY0FBYyxVQUFVLE1BQU0sZ0JBQWdCLEtBQUssRUFBRyxRQUFPO0FBQ25FLE1BQUksRUFBRSxRQUFRLFVBQVUsTUFBTSxVQUFVLEtBQUssRUFBRyxRQUFPO0FBQ3ZELFNBQU87O0NBRVIsU0FBUyw4QkFBOEIsTUFBTTtBQUM1QyxTQUFPLG1DQUFtQyxNQUFNLE1BQU07O0NBRXZELFNBQVMsbUNBQW1DLE1BQU0scUJBQXFCO0FBQ3RFLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTztHQUNOLFlBQVksS0FBSztHQUNqQixNQUFNLEtBQUs7R0FDWDs7Q0FFRixTQUFTLDRCQUE0QixNQUFNO0FBQzFDLFNBQU8saUNBQWlDLE1BQU0sTUFBTTs7Q0FFckQsU0FBUyxpQ0FBaUMsT0FBTyxzQkFBc0IsT0FBTztBQUM3RSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixZQUFZLE1BQU07R0FDbEIsTUFBTSxNQUFNO0dBQ1o7O0lBRUMsQ0FBQztBQUlMLElBQUksbUJBQW1DLDJCQUFXLEVBQUUsK0VBQStFLGNBQVk7Ozs7Ozs7Ozs7OztBQVk5SSxRQUFPLGVBQWVBLFdBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFdBQVEscUJBQXFCO0FBQzdCLFdBQVEsbUJBQW1CO0FBQzNCLFdBQVEsd0JBQXdCO0FBQ2hDLFdBQVEsaUJBQWlCO0FBQ3pCLFdBQVEsc0JBQXNCO0NBQzlCLE1BQU0sa0JBQWtCLHVCQUF1QjtDQUMvQyxNQUFNLDBCQUEwQiwrQkFBK0I7Ozs7Q0FJL0QsU0FBUyxtQkFBbUIsT0FBTztBQUNsQyxTQUFPOztDQUVSLFNBQVMsaUJBQWlCLE1BQU07QUFDL0IsU0FBTyxzQkFBc0IsTUFBTSxNQUFNOztDQUUxQyxTQUFTLHNCQUFzQixNQUFNLHFCQUFxQjtBQUN6RCxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixzQkFBc0IsS0FBSyx5QkFBeUIsT0FBTyxLQUFLLElBQUksS0FBSztHQUN6RSxZQUFZLEtBQUssZUFBZSxPQUFPLEtBQUssSUFBSSxLQUFLLFlBQVksSUFBSSxnQkFBZ0Isc0JBQXNCO0dBQzNHLG1CQUFtQixLQUFLLHNCQUFzQixPQUFPLEtBQUssS0FBSyxHQUFHLHdCQUF3QiwrQkFBK0IsS0FBSyxtQkFBbUI7R0FDakosZUFBZSxLQUFLLGtCQUFrQixPQUFPLEtBQUssSUFBSSxLQUFLLGVBQWUsSUFBSSxnQkFBZ0Isc0JBQXNCO0dBQ3BILDBCQUEwQixLQUFLLDZCQUE2QixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ2pGLFlBQVksS0FBSyxlQUFlLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDckQ7O0NBRUYsU0FBUyxlQUFlLE1BQU07QUFDN0IsU0FBTyxvQkFBb0IsTUFBTSxNQUFNOztDQUV4QyxTQUFTLG9CQUFvQixPQUFPLHNCQUFzQixPQUFPO0FBQ2hFLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLHNCQUFzQixNQUFNO0dBQzVCLFlBQVksTUFBTSxlQUFlLE9BQU8sS0FBSyxJQUFJLE1BQU0sWUFBWSxJQUFJLGdCQUFnQixvQkFBb0I7R0FDM0csb0JBQW9CLEdBQUcsd0JBQXdCLDZCQUE2QixNQUFNLG1CQUFtQjtHQUNyRyxlQUFlLE1BQU0sa0JBQWtCLE9BQU8sS0FBSyxJQUFJLE1BQU0sZUFBZSxJQUFJLGdCQUFnQixvQkFBb0I7R0FDcEgsMEJBQTBCLE1BQU07R0FDaEMsWUFBWSxNQUFNO0dBQ2xCOztJQUVDLENBQUM7QUFJTCxJQUFJLCtCQUErQywyQkFBVyxFQUFFLDJGQUEyRixjQUFZOzs7Ozs7Ozs7Ozs7QUFZdEssUUFBTyxlQUFlQSxXQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxXQUFRLHFDQUFxQyxVQUFRLHlDQUF5QyxLQUFLO0FBQ25HLFdBQVEsaUNBQWlDO0FBQ3pDLFdBQVEsK0JBQStCO0FBQ3ZDLFdBQVEsb0NBQW9DO0FBQzVDLFdBQVEsNkJBQTZCO0FBQ3JDLFdBQVEsa0NBQWtDO0NBQzFDLE1BQU0sYUFBYSxrQkFBa0I7Ozs7O0NBS3JDLElBQUk7QUFDSixFQUFDLFNBQVMsMENBQTBDO0FBQ25ELDJDQUF5QyxRQUFRO0FBQ2pELDJDQUF5QyxRQUFRO0FBQ2pELDJDQUF5QyxRQUFRO0FBQ2pELDJDQUF5QyxRQUFRO0FBQ2pELDJDQUF5QyxnQkFBZ0I7SUFDdkQsMkNBQTJDLFVBQVEseUNBQXlDLHlDQUF5QyxFQUFFLEVBQUU7Ozs7O0NBSzVJLElBQUk7QUFDSixFQUFDLFNBQVMsc0NBQXNDO0FBQy9DLHVDQUFxQyxhQUFhO0FBQ2xELHVDQUFxQyxnQkFBZ0I7QUFDckQsdUNBQXFDLGFBQWE7QUFDbEQsdUNBQXFDLFVBQVU7SUFDN0MsdUNBQXVDLFVBQVEscUNBQXFDLHFDQUFxQyxFQUFFLEVBQUU7Ozs7Q0FJaEksU0FBUywrQkFBK0IsT0FBTztBQUM5QyxNQUFJLEVBQUUsYUFBYSxVQUFVLE1BQU0sZUFBZSxLQUFLLEVBQUcsUUFBTztBQUNqRSxTQUFPOztDQUVSLFNBQVMsNkJBQTZCLE1BQU07QUFDM0MsU0FBTyxrQ0FBa0MsTUFBTSxNQUFNOztDQUV0RCxTQUFTLGtDQUFrQyxNQUFNLHFCQUFxQjtBQUNyRSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixtQkFBbUIsS0FBSyxzQkFBc0IsT0FBTyxLQUFLLElBQUksS0FBSztHQUNuRSxhQUFhLEtBQUssZ0JBQWdCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDdkQsa0JBQWtCLEtBQUsscUJBQXFCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDakUsVUFBVSxLQUFLLGFBQWEsT0FBTyxLQUFLLElBQUksS0FBSztHQUNqRCxtQkFBbUIsS0FBSyxzQkFBc0IsT0FBTyxLQUFLLElBQUksS0FBSztHQUNuRSxlQUFlLEtBQUssa0JBQWtCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDM0QsZUFBZSxLQUFLLGtCQUFrQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQzNELGFBQWEsS0FBSyxnQkFBZ0IsT0FBTyxLQUFLLEtBQUssR0FBRyxXQUFXLGtCQUFrQixLQUFLLGFBQWE7R0FDckcsV0FBVyxLQUFLO0dBQ2hCOztDQUVGLFNBQVMsMkJBQTJCLE1BQU07QUFDekMsU0FBTyxnQ0FBZ0MsTUFBTSxNQUFNOztDQUVwRCxTQUFTLGdDQUFnQyxPQUFPLHNCQUFzQixPQUFPO0FBQzVFLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLG1CQUFtQixNQUFNO0dBQ3pCLGFBQWEsTUFBTTtHQUNuQixrQkFBa0IsTUFBTTtHQUN4QixVQUFVLE1BQU07R0FDaEIsbUJBQW1CLE1BQU07R0FDekIsZUFBZSxNQUFNO0dBQ3JCLGVBQWUsTUFBTTtHQUNyQixjQUFjLEdBQUcsV0FBVyxnQkFBZ0IsTUFBTSxhQUFhO0dBQy9ELFdBQVcsTUFBTTtHQUNqQjs7SUFFQyxDQUFDO0FBSUwsSUFBSSwyQkFBMkMsMkJBQVcsRUFBRSx1RkFBdUYsY0FBWTs7Ozs7Ozs7Ozs7O0FBWTlKLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSxtQkFBbUIsS0FBSztBQUNoQyxXQUFRLDZCQUE2QjtBQUNyQyxXQUFRLDJCQUEyQjtBQUNuQyxXQUFRLGdDQUFnQztBQUN4QyxXQUFRLHlCQUF5QjtBQUNqQyxXQUFRLDhCQUE4Qjs7Ozs7O0NBTXRDLElBQUk7QUFDSixFQUFDLFNBQVMsb0JBQW9CO0FBQzdCLHFCQUFtQixVQUFVO0FBQzdCLHFCQUFtQixhQUFhO0FBQ2hDLHFCQUFtQixZQUFZO0FBQy9CLHFCQUFtQixVQUFVO0FBQzdCLHFCQUFtQixlQUFlO0FBQ2xDLHFCQUFtQixVQUFVO0FBQzdCLHFCQUFtQixVQUFVO0FBQzdCLHFCQUFtQixtQkFBbUI7QUFDdEMscUJBQW1CLFdBQVc7QUFDOUIscUJBQW1CLHlCQUF5QjtJQUMxQyxxQkFBcUIsVUFBUSxtQkFBbUIsbUJBQW1CLEVBQUUsRUFBRTtDQUMxRSxTQUFTLDJCQUEyQixPQUFPO0FBQzFDLE9BQUssTUFBTSxPQUFPLGlCQUFrQixLQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssa0JBQWtCLElBQUksRUFDbEc7T0FBSSxpQkFBaUIsU0FBUyxNQUFPLFFBQU87O0FBRTdDLFNBQU87O0NBRVIsU0FBUyx5QkFBeUIsTUFBTTtBQUN2QyxTQUFPLDhCQUE4QixNQUFNLE1BQU07O0NBRWxELFNBQVMsOEJBQThCLE1BQU0scUJBQXFCO0FBQ2pFLFNBQU87O0NBRVIsU0FBUyx1QkFBdUIsT0FBTztBQUN0QyxTQUFPOztDQUVSLFNBQVMsNEJBQTRCLE9BQU8scUJBQXFCO0FBQ2hFLFNBQU87O0lBRUwsQ0FBQztBQUlMLElBQUksbUJBQW1DLDJCQUFXLEVBQUUsK0VBQStFLGNBQVk7Ozs7Ozs7Ozs7OztBQVk5SSxRQUFPLGVBQWVBLFdBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFdBQVEscUJBQXFCO0FBQzdCLFdBQVEsbUJBQW1CO0FBQzNCLFdBQVEsd0JBQXdCO0FBQ2hDLFdBQVEsaUJBQWlCO0FBQ3pCLFdBQVEsc0JBQXNCO0NBQzlCLE1BQU0scUJBQXFCLDBCQUEwQjs7OztDQUlyRCxTQUFTLG1CQUFtQixPQUFPO0FBQ2xDLE1BQUksRUFBRSxnQkFBZ0IsVUFBVSxNQUFNLGtCQUFrQixLQUFLLEVBQUcsUUFBTztBQUN2RSxNQUFJLEVBQUUsY0FBYyxVQUFVLE1BQU0sZ0JBQWdCLEtBQUssRUFBRyxRQUFPO0FBQ25FLE1BQUksRUFBRSxnQkFBZ0IsVUFBVSxNQUFNLGtCQUFrQixLQUFLLEVBQUcsUUFBTztBQUN2RSxNQUFJLEVBQUUsUUFBUSxVQUFVLE1BQU0sVUFBVSxLQUFLLEVBQUcsUUFBTztBQUN2RCxTQUFPOztDQUVSLFNBQVMsaUJBQWlCLE1BQU07QUFDL0IsU0FBTyxzQkFBc0IsTUFBTSxNQUFNOztDQUUxQyxTQUFTLHNCQUFzQixNQUFNLHFCQUFxQjtBQUN6RCxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixjQUFjLEtBQUs7R0FDbkIsYUFBYSxHQUFHLG1CQUFtQiwwQkFBMEIsS0FBSyxZQUFZO0dBQzlFLGNBQWMsS0FBSztHQUNuQixNQUFNLEtBQUs7R0FDWDs7Q0FFRixTQUFTLGVBQWUsTUFBTTtBQUM3QixTQUFPLG9CQUFvQixNQUFNLE1BQU07O0NBRXhDLFNBQVMsb0JBQW9CLE9BQU8sc0JBQXNCLE9BQU87QUFDaEUsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPO0dBQ04sY0FBYyxNQUFNO0dBQ3BCLGFBQWEsR0FBRyxtQkFBbUIsd0JBQXdCLE1BQU0sWUFBWTtHQUM3RSxjQUFjLE1BQU07R0FDcEIsTUFBTSxNQUFNO0dBQ1o7O0lBRUMsQ0FBQztBQUlMLElBQUksb0NBQW9ELDJCQUFXLEVBQUUsZ0dBQWdHLGNBQVk7Ozs7Ozs7Ozs7OztBQVloTCxRQUFPLGVBQWVBLFdBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFdBQVEsc0NBQXNDO0FBQzlDLFdBQVEsb0NBQW9DO0FBQzVDLFdBQVEseUNBQXlDO0FBQ2pELFdBQVEsa0NBQWtDO0FBQzFDLFdBQVEsdUNBQXVDOzs7O0NBSS9DLFNBQVMsb0NBQW9DLE9BQU87QUFDbkQsU0FBTzs7Q0FFUixTQUFTLGtDQUFrQyxNQUFNO0FBQ2hELFNBQU8sdUNBQXVDLE1BQU0sTUFBTTs7Q0FFM0QsU0FBUyx1Q0FBdUMsTUFBTSxxQkFBcUI7QUFDMUUsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPO0dBQ04sZ0JBQWdCLEtBQUssbUJBQW1CLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDN0Qsc0JBQXNCLEtBQUsseUJBQXlCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDekU7O0NBRUYsU0FBUyxnQ0FBZ0MsTUFBTTtBQUM5QyxTQUFPLHFDQUFxQyxNQUFNLE1BQU07O0NBRXpELFNBQVMscUNBQXFDLE9BQU8sc0JBQXNCLE9BQU87QUFDakYsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPO0dBQ04sZ0JBQWdCLE1BQU07R0FDdEIsc0JBQXNCLE1BQU07R0FDNUI7O0lBRUMsQ0FBQztBQUlMLElBQUksNkJBQTZDLDJCQUFXLEVBQUUseUZBQXlGLGNBQVk7Ozs7Ozs7Ozs7OztBQVlsSyxRQUFPLGVBQWVBLFdBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFdBQVEsK0JBQStCO0FBQ3ZDLFdBQVEsNkJBQTZCO0FBQ3JDLFdBQVEsa0NBQWtDO0FBQzFDLFdBQVEsMkJBQTJCO0FBQ25DLFdBQVEsZ0NBQWdDO0NBQ3hDLE1BQU0sNEJBQTRCLGlDQUFpQztDQUNuRSxNQUFNLHNCQUFzQiwyQkFBMkI7Ozs7Q0FJdkQsU0FBUyw2QkFBNkIsT0FBTztBQUM1QyxNQUFJLEVBQUUscUJBQXFCLFVBQVUsTUFBTSx1QkFBdUIsS0FBSyxFQUFHLFFBQU87QUFDakYsTUFBSSxFQUFFLGlCQUFpQixVQUFVLE1BQU0sbUJBQW1CLEtBQUssRUFBRyxRQUFPO0FBQ3pFLE1BQUksRUFBRSxhQUFhLFVBQVUsTUFBTSxlQUFlLEtBQUssRUFBRyxRQUFPO0FBQ2pFLFNBQU87O0NBRVIsU0FBUywyQkFBMkIsTUFBTTtBQUN6QyxTQUFPLGdDQUFnQyxNQUFNLE1BQU07O0NBRXBELFNBQVMsZ0NBQWdDLE1BQU0scUJBQXFCO0FBQ25FLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTztHQUNOLGVBQWUsS0FBSyxrQkFBa0IsT0FBTyxLQUFLLElBQUksS0FBSyxlQUFlLElBQUksb0JBQW9CLDBCQUEwQjtHQUM1SCxtQkFBbUIsS0FBSztHQUN4QixlQUFlLEtBQUs7R0FDcEIsNkJBQTZCLEtBQUssZ0NBQWdDLE9BQU8sS0FBSyxLQUFLLEdBQUcsMEJBQTBCLGlDQUFpQyxLQUFLLDZCQUE2QjtHQUNuTCxXQUFXLEtBQUs7R0FDaEI7O0NBRUYsU0FBUyx5QkFBeUIsTUFBTTtBQUN2QyxTQUFPLDhCQUE4QixNQUFNLE1BQU07O0NBRWxELFNBQVMsOEJBQThCLE9BQU8sc0JBQXNCLE9BQU87QUFDMUUsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPO0dBQ04sZUFBZSxNQUFNLGtCQUFrQixPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsSUFBSSxvQkFBb0Isd0JBQXdCO0dBQzVILG1CQUFtQixNQUFNO0dBQ3pCLGVBQWUsTUFBTTtHQUNyQiw4QkFBOEIsR0FBRywwQkFBMEIsK0JBQStCLE1BQU0sNkJBQTZCO0dBQzdILFdBQVcsTUFBTTtHQUNqQjs7SUFFQyxDQUFDO0FBSUwsSUFBSSw4QkFBOEMsMkJBQVcsRUFBRSwwRkFBMEYsY0FBWTs7Ozs7Ozs7Ozs7O0FBWXBLLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSxnQ0FBZ0M7QUFDeEMsV0FBUSw4QkFBOEI7QUFDdEMsV0FBUSxtQ0FBbUM7QUFDM0MsV0FBUSw0QkFBNEI7QUFDcEMsV0FBUSxpQ0FBaUM7Q0FDekMsTUFBTSx1QkFBdUIsNEJBQTRCOzs7O0NBSXpELFNBQVMsOEJBQThCLE9BQU87QUFDN0MsTUFBSSxFQUFFLGFBQWEsVUFBVSxNQUFNLGVBQWUsS0FBSyxFQUFHLFFBQU87QUFDakUsU0FBTzs7Q0FFUixTQUFTLDRCQUE0QixNQUFNO0FBQzFDLFNBQU8saUNBQWlDLE1BQU0sTUFBTTs7Q0FFckQsU0FBUyxpQ0FBaUMsTUFBTSxxQkFBcUI7QUFDcEUsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPLEVBQUUsWUFBWSxHQUFHLHFCQUFxQiw0QkFBNEIsS0FBSyxXQUFXLEVBQUU7O0NBRTVGLFNBQVMsMEJBQTBCLE1BQU07QUFDeEMsU0FBTywrQkFBK0IsTUFBTSxNQUFNOztDQUVuRCxTQUFTLCtCQUErQixPQUFPLHNCQUFzQixPQUFPO0FBQzNFLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTyxFQUFFLFlBQVksR0FBRyxxQkFBcUIsMEJBQTBCLE1BQU0sV0FBVyxFQUFFOztJQUV4RixDQUFDO0FBSUwsSUFBSSw2QkFBNkMsMkJBQVcsRUFBRSx5RkFBeUYsY0FBWTs7Ozs7Ozs7Ozs7O0FBWWxLLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSxxQkFBcUIsS0FBSztBQUNsQyxXQUFRLCtCQUErQjtBQUN2QyxXQUFRLDZCQUE2QjtBQUNyQyxXQUFRLGtDQUFrQztBQUMxQyxXQUFRLDJCQUEyQjtBQUNuQyxXQUFRLGdDQUFnQzs7Ozs7O0NBTXhDLElBQUk7QUFDSixFQUFDLFNBQVMsc0JBQXNCO0FBQy9CLHVCQUFxQixlQUFlO0FBQ3BDLHVCQUFxQixrQkFBa0I7QUFDdkMsdUJBQXFCLGlCQUFpQjtJQUNwQyx1QkFBdUIsVUFBUSxxQkFBcUIscUJBQXFCLEVBQUUsRUFBRTtDQUNoRixTQUFTLDZCQUE2QixPQUFPO0FBQzVDLE9BQUssTUFBTSxPQUFPLG1CQUFvQixLQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssb0JBQW9CLElBQUksRUFDdEc7T0FBSSxtQkFBbUIsU0FBUyxNQUFPLFFBQU87O0FBRS9DLFNBQU87O0NBRVIsU0FBUywyQkFBMkIsTUFBTTtBQUN6QyxTQUFPLGdDQUFnQyxNQUFNLE1BQU07O0NBRXBELFNBQVMsZ0NBQWdDLE1BQU0scUJBQXFCO0FBQ25FLFNBQU87O0NBRVIsU0FBUyx5QkFBeUIsT0FBTztBQUN4QyxTQUFPOztDQUVSLFNBQVMsOEJBQThCLE9BQU8scUJBQXFCO0FBQ2xFLFNBQU87O0lBRUwsQ0FBQztBQUlMLElBQUkscUJBQXFDLDJCQUFXLEVBQUUsaUZBQWlGLGNBQVk7Ozs7Ozs7Ozs7OztBQVlsSixRQUFPLGVBQWVBLFdBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFdBQVEsdUJBQXVCO0FBQy9CLFdBQVEscUJBQXFCO0FBQzdCLFdBQVEsMEJBQTBCO0FBQ2xDLFdBQVEsbUJBQW1CO0FBQzNCLFdBQVEsd0JBQXdCO0NBQ2hDLE1BQU0sdUJBQXVCLDRCQUE0Qjs7OztDQUl6RCxTQUFTLHFCQUFxQixPQUFPO0FBQ3BDLE1BQUksRUFBRSxjQUFjLFVBQVUsTUFBTSxnQkFBZ0IsS0FBSyxFQUFHLFFBQU87QUFDbkUsTUFBSSxFQUFFLGFBQWEsVUFBVSxNQUFNLGVBQWUsS0FBSyxFQUFHLFFBQU87QUFDakUsTUFBSSxFQUFFLGdCQUFnQixVQUFVLE1BQU0sa0JBQWtCLEtBQUssRUFBRyxRQUFPO0FBQ3ZFLE1BQUksRUFBRSxRQUFRLFVBQVUsTUFBTSxVQUFVLEtBQUssRUFBRyxRQUFPO0FBQ3ZELFNBQU87O0NBRVIsU0FBUyxtQkFBbUIsTUFBTTtBQUNqQyxTQUFPLHdCQUF3QixNQUFNLE1BQU07O0NBRTVDLFNBQVMsd0JBQXdCLE1BQU0scUJBQXFCO0FBQzNELE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTztHQUNOLGFBQWEsR0FBRyxxQkFBcUIsNEJBQTRCLEtBQUssWUFBWTtHQUNsRixXQUFXLEtBQUs7R0FDaEIsY0FBYyxLQUFLO0dBQ25CLE1BQU0sS0FBSztHQUNYLGFBQWEsS0FBSyxnQkFBZ0IsT0FBTyxLQUFLLElBQUksS0FBSztHQUN2RDs7Q0FFRixTQUFTLGlCQUFpQixNQUFNO0FBQy9CLFNBQU8sc0JBQXNCLE1BQU0sTUFBTTs7Q0FFMUMsU0FBUyxzQkFBc0IsT0FBTyxzQkFBc0IsT0FBTztBQUNsRSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixhQUFhLEdBQUcscUJBQXFCLDBCQUEwQixNQUFNLFlBQVk7R0FDakYsV0FBVyxNQUFNO0dBQ2pCLGNBQWMsTUFBTTtHQUNwQixNQUFNLE1BQU07R0FDWixhQUFhLE1BQU07R0FDbkI7O0lBRUMsQ0FBQztBQUlMLElBQUksd0NBQXdELDJCQUFXLEVBQUUsb0dBQW9HLGNBQVk7Ozs7Ozs7Ozs7OztBQVl4TCxRQUFPLGVBQWVBLFdBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFdBQVEsZ0NBQWdDLEtBQUs7QUFDN0MsV0FBUSwwQ0FBMEM7QUFDbEQsV0FBUSx3Q0FBd0M7QUFDaEQsV0FBUSw2Q0FBNkM7QUFDckQsV0FBUSxzQ0FBc0M7QUFDOUMsV0FBUSwyQ0FBMkM7Ozs7OztDQU1uRCxJQUFJO0FBQ0osRUFBQyxTQUFTLGlDQUFpQztBQUMxQyxrQ0FBZ0MsYUFBYTtBQUM3QyxrQ0FBZ0MsZUFBZTtBQUMvQyxrQ0FBZ0Msa0JBQWtCO0lBQ2hELGtDQUFrQyxVQUFRLGdDQUFnQyxnQ0FBZ0MsRUFBRSxFQUFFO0NBQ2pILFNBQVMsd0NBQXdDLE9BQU87QUFDdkQsT0FBSyxNQUFNLE9BQU8sOEJBQStCLEtBQUksT0FBTyxVQUFVLGVBQWUsS0FBSywrQkFBK0IsSUFBSSxFQUM1SDtPQUFJLDhCQUE4QixTQUFTLE1BQU8sUUFBTzs7QUFFMUQsU0FBTzs7Q0FFUixTQUFTLHNDQUFzQyxNQUFNO0FBQ3BELFNBQU8sMkNBQTJDLE1BQU0sTUFBTTs7Q0FFL0QsU0FBUywyQ0FBMkMsTUFBTSxxQkFBcUI7QUFDOUUsU0FBTzs7Q0FFUixTQUFTLG9DQUFvQyxPQUFPO0FBQ25ELFNBQU87O0NBRVIsU0FBUyx5Q0FBeUMsT0FBTyxxQkFBcUI7QUFDN0UsU0FBTzs7SUFFTCxDQUFDO0FBSUwsSUFBSSxnQ0FBZ0QsMkJBQVcsRUFBRSw0RkFBNEYsY0FBWTs7Ozs7Ozs7Ozs7O0FBWXhLLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSxrQ0FBa0M7QUFDMUMsV0FBUSxnQ0FBZ0M7QUFDeEMsV0FBUSxxQ0FBcUM7QUFDN0MsV0FBUSw4QkFBOEI7QUFDdEMsV0FBUSxtQ0FBbUM7Q0FDM0MsTUFBTSxjQUFjLGlCQUFpQjtDQUNyQyxNQUFNLGdCQUFnQixtQkFBbUI7Ozs7Q0FJekMsU0FBUyxnQ0FBZ0MsT0FBTztBQUMvQyxNQUFJLEVBQUUsYUFBYSxVQUFVLE1BQU0sZUFBZSxLQUFLLEVBQUcsUUFBTztBQUNqRSxNQUFJLEVBQUUsUUFBUSxVQUFVLE1BQU0sVUFBVSxLQUFLLEVBQUcsUUFBTztBQUN2RCxNQUFJLEVBQUUsZ0JBQWdCLFVBQVUsTUFBTSxrQkFBa0IsS0FBSyxFQUFHLFFBQU87QUFDdkUsU0FBTzs7Q0FFUixTQUFTLDhCQUE4QixNQUFNO0FBQzVDLFNBQU8sbUNBQW1DLE1BQU0sTUFBTTs7Q0FFdkQsU0FBUyxtQ0FBbUMsTUFBTSxxQkFBcUI7QUFDdEUsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPO0dBQ04sWUFBWSxHQUFHLFlBQVksaUJBQWlCLEtBQUssV0FBVztHQUM1RCxNQUFNLEtBQUs7R0FDWCxlQUFlLEdBQUcsY0FBYyxtQkFBbUIsS0FBSyxjQUFjO0dBQ3RFOztDQUVGLFNBQVMsNEJBQTRCLE1BQU07QUFDMUMsU0FBTyxpQ0FBaUMsTUFBTSxNQUFNOztDQUVyRCxTQUFTLGlDQUFpQyxPQUFPLHNCQUFzQixPQUFPO0FBQzdFLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLFlBQVksR0FBRyxZQUFZLGVBQWUsTUFBTSxXQUFXO0dBQzNELE1BQU0sTUFBTTtHQUNaLGVBQWUsR0FBRyxjQUFjLGlCQUFpQixNQUFNLGNBQWM7R0FDckU7O0lBRUMsQ0FBQztBQUlMLElBQUksaUNBQWlELDJCQUFXLEVBQUUsNkZBQTZGLGNBQVk7Ozs7Ozs7Ozs7OztBQVkxSyxRQUFPLGVBQWVBLFdBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFdBQVEsbUNBQW1DO0FBQzNDLFdBQVEsaUNBQWlDO0FBQ3pDLFdBQVEsc0NBQXNDO0FBQzlDLFdBQVEsK0JBQStCO0FBQ3ZDLFdBQVEsb0NBQW9DO0NBQzVDLE1BQU0sa0NBQWtDLHVDQUF1Qzs7OztDQUkvRSxTQUFTLGlDQUFpQyxPQUFPO0FBQ2hELE1BQUksRUFBRSxnQkFBZ0IsVUFBVSxNQUFNLGtCQUFrQixLQUFLLEVBQUcsUUFBTztBQUN2RSxNQUFJLEVBQUUsUUFBUSxVQUFVLE1BQU0sVUFBVSxLQUFLLEVBQUcsUUFBTztBQUN2RCxNQUFJLEVBQUUsV0FBVyxVQUFVLE1BQU0sYUFBYSxLQUFLLEVBQUcsUUFBTztBQUM3RCxNQUFJLEVBQUUsZUFBZSxVQUFVLE1BQU0saUJBQWlCLEtBQUssRUFBRyxRQUFPO0FBQ3JFLFNBQU87O0NBRVIsU0FBUywrQkFBK0IsTUFBTTtBQUM3QyxTQUFPLG9DQUFvQyxNQUFNLE1BQU07O0NBRXhELFNBQVMsb0NBQW9DLE1BQU0scUJBQXFCO0FBQ3ZFLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTztHQUNOLFlBQVksS0FBSyxlQUFlLE9BQU8sS0FBSyxLQUFLLEdBQUcsZ0NBQWdDLHVDQUF1QyxLQUFLLFlBQVk7R0FDNUksZUFBZSxLQUFLLGtCQUFrQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQzNELGNBQWMsS0FBSztHQUNuQixNQUFNLEtBQUs7R0FDWCxpQkFBaUIsS0FBSyxvQkFBb0IsT0FBTyxLQUFLLElBQUksS0FBSztHQUMvRCxrQkFBa0IsS0FBSyxxQkFBcUIsT0FBTyxLQUFLLElBQUksS0FBSztHQUNqRSxTQUFTLEtBQUs7R0FDZCxhQUFhLEtBQUs7R0FDbEIsZ0JBQWdCLEtBQUssbUJBQW1CLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDN0Q7O0NBRUYsU0FBUyw2QkFBNkIsTUFBTTtBQUMzQyxTQUFPLGtDQUFrQyxNQUFNLE1BQU07O0NBRXRELFNBQVMsa0NBQWtDLE9BQU8sc0JBQXNCLE9BQU87QUFDOUUsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPO0dBQ04sYUFBYSxHQUFHLGdDQUFnQyxxQ0FBcUMsTUFBTSxZQUFZO0dBQ3ZHLGVBQWUsTUFBTTtHQUNyQixjQUFjLE1BQU07R0FDcEIsTUFBTSxNQUFNO0dBQ1osaUJBQWlCLE1BQU07R0FDdkIsa0JBQWtCLE1BQU07R0FDeEIsU0FBUyxNQUFNO0dBQ2YsYUFBYSxNQUFNO0dBQ25CLGdCQUFnQixNQUFNO0dBQ3RCOztJQUVDLENBQUM7QUFJTCxJQUFJLG9DQUFvRCwyQkFBVyxFQUFFLGdHQUFnRyxjQUFZOzs7Ozs7Ozs7Ozs7QUFZaEwsUUFBTyxlQUFlQSxXQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxXQUFRLHNDQUFzQztBQUM5QyxXQUFRLG9DQUFvQztBQUM1QyxXQUFRLHlDQUF5QztBQUNqRCxXQUFRLGtDQUFrQztBQUMxQyxXQUFRLHVDQUF1Qzs7OztDQUkvQyxTQUFTLG9DQUFvQyxPQUFPO0FBQ25ELFNBQU87O0NBRVIsU0FBUyxrQ0FBa0MsTUFBTTtBQUNoRCxTQUFPLHVDQUF1QyxNQUFNLE1BQU07O0NBRTNELFNBQVMsdUNBQXVDLE1BQU0scUJBQXFCO0FBQzFFLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTyxFQUFFLFdBQVcsS0FBSyxjQUFjLE9BQU8sS0FBSyxJQUFJLEtBQUssWUFBWTs7Q0FFekUsU0FBUyxnQ0FBZ0MsTUFBTTtBQUM5QyxTQUFPLHFDQUFxQyxNQUFNLE1BQU07O0NBRXpELFNBQVMscUNBQXFDLE9BQU8sc0JBQXNCLE9BQU87QUFDakYsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPLEVBQUUsV0FBVyxNQUFNLFlBQVk7O0lBRXBDLENBQUM7QUFJTCxJQUFJLGdDQUFnRCwyQkFBVyxFQUFFLDRGQUE0RixjQUFZOzs7Ozs7Ozs7Ozs7QUFZeEssUUFBTyxlQUFlQSxXQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxXQUFRLGtDQUFrQztBQUMxQyxXQUFRLGdDQUFnQztBQUN4QyxXQUFRLHFDQUFxQztBQUM3QyxXQUFRLDhCQUE4QjtBQUN0QyxXQUFRLG1DQUFtQztDQUMzQyxNQUFNLGtCQUFrQix1QkFBdUI7Ozs7Q0FJL0MsU0FBUyxnQ0FBZ0MsT0FBTztBQUMvQyxNQUFJLEVBQUUsb0JBQW9CLFVBQVUsTUFBTSxzQkFBc0IsS0FBSyxFQUFHLFFBQU87QUFDL0UsU0FBTzs7Q0FFUixTQUFTLDhCQUE4QixNQUFNO0FBQzVDLFNBQU8sbUNBQW1DLE1BQU0sTUFBTTs7Q0FFdkQsU0FBUyxtQ0FBbUMsTUFBTSxxQkFBcUI7QUFDdEUsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPO0dBQ04sZUFBZSxLQUFLLGtCQUFrQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQzNELGlCQUFpQixLQUFLLG9CQUFvQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQy9ELHFCQUFxQixLQUFLLHdCQUF3QixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ3ZFLG1CQUFtQixHQUFHLGdCQUFnQix1QkFBdUIsS0FBSyxrQkFBa0I7R0FDcEY7O0NBRUYsU0FBUyw0QkFBNEIsTUFBTTtBQUMxQyxTQUFPLGlDQUFpQyxNQUFNLE1BQU07O0NBRXJELFNBQVMsaUNBQWlDLE9BQU8sc0JBQXNCLE9BQU87QUFDN0UsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPO0dBQ04sZUFBZSxNQUFNO0dBQ3JCLGlCQUFpQixNQUFNO0dBQ3ZCLHFCQUFxQixNQUFNO0dBQzNCLG1CQUFtQixHQUFHLGdCQUFnQixxQkFBcUIsTUFBTSxrQkFBa0I7R0FDbkY7O0lBRUMsQ0FBQztBQUlMLElBQUksZ0NBQWdELDJCQUFXLEVBQUUsNEZBQTRGLGNBQVk7Ozs7Ozs7Ozs7OztBQVl4SyxRQUFPLGVBQWVBLFdBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFdBQVEsa0NBQWtDO0FBQzFDLFdBQVEsZ0NBQWdDO0FBQ3hDLFdBQVEscUNBQXFDO0FBQzdDLFdBQVEsOEJBQThCO0FBQ3RDLFdBQVEsbUNBQW1DO0NBQzNDLE1BQU0sa0JBQWtCLHVCQUF1Qjs7OztDQUkvQyxTQUFTLGdDQUFnQyxPQUFPO0FBQy9DLE1BQUksRUFBRSxvQkFBb0IsVUFBVSxNQUFNLHNCQUFzQixLQUFLLEVBQUcsUUFBTztBQUMvRSxTQUFPOztDQUVSLFNBQVMsOEJBQThCLE1BQU07QUFDNUMsU0FBTyxtQ0FBbUMsTUFBTSxNQUFNOztDQUV2RCxTQUFTLG1DQUFtQyxNQUFNLHFCQUFxQjtBQUN0RSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixtQkFBbUIsR0FBRyxnQkFBZ0IsdUJBQXVCLEtBQUssa0JBQWtCO0dBQ3BGLGdCQUFnQixLQUFLLG1CQUFtQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQzdEOztDQUVGLFNBQVMsNEJBQTRCLE1BQU07QUFDMUMsU0FBTyxpQ0FBaUMsTUFBTSxNQUFNOztDQUVyRCxTQUFTLGlDQUFpQyxPQUFPLHNCQUFzQixPQUFPO0FBQzdFLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLG1CQUFtQixHQUFHLGdCQUFnQixxQkFBcUIsTUFBTSxrQkFBa0I7R0FDbkYsZ0JBQWdCLE1BQU07R0FDdEI7O0lBRUMsQ0FBQztBQUlMLElBQUksOEJBQThDLDJCQUFXLEVBQUUsMEZBQTBGLGNBQVk7Ozs7Ozs7Ozs7OztBQVlwSyxRQUFPLGVBQWVBLFdBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFdBQVEsZ0NBQWdDO0FBQ3hDLFdBQVEsOEJBQThCO0FBQ3RDLFdBQVEsbUNBQW1DO0FBQzNDLFdBQVEsNEJBQTRCO0FBQ3BDLFdBQVEsaUNBQWlDO0NBQ3pDLE1BQU0sWUFBWSxpQkFBaUI7Ozs7Q0FJbkMsU0FBUyw4QkFBOEIsT0FBTztBQUM3QyxNQUFJLEVBQUUsYUFBYSxVQUFVLE1BQU0sZUFBZSxLQUFLLEVBQUcsUUFBTztBQUNqRSxNQUFJLEVBQUUsbUJBQW1CLFVBQVUsTUFBTSxxQkFBcUIsS0FBSyxFQUFHLFFBQU87QUFDN0UsTUFBSSxFQUFFLFNBQVMsVUFBVSxNQUFNLFdBQVcsS0FBSyxFQUFHLFFBQU87QUFDekQsU0FBTzs7Q0FFUixTQUFTLDRCQUE0QixNQUFNO0FBQzFDLFNBQU8saUNBQWlDLE1BQU0sTUFBTTs7Q0FFckQsU0FBUyxpQ0FBaUMsTUFBTSxxQkFBcUI7QUFDcEUsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPO0dBQ04sWUFBWSxHQUFHLFVBQVUsaUJBQWlCLEtBQUssV0FBVztHQUMxRCxpQkFBaUIsS0FBSztHQUN0QixPQUFPLEtBQUs7R0FDWjs7Q0FFRixTQUFTLDBCQUEwQixNQUFNO0FBQ3hDLFNBQU8sK0JBQStCLE1BQU0sTUFBTTs7Q0FFbkQsU0FBUywrQkFBK0IsT0FBTyxzQkFBc0IsT0FBTztBQUMzRSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixZQUFZLEdBQUcsVUFBVSxlQUFlLE1BQU0sV0FBVztHQUN6RCxpQkFBaUIsTUFBTTtHQUN2QixPQUFPLE1BQU07R0FDYjs7SUFFQyxDQUFDO0FBSUwsSUFBSSw4Q0FBOEQsMkJBQVcsRUFBRSwwR0FBMEcsY0FBWTs7Ozs7Ozs7Ozs7O0FBWXBNLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSw4Q0FBOEM7QUFDdEQsV0FBUSxtREFBbUQ7QUFDM0QsV0FBUSw0Q0FBNEM7QUFDcEQsV0FBUSxpREFBaUQ7Q0FDekQsTUFBTSw4QkFBOEIsbUNBQW1DO0NBQ3ZFLE1BQU0sMEJBQTBCLCtCQUErQjtDQUMvRCxNQUFNLDBCQUEwQiwrQkFBK0I7Q0FDL0QsU0FBUyw0Q0FBNEMsTUFBTTtBQUMxRCxTQUFPLGlEQUFpRCxNQUFNLE1BQU07O0NBRXJFLFNBQVMsaURBQWlELE1BQU0scUJBQXFCO0FBQ3BGLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsT0FBSyxHQUFHLDRCQUE0QixxQ0FBcUMsS0FBSyxDQUFFLFNBQVEsR0FBRyw0QkFBNEIsd0NBQXdDLE1BQU0sS0FBSztBQUMxSyxPQUFLLEdBQUcsd0JBQXdCLGlDQUFpQyxLQUFLLENBQUUsU0FBUSxHQUFHLHdCQUF3QixvQ0FBb0MsTUFBTSxLQUFLO0FBQzFKLE9BQUssR0FBRyx3QkFBd0IsaUNBQWlDLEtBQUssQ0FBRSxTQUFRLEdBQUcsd0JBQXdCLG9DQUFvQyxNQUFNLEtBQUs7QUFDMUosU0FBTyxFQUFFOztDQUVWLFNBQVMsMENBQTBDLE1BQU07QUFDeEQsU0FBTywrQ0FBK0MsTUFBTSxNQUFNOztDQUVuRSxTQUFTLCtDQUErQyxPQUFPLHNCQUFzQixPQUFPO0FBQzNGLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsT0FBSyxHQUFHLDRCQUE0QixxQ0FBcUMsTUFBTSxDQUFFLFNBQVEsR0FBRyw0QkFBNEIsaUNBQWlDLE1BQU07QUFDL0osT0FBSyxHQUFHLHdCQUF3QixpQ0FBaUMsTUFBTSxDQUFFLFNBQVEsR0FBRyx3QkFBd0IsNkJBQTZCLE1BQU07QUFDL0ksT0FBSyxHQUFHLHdCQUF3QixpQ0FBaUMsTUFBTSxDQUFFLFNBQVEsR0FBRyx3QkFBd0IsNkJBQTZCLE1BQU07QUFDL0ksU0FBTyxFQUFFOztJQUVQLENBQUM7QUFJTCxJQUFJLDJCQUEyQywyQkFBVyxFQUFFLHVGQUF1RixjQUFZOzs7Ozs7Ozs7Ozs7QUFZOUosUUFBTyxlQUFlQSxXQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxXQUFRLG1CQUFtQixLQUFLO0FBQ2hDLFdBQVEsNkJBQTZCO0FBQ3JDLFdBQVEsMkJBQTJCO0FBQ25DLFdBQVEsZ0NBQWdDO0FBQ3hDLFdBQVEseUJBQXlCO0FBQ2pDLFdBQVEsOEJBQThCOzs7Ozs7Q0FNdEMsSUFBSTtBQUNKLEVBQUMsU0FBUyxvQkFBb0I7QUFDN0IscUJBQW1CLFNBQVM7QUFDNUIscUJBQW1CLFNBQVM7QUFDNUIscUJBQW1CLFlBQVk7QUFDL0IscUJBQW1CLFdBQVc7QUFDOUIscUJBQW1CLGNBQWM7QUFDakMscUJBQW1CLFVBQVU7QUFDN0IscUJBQW1CLGlCQUFpQjtJQUNsQyxxQkFBcUIsVUFBUSxtQkFBbUIsbUJBQW1CLEVBQUUsRUFBRTtDQUMxRSxTQUFTLDJCQUEyQixPQUFPO0FBQzFDLE9BQUssTUFBTSxPQUFPLGlCQUFrQixLQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssa0JBQWtCLElBQUksRUFDbEc7T0FBSSxpQkFBaUIsU0FBUyxNQUFPLFFBQU87O0FBRTdDLFNBQU87O0NBRVIsU0FBUyx5QkFBeUIsTUFBTTtBQUN2QyxTQUFPLDhCQUE4QixNQUFNLE1BQU07O0NBRWxELFNBQVMsOEJBQThCLE1BQU0scUJBQXFCO0FBQ2pFLFNBQU87O0NBRVIsU0FBUyx1QkFBdUIsT0FBTztBQUN0QyxTQUFPOztDQUVSLFNBQVMsNEJBQTRCLE9BQU8scUJBQXFCO0FBQ2hFLFNBQU87O0lBRUwsQ0FBQztBQUlMLElBQUksK0JBQStDLDJCQUFXLEVBQUUsMkZBQTJGLGNBQVk7Ozs7Ozs7Ozs7OztBQVl0SyxRQUFPLGVBQWVBLFdBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFdBQVEsaUNBQWlDO0FBQ3pDLFdBQVEsK0JBQStCO0FBQ3ZDLFdBQVEsb0NBQW9DO0FBQzVDLFdBQVEsNkJBQTZCO0FBQ3JDLFdBQVEsa0NBQWtDO0NBQzFDLE1BQU0sd0NBQXdDLDZDQUE2QztDQUMzRixNQUFNLHFCQUFxQiwwQkFBMEI7Q0FDckQsTUFBTSxnQkFBZ0IsbUJBQW1COzs7O0NBSXpDLFNBQVMsK0JBQStCLE9BQU87QUFDOUMsTUFBSSxFQUFFLFdBQVcsVUFBVSxNQUFNLGFBQWEsS0FBSyxFQUFHLFFBQU87QUFDN0QsTUFBSSxFQUFFLHNCQUFzQixVQUFVLE1BQU0sd0JBQXdCLEtBQUssRUFBRyxRQUFPO0FBQ25GLE1BQUksRUFBRSxrQkFBa0IsVUFBVSxNQUFNLG9CQUFvQixLQUFLLEVBQUcsUUFBTztBQUMzRSxTQUFPOztDQUVSLFNBQVMsNkJBQTZCLE1BQU07QUFDM0MsU0FBTyxrQ0FBa0MsTUFBTSxNQUFNOztDQUV0RCxTQUFTLGtDQUFrQyxNQUFNLHFCQUFxQjtBQUNyRSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixnQkFBZ0IsS0FBSyxtQkFBbUIsT0FBTyxLQUFLLElBQUksS0FBSztHQUM3RCxTQUFTLEtBQUs7R0FDZCxxQkFBcUIsR0FBRyxzQ0FBc0MsNkNBQTZDLEtBQUssb0JBQW9CO0dBQ3BJLGNBQWMsS0FBSyxpQkFBaUIsT0FBTyxLQUFLLEtBQUssR0FBRyxjQUFjLG1CQUFtQixLQUFLLGNBQWM7R0FDNUcsaUJBQWlCLEdBQUcsbUJBQW1CLDBCQUEwQixLQUFLLGdCQUFnQjtHQUN0Rjs7Q0FFRixTQUFTLDJCQUEyQixNQUFNO0FBQ3pDLFNBQU8sZ0NBQWdDLE1BQU0sTUFBTTs7Q0FFcEQsU0FBUyxnQ0FBZ0MsT0FBTyxzQkFBc0IsT0FBTztBQUM1RSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixnQkFBZ0IsTUFBTTtHQUN0QixTQUFTLE1BQU07R0FDZixxQkFBcUIsR0FBRyxzQ0FBc0MsMkNBQTJDLE1BQU0sb0JBQW9CO0dBQ25JLGVBQWUsR0FBRyxjQUFjLGlCQUFpQixNQUFNLGNBQWM7R0FDckUsaUJBQWlCLEdBQUcsbUJBQW1CLHdCQUF3QixNQUFNLGdCQUFnQjtHQUNyRjs7SUFFQyxDQUFDO0FBSUwsSUFBSSwwQ0FBMEQsMkJBQVcsRUFBRSxzR0FBc0csY0FBWTs7Ozs7Ozs7Ozs7O0FBWTVMLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSw0Q0FBNEM7QUFDcEQsV0FBUSwwQ0FBMEM7QUFDbEQsV0FBUSwrQ0FBK0M7QUFDdkQsV0FBUSx3Q0FBd0M7QUFDaEQsV0FBUSw2Q0FBNkM7Q0FDckQsTUFBTSxlQUFlLG9CQUFvQjtDQUN6QyxNQUFNLGNBQWMsbUJBQW1COzs7O0NBSXZDLFNBQVMsMENBQTBDLE9BQU87QUFDekQsTUFBSSxFQUFFLGVBQWUsVUFBVSxNQUFNLGlCQUFpQixLQUFLLEVBQUcsUUFBTztBQUNyRSxNQUFJLEVBQUUsaUJBQWlCLFVBQVUsTUFBTSxtQkFBbUIsS0FBSyxFQUFHLFFBQU87QUFDekUsTUFBSSxFQUFFLGlCQUFpQixVQUFVLE1BQU0sbUJBQW1CLEtBQUssRUFBRyxRQUFPO0FBQ3pFLFNBQU87O0NBRVIsU0FBUyx3Q0FBd0MsTUFBTTtBQUN0RCxTQUFPLDZDQUE2QyxNQUFNLE1BQU07O0NBRWpFLFNBQVMsNkNBQTZDLE1BQU0scUJBQXFCO0FBQ2hGLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTztHQUNOLGFBQWEsS0FBSztHQUNsQixlQUFlLEtBQUssZUFBZSxJQUFJLGFBQWEsbUJBQW1CO0dBQ3ZFLGVBQWUsS0FBSyxlQUFlLElBQUksWUFBWSxrQkFBa0I7R0FDckU7O0NBRUYsU0FBUyxzQ0FBc0MsTUFBTTtBQUNwRCxTQUFPLDJDQUEyQyxNQUFNLE1BQU07O0NBRS9ELFNBQVMsMkNBQTJDLE9BQU8sc0JBQXNCLE9BQU87QUFDdkYsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPO0dBQ04sYUFBYSxNQUFNO0dBQ25CLGVBQWUsTUFBTSxlQUFlLElBQUksYUFBYSxpQkFBaUI7R0FDdEUsZUFBZSxNQUFNLGVBQWUsSUFBSSxZQUFZLGdCQUFnQjtHQUNwRTs7SUFFQyxDQUFDO0FBSUwsSUFBSSx3Q0FBd0QsMkJBQVcsRUFBRSxvR0FBb0csY0FBWTs7Ozs7Ozs7Ozs7O0FBWXhMLFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSwwQ0FBMEM7QUFDbEQsV0FBUSx3Q0FBd0M7QUFDaEQsV0FBUSw2Q0FBNkM7QUFDckQsV0FBUSxzQ0FBc0M7QUFDOUMsV0FBUSwyQ0FBMkM7Ozs7Q0FJbkQsU0FBUyx3Q0FBd0MsT0FBTztBQUN2RCxNQUFJLEVBQUUsYUFBYSxVQUFVLE1BQU0sZUFBZSxLQUFLLEVBQUcsUUFBTztBQUNqRSxNQUFJLEVBQUUsaUJBQWlCLFVBQVUsTUFBTSxtQkFBbUIsS0FBSyxFQUFHLFFBQU87QUFDekUsTUFBSSxFQUFFLGdCQUFnQixVQUFVLE1BQU0sa0JBQWtCLEtBQUssRUFBRyxRQUFPO0FBQ3ZFLFNBQU87O0NBRVIsU0FBUyxzQ0FBc0MsTUFBTTtBQUNwRCxTQUFPLDJDQUEyQyxNQUFNLE1BQU07O0NBRS9ELFNBQVMsMkNBQTJDLE1BQU0scUJBQXFCO0FBQzlFLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTztHQUNOLFdBQVcsS0FBSztHQUNoQixlQUFlLEtBQUs7R0FDcEIsY0FBYyxLQUFLO0dBQ25COztDQUVGLFNBQVMsb0NBQW9DLE1BQU07QUFDbEQsU0FBTyx5Q0FBeUMsTUFBTSxNQUFNOztDQUU3RCxTQUFTLHlDQUF5QyxPQUFPLHNCQUFzQixPQUFPO0FBQ3JGLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLFdBQVcsTUFBTTtHQUNqQixlQUFlLE1BQU07R0FDckIsY0FBYyxNQUFNO0dBQ3BCOztJQUVDLENBQUM7QUFJTCxJQUFJLGlCQUFpQywyQkFBVyxFQUFFLDRFQUE0RSxjQUFZO0NBQ3pJLElBQUksb0JBQW9CQSxhQUFXQSxVQUFRLG9CQUFvQixPQUFPLFVBQVUsU0FBUyxHQUFHLEdBQUcsR0FBRyxJQUFJO0FBQ3JHLE1BQUksT0FBTyxLQUFLLEVBQUcsTUFBSztFQUN4QixJQUFJLE9BQU8sT0FBTyx5QkFBeUIsR0FBRyxFQUFFO0FBQ2hELE1BQUksQ0FBQyxTQUFTLFNBQVMsT0FBTyxDQUFDLEVBQUUsYUFBYSxLQUFLLFlBQVksS0FBSyxjQUFlLFFBQU87R0FDekYsWUFBWTtHQUNaLEtBQUssV0FBVztBQUNmLFdBQU8sRUFBRTs7R0FFVjtBQUNELFNBQU8sZUFBZSxHQUFHLElBQUksS0FBSztPQUM3QixTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUk7QUFDM0IsTUFBSSxPQUFPLEtBQUssRUFBRyxNQUFLO0FBQ3hCLElBQUUsTUFBTSxFQUFFOztDQUVYLElBQUksaUJBQWlCQSxhQUFXQSxVQUFRLGdCQUFnQixTQUFTLEdBQUcsYUFBVztBQUM5RSxPQUFLLElBQUksS0FBSyxFQUFHLEtBQUksTUFBTSxhQUFhLENBQUMsT0FBTyxVQUFVLGVBQWUsS0FBS0UsYUFBVyxFQUFFLENBQUUsbUJBQWtCQSxhQUFXLEdBQUcsRUFBRTs7QUFFaEksUUFBTyxlQUFlRixXQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxnQkFBZSw0Q0FBNEMsRUFBRUEsVUFBUTtBQUNyRSxnQkFBZSw2Q0FBNkMsRUFBRUEsVUFBUTtBQUN0RSxnQkFBZSw2QkFBNkIsRUFBRUEsVUFBUTtBQUN0RCxnQkFBZSxrQ0FBa0MsRUFBRUEsVUFBUTtBQUMzRCxnQkFBZSxvQ0FBb0MsRUFBRUEsVUFBUTtBQUM3RCxnQkFBZSwyQkFBMkIsRUFBRUEsVUFBUTtBQUNwRCxnQkFBZSxrQkFBa0IsRUFBRUEsVUFBUTtBQUMzQyxnQkFBZSxpQkFBaUIsRUFBRUEsVUFBUTtBQUMxQyxnQkFBZSw0QkFBNEIsRUFBRUEsVUFBUTtBQUNyRCxnQkFBZSxtQ0FBbUMsRUFBRUEsVUFBUTtBQUM1RCxnQkFBZSxvQ0FBb0MsRUFBRUEsVUFBUTtBQUM3RCxnQkFBZSwrQkFBK0IsRUFBRUEsVUFBUTtBQUN4RCxnQkFBZSxpQ0FBaUMsRUFBRUEsVUFBUTtBQUMxRCxnQkFBZSx5Q0FBeUMsRUFBRUEsVUFBUTtBQUNsRSxnQkFBZSw2QkFBNkIsRUFBRUEsVUFBUTtBQUN0RCxnQkFBZSw0QkFBNEIsRUFBRUEsVUFBUTtBQUNyRCxnQkFBZSxpQ0FBaUMsRUFBRUEsVUFBUTtBQUMxRCxnQkFBZSxnQ0FBZ0MsRUFBRUEsVUFBUTtBQUN6RCxnQkFBZSw0Q0FBNEMsRUFBRUEsVUFBUTtBQUNyRSxnQkFBZSxpQ0FBaUMsRUFBRUEsVUFBUTtBQUMxRCxnQkFBZSxrQkFBa0IsRUFBRUEsVUFBUTtBQUMzQyxnQkFBZSxrQ0FBa0MsRUFBRUEsVUFBUTtBQUMzRCxnQkFBZSwwQkFBMEIsRUFBRUEsVUFBUTtBQUNuRCxnQkFBZSx3Q0FBd0MsRUFBRUEsVUFBUTtBQUNqRSxnQkFBZSxnQ0FBZ0MsRUFBRUEsVUFBUTtBQUN6RCxnQkFBZSxpQ0FBaUMsRUFBRUEsVUFBUTtBQUMxRCxnQkFBZSxvQkFBb0IsRUFBRUEsVUFBUTtBQUM3QyxnQkFBZSxvQkFBb0IsRUFBRUEsVUFBUTtBQUM3QyxnQkFBZSw0QkFBNEIsRUFBRUEsVUFBUTtBQUNyRCxnQkFBZSx1QkFBdUIsRUFBRUEsVUFBUTtBQUNoRCxnQkFBZSxpQ0FBaUMsRUFBRUEsVUFBUTtBQUMxRCxnQkFBZSxzQkFBc0IsRUFBRUEsVUFBUTtBQUMvQyxnQkFBZSw0QkFBNEIsRUFBRUEsVUFBUTtBQUNyRCxnQkFBZSxtQ0FBbUMsRUFBRUEsVUFBUTtBQUM1RCxnQkFBZSw4QkFBOEIsRUFBRUEsVUFBUTtBQUN2RCxnQkFBZSx1QkFBdUIsRUFBRUEsVUFBUTtBQUNoRCxnQkFBZSw4QkFBOEIsRUFBRUEsVUFBUTtBQUN2RCxnQkFBZSx1QkFBdUIsRUFBRUEsVUFBUTtBQUNoRCxnQkFBZSxpQ0FBaUMsRUFBRUEsVUFBUTtBQUMxRCxnQkFBZSx5QkFBeUIsRUFBRUEsVUFBUTtBQUNsRCxnQkFBZSwwQkFBMEIsRUFBRUEsVUFBUTtBQUNuRCxnQkFBZSw2QkFBNkIsRUFBRUEsVUFBUTtBQUN0RCxnQkFBZSwyQkFBMkIsRUFBRUEsVUFBUTtBQUNwRCxnQkFBZSxpQ0FBaUMsRUFBRUEsVUFBUTtBQUMxRCxnQkFBZSxrQ0FBa0MsRUFBRUEsVUFBUTtBQUMzRCxnQkFBZSwrQ0FBK0MsRUFBRUEsVUFBUTtBQUN4RSxnQkFBZSwrQkFBK0IsRUFBRUEsVUFBUTtBQUN4RCxnQkFBZSx5Q0FBeUMsRUFBRUEsVUFBUTtBQUNsRSxnQkFBZSw4QkFBOEIsRUFBRUEsVUFBUTtBQUN2RCxnQkFBZSx1QkFBdUIsRUFBRUEsVUFBUTtBQUNoRCxnQkFBZSw4QkFBOEIsRUFBRUEsVUFBUTtBQUN2RCxnQkFBZSxrQkFBa0IsRUFBRUEsVUFBUTtBQUMzQyxnQkFBZSwwQkFBMEIsRUFBRUEsVUFBUTtBQUNuRCxnQkFBZSxtQ0FBbUMsRUFBRUEsVUFBUTtBQUM1RCxnQkFBZSwwQkFBMEIsRUFBRUEsVUFBUTtBQUNuRCxnQkFBZSwrQkFBK0IsRUFBRUEsVUFBUTtBQUN4RCxnQkFBZSxtQ0FBbUMsRUFBRUEsVUFBUTtBQUM1RCxnQkFBZSw0QkFBNEIsRUFBRUEsVUFBUTtBQUNyRCxnQkFBZSw2QkFBNkIsRUFBRUEsVUFBUTtBQUN0RCxnQkFBZSwyQkFBMkIsRUFBRUEsVUFBUTtBQUNwRCxnQkFBZSw0QkFBNEIsRUFBRUEsVUFBUTtBQUNyRCxnQkFBZSxvQkFBb0IsRUFBRUEsVUFBUTtBQUM3QyxnQkFBZSw0QkFBNEIsRUFBRUEsVUFBUTtBQUNyRCxnQkFBZSxxQ0FBcUMsRUFBRUEsVUFBUTtBQUM5RCxnQkFBZSx1Q0FBdUMsRUFBRUEsVUFBUTtBQUNoRSxnQkFBZSwrQkFBK0IsRUFBRUEsVUFBUTtBQUN4RCxnQkFBZSxnQ0FBZ0MsRUFBRUEsVUFBUTtBQUN6RCxnQkFBZSxrQkFBa0IsRUFBRUEsVUFBUTtBQUMzQyxnQkFBZSwrQkFBK0IsRUFBRUEsVUFBUTtBQUN4RCxnQkFBZSxtQ0FBbUMsRUFBRUEsVUFBUTtBQUM1RCxnQkFBZSwrQkFBK0IsRUFBRUEsVUFBUTtBQUN4RCxnQkFBZSwrQkFBK0IsRUFBRUEsVUFBUTtBQUN4RCxnQkFBZSw2QkFBNkIsRUFBRUEsVUFBUTtBQUN0RCxnQkFBZSw4QkFBOEIsRUFBRUEsVUFBUTtBQUN2RCxnQkFBZSw2Q0FBNkMsRUFBRUEsVUFBUTtBQUN0RSxnQkFBZSwwQkFBMEIsRUFBRUEsVUFBUTtBQUNuRCxnQkFBZSxtQkFBbUIsRUFBRUEsVUFBUTtBQUM1QyxnQkFBZSw2QkFBNkIsRUFBRUEsVUFBUTtBQUN0RCxnQkFBZSwyQkFBMkIsRUFBRUEsVUFBUTtBQUNwRCxnQkFBZSx5Q0FBeUMsRUFBRUEsVUFBUTtBQUNsRSxnQkFBZSx1Q0FBdUMsRUFBRUEsVUFBUTtJQUM3RCxDQUFDO0FBSUwsSUFBSSw2QkFBNkMsMkJBQVcsRUFBRSx1RkFBdUYsY0FBWTs7Ozs7Ozs7Ozs7O0NBWWhLLElBQUksY0FBY0EsYUFBV0EsVUFBUSxhQUFhLFNBQVMsU0FBUyxZQUFZLEdBQUcsV0FBVztFQUM3RixTQUFTLE1BQU0sT0FBTztBQUNyQixVQUFPLGlCQUFpQixJQUFJLFFBQVEsSUFBSSxFQUFFLFNBQVMsU0FBUztBQUMzRCxZQUFRLE1BQU07S0FDYjs7QUFFSCxTQUFPLEtBQUssTUFBTSxJQUFJLFVBQVUsU0FBUyxTQUFTLFFBQVE7R0FDekQsU0FBUyxVQUFVLE9BQU87QUFDekIsUUFBSTtBQUNILFVBQUssVUFBVSxLQUFLLE1BQU0sQ0FBQzthQUNuQixHQUFHO0FBQ1gsWUFBTyxFQUFFOzs7R0FHWCxTQUFTLFNBQVMsT0FBTztBQUN4QixRQUFJO0FBQ0gsVUFBSyxVQUFVLFNBQVMsTUFBTSxDQUFDO2FBQ3ZCLEdBQUc7QUFDWCxZQUFPLEVBQUU7OztHQUdYLFNBQVMsS0FBSyxRQUFRO0FBQ3JCLFdBQU8sT0FBTyxRQUFRLE9BQU8sTUFBTSxHQUFHLE1BQU0sT0FBTyxNQUFNLENBQUMsS0FBSyxXQUFXLFNBQVM7O0FBRXBGLFNBQU0sWUFBWSxVQUFVLE1BQU0sU0FBUyxjQUFjLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNwRTs7QUFFSCxRQUFPLGVBQWVBLFdBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFdBQVEscUJBQXFCLEtBQUs7Q0FDbEMsTUFBTSxZQUFZLGlCQUFpQjtDQUNuQyxNQUFNLFlBQVksZ0JBQWdCOzs7O0NBSWxDLElBQUkscUJBQXFCLGNBQWMsVUFBVSxRQUFROzs7O0VBSXhELGdEQUFnRCxtQkFBbUIsZUFBZTtBQUNqRixVQUFPLFlBQVksTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLGFBQWE7SUFDckQsTUFBTSxrQkFBa0IsRUFBRTtJQUMxQixNQUFNLG1CQUFtQixFQUFFO0FBQzNCLHFCQUFpQixrQkFBa0I7QUFDbkMsUUFBSSxLQUFLLGlCQUFpQixLQUFLLGNBQWMsYUFBYTtLQUN6RCxNQUFNLFFBQVEsS0FBSyxjQUFjO0tBQ2pDLE1BQU0sY0FBYyxNQUFNLE1BQU0sVUFBVSxFQUFFLENBQUM7QUFDN0MsU0FBSSxZQUFhLGtCQUFpQixtQkFBbUIsVUFBVTs7SUFFaEUsTUFBTSxXQUFXLE1BQU0sS0FBSyxRQUFRO0tBQ25DLE1BQU07S0FDTixRQUFRO0tBQ1IsU0FBUztLQUNULE9BQU87S0FDUCxPQUFPLEdBQUcsVUFBVSwwQ0FBMEMsa0JBQWtCLHNDQUFzQztLQUN0SCxFQUFFLGNBQWM7QUFDakIsV0FBTyxJQUFJLFVBQVUsZ0JBQWdCLFdBQVcsZUFBZSxHQUFHLFVBQVUsNkNBQTZDLFVBQVUsQ0FBQztLQUNuSTs7Ozs7RUFLSCwrQ0FBK0M7QUFDOUMsVUFBTyxZQUFZLE1BQU0sV0FBVyxLQUFLLEdBQUcsV0FBVyxvQkFBb0IsRUFBRSxFQUFFLGVBQWU7QUFDN0YsV0FBTyxPQUFPLE1BQU0sS0FBSyxnREFBZ0QsbUJBQW1CLGNBQWMsRUFBRSxPQUFPO0tBQ2xIOzs7OztFQUtILHVDQUF1QyxtQkFBbUIsZUFBZTtBQUN4RSxVQUFPLFlBQVksTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLGFBQWE7SUFDckQsTUFBTSxrQkFBa0IsRUFBRTtJQUMxQixNQUFNLG1CQUFtQixFQUFFO0FBQzNCLHFCQUFpQixrQkFBa0I7QUFDbkMsUUFBSSxLQUFLLGlCQUFpQixLQUFLLGNBQWMsYUFBYTtLQUN6RCxNQUFNLFFBQVEsS0FBSyxjQUFjO0tBQ2pDLE1BQU0sY0FBYyxNQUFNLE1BQU0sVUFBVSxFQUFFLENBQUM7QUFDN0MsU0FBSSxZQUFhLGtCQUFpQixtQkFBbUIsVUFBVTs7SUFFaEUsTUFBTSxXQUFXLE1BQU0sS0FBSyxRQUFRO0tBQ25DLE1BQU07S0FDTixRQUFRO0tBQ1IsU0FBUztLQUNULE9BQU87S0FDUCxPQUFPLEdBQUcsVUFBVSxpQ0FBaUMsa0JBQWtCLDZCQUE2QjtLQUNwRyxFQUFFLGNBQWM7QUFDakIsV0FBTyxJQUFJLFVBQVUsZ0JBQWdCLFdBQVcsZUFBZSxHQUFHLFVBQVUsb0NBQW9DLFVBQVUsQ0FBQztLQUMxSDs7Ozs7RUFLSCxzQ0FBc0M7QUFDckMsVUFBTyxZQUFZLE1BQU0sV0FBVyxLQUFLLEdBQUcsV0FBVyxvQkFBb0IsRUFBRSxFQUFFLGVBQWU7QUFDN0YsV0FBTyxPQUFPLE1BQU0sS0FBSyx1Q0FBdUMsbUJBQW1CLGNBQWMsRUFBRSxPQUFPO0tBQ3pHOzs7OztFQUtILDRDQUE0QyxtQkFBbUIsZUFBZTtBQUM3RSxVQUFPLFlBQVksTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLGFBQWE7SUFDckQsTUFBTSxrQkFBa0IsRUFBRTtJQUMxQixNQUFNLG1CQUFtQixFQUFFO0FBQzNCLHFCQUFpQixrQkFBa0I7QUFDbkMsUUFBSSxLQUFLLGlCQUFpQixLQUFLLGNBQWMsYUFBYTtLQUN6RCxNQUFNLFFBQVEsS0FBSyxjQUFjO0tBQ2pDLE1BQU0sY0FBYyxNQUFNLE1BQU0sVUFBVSxFQUFFLENBQUM7QUFDN0MsU0FBSSxZQUFhLGtCQUFpQixtQkFBbUIsVUFBVTs7SUFFaEUsTUFBTSxXQUFXLE1BQU0sS0FBSyxRQUFRO0tBQ25DLE1BQU07S0FDTixRQUFRO0tBQ1IsU0FBUztLQUNULE9BQU87S0FDUCxPQUFPLEdBQUcsVUFBVSxzQ0FBc0Msa0JBQWtCLGtDQUFrQztLQUM5RyxFQUFFLGNBQWM7QUFDakIsV0FBTyxJQUFJLFVBQVUsZ0JBQWdCLFdBQVcsZUFBZSxHQUFHLFVBQVUseUNBQXlDLFVBQVUsQ0FBQztLQUMvSDs7Ozs7RUFLSCwyQ0FBMkM7QUFDMUMsVUFBTyxZQUFZLE1BQU0sV0FBVyxLQUFLLEdBQUcsV0FBVyxvQkFBb0IsRUFBRSxFQUFFLGVBQWU7QUFDN0YsV0FBTyxPQUFPLE1BQU0sS0FBSyw0Q0FBNEMsbUJBQW1CLGNBQWMsRUFBRSxPQUFPO0tBQzlHOzs7OztFQUtILG9DQUFvQyxtQkFBbUIsZUFBZTtBQUNyRSxVQUFPLFlBQVksTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLGFBQWE7SUFDckQsTUFBTSxrQkFBa0IsRUFBRTtJQUMxQixNQUFNLG1CQUFtQixFQUFFO0FBQzNCLHFCQUFpQixrQkFBa0I7QUFDbkMsUUFBSSxLQUFLLGlCQUFpQixLQUFLLGNBQWMsYUFBYTtLQUN6RCxNQUFNLFFBQVEsS0FBSyxjQUFjO0tBQ2pDLE1BQU0sY0FBYyxNQUFNLE1BQU0sVUFBVSxFQUFFLENBQUM7QUFDN0MsU0FBSSxZQUFhLGtCQUFpQixtQkFBbUIsVUFBVTs7SUFFaEUsTUFBTSxXQUFXLE1BQU0sS0FBSyxRQUFRO0tBQ25DLE1BQU07S0FDTixRQUFRO0tBQ1IsU0FBUztLQUNULE9BQU87S0FDUCxPQUFPLEdBQUcsVUFBVSw4QkFBOEIsa0JBQWtCLDBCQUEwQjtLQUM5RixFQUFFLGNBQWM7QUFDakIsV0FBTyxJQUFJLFVBQVUsZ0JBQWdCLFdBQVcsZUFBZSxHQUFHLFVBQVUsaUNBQWlDLFVBQVUsQ0FBQztLQUN2SDs7Ozs7RUFLSCxtQ0FBbUM7QUFDbEMsVUFBTyxZQUFZLE1BQU0sV0FBVyxLQUFLLEdBQUcsV0FBVyxvQkFBb0IsRUFBRSxFQUFFLGVBQWU7QUFDN0YsV0FBTyxPQUFPLE1BQU0sS0FBSyxvQ0FBb0MsbUJBQW1CLGNBQWMsRUFBRSxPQUFPO0tBQ3RHOzs7OztFQUtILGdDQUFnQyxtQkFBbUIsZUFBZTtBQUNqRSxVQUFPLFlBQVksTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLGFBQWE7SUFDckQsTUFBTSxrQkFBa0IsRUFBRTtJQUMxQixNQUFNLG1CQUFtQixFQUFFO0FBQzNCLHFCQUFpQixrQkFBa0I7QUFDbkMsUUFBSSxLQUFLLGlCQUFpQixLQUFLLGNBQWMsYUFBYTtLQUN6RCxNQUFNLFFBQVEsS0FBSyxjQUFjO0tBQ2pDLE1BQU0sY0FBYyxNQUFNLE1BQU0sVUFBVSxFQUFFLENBQUM7QUFDN0MsU0FBSSxZQUFhLGtCQUFpQixtQkFBbUIsVUFBVTs7SUFFaEUsTUFBTSxXQUFXLE1BQU0sS0FBSyxRQUFRO0tBQ25DLE1BQU07S0FDTixRQUFRO0tBQ1IsU0FBUztLQUNULE9BQU87S0FDUCxPQUFPLEdBQUcsVUFBVSwwQkFBMEIsa0JBQWtCLHNCQUFzQjtLQUN0RixFQUFFLGNBQWM7QUFDakIsV0FBTyxJQUFJLFVBQVUsZ0JBQWdCLFdBQVcsZUFBZSxHQUFHLFVBQVUsNkJBQTZCLFVBQVUsQ0FBQztLQUNuSDs7Ozs7RUFLSCwrQkFBK0I7QUFDOUIsVUFBTyxZQUFZLE1BQU0sV0FBVyxLQUFLLEdBQUcsV0FBVyxvQkFBb0IsRUFBRSxFQUFFLGVBQWU7QUFDN0YsV0FBTyxPQUFPLE1BQU0sS0FBSyxnQ0FBZ0MsbUJBQW1CLGNBQWMsRUFBRSxPQUFPO0tBQ2xHOzs7QUFHSixXQUFRLHFCQUFxQjtJQUMxQixDQUFDO0FBSUwsSUFBSSxxQkFBcUMsMkJBQVcsRUFBRSwrRUFBK0UsY0FBWTs7Ozs7Ozs7Ozs7O0NBWWhKLElBQUksY0FBY0EsYUFBV0EsVUFBUSxhQUFhLFNBQVMsU0FBUyxZQUFZLEdBQUcsV0FBVztFQUM3RixTQUFTLE1BQU0sT0FBTztBQUNyQixVQUFPLGlCQUFpQixJQUFJLFFBQVEsSUFBSSxFQUFFLFNBQVMsU0FBUztBQUMzRCxZQUFRLE1BQU07S0FDYjs7QUFFSCxTQUFPLEtBQUssTUFBTSxJQUFJLFVBQVUsU0FBUyxTQUFTLFFBQVE7R0FDekQsU0FBUyxVQUFVLE9BQU87QUFDekIsUUFBSTtBQUNILFVBQUssVUFBVSxLQUFLLE1BQU0sQ0FBQzthQUNuQixHQUFHO0FBQ1gsWUFBTyxFQUFFOzs7R0FHWCxTQUFTLFNBQVMsT0FBTztBQUN4QixRQUFJO0FBQ0gsVUFBSyxVQUFVLFNBQVMsTUFBTSxDQUFDO2FBQ3ZCLEdBQUc7QUFDWCxZQUFPLEVBQUU7OztHQUdYLFNBQVMsS0FBSyxRQUFRO0FBQ3JCLFdBQU8sT0FBTyxRQUFRLE9BQU8sTUFBTSxHQUFHLE1BQU0sT0FBTyxNQUFNLENBQUMsS0FBSyxXQUFXLFNBQVM7O0FBRXBGLFNBQU0sWUFBWSxVQUFVLE1BQU0sU0FBUyxjQUFjLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNwRTs7QUFFSCxRQUFPLGVBQWVBLFdBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFdBQVEsMkJBQTJCLFVBQVEsYUFBYSxLQUFLO0NBQzdELE1BQU0sWUFBWSxpQkFBaUI7Q0FDbkMsTUFBTSxZQUFZLGdCQUFnQjs7OztDQUlsQyxJQUFJLGFBQWEsY0FBYyxVQUFVLFFBQVE7Ozs7RUFJaEQscUJBQXFCLGVBQWU7QUFDbkMsVUFBTyxZQUFZLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxhQUFhO0lBQ3JELE1BQU0sV0FBVyxNQUFNLEtBQUssUUFBUTtLQUNuQyxNQUFNO0tBQ04sUUFBUTtLQUNSLFNBQVMsRUFBRTtLQUNYLE9BQU8sRUFBRTtLQUNULEVBQUUsY0FBYztBQUNqQixXQUFPLElBQUksVUFBVSxnQkFBZ0IsU0FBUztLQUM3Qzs7Ozs7RUFLSCxrQkFBa0IsZUFBZTtBQUNoQyxVQUFPLFlBQVksTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLGFBQWE7QUFDckQsV0FBTyxPQUFPLE1BQU0sS0FBSyxxQkFBcUIsY0FBYyxFQUFFLE9BQU87S0FDcEU7Ozs7O0VBS0gsaUJBQWlCLG1CQUFtQixlQUFlO0FBQ2xELFVBQU8sWUFBWSxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsYUFBYTtJQUNyRCxNQUFNLGtCQUFrQixFQUFFO0lBQzFCLE1BQU0sbUJBQW1CLEVBQUU7QUFDM0IscUJBQWlCLGtCQUFrQjtBQUNuQyxRQUFJLEtBQUssaUJBQWlCLEtBQUssY0FBYyxhQUFhO0tBQ3pELE1BQU0sUUFBUSxLQUFLLGNBQWM7S0FDakMsTUFBTSxjQUFjLE1BQU0sTUFBTSxVQUFVLEVBQUUsQ0FBQztBQUM3QyxTQUFJLFlBQWEsa0JBQWlCLG1CQUFtQixVQUFVOztJQUVoRSxNQUFNLFdBQVcsTUFBTSxLQUFLLFFBQVE7S0FDbkMsTUFBTTtLQUNOLFFBQVE7S0FDUixTQUFTO0tBQ1QsT0FBTztLQUNQLE1BQU0sa0JBQWtCO0tBQ3hCLEVBQUUsY0FBYztBQUNqQixXQUFPLElBQUksVUFBVSxnQkFBZ0IsU0FBUztLQUM3Qzs7Ozs7RUFLSCxnQkFBZ0I7QUFDZixVQUFPLFlBQVksTUFBTSxXQUFXLEtBQUssR0FBRyxXQUFXLG9CQUFvQixFQUFFLEVBQUUsZUFBZTtBQUM3RixXQUFPLE9BQU8sTUFBTSxLQUFLLGlCQUFpQixtQkFBbUIsY0FBYyxFQUFFLE9BQU87S0FDbkY7Ozs7O0VBS0gsZUFBZSxtQkFBbUIsZUFBZTtBQUNoRCxVQUFPLFlBQVksTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLGFBQWE7SUFDckQsTUFBTSxrQkFBa0IsRUFBRTtBQUMxQixRQUFJLGtCQUFrQixXQUFXLEtBQU0saUJBQWdCLFVBQVUsa0JBQWtCO0FBQ25GLFFBQUksa0JBQWtCLDRCQUE0QixLQUFNLGlCQUFnQiwyQkFBMkIsa0JBQWtCO0FBQ3JILFFBQUksa0JBQWtCLHFCQUFxQixLQUFNLGlCQUFnQixvQkFBb0Isa0JBQWtCO0lBQ3ZHLE1BQU0sbUJBQW1CLEVBQUU7QUFDM0IsUUFBSSxLQUFLLGlCQUFpQixLQUFLLGNBQWMsYUFBYTtLQUN6RCxNQUFNLFFBQVEsS0FBSyxjQUFjO0tBQ2pDLE1BQU0sY0FBYyxNQUFNLE1BQU0sVUFBVSxFQUFFLENBQUM7QUFDN0MsU0FBSSxZQUFhLGtCQUFpQixtQkFBbUIsVUFBVTs7SUFFaEUsTUFBTSxXQUFXLE1BQU0sS0FBSyxRQUFRO0tBQ25DLE1BQU07S0FDTixRQUFRO0tBQ1IsU0FBUztLQUNULE9BQU87S0FDUCxFQUFFLGNBQWM7QUFDakIsV0FBTyxJQUFJLFVBQVUsZ0JBQWdCLFNBQVM7S0FDN0M7Ozs7O0VBS0gsY0FBYztBQUNiLFVBQU8sWUFBWSxNQUFNLFdBQVcsS0FBSyxHQUFHLFdBQVcsb0JBQW9CLEVBQUUsRUFBRSxlQUFlO0FBQzdGLFdBQU8sT0FBTyxNQUFNLEtBQUssZUFBZSxtQkFBbUIsY0FBYyxFQUFFLE9BQU87S0FDakY7Ozs7O0VBS0gsYUFBYSxlQUFlO0FBQzNCLFVBQU8sWUFBWSxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsYUFBYTtJQUNyRCxNQUFNLFdBQVcsTUFBTSxLQUFLLFFBQVE7S0FDbkMsTUFBTTtLQUNOLFFBQVE7S0FDUixTQUFTLEVBQUU7S0FDWCxPQUFPLEVBQUU7S0FDVCxFQUFFLGNBQWM7QUFDakIsV0FBTyxJQUFJLFVBQVUsZ0JBQWdCLFNBQVM7S0FDN0M7Ozs7O0VBS0gsVUFBVSxlQUFlO0FBQ3hCLFVBQU8sWUFBWSxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsYUFBYTtBQUNyRCxXQUFPLE9BQU8sTUFBTSxLQUFLLGFBQWEsY0FBYyxFQUFFLE9BQU87S0FDNUQ7Ozs7O0VBS0gsMkJBQTJCLG1CQUFtQixlQUFlO0FBQzVELFVBQU8sWUFBWSxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsYUFBYTtJQUNyRCxNQUFNLGtCQUFrQixFQUFFO0lBQzFCLE1BQU0sbUJBQW1CLEVBQUU7QUFDM0IscUJBQWlCLGtCQUFrQjtBQUNuQyxRQUFJLEtBQUssaUJBQWlCLEtBQUssY0FBYyxhQUFhO0tBQ3pELE1BQU0sUUFBUSxLQUFLLGNBQWM7S0FDakMsTUFBTSxjQUFjLE1BQU0sTUFBTSxVQUFVLEVBQUUsQ0FBQztBQUM3QyxTQUFJLFlBQWEsa0JBQWlCLG1CQUFtQixVQUFVOztJQUVoRSxNQUFNLFdBQVcsTUFBTSxLQUFLLFFBQVE7S0FDbkMsTUFBTTtLQUNOLFFBQVE7S0FDUixTQUFTO0tBQ1QsT0FBTztLQUNQLE9BQU8sR0FBRyxVQUFVLGdDQUFnQyxrQkFBa0IsNEJBQTRCO0tBQ2xHLEVBQUUsY0FBYztBQUNqQixXQUFPLElBQUksVUFBVSxnQkFBZ0IsU0FBUztLQUM3Qzs7Ozs7RUFLSCwwQkFBMEI7QUFDekIsVUFBTyxZQUFZLE1BQU0sV0FBVyxLQUFLLEdBQUcsV0FBVyxvQkFBb0IsRUFBRSxFQUFFLGVBQWU7QUFDN0YsV0FBTyxPQUFPLE1BQU0sS0FBSywyQkFBMkIsbUJBQW1CLGNBQWMsRUFBRSxPQUFPO0tBQzdGOzs7OztFQUtILDZCQUE2QixtQkFBbUIsZUFBZTtBQUM5RCxVQUFPLFlBQVksTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLGFBQWE7SUFDckQsTUFBTSxrQkFBa0IsRUFBRTtJQUMxQixNQUFNLG1CQUFtQixFQUFFO0FBQzNCLHFCQUFpQixrQkFBa0I7QUFDbkMsUUFBSSxLQUFLLGlCQUFpQixLQUFLLGNBQWMsYUFBYTtLQUN6RCxNQUFNLFFBQVEsS0FBSyxjQUFjO0tBQ2pDLE1BQU0sY0FBYyxNQUFNLE1BQU0sVUFBVSxFQUFFLENBQUM7QUFDN0MsU0FBSSxZQUFhLGtCQUFpQixtQkFBbUIsVUFBVTs7SUFFaEUsTUFBTSxXQUFXLE1BQU0sS0FBSyxRQUFRO0tBQ25DLE1BQU07S0FDTixRQUFRO0tBQ1IsU0FBUztLQUNULE9BQU87S0FDUCxPQUFPLEdBQUcsVUFBVSxrQ0FBa0Msa0JBQWtCLDhCQUE4QjtLQUN0RyxFQUFFLGNBQWM7QUFDakIsV0FBTyxJQUFJLFVBQVUsZ0JBQWdCLFNBQVM7S0FDN0M7Ozs7O0VBS0gsNEJBQTRCO0FBQzNCLFVBQU8sWUFBWSxNQUFNLFdBQVcsS0FBSyxHQUFHLFdBQVcsb0JBQW9CLEVBQUUsRUFBRSxlQUFlO0FBQzdGLFdBQU8sT0FBTyxNQUFNLEtBQUssNkJBQTZCLG1CQUFtQixjQUFjLEVBQUUsT0FBTztLQUMvRjs7Ozs7O0VBTUgsOEJBQThCLG1CQUFtQixlQUFlO0FBQy9ELFVBQU8sWUFBWSxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsYUFBYTtJQUNyRCxNQUFNLGtCQUFrQixFQUFFO0lBQzFCLE1BQU0sbUJBQW1CLEVBQUU7QUFDM0IscUJBQWlCLGtCQUFrQjtBQUNuQyxRQUFJLEtBQUssaUJBQWlCLEtBQUssY0FBYyxhQUFhO0tBQ3pELE1BQU0sUUFBUSxLQUFLLGNBQWM7S0FDakMsTUFBTSxjQUFjLE1BQU0sTUFBTSxVQUFVLEVBQUUsQ0FBQztBQUM3QyxTQUFJLFlBQWEsa0JBQWlCLG1CQUFtQixVQUFVOztJQUVoRSxNQUFNLFdBQVcsTUFBTSxLQUFLLFFBQVE7S0FDbkMsTUFBTTtLQUNOLFFBQVE7S0FDUixTQUFTO0tBQ1QsT0FBTztLQUNQLE9BQU8sR0FBRyxVQUFVLDRCQUE0QixrQkFBa0Isd0JBQXdCO0tBQzFGLEVBQUUsY0FBYztBQUNqQixXQUFPLElBQUksVUFBVSxnQkFBZ0IsU0FBUztLQUM3Qzs7Ozs7O0VBTUgsNkJBQTZCO0FBQzVCLFVBQU8sWUFBWSxNQUFNLFdBQVcsS0FBSyxHQUFHLFdBQVcsb0JBQW9CLEVBQUUsRUFBRSxlQUFlO0FBQzdGLFdBQU8sT0FBTyxNQUFNLEtBQUssOEJBQThCLG1CQUFtQixjQUFjLEVBQUUsT0FBTztLQUNoRzs7Ozs7RUFLSCxlQUFlLG1CQUFtQixlQUFlO0FBQ2hELFVBQU8sWUFBWSxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsYUFBYTtJQUNyRCxNQUFNLGtCQUFrQixFQUFFO0lBQzFCLE1BQU0sbUJBQW1CLEVBQUU7QUFDM0IscUJBQWlCLGtCQUFrQjtBQUNuQyxRQUFJLEtBQUssaUJBQWlCLEtBQUssY0FBYyxhQUFhO0tBQ3pELE1BQU0sUUFBUSxLQUFLLGNBQWM7S0FDakMsTUFBTSxjQUFjLE1BQU0sTUFBTSxVQUFVLEVBQUUsQ0FBQztBQUM3QyxTQUFJLFlBQWEsa0JBQWlCLG1CQUFtQixVQUFVOztJQUVoRSxNQUFNLFdBQVcsTUFBTSxLQUFLLFFBQVE7S0FDbkMsTUFBTTtLQUNOLFFBQVE7S0FDUixTQUFTO0tBQ1QsT0FBTztLQUNQLE9BQU8sR0FBRyxVQUFVLGlCQUFpQixrQkFBa0IsYUFBYTtLQUNwRSxFQUFFLGNBQWM7QUFDakIsV0FBTyxJQUFJLFVBQVUsZ0JBQWdCLFNBQVM7S0FDN0M7Ozs7O0VBS0gsY0FBYztBQUNiLFVBQU8sWUFBWSxNQUFNLFdBQVcsS0FBSyxHQUFHLFdBQVcsb0JBQW9CLEVBQUUsRUFBRSxlQUFlO0FBQzdGLFdBQU8sT0FBTyxNQUFNLEtBQUssZUFBZSxtQkFBbUIsY0FBYyxFQUFFLE9BQU87S0FDakY7Ozs7O0VBS0gsd0JBQXdCLG1CQUFtQixlQUFlO0FBQ3pELFVBQU8sWUFBWSxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsYUFBYTtBQUNyRCxRQUFJLGtCQUFrQixhQUFhLEtBQU0sT0FBTSxJQUFJLFVBQVUsY0FBYyxVQUFVLDJGQUEyRjtBQUNoTCxRQUFJLGtCQUFrQixjQUFjLEtBQU0sT0FBTSxJQUFJLFVBQVUsY0FBYyxXQUFXLDRGQUE0RjtJQUNuTCxNQUFNLGtCQUFrQixFQUFFO0FBQzFCLFFBQUksa0JBQWtCLGFBQWEsS0FBTSxpQkFBZ0IsWUFBWSxrQkFBa0I7QUFDdkYsUUFBSSxrQkFBa0IsY0FBYyxLQUFNLGlCQUFnQixhQUFhLGtCQUFrQjtBQUN6RixRQUFJLGtCQUFrQixjQUFjLEtBQU0saUJBQWdCLGFBQWEsa0JBQWtCO0lBQ3pGLE1BQU0sbUJBQW1CLEVBQUU7QUFDM0IsUUFBSSxLQUFLLGlCQUFpQixLQUFLLGNBQWMsYUFBYTtLQUN6RCxNQUFNLFFBQVEsS0FBSyxjQUFjO0tBQ2pDLE1BQU0sY0FBYyxNQUFNLE1BQU0sVUFBVSxFQUFFLENBQUM7QUFDN0MsU0FBSSxZQUFhLGtCQUFpQixtQkFBbUIsVUFBVTs7SUFFaEUsTUFBTSxXQUFXLE1BQU0sS0FBSyxRQUFRO0tBQ25DLE1BQU07S0FDTixRQUFRO0tBQ1IsU0FBUztLQUNULE9BQU87S0FDUCxFQUFFLGNBQWM7QUFDakIsV0FBTyxJQUFJLFVBQVUsZ0JBQWdCLFdBQVcsZUFBZSxHQUFHLFVBQVUseUNBQXlDLFVBQVUsQ0FBQztLQUMvSDs7Ozs7RUFLSCxxQkFBcUIsbUJBQW1CLGVBQWU7QUFDdEQsVUFBTyxZQUFZLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxhQUFhO0FBQ3JELFdBQU8sT0FBTyxNQUFNLEtBQUssd0JBQXdCLG1CQUFtQixjQUFjLEVBQUUsT0FBTztLQUMxRjs7Ozs7RUFLSCxrQkFBa0IsbUJBQW1CLGVBQWU7QUFDbkQsVUFBTyxZQUFZLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxhQUFhO0lBQ3JELE1BQU0sa0JBQWtCLEVBQUU7QUFDMUIsUUFBSSxrQkFBa0IsZ0JBQWdCLEtBQU0saUJBQWdCLGVBQWUsa0JBQWtCO0FBQzdGLFFBQUksa0JBQWtCLGFBQWEsS0FBTSxpQkFBZ0IsWUFBWSxrQkFBa0I7QUFDdkYsUUFBSSxrQkFBa0IsY0FBYyxLQUFNLGlCQUFnQixhQUFhLGtCQUFrQjtBQUN6RixRQUFJLGtCQUFrQiwwQkFBMEIsS0FBTSxpQkFBZ0IseUJBQXlCLGtCQUFrQjtBQUNqSCxRQUFJLGtCQUFrQiw0QkFBNEIsS0FBTSxpQkFBZ0IsMkJBQTJCLGtCQUFrQjtJQUNySCxNQUFNLG1CQUFtQixFQUFFO0FBQzNCLFFBQUksS0FBSyxpQkFBaUIsS0FBSyxjQUFjLGFBQWE7S0FDekQsTUFBTSxRQUFRLEtBQUssY0FBYztLQUNqQyxNQUFNLGNBQWMsTUFBTSxNQUFNLFVBQVUsRUFBRSxDQUFDO0FBQzdDLFNBQUksWUFBYSxrQkFBaUIsbUJBQW1CLFVBQVU7O0lBRWhFLE1BQU0sV0FBVyxNQUFNLEtBQUssUUFBUTtLQUNuQyxNQUFNO0tBQ04sUUFBUTtLQUNSLFNBQVM7S0FDVCxPQUFPO0tBQ1AsRUFBRSxjQUFjO0FBQ2pCLFdBQU8sSUFBSSxVQUFVLGdCQUFnQixXQUFXLGVBQWUsR0FBRyxVQUFVLG1DQUFtQyxVQUFVLENBQUM7S0FDekg7Ozs7O0VBS0gsaUJBQWlCO0FBQ2hCLFVBQU8sWUFBWSxNQUFNLFdBQVcsS0FBSyxHQUFHLFdBQVcsb0JBQW9CLEVBQUUsRUFBRSxlQUFlO0FBQzdGLFdBQU8sT0FBTyxNQUFNLEtBQUssa0JBQWtCLG1CQUFtQixjQUFjLEVBQUUsT0FBTztLQUNwRjs7Ozs7RUFLSCxZQUFZLG1CQUFtQixlQUFlO0FBQzdDLFVBQU8sWUFBWSxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsYUFBYTtBQUNyRCxRQUFJLGtCQUFrQixVQUFVLEtBQU0sT0FBTSxJQUFJLFVBQVUsY0FBYyxPQUFPLDRFQUE0RTtJQUMzSixNQUFNLGtCQUFrQixFQUFFO0FBQzFCLFFBQUksa0JBQWtCLFVBQVUsS0FBTSxpQkFBZ0IsU0FBUyxrQkFBa0I7SUFDakYsTUFBTSxtQkFBbUIsRUFBRTtBQUMzQixRQUFJLEtBQUssaUJBQWlCLEtBQUssY0FBYyxhQUFhO0tBQ3pELE1BQU0sUUFBUSxLQUFLLGNBQWM7S0FDakMsTUFBTSxjQUFjLE1BQU0sTUFBTSxVQUFVLEVBQUUsQ0FBQztBQUM3QyxTQUFJLFlBQWEsa0JBQWlCLG1CQUFtQixVQUFVOztJQUVoRSxNQUFNLFdBQVcsTUFBTSxLQUFLLFFBQVE7S0FDbkMsTUFBTTtLQUNOLFFBQVE7S0FDUixTQUFTO0tBQ1QsT0FBTztLQUNQLEVBQUUsY0FBYztBQUNqQixXQUFPLElBQUksVUFBVSxnQkFBZ0IsV0FBVyxlQUFlLEdBQUcsVUFBVSw4QkFBOEIsVUFBVSxDQUFDO0tBQ3BIOzs7OztFQUtILFNBQVMsbUJBQW1CLGVBQWU7QUFDMUMsVUFBTyxZQUFZLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxhQUFhO0FBQ3JELFdBQU8sT0FBTyxNQUFNLEtBQUssWUFBWSxtQkFBbUIsY0FBYyxFQUFFLE9BQU87S0FDOUU7Ozs7O0VBS0gsc0JBQXNCLG1CQUFtQixlQUFlO0FBQ3ZELFVBQU8sWUFBWSxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsYUFBYTtBQUNyRCxRQUFJLGtCQUFrQixhQUFhLEtBQU0sT0FBTSxJQUFJLFVBQVUsY0FBYyxVQUFVLHlGQUF5RjtBQUM5SyxRQUFJLGtCQUFrQixjQUFjLEtBQU0sT0FBTSxJQUFJLFVBQVUsY0FBYyxXQUFXLDBGQUEwRjtBQUNqTCxRQUFJLGtCQUFrQixpQkFBaUIsS0FBTSxPQUFNLElBQUksVUFBVSxjQUFjLGNBQWMsNkZBQTZGO0lBQzFMLE1BQU0sa0JBQWtCLEVBQUU7QUFDMUIsUUFBSSxrQkFBa0IsYUFBYSxLQUFNLGlCQUFnQixZQUFZLGtCQUFrQjtBQUN2RixRQUFJLGtCQUFrQixjQUFjLEtBQU0saUJBQWdCLGFBQWEsa0JBQWtCO0FBQ3pGLFFBQUksa0JBQWtCLGlCQUFpQixLQUFNLGlCQUFnQixnQkFBZ0Isa0JBQWtCO0lBQy9GLE1BQU0sbUJBQW1CLEVBQUU7QUFDM0IsUUFBSSxLQUFLLGlCQUFpQixLQUFLLGNBQWMsYUFBYTtLQUN6RCxNQUFNLFFBQVEsS0FBSyxjQUFjO0tBQ2pDLE1BQU0sY0FBYyxNQUFNLE1BQU0sVUFBVSxFQUFFLENBQUM7QUFDN0MsU0FBSSxZQUFhLGtCQUFpQixtQkFBbUIsVUFBVTs7SUFFaEUsTUFBTSxXQUFXLE1BQU0sS0FBSyxRQUFRO0tBQ25DLE1BQU07S0FDTixRQUFRO0tBQ1IsU0FBUztLQUNULE9BQU87S0FDUCxFQUFFLGNBQWM7QUFDakIsV0FBTyxJQUFJLFVBQVUsZ0JBQWdCLFdBQVcsZUFBZSxHQUFHLFVBQVUsdUNBQXVDLFVBQVUsQ0FBQztLQUM3SDs7Ozs7RUFLSCxtQkFBbUIsbUJBQW1CLGVBQWU7QUFDcEQsVUFBTyxZQUFZLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxhQUFhO0FBQ3JELFdBQU8sT0FBTyxNQUFNLEtBQUssc0JBQXNCLG1CQUFtQixjQUFjLEVBQUUsT0FBTztLQUN4Rjs7O0FBR0osV0FBUSxhQUFhOzs7OztDQUtyQixJQUFJO0FBQ0osRUFBQyxTQUFTLDRCQUE0QjtBQUNyQyw2QkFBMkIsVUFBVTtBQUNyQyw2QkFBMkIsZ0JBQWdCO0FBQzNDLDZCQUEyQixTQUFTO0FBQ3BDLDZCQUEyQixVQUFVO0lBQ25DLDZCQUE2QixVQUFRLDJCQUEyQiwyQkFBMkIsRUFBRSxFQUFFO0lBQy9GLENBQUM7QUFJTCxJQUFJLHVCQUF1QywyQkFBVyxFQUFFLGlGQUFpRixjQUFZOzs7Ozs7Ozs7Ozs7Q0FZcEosSUFBSSxjQUFjQSxhQUFXQSxVQUFRLGFBQWEsU0FBUyxTQUFTLFlBQVksR0FBRyxXQUFXO0VBQzdGLFNBQVMsTUFBTSxPQUFPO0FBQ3JCLFVBQU8saUJBQWlCLElBQUksUUFBUSxJQUFJLEVBQUUsU0FBUyxTQUFTO0FBQzNELFlBQVEsTUFBTTtLQUNiOztBQUVILFNBQU8sS0FBSyxNQUFNLElBQUksVUFBVSxTQUFTLFNBQVMsUUFBUTtHQUN6RCxTQUFTLFVBQVUsT0FBTztBQUN6QixRQUFJO0FBQ0gsVUFBSyxVQUFVLEtBQUssTUFBTSxDQUFDO2FBQ25CLEdBQUc7QUFDWCxZQUFPLEVBQUU7OztHQUdYLFNBQVMsU0FBUyxPQUFPO0FBQ3hCLFFBQUk7QUFDSCxVQUFLLFVBQVUsU0FBUyxNQUFNLENBQUM7YUFDdkIsR0FBRztBQUNYLFlBQU8sRUFBRTs7O0dBR1gsU0FBUyxLQUFLLFFBQVE7QUFDckIsV0FBTyxPQUFPLFFBQVEsT0FBTyxNQUFNLEdBQUcsTUFBTSxPQUFPLE1BQU0sQ0FBQyxLQUFLLFdBQVcsU0FBUzs7QUFFcEYsU0FBTSxZQUFZLFVBQVUsTUFBTSxTQUFTLGNBQWMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ3BFOztBQUVILFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSxlQUFlLEtBQUs7Q0FDNUIsTUFBTSxZQUFZLGlCQUFpQjtDQUNuQyxNQUFNLFlBQVksZ0JBQWdCOzs7O0NBSWxDLElBQUksZUFBZSxjQUFjLFVBQVUsUUFBUTs7OztFQUlsRCx1QkFBdUIsbUJBQW1CLGVBQWU7QUFDeEQsVUFBTyxZQUFZLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxhQUFhO0lBQ3JELE1BQU0sa0JBQWtCLEVBQUU7SUFDMUIsTUFBTSxtQkFBbUIsRUFBRTtBQUMzQixxQkFBaUIsa0JBQWtCO0FBQ25DLFFBQUksS0FBSyxpQkFBaUIsS0FBSyxjQUFjLGFBQWE7S0FDekQsTUFBTSxRQUFRLEtBQUssY0FBYztLQUNqQyxNQUFNLGNBQWMsTUFBTSxNQUFNLFVBQVUsRUFBRSxDQUFDO0FBQzdDLFNBQUksWUFBYSxrQkFBaUIsbUJBQW1CLFVBQVU7O0lBRWhFLE1BQU0sV0FBVyxNQUFNLEtBQUssUUFBUTtLQUNuQyxNQUFNO0tBQ04sUUFBUTtLQUNSLFNBQVM7S0FDVCxPQUFPO0tBQ1AsT0FBTyxHQUFHLFVBQVUsMEJBQTBCLGtCQUFrQixzQkFBc0I7S0FDdEYsRUFBRSxjQUFjO0FBQ2pCLFdBQU8sSUFBSSxVQUFVLGdCQUFnQixXQUFXLGNBQWMsVUFBVSxJQUFJLFVBQVUsaUJBQWlCLENBQUM7S0FDdkc7Ozs7O0VBS0gsc0JBQXNCO0FBQ3JCLFVBQU8sWUFBWSxNQUFNLFdBQVcsS0FBSyxHQUFHLFdBQVcsb0JBQW9CLEVBQUUsRUFBRSxlQUFlO0FBQzdGLFdBQU8sT0FBTyxNQUFNLEtBQUssdUJBQXVCLG1CQUFtQixjQUFjLEVBQUUsT0FBTztLQUN6Rjs7Ozs7RUFLSCx5QkFBeUIsbUJBQW1CLGVBQWU7QUFDMUQsVUFBTyxZQUFZLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxhQUFhO0lBQ3JELE1BQU0sa0JBQWtCLEVBQUU7SUFDMUIsTUFBTSxtQkFBbUIsRUFBRTtBQUMzQixxQkFBaUIsa0JBQWtCO0FBQ25DLFFBQUksS0FBSyxpQkFBaUIsS0FBSyxjQUFjLGFBQWE7S0FDekQsTUFBTSxRQUFRLEtBQUssY0FBYztLQUNqQyxNQUFNLGNBQWMsTUFBTSxNQUFNLFVBQVUsRUFBRSxDQUFDO0FBQzdDLFNBQUksWUFBYSxrQkFBaUIsbUJBQW1CLFVBQVU7O0lBRWhFLE1BQU0sV0FBVyxNQUFNLEtBQUssUUFBUTtLQUNuQyxNQUFNO0tBQ04sUUFBUTtLQUNSLFNBQVM7S0FDVCxPQUFPO0tBQ1AsT0FBTyxHQUFHLFVBQVUsMEJBQTBCLGtCQUFrQixzQkFBc0I7S0FDdEYsRUFBRSxjQUFjO0FBQ2pCLFdBQU8sSUFBSSxVQUFVLGdCQUFnQixXQUFXLGNBQWMsVUFBVSxJQUFJLFVBQVUsbUJBQW1CLENBQUM7S0FDekc7Ozs7O0VBS0gsd0JBQXdCO0FBQ3ZCLFVBQU8sWUFBWSxNQUFNLFdBQVcsS0FBSyxHQUFHLFdBQVcsb0JBQW9CLEVBQUUsRUFBRSxlQUFlO0FBQzdGLFdBQU8sT0FBTyxNQUFNLEtBQUsseUJBQXlCLG1CQUFtQixjQUFjLEVBQUUsT0FBTztLQUMzRjs7Ozs7RUFLSCx3QkFBd0IsbUJBQW1CLGVBQWU7QUFDekQsVUFBTyxZQUFZLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxhQUFhO0lBQ3JELE1BQU0sa0JBQWtCLEVBQUU7SUFDMUIsTUFBTSxtQkFBbUIsRUFBRTtBQUMzQixxQkFBaUIsa0JBQWtCO0FBQ25DLFFBQUksS0FBSyxpQkFBaUIsS0FBSyxjQUFjLGFBQWE7S0FDekQsTUFBTSxRQUFRLEtBQUssY0FBYztLQUNqQyxNQUFNLGNBQWMsTUFBTSxNQUFNLFVBQVUsRUFBRSxDQUFDO0FBQzdDLFNBQUksWUFBYSxrQkFBaUIsbUJBQW1CLFVBQVU7O0lBRWhFLE1BQU0sV0FBVyxNQUFNLEtBQUssUUFBUTtLQUNuQyxNQUFNO0tBQ04sUUFBUTtLQUNSLFNBQVM7S0FDVCxPQUFPO0tBQ1AsT0FBTyxHQUFHLFVBQVUsNkJBQTZCLGtCQUFrQix5QkFBeUI7S0FDNUYsRUFBRSxjQUFjO0FBQ2pCLFdBQU8sSUFBSSxVQUFVLGdCQUFnQixXQUFXLGVBQWUsR0FBRyxVQUFVLGdDQUFnQyxVQUFVLENBQUM7S0FDdEg7Ozs7O0VBS0gsdUJBQXVCO0FBQ3RCLFVBQU8sWUFBWSxNQUFNLFdBQVcsS0FBSyxHQUFHLFdBQVcsb0JBQW9CLEVBQUUsRUFBRSxlQUFlO0FBQzdGLFdBQU8sT0FBTyxNQUFNLEtBQUssd0JBQXdCLG1CQUFtQixjQUFjLEVBQUUsT0FBTztLQUMxRjs7Ozs7RUFLSCxzQkFBc0IsbUJBQW1CLGVBQWU7QUFDdkQsVUFBTyxZQUFZLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxhQUFhO0lBQ3JELE1BQU0sa0JBQWtCLEVBQUU7SUFDMUIsTUFBTSxtQkFBbUIsRUFBRTtBQUMzQixxQkFBaUIsa0JBQWtCO0FBQ25DLFFBQUksS0FBSyxpQkFBaUIsS0FBSyxjQUFjLGFBQWE7S0FDekQsTUFBTSxRQUFRLEtBQUssY0FBYztLQUNqQyxNQUFNLGNBQWMsTUFBTSxNQUFNLFVBQVUsRUFBRSxDQUFDO0FBQzdDLFNBQUksWUFBYSxrQkFBaUIsbUJBQW1CLFVBQVU7O0lBRWhFLE1BQU0sV0FBVyxNQUFNLEtBQUssUUFBUTtLQUNuQyxNQUFNO0tBQ04sUUFBUTtLQUNSLFNBQVM7S0FDVCxPQUFPO0tBQ1AsT0FBTyxHQUFHLFVBQVUsMkJBQTJCLGtCQUFrQix1QkFBdUI7S0FDeEYsRUFBRSxjQUFjO0FBQ2pCLFdBQU8sSUFBSSxVQUFVLGdCQUFnQixXQUFXLGVBQWUsR0FBRyxVQUFVLDhCQUE4QixVQUFVLENBQUM7S0FDcEg7Ozs7O0VBS0gscUJBQXFCO0FBQ3BCLFVBQU8sWUFBWSxNQUFNLFdBQVcsS0FBSyxHQUFHLFdBQVcsb0JBQW9CLEVBQUUsRUFBRSxlQUFlO0FBQzdGLFdBQU8sT0FBTyxNQUFNLEtBQUssc0JBQXNCLG1CQUFtQixjQUFjLEVBQUUsT0FBTztLQUN4Rjs7O0FBR0osV0FBUSxlQUFlO0lBQ3BCLENBQUM7QUFJTCxJQUFJLHNCQUFzQywyQkFBVyxFQUFFLGdGQUFnRixjQUFZOzs7Ozs7Ozs7Ozs7Q0FZbEosSUFBSSxjQUFjQSxhQUFXQSxVQUFRLGFBQWEsU0FBUyxTQUFTLFlBQVksR0FBRyxXQUFXO0VBQzdGLFNBQVMsTUFBTSxPQUFPO0FBQ3JCLFVBQU8saUJBQWlCLElBQUksUUFBUSxJQUFJLEVBQUUsU0FBUyxTQUFTO0FBQzNELFlBQVEsTUFBTTtLQUNiOztBQUVILFNBQU8sS0FBSyxNQUFNLElBQUksVUFBVSxTQUFTLFNBQVMsUUFBUTtHQUN6RCxTQUFTLFVBQVUsT0FBTztBQUN6QixRQUFJO0FBQ0gsVUFBSyxVQUFVLEtBQUssTUFBTSxDQUFDO2FBQ25CLEdBQUc7QUFDWCxZQUFPLEVBQUU7OztHQUdYLFNBQVMsU0FBUyxPQUFPO0FBQ3hCLFFBQUk7QUFDSCxVQUFLLFVBQVUsU0FBUyxNQUFNLENBQUM7YUFDdkIsR0FBRztBQUNYLFlBQU8sRUFBRTs7O0dBR1gsU0FBUyxLQUFLLFFBQVE7QUFDckIsV0FBTyxPQUFPLFFBQVEsT0FBTyxNQUFNLEdBQUcsTUFBTSxPQUFPLE1BQU0sQ0FBQyxLQUFLLFdBQVcsU0FBUzs7QUFFcEYsU0FBTSxZQUFZLFVBQVUsTUFBTSxTQUFTLGNBQWMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ3BFOztBQUVILFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSxjQUFjLEtBQUs7Q0FDM0IsTUFBTSxZQUFZLGlCQUFpQjtDQUNuQyxNQUFNLFlBQVksZ0JBQWdCOzs7O0NBSWxDLElBQUksY0FBYyxjQUFjLFVBQVUsUUFBUTs7OztFQUlqRCwwQkFBMEIsbUJBQW1CLGVBQWU7QUFDM0QsVUFBTyxZQUFZLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxhQUFhO0lBQ3JELE1BQU0sa0JBQWtCLEVBQUU7SUFDMUIsTUFBTSxtQkFBbUIsRUFBRTtBQUMzQixxQkFBaUIsa0JBQWtCO0FBQ25DLFFBQUksS0FBSyxpQkFBaUIsS0FBSyxjQUFjLGFBQWE7S0FDekQsTUFBTSxRQUFRLEtBQUssY0FBYztLQUNqQyxNQUFNLGNBQWMsTUFBTSxNQUFNLFVBQVUsRUFBRSxDQUFDO0FBQzdDLFNBQUksWUFBYSxrQkFBaUIsbUJBQW1CLFVBQVU7O0lBRWhFLE1BQU0sV0FBVyxNQUFNLEtBQUssUUFBUTtLQUNuQyxNQUFNO0tBQ04sUUFBUTtLQUNSLFNBQVM7S0FDVCxPQUFPO0tBQ1AsT0FBTyxHQUFHLFVBQVUsK0JBQStCLGtCQUFrQiwyQkFBMkI7S0FDaEcsRUFBRSxjQUFjO0FBQ2pCLFdBQU8sSUFBSSxVQUFVLGdCQUFnQixXQUFXLGVBQWUsR0FBRyxVQUFVLGtDQUFrQyxVQUFVLENBQUM7S0FDeEg7Ozs7O0VBS0gseUJBQXlCO0FBQ3hCLFVBQU8sWUFBWSxNQUFNLFdBQVcsS0FBSyxHQUFHLFdBQVcsb0JBQW9CLEVBQUUsRUFBRSxlQUFlO0FBQzdGLFdBQU8sT0FBTyxNQUFNLEtBQUssMEJBQTBCLG1CQUFtQixjQUFjLEVBQUUsT0FBTztLQUM1Rjs7O0FBR0osV0FBUSxjQUFjO0lBQ25CLENBQUM7QUFJTCxJQUFJLG9CQUFvQywyQkFBVyxFQUFFLDhFQUE4RSxjQUFZOzs7Ozs7Ozs7Ozs7Q0FZOUksSUFBSSxZQUFZQSxhQUFXQSxVQUFRLGFBQWEsU0FBUyxTQUFTLFlBQVksR0FBRyxXQUFXO0VBQzNGLFNBQVMsTUFBTSxPQUFPO0FBQ3JCLFVBQU8saUJBQWlCLElBQUksUUFBUSxJQUFJLEVBQUUsU0FBUyxTQUFTO0FBQzNELFlBQVEsTUFBTTtLQUNiOztBQUVILFNBQU8sS0FBSyxNQUFNLElBQUksVUFBVSxTQUFTLFNBQVMsUUFBUTtHQUN6RCxTQUFTLFVBQVUsT0FBTztBQUN6QixRQUFJO0FBQ0gsVUFBSyxVQUFVLEtBQUssTUFBTSxDQUFDO2FBQ25CLEdBQUc7QUFDWCxZQUFPLEVBQUU7OztHQUdYLFNBQVMsU0FBUyxPQUFPO0FBQ3hCLFFBQUk7QUFDSCxVQUFLLFVBQVUsU0FBUyxNQUFNLENBQUM7YUFDdkIsR0FBRztBQUNYLFlBQU8sRUFBRTs7O0dBR1gsU0FBUyxLQUFLLFFBQVE7QUFDckIsV0FBTyxPQUFPLFFBQVEsT0FBTyxNQUFNLEdBQUcsTUFBTSxPQUFPLE1BQU0sQ0FBQyxLQUFLLFdBQVcsU0FBUzs7QUFFcEYsU0FBTSxZQUFZLFVBQVUsTUFBTSxTQUFTLGNBQWMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ3BFOztBQUVILFFBQU8sZUFBZUEsV0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsV0FBUSxZQUFZLEtBQUs7Q0FDekIsTUFBTSxVQUFVLGlCQUFpQjtDQUNqQyxNQUFNLFVBQVUsZ0JBQWdCOzs7O0NBSWhDLElBQUksWUFBWSxjQUFjLFFBQVEsUUFBUTs7O0VBRzdDLG9CQUFvQixtQkFBbUIsZUFBZTtBQUNyRCxVQUFPLFVBQVUsTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLGFBQWE7QUFDbkQsUUFBSSxrQkFBa0IsWUFBWSxLQUFNLE9BQU0sSUFBSSxRQUFRLGNBQWMsU0FBUyxzRkFBc0Y7SUFDdkssTUFBTSxrQkFBa0IsRUFBRTtBQUMxQixRQUFJLGtCQUFrQixZQUFZLEtBQU0saUJBQWdCLFdBQVcsa0JBQWtCO0FBQ3JGLFFBQUksa0JBQWtCLFlBQVksS0FBTSxpQkFBZ0IsV0FBVyxrQkFBa0I7QUFDckYsUUFBSSxrQkFBa0IsY0FBYyxLQUFNLGlCQUFnQixhQUFhLGtCQUFrQjtBQUN6RixRQUFJLGtCQUFrQixhQUFhLEtBQU0saUJBQWdCLFlBQVksa0JBQWtCO0lBQ3ZGLE1BQU0sbUJBQW1CLEVBQUU7QUFDM0IsUUFBSSxLQUFLLGlCQUFpQixLQUFLLGNBQWMsYUFBYTtLQUN6RCxNQUFNLFFBQVEsS0FBSyxjQUFjO0tBQ2pDLE1BQU0sY0FBYyxNQUFNLE1BQU0sVUFBVSxFQUFFLENBQUM7QUFDN0MsU0FBSSxZQUFhLGtCQUFpQixtQkFBbUIsVUFBVTs7SUFFaEUsTUFBTSxXQUFXLE1BQU0sS0FBSyxRQUFRO0tBQ25DLE1BQU07S0FDTixRQUFRO0tBQ1IsU0FBUztLQUNULE9BQU87S0FDUCxFQUFFLGNBQWM7QUFDakIsV0FBTyxJQUFJLFFBQVEsZ0JBQWdCLFdBQVcsZUFBZSxHQUFHLFFBQVEsK0JBQStCLFVBQVUsQ0FBQztLQUNqSDs7OztFQUlILGlCQUFpQixtQkFBbUIsZUFBZTtBQUNsRCxVQUFPLFVBQVUsTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLGFBQWE7QUFDbkQsV0FBTyxPQUFPLE1BQU0sS0FBSyxvQkFBb0IsbUJBQW1CLGNBQWMsRUFBRSxPQUFPO0tBQ3RGOzs7O0VBSUgsMEJBQTBCLG1CQUFtQixlQUFlO0FBQzNELFVBQU8sVUFBVSxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsYUFBYTtJQUNuRCxNQUFNLGtCQUFrQixFQUFFO0FBQzFCLFFBQUksa0JBQWtCLGFBQWEsS0FBTSxpQkFBZ0IsWUFBWSxrQkFBa0I7SUFDdkYsTUFBTSxtQkFBbUIsRUFBRTtBQUMzQixRQUFJLEtBQUssaUJBQWlCLEtBQUssY0FBYyxhQUFhO0tBQ3pELE1BQU0sUUFBUSxLQUFLLGNBQWM7S0FDakMsTUFBTSxjQUFjLE1BQU0sTUFBTSxVQUFVLEVBQUUsQ0FBQztBQUM3QyxTQUFJLFlBQWEsa0JBQWlCLG1CQUFtQixVQUFVOztJQUVoRSxNQUFNLFdBQVcsTUFBTSxLQUFLLFFBQVE7S0FDbkMsTUFBTTtLQUNOLFFBQVE7S0FDUixTQUFTO0tBQ1QsT0FBTztLQUNQLEVBQUUsY0FBYztBQUNqQixXQUFPLElBQUksUUFBUSxnQkFBZ0IsV0FBVyxlQUFlLEdBQUcsUUFBUSxtQ0FBbUMsVUFBVSxDQUFDO0tBQ3JIOzs7O0VBSUgseUJBQXlCO0FBQ3hCLFVBQU8sVUFBVSxNQUFNLFdBQVcsS0FBSyxHQUFHLFdBQVcsb0JBQW9CLEVBQUUsRUFBRSxlQUFlO0FBQzNGLFdBQU8sT0FBTyxNQUFNLEtBQUssMEJBQTBCLG1CQUFtQixjQUFjLEVBQUUsT0FBTztLQUM1Rjs7O0FBR0osV0FBUSxZQUFZO0lBQ2pCLENBQUM7QUFJTCxJQUFJLGVBQStCLDJCQUFXLEVBQUUsMEVBQTBFLGNBQVk7Q0FDckksSUFBSSxvQkFBb0JBLGFBQVdBLFVBQVEsb0JBQW9CLE9BQU8sVUFBVSxTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUk7QUFDckcsTUFBSSxPQUFPLEtBQUssRUFBRyxNQUFLO0VBQ3hCLElBQUksT0FBTyxPQUFPLHlCQUF5QixHQUFHLEVBQUU7QUFDaEQsTUFBSSxDQUFDLFNBQVMsU0FBUyxPQUFPLENBQUMsRUFBRSxhQUFhLEtBQUssWUFBWSxLQUFLLGNBQWUsUUFBTztHQUN6RixZQUFZO0dBQ1osS0FBSyxXQUFXO0FBQ2YsV0FBTyxFQUFFOztHQUVWO0FBQ0QsU0FBTyxlQUFlLEdBQUcsSUFBSSxLQUFLO09BQzdCLFNBQVMsR0FBRyxHQUFHLEdBQUcsSUFBSTtBQUMzQixNQUFJLE9BQU8sS0FBSyxFQUFHLE1BQUs7QUFDeEIsSUFBRSxNQUFNLEVBQUU7O0NBRVgsSUFBSSxpQkFBaUJBLGFBQVdBLFVBQVEsZ0JBQWdCLFNBQVMsR0FBRyxhQUFXO0FBQzlFLE9BQUssSUFBSSxLQUFLLEVBQUcsS0FBSSxNQUFNLGFBQWEsQ0FBQyxPQUFPLFVBQVUsZUFBZSxLQUFLRSxhQUFXLEVBQUUsQ0FBRSxtQkFBa0JBLGFBQVcsR0FBRyxFQUFFOztBQUVoSSxRQUFPLGVBQWVGLFdBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELGdCQUFlLDRCQUE0QixFQUFFQSxVQUFRO0FBQ3JELGdCQUFlLG9CQUFvQixFQUFFQSxVQUFRO0FBQzdDLGdCQUFlLHNCQUFzQixFQUFFQSxVQUFRO0FBQy9DLGdCQUFlLHFCQUFxQixFQUFFQSxVQUFRO0FBQzlDLGdCQUFlLG1CQUFtQixFQUFFQSxVQUFRO0lBQ3pDLENBQUM7QUE4QkwsSUFBSSxjQUE4Qix5QkExQkMsMkJBQVcsRUFBRSxxRUFBcUUsY0FBWTtDQUNoSSxJQUFJLGtCQUFrQkEsYUFBV0EsVUFBUSxvQkFBb0IsT0FBTyxVQUFVLFNBQVMsR0FBRyxHQUFHLEdBQUcsSUFBSTtBQUNuRyxNQUFJLE9BQU8sS0FBSyxFQUFHLE1BQUs7RUFDeEIsSUFBSSxPQUFPLE9BQU8seUJBQXlCLEdBQUcsRUFBRTtBQUNoRCxNQUFJLENBQUMsU0FBUyxTQUFTLE9BQU8sQ0FBQyxFQUFFLGFBQWEsS0FBSyxZQUFZLEtBQUssY0FBZSxRQUFPO0dBQ3pGLFlBQVk7R0FDWixLQUFLLFdBQVc7QUFDZixXQUFPLEVBQUU7O0dBRVY7QUFDRCxTQUFPLGVBQWUsR0FBRyxJQUFJLEtBQUs7T0FDN0IsU0FBUyxHQUFHLEdBQUcsR0FBRyxJQUFJO0FBQzNCLE1BQUksT0FBTyxLQUFLLEVBQUcsTUFBSztBQUN4QixJQUFFLE1BQU0sRUFBRTs7Q0FFWCxJQUFJLGVBQWVBLGFBQVdBLFVBQVEsZ0JBQWdCLFNBQVMsR0FBRyxhQUFXO0FBQzVFLE9BQUssSUFBSSxLQUFLLEVBQUcsS0FBSSxNQUFNLGFBQWEsQ0FBQyxPQUFPLFVBQVUsZUFBZSxLQUFLRSxhQUFXLEVBQUUsQ0FBRSxpQkFBZ0JBLGFBQVcsR0FBRyxFQUFFOztBQUU5SCxRQUFPLGVBQWVGLFdBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELGNBQWEsaUJBQWlCLEVBQUVBLFVBQVE7QUFDeEMsY0FBYSxjQUFjLEVBQUVBLFVBQVE7QUFDckMsY0FBYSxnQkFBZ0IsRUFBRUEsVUFBUTtJQUNwQyxDQUFDLEdBSW1ELEVBQUUsRUFBRTtBQUc1RCxJQUFJLG9CQUFvQixZQUFZO0FBQ3BDLElBQUksdUJBQXVCLFlBQVk7QUFDdkMsSUFBSSwyQkFBMkIsWUFBWTtBQUMzQyxJQUFJLHdDQUF3QyxZQUFZO0FBQ3hELElBQUksY0FBYyxZQUFZO0FBQzlCLElBQUksOEJBQThCLFlBQVk7QUFDOUMsSUFBSSxzQkFBc0IsWUFBWTtBQUN0QyxJQUFJLHlCQUF5QixZQUFZO0FBQ3pDLElBQUksMEJBQTBCLFlBQVk7QUFDMUMsSUFBSSxtQ0FBbUMsWUFBWTtBQUNuRCxJQUFJLG1CQUFtQixZQUFZO0FBQ25DLElBQUksbUJBQW1CLFlBQVk7QUFDbkMsSUFBSSx1QkFBdUIsWUFBWTtBQUN2QyxJQUFJLCtCQUErQixZQUFZO0FBQy9DLElBQUksMkJBQTJCLFlBQVk7QUFDM0MsSUFBSSxxQ0FBcUMsWUFBWTtBQUNyRCxJQUFJLDBCQUEwQixZQUFZO0FBQzFDLElBQUksc0JBQXNCLFlBQVk7QUFDdEMsSUFBSSxzQkFBc0IsWUFBWTtBQUN0QyxJQUFJLDJCQUEyQixZQUFZO0FBQzNDLElBQUksZ0JBQWdCLFlBQVk7QUFDaEMsSUFBSSxpQ0FBaUMsWUFBWTtBQUNqRCxJQUFJLG1DQUFtQyxZQUFZO0FBQ25ELElBQUksNEJBQTRCLFlBQVk7QUFDNUMsSUFBSSxlQUFlLFlBQVk7QUFDL0IsSUFBSSx1QkFBdUIsWUFBWSJ9
6019
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzdC1CWlhfTWdmbi5janMiLCJuYW1lcyI6WyJleHBvcnRzIiwiQmFzZUFQSSIsImV4cG9ydHMkMSJdLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9AZW52aXZlLWFpL3R5cGVzL2Rpc3QvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8jcmVnaW9uIHJvbGxkb3duOnJ1bnRpbWVcbnZhciBfX2NyZWF0ZSA9IE9iamVjdC5jcmVhdGU7XG52YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19nZXRQcm90b09mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19jb21tb25KUyA9IChjYiwgbW9kKSA9PiBmdW5jdGlvbigpIHtcblx0cmV0dXJuIG1vZCB8fCAoMCwgY2JbX19nZXRPd25Qcm9wTmFtZXMoY2IpWzBdXSkoKG1vZCA9IHsgZXhwb3J0czoge30gfSkuZXhwb3J0cywgbW9kKSwgbW9kLmV4cG9ydHM7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcblx0aWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikgZm9yICh2YXIga2V5cyA9IF9fZ2V0T3duUHJvcE5hbWVzKGZyb20pLCBpID0gMCwgbiA9IGtleXMubGVuZ3RoLCBrZXk7IGkgPCBuOyBpKyspIHtcblx0XHRrZXkgPSBrZXlzW2ldO1xuXHRcdGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpIF9fZGVmUHJvcCh0bywga2V5LCB7XG5cdFx0XHRnZXQ6ICgoaykgPT4gZnJvbVtrXSkuYmluZChudWxsLCBrZXkpLFxuXHRcdFx0ZW51bWVyYWJsZTogIShkZXNjID0gX19nZXRPd25Qcm9wRGVzYyhmcm9tLCBrZXkpKSB8fCBkZXNjLmVudW1lcmFibGVcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gdG87XG59O1xudmFyIF9fdG9FU00gPSAobW9kLCBpc05vZGVNb2RlLCB0YXJnZXQpID0+ICh0YXJnZXQgPSBtb2QgIT0gbnVsbCA/IF9fY3JlYXRlKF9fZ2V0UHJvdG9PZihtb2QpKSA6IHt9LCBfX2NvcHlQcm9wcyhpc05vZGVNb2RlIHx8ICFtb2QgfHwgIW1vZC5fX2VzTW9kdWxlID8gX19kZWZQcm9wKHRhcmdldCwgXCJkZWZhdWx0XCIsIHtcblx0dmFsdWU6IG1vZCxcblx0ZW51bWVyYWJsZTogdHJ1ZVxufSkgOiB0YXJnZXQsIG1vZCkpO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvYW5hbHl0aWNzL0dvb2dsZUFuYWx5dGljc0V2ZW50cy50c1xubGV0IEdvb2dsZUFuYWx5dGljc0V2ZW50cyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihHb29nbGVBbmFseXRpY3NFdmVudHMkMSkge1xuXHRHb29nbGVBbmFseXRpY3NFdmVudHMkMVtcIkFERF9UT19DQVJUX3YxXCJdID0gXCJhZGRfdG9fY2FydFwiO1xuXHRHb29nbGVBbmFseXRpY3NFdmVudHMkMVtcIkFERF9UT19DQVJUX3YyXCJdID0gXCJhZGRUb0NhcnRcIjtcblx0cmV0dXJuIEdvb2dsZUFuYWx5dGljc0V2ZW50cyQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9hbmFseXRpY3MvUGVyZk1ldHJpY3NFdmVudHMudHNcbmxldCBQZXJmTWV0cmljc0V2ZW50cyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihQZXJmTWV0cmljc0V2ZW50cyQxKSB7XG5cdFBlcmZNZXRyaWNzRXZlbnRzJDFbXCJQYWdlTG9hZE9mZnNldFwiXSA9IFwicGFnZV9sb2FkX29mZnNldF9tc1wiO1xuXHRQZXJmTWV0cmljc0V2ZW50cyQxW1wiTWFpbkJ1bmRsZUxvYWRlZFwiXSA9IFwibWFpbl9idW5kbGVfbG9hZGVkX21zXCI7XG5cdFBlcmZNZXRyaWNzRXZlbnRzJDFbXCJPcmdDb25maWdMb2FkU3RhcnRlZFwiXSA9IFwib3JnX2NvbmZpZ19sb2FkX3N0YXJ0ZWRfbXNcIjtcblx0UGVyZk1ldHJpY3NFdmVudHMkMVtcIk9yZ0NvbmZpZ0xvYWRFbmRlZFwiXSA9IFwib3JnX2NvbmZpZ19sb2FkX2VuZGVkX21zXCI7XG5cdFBlcmZNZXRyaWNzRXZlbnRzJDFbXCJGaXJzdFJlc3BvbnNlU3RhcnRlZFwiXSA9IFwiZmlyc3RfcmVzcG9uc2Vfc3RhcnRlZF9tc1wiO1xuXHRQZXJmTWV0cmljc0V2ZW50cyQxW1wiRmlyc3RSZXNwb25zZUNvbXBsZXRlZFwiXSA9IFwiZmlyc3RfcmVzcG9uc2VfY29tcGxldGVkX21zXCI7XG5cdFBlcmZNZXRyaWNzRXZlbnRzJDFbXCJGaXJzdFN1Z2dlc3Rpb25zU3RhcnRlZFwiXSA9IFwiZmlyc3Rfc3VnZ2VzdGlvbnNfc3RhcnRlZF9tc1wiO1xuXHRQZXJmTWV0cmljc0V2ZW50cyQxW1wiRmlyc3RTdWdnZXN0aW9uc0NvbXBsZXRlZFwiXSA9IFwiZmlyc3Rfc3VnZ2VzdGlvbnNfY29tcGxldGVkX21zXCI7XG5cdFBlcmZNZXRyaWNzRXZlbnRzJDFbXCJFbWJlZGRlZFdpZGdldFJlbmRlcmVkXCJdID0gXCJlbWJlZGRlZF93aWRnZXRfcmVuZGVyZWRfbXNcIjtcblx0UGVyZk1ldHJpY3NFdmVudHMkMVtcIkZsb2F0aW5nQnV0dG9uUmVuZGVyZWRcIl0gPSBcImZsb2F0aW5nX2J1dHRvbl9yZW5kZXJlZF9tc1wiO1xuXHRQZXJmTWV0cmljc0V2ZW50cyQxW1wiVG9wU3VnZ2VzdGlvbnNCYXJSZW5kZXJlZFwiXSA9IFwidG9wX3N1Z2dlc3Rpb25zX2Jhcl9yZW5kZXJlZF9tc1wiO1xuXHRQZXJmTWV0cmljc0V2ZW50cyQxW1wiQm90dG9tU3VnZ2VzdGlvbnNCYXJSZW5kZXJlZFwiXSA9IFwiYm90dG9tX3N1Z2dlc3Rpb25zX2Jhcl9yZW5kZXJlZF9tc1wiO1xuXHRQZXJmTWV0cmljc0V2ZW50cyQxW1wiU2VhcmNoUHJvbXB0UmVuZGVyZWRcIl0gPSBcInNlYXJjaF9wcm9tcHRfcmVuZGVyZWRfbXNcIjtcblx0cmV0dXJuIFBlcmZNZXRyaWNzRXZlbnRzJDE7XG59KHt9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL2FuYWx5dGljcy9TcGlmZnlFdmVudC50c1xubGV0IFNwaWZmeUV2ZW50ID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKFNwaWZmeUV2ZW50JDEpIHtcblx0U3BpZmZ5RXZlbnQkMVtcIkFNUExJVFVERV9FVkVOVFwiXSA9IFwiU1BJRkZZX0FNUExJVFVERV9FVkVOVFwiO1xuXHRTcGlmZnlFdmVudCQxW1wiQVBQX0lOSVRJQUxJWkVEXCJdID0gXCJTUElGRllfQVBQX0lOSVRJQUxJWkVEXCI7XG5cdFNwaWZmeUV2ZW50JDFbXCJDQUxMX01FUkNIQU5UX0FQUFwiXSA9IFwiU1BJRkZZX0NBTExfTUVSQ0hBTlRfQVBQXCI7XG5cdFNwaWZmeUV2ZW50JDFbXCJNT1VOVElOR19NRVJDSEFOVF9BUFBcIl0gPSBcIlNQSUZGWV9NT1VOVElOR19NRVJDSEFOVF9BUFBcIjtcblx0U3BpZmZ5RXZlbnQkMVtcIkNIQVRfRkFDVE9SWV9JTklUSUFMSVpFRFwiXSA9IFwiU1BJRkZZX0NIQVRfRkFDVE9SWV9JTklUSUFMSVpFRFwiO1xuXHRTcGlmZnlFdmVudCQxW1wiRkxPQVRJTkdfQ0hBVF9SRU5ERVJJTkdcIl0gPSBcIlNQSUZGWV9GTE9BVElOR19DSEFUX1JFTkRFUklOR1wiO1xuXHRTcGlmZnlFdmVudCQxW1wiRkxPQVRJTkdfQ0hBVF9OT1RfUkVOREVSSU5HXCJdID0gXCJTUElGRllfRkxPQVRJTkdfQ0hBVF9OT1RfUkVOREVSSU5HXCI7XG5cdFNwaWZmeUV2ZW50JDFbXCJGTE9BVElOR19DSEFUX0JVVFRPTl9SRU5ERVJJTkdcIl0gPSBcIlNQSUZGWV9GTE9BVElOR19DSEFUX0JVVFRPTl9SRU5ERVJJTkdcIjtcblx0U3BpZmZ5RXZlbnQkMVtcIlNIQURPV19ET01fQ09OVEFJTkVSX1JFQURZXCJdID0gXCJTUElGRllfU0hBRE9XX0RPTV9DT05UQUlORVJfUkVBRFlcIjtcblx0cmV0dXJuIFNwaWZmeUV2ZW50JDE7XG59KHt9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL2FuYWx5dGljcy9TcGlmZnlFdmVudE5hbWUudHNcbmxldCBTcGlmZnlFdmVudE5hbWUgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oU3BpZmZ5RXZlbnROYW1lJDEpIHtcblx0U3BpZmZ5RXZlbnROYW1lJDFbXCJXaWRnZXRPcGVuXCJdID0gXCJzcGlmZnk6d2lkZ2V0b3BlblwiO1xuXHRTcGlmZnlFdmVudE5hbWUkMVtcIldpZGdldENsb3NlXCJdID0gXCJzcGlmZnk6d2lkZ2V0Y2xvc2VcIjtcblx0cmV0dXJuIFNwaWZmeUV2ZW50TmFtZSQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9hbmFseXRpY3MvU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS50c1xubGV0IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxKSB7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIkJ1bmRsZUxvYWRlZFwiXSA9IFwiQnVuZGxlIExvYWRlZFwiO1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJDaGF0TGl2ZUFnZW50QnRuQ2xpY2tcIl0gPSBcIkNoYXQgTGl2ZSBBZ2VudCBCdG4gQ2xpY2tcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiQ2hhdEZsb2F0aW5nQnV0dG9uVmlzaWJsZVwiXSA9IFwiQ2hhdCBGbG9hdGluZyBCdXR0b24gVmlzaWJsZVwiO1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJDaGF0Q29tcG9uZW50VmlzaWJsZVwiXSA9IFwiQ2hhdCBDb21wb25lbnQgVmlzaWJsZVwiO1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJDaGF0Q29tcG9uZW50RXhwYW5kZWRcIl0gPSBcIkNoYXQgQ29tcG9uZW50IEV4cGFuZGVkXCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIkNoYXRDb21wb25lbnRDb2xsYXBzZWRcIl0gPSBcIkNoYXQgQ29tcG9uZW50IENvbGxhcHNlZFwiO1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJDaGF0VXNlck1lc3NhZ2VJbnB1dFwiXSA9IFwiQ2hhdCBVc2VyIE1lc3NhZ2UgSW5wdXRcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiQ2hhdFN1Z2dlc3Rpb25DbGlja2VkXCJdID0gXCJDaGF0IFN1Z2dlc3Rpb24gQ2xpY2tlZFwiO1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJDaGF0QXNzaXN0YW50UmVzcG9uc2VcIl0gPSBcIkNoYXQgQXNzaXN0YW50IFJlc3BvbnNlXCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIlByb2R1Y3RDYXJkQ2xpY2tlZFwiXSA9IFwiUHJvZHVjdCBDYXJkIENsaWNrZWRcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiUHJvZHVjdFJldmlld0NhcmRDbGlja2VkXCJdID0gXCJQcm9kdWN0IFJldmlldyBDYXJkIENsaWNrZWRcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiQWRkVG9DYXJ0Q2xpY2tlZFwiXSA9IFwiQWRkIHRvIENhcnQgQ2xpY2tlZFwiO1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJQcm9tcHRDYXJkQ2xpY2tlZFwiXSA9IFwiUHJvbXB0IENhcmQgQ2xpY2tlZFwiO1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJTdXBwb3J0ZWRFdmVudFwiXSA9IFwiU3VwcG9ydGVkIEV2ZW50XCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIlNlYXJjaEJhY2tUb1Jlc3BvbnNlQ2xpY2tlZFwiXSA9IFwiU2VhcmNoIEJhY2sgdG8gUmVzcG9uc2UgQ2xpY2tlZFwiO1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJQZXJmb3JtYW5jZU1ldHJpY3NcIl0gPSBcIlBlcmZvcm1hbmNlIE1ldHJpY3NcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiU2VhcmNoQmFyQ2xpY2tlZFwiXSA9IFwiU2VhcmNoIEJhciBDbGlja2VkXCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIk9yZGVyTG9va3VwU3RhcnRlZFwiXSA9IFwiT3JkZXIgTG9va3VwIFN0YXJ0ZWRcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiT3JkZXJMb29rdXBGb3JtU3VibWl0dGVkXCJdID0gXCJPcmRlciBMb29rdXAgRm9ybSBTdWJtaXR0ZWRcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiU2VhcmNoQ29tcG9uZW50VmlzaWJsZVwiXSA9IFwiU2VhcmNoIENvbXBvbmVudCBWaXNpYmxlXCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIlNlYXJjaFplcm9TdGF0ZVN1Z2dlc3Rpb25DbGlja2VkXCJdID0gXCJTZWFyY2ggWmVybyBTdGF0ZSBTdWdnZXN0aW9uIENsaWNrZWRcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiU2VhcmNoSW5wdXRTdGFydGVkXCJdID0gXCJTZWFyY2ggSW5wdXQgU3RhcnRlZFwiO1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJTZWFyY2hRdWVyeVN1Ym1pdHRlZFwiXSA9IFwiU2VhcmNoIFF1ZXJ5IFN1Ym1pdHRlZFwiO1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJTZWFyY2hSZXN1bHRzVmlld2VkXCJdID0gXCJTZWFyY2ggUmVzdWx0cyBWaWV3ZWRcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiU2VhcmNoVGltZVRvRmlyc3RDbGlja1wiXSA9IFwiU2VhcmNoIFRpbWUgdG8gRmlyc3QgQ2xpY2tcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiU2VhcmNoWmVyb1Jlc3VsdHNSYXRlXCJdID0gXCJTZWFyY2ggWmVybyBSZXN1bHRzIFJhdGVcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiU2VhcmNoRmlsdGVyQ2xpY2tlZFwiXSA9IFwiU2VhcmNoIEZpbHRlciBDbGlja2VkXCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIlNlYXJjaFNvcnRDbGlja2VkXCJdID0gXCJTZWFyY2ggU29ydCBDbGlja2VkXCI7XG5cdHJldHVybiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDE7XG59KHt9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL2NoYXQvQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24udHNcbmxldCBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxKSB7XG5cdENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uJDFbXCJJTl9DSEFUXCJdID0gXCJpbl9jaGF0XCI7XG5cdENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uJDFbXCJDSEFUX1BSRVZJRVdcIl0gPSBcImNoYXRfcHJldmlld1wiO1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiRkxPQVRJTkdfQlVUVE9OXCJdID0gXCJmbG9hdGluZ19idXR0b25cIjtcblx0Q2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24kMVtcIkhFTFBfTUVfQ0hPT1NFXCJdID0gXCJoZWxwX21lX2Nob29zZVwiO1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiUExQX0lNQUdFX0JBTk5FUlwiXSA9IFwicGxwX2ltYWdlX2Jhbm5lclwiO1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiVE9QX1JFVklFV1NfU05JUFBFVFwiXSA9IFwidG9wX3Jldmlld3Nfc25pcHBldFwiO1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiQk9UVE9NX1JFVklFV1NfU05JUFBFVFwiXSA9IFwiYm90dG9tX3Jldmlld3Nfc25pcHBldFwiO1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiQkxPQ0tfQkFDS19CVVRUT05cIl0gPSBcImJsb2NrX2JhY2tfYnV0dG9uXCI7XG5cdENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uJDFbXCJTV0lUQ0hfVE9fQUdFTlRcIl0gPSBcInN3aXRjaF90b19hZ2VudFwiO1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiQ09OVkVSU0FUSU9OQUxfU0VBUkNIXCJdID0gXCJjb252ZXJzYXRpb25hbF9zZWFyY2hcIjtcblx0Q2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24kMVtcIkdMT0JBTF9TRUFSQ0hfRU5UUllQT0lOVFwiXSA9IFwiZ2xvYmFsX3NlYXJjaF9lbnRyeXBvaW50XCI7XG5cdENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uJDFbXCJTRUFSQ0hfTkFWX0VOVFJZUE9JTlRcIl0gPSBcInNlYXJjaF9uYXZfZW50cnlwb2ludFwiO1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiU0VBUkNIX1BST01QVFwiXSA9IFwic2VhcmNoX3Byb21wdFwiO1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiU0VBUkNIX1BST01QVF9CVVRUT05cIl0gPSBcInNlYXJjaF9wcm9tcHRfYnV0dG9uXCI7XG5cdENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uJDFbXCJQUk9EVUNUX0dSSURcIl0gPSBcInByb2R1Y3RfZ3JpZFwiO1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiVU5TUEVDSUZJRURcIl0gPSBcInVuc3BlY2lmaWVkXCI7XG5cdENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uJDFbXCJGSUxURVJfTU9EQUxcIl0gPSBcImZpbHRlcl9tb2RhbFwiO1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiUFJPTVBUX0NBUkRcIl0gPSBcInByb21wdF9jYXJkXCI7XG5cdENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uJDFbXCJXSU5ET1dfQVBJX0NBTExcIl0gPSBcIndpbmRvd19hcGlfY2FsbFwiO1xuXHRyZXR1cm4gQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24kMTtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvY2hhdC9DaGF0U3RhdGUudHNcbmxldCBDaGF0U3RhdGUgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oQ2hhdFN0YXRlJDEpIHtcblx0Q2hhdFN0YXRlJDFbXCJJTklUSUFMXCJdID0gXCJpbml0aWFsXCI7XG5cdENoYXRTdGF0ZSQxW1wiRk9STVwiXSA9IFwiZm9ybVwiO1xuXHRDaGF0U3RhdGUkMVtcIkNIQVRcIl0gPSBcImNoYXRcIjtcblx0cmV0dXJuIENoYXRTdGF0ZSQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9jaGF0L01lc3NhZ2UudHNcbmxldCBNZXNzYWdlUm9sZSA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihNZXNzYWdlUm9sZSQxKSB7XG5cdE1lc3NhZ2VSb2xlJDFbXCJVc2VyXCJdID0gXCJ1c2VyXCI7XG5cdE1lc3NhZ2VSb2xlJDFbXCJBc3Npc3RhbnRcIl0gPSBcImFzc2lzdGFudFwiO1xuXHRyZXR1cm4gTWVzc2FnZVJvbGUkMTtcbn0oe30pO1xubGV0IE1lc3NhZ2VUeXBlID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKE1lc3NhZ2VUeXBlJDEpIHtcblx0TWVzc2FnZVR5cGUkMVtcIlRleHRcIl0gPSBcInRleHRcIjtcblx0TWVzc2FnZVR5cGUkMVtcIlN1Z2dlc3Rpb25DbGlja2VkXCJdID0gXCJzdWdnZXN0aW9uX2NsaWNrZWRcIjtcblx0TWVzc2FnZVR5cGUkMVtcIlByb2R1Y3RcIl0gPSBcInByb2R1Y3RcIjtcblx0TWVzc2FnZVR5cGUkMVtcIlByb2R1Y3RTZWFyY2hcIl0gPSBcInByb2R1Y3Rfc2VhcmNoXCI7XG5cdE1lc3NhZ2VUeXBlJDFbXCJSZXZpZXdcIl0gPSBcInJldmlld1wiO1xuXHRNZXNzYWdlVHlwZSQxW1wiUXVlcnlUeXBlZFwiXSA9IFwicXVlcnlfdHlwZWRcIjtcblx0TWVzc2FnZVR5cGUkMVtcIlNlcGFyYXRvclwiXSA9IFwic2VwYXJhdG9yXCI7XG5cdE1lc3NhZ2VUeXBlJDFbXCJQYWdlXCJdID0gXCJwYWdlXCI7XG5cdE1lc3NhZ2VUeXBlJDFbXCJTZWFyY2hcIl0gPSBcInNlYXJjaFwiO1xuXHRNZXNzYWdlVHlwZSQxW1wiQXR0YWNobWVudFwiXSA9IFwiYXR0YWNobWVudFwiO1xuXHRNZXNzYWdlVHlwZSQxW1wiQ1hBZ2VudFJlc3BvbnNlXCJdID0gXCJjeF9hZ2VudF9yZXNwb25zZVwiO1xuXHRNZXNzYWdlVHlwZSQxW1wiRm9ybVwiXSA9IFwiZm9ybVwiO1xuXHRNZXNzYWdlVHlwZSQxW1wiT3JkZXJcIl0gPSBcIm9yZGVyXCI7XG5cdE1lc3NhZ2VUeXBlJDFbXCJQcm9kdWN0U2VhcmNoRmlsdGVyXCJdID0gXCJwcm9kdWN0X3NlYXJjaF9maWx0ZXJcIjtcblx0cmV0dXJuIE1lc3NhZ2VUeXBlJDE7XG59KHt9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL2NoYXQvU3VnZ2VzdGlvbkJhckxvY2F0aW9uRm9yTWV0cmljcy50c1xubGV0IFN1Z2dlc3Rpb25CYXJMb2NhdGlvbkZvck1ldHJpY3MgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oU3VnZ2VzdGlvbkJhckxvY2F0aW9uRm9yTWV0cmljcyQxKSB7XG5cdFN1Z2dlc3Rpb25CYXJMb2NhdGlvbkZvck1ldHJpY3MkMVtcIlNVR0dFU1RJT05fQkFSX1RPUFwiXSA9IFwidG9wXCI7XG5cdFN1Z2dlc3Rpb25CYXJMb2NhdGlvbkZvck1ldHJpY3MkMVtcIlNVR0dFU1RJT05fQkFSX0JPVFRPTVwiXSA9IFwiYm90dG9tXCI7XG5cdHJldHVybiBTdWdnZXN0aW9uQmFyTG9jYXRpb25Gb3JNZXRyaWNzJDE7XG59KHt9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL2NvbmZpZ3MvQ29sb3JzQ29uZmlnLnRzXG5sZXQgQ29sb3JOYW1lcyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihDb2xvck5hbWVzJDEpIHtcblx0Q29sb3JOYW1lcyQxW1wiVGV4dFByaW1hcnlcIl0gPSBcInRleHQtcHJpbWFyeVwiO1xuXHRDb2xvck5hbWVzJDFbXCJUZXh0U2Vjb25kYXJ5XCJdID0gXCJ0ZXh0LXNlY29uZGFyeVwiO1xuXHRDb2xvck5hbWVzJDFbXCJUZXh0QWNjZW50XCJdID0gXCJ0ZXh0LWFjY2VudFwiO1xuXHRDb2xvck5hbWVzJDFbXCJUZXh0TGlua1wiXSA9IFwidGV4dC1saW5rXCI7XG5cdENvbG9yTmFtZXMkMVtcIlRleHRMaWdodFwiXSA9IFwidGV4dC1saWdodFwiO1xuXHRDb2xvck5hbWVzJDFbXCJCYWNrZ3JvdW5kUHJpbWFyeVwiXSA9IFwiYmFja2dyb3VuZC1wcmltYXJ5XCI7XG5cdENvbG9yTmFtZXMkMVtcIkJhY2tncm91bmRTZWNvbmRhcnlcIl0gPSBcImJhY2tncm91bmQtc2Vjb25kYXJ5XCI7XG5cdENvbG9yTmFtZXMkMVtcIkJhY2tncm91bmRTZWNvbmRhcnlEYXJrXCJdID0gXCJiYWNrZ3JvdW5kLXNlY29uZGFyeS1kYXJrXCI7XG5cdENvbG9yTmFtZXMkMVtcIkJhY2tncm91bmRUZXJ0aWFyeVwiXSA9IFwiYmFja2dyb3VuZC10ZXJ0aWFyeVwiO1xuXHRDb2xvck5hbWVzJDFbXCJCYWNrZ3JvdW5kRGFya1wiXSA9IFwiYmFja2dyb3VuZC1kYXJrXCI7XG5cdENvbG9yTmFtZXMkMVtcIkJhY2tncm91bmRMaWdodFwiXSA9IFwiYmFja2dyb3VuZC1saWdodFwiO1xuXHRDb2xvck5hbWVzJDFbXCJCYWNrZ3JvdW5kU2F0dXJhdGVkXCJdID0gXCJiYWNrZ3JvdW5kLXNhdHVyYXRlZFwiO1xuXHRDb2xvck5hbWVzJDFbXCJCb3JkZXJMaWdodFwiXSA9IFwiYm9yZGVyLWxpZ2h0XCI7XG5cdENvbG9yTmFtZXMkMVtcIkJvcmRlck1lZGl1bVwiXSA9IFwiYm9yZGVyLW1lZGl1bVwiO1xuXHRDb2xvck5hbWVzJDFbXCJCb3JkZXJEYXJrXCJdID0gXCJib3JkZXItZGFya1wiO1xuXHRDb2xvck5hbWVzJDFbXCJCb3JkZXJPdXRsaW5lXCJdID0gXCJib3JkZXItb3V0bGluZVwiO1xuXHRDb2xvck5hbWVzJDFbXCJBY2NlbnRQcmltYXJ5XCJdID0gXCJhY2NlbnQtcHJpbWFyeVwiO1xuXHRDb2xvck5hbWVzJDFbXCJBY2NlbnRTZWNvbmRhcnlcIl0gPSBcImFjY2VudC1zZWNvbmRhcnlcIjtcblx0cmV0dXJuIENvbG9yTmFtZXMkMTtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvY29yZS9DdXN0b21lclNlcnZpY2UudHNcbmxldCBDdXN0b21lclNlcnZpY2VUeXBlID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKEN1c3RvbWVyU2VydmljZVR5cGUkMSkge1xuXHRDdXN0b21lclNlcnZpY2VUeXBlJDFbXCJzaG9waWZ5XCJdID0gXCJzaG9waWZ5XCI7XG5cdEN1c3RvbWVyU2VydmljZVR5cGUkMVtcImdvcmdpYXNcIl0gPSBcImdvcmdpYXNcIjtcblx0Q3VzdG9tZXJTZXJ2aWNlVHlwZSQxW1wia3VzdG9tZXJcIl0gPSBcImt1c3RvbWVyXCI7XG5cdEN1c3RvbWVyU2VydmljZVR5cGUkMVtcImdyb292ZVwiXSA9IFwiZ3Jvb3ZlXCI7XG5cdEN1c3RvbWVyU2VydmljZVR5cGUkMVtcInRpZGlvXCJdID0gXCJ0aWRpb1wiO1xuXHRDdXN0b21lclNlcnZpY2VUeXBlJDFbXCJ6b3dpZVwiXSA9IFwiem93aWVcIjtcblx0Q3VzdG9tZXJTZXJ2aWNlVHlwZSQxW1wicmVkb1wiXSA9IFwicmVkb1wiO1xuXHRDdXN0b21lclNlcnZpY2VUeXBlJDFbXCJnbGFkbHlcIl0gPSBcImdsYWRseVwiO1xuXHRDdXN0b21lclNlcnZpY2VUeXBlJDFbXCJyaWNocGFuZWxcIl0gPSBcInJpY2hwYW5lbFwiO1xuXHRDdXN0b21lclNlcnZpY2VUeXBlJDFbXCJ6ZW5kZXNrXCJdID0gXCJ6ZW5kZXNrXCI7XG5cdEN1c3RvbWVyU2VydmljZVR5cGUkMVtcInVuc3VwcG9ydGVkXCJdID0gXCJ1bnN1cHBvcnRlZFwiO1xuXHRyZXR1cm4gQ3VzdG9tZXJTZXJ2aWNlVHlwZSQxO1xufSh7fSk7XG5sZXQgQ3VzdG9tZXJTZXJ2aWNlSW50ZWdyYXRpb25Nb2RlID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKEN1c3RvbWVyU2VydmljZUludGVncmF0aW9uTW9kZSQxKSB7XG5cdEN1c3RvbWVyU2VydmljZUludGVncmF0aW9uTW9kZSQxW1wibm9uZVwiXSA9IFwibm9uZVwiO1xuXHRDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbk1vZGUkMVtcInNpbXBsZVwiXSA9IFwic2ltcGxlXCI7XG5cdEN1c3RvbWVyU2VydmljZUludGVncmF0aW9uTW9kZSQxW1wiZnVsbFwiXSA9IFwiZnVsbFwiO1xuXHRyZXR1cm4gQ3VzdG9tZXJTZXJ2aWNlSW50ZWdyYXRpb25Nb2RlJDE7XG59KHt9KTtcbmxldCBDdXN0b21lclNlcnZpY2VPdmVycmlkZXMgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oQ3VzdG9tZXJTZXJ2aWNlT3ZlcnJpZGVzJDEpIHtcblx0Q3VzdG9tZXJTZXJ2aWNlT3ZlcnJpZGVzJDFbXCJMRUdBTF9NRVNTQUdFXCJdID0gXCJzcGlmZnktY3VzdG9tZXItc2VydmljZS1sZWdhbC1tZXNzYWdlXCI7XG5cdEN1c3RvbWVyU2VydmljZU92ZXJyaWRlcyQxW1wiREFSS19CVVRUT05fQ09OVEFJTkVSXCJdID0gXCJzcGlmZnktY3VzdG9tZXItc2VydmljZS1kYXJrLWJ1dHRvbi1jb250YWluZXJcIjtcblx0Q3VzdG9tZXJTZXJ2aWNlT3ZlcnJpZGVzJDFbXCJEQVJLX0JVVFRPTlwiXSA9IFwic3BpZmZ5LWN1c3RvbWVyLXNlcnZpY2UtZGFyay1idXR0b25cIjtcblx0Q3VzdG9tZXJTZXJ2aWNlT3ZlcnJpZGVzJDFbXCJEQVJLX0JVVFRPTl9IT1ZFUl9URVhUXCJdID0gXCJzcGlmZnktY3VzdG9tZXItc2VydmljZS1kYXJrLWJ1dHRvbi1ob3Zlci10ZXh0XCI7XG5cdEN1c3RvbWVyU2VydmljZU92ZXJyaWRlcyQxW1wiREFSS19CVVRUT05fVEVYVFwiXSA9IFwic3BpZmZ5LWN1c3RvbWVyLXNlcnZpY2UtZGFyay1idXR0b24tdGV4dFwiO1xuXHRDdXN0b21lclNlcnZpY2VPdmVycmlkZXMkMVtcIkZPUk1fRklFTERcIl0gPSBcInNwaWZmeS1jdXN0b21lci1zZXJ2aWNlLWZvcm0tZmllbGRcIjtcblx0Q3VzdG9tZXJTZXJ2aWNlT3ZlcnJpZGVzJDFbXCJBSV9OQU1FXCJdID0gXCJzcGlmZnktY3VzdG9tZXItc2VydmljZS1haS1uYW1lXCI7XG5cdEN1c3RvbWVyU2VydmljZU92ZXJyaWRlcyQxW1wiV0FJVElOR19NRVNTQUdFXCJdID0gXCJzcGlmZnktY3VzdG9tZXItc2VydmljZS13YWl0aW5nLW1lc3NhZ2VcIjtcblx0Q3VzdG9tZXJTZXJ2aWNlT3ZlcnJpZGVzJDFbXCJXQUlUSU5HX01FU1NBR0VfSUNPTlwiXSA9IFwic3BpZmZ5LWN1c3RvbWVyLXNlcnZpY2Utd2FpdGluZy1tZXNzYWdlLWljb25cIjtcblx0cmV0dXJuIEN1c3RvbWVyU2VydmljZU92ZXJyaWRlcyQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9jb3JlL0RvbUluc2VydGlvbi50c1xubGV0IERPTUluc2VydGlvblR5cGUgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oRE9NSW5zZXJ0aW9uVHlwZSQxKSB7XG5cdERPTUluc2VydGlvblR5cGUkMVtcIkFGVEVSXCJdID0gXCJhZnRlclwiO1xuXHRET01JbnNlcnRpb25UeXBlJDFbXCJCRUZPUkVcIl0gPSBcImJlZm9yZVwiO1xuXHRET01JbnNlcnRpb25UeXBlJDFbXCJBREpBQ0VOVF9BRlRFUl9CRUdJTlwiXSA9IFwiYWRqYWNlbnQtYWZ0ZXItYmVnaW5cIjtcblx0RE9NSW5zZXJ0aW9uVHlwZSQxW1wiQURKQUNFTlRfQkVGT1JFX0JFR0lOXCJdID0gXCJhZGphY2VudC1iZWZvcmUtYmVnaW5cIjtcblx0RE9NSW5zZXJ0aW9uVHlwZSQxW1wiQURKQUNFTlRfQUZURVJfRU5EXCJdID0gXCJhZGphY2VudC1hZnRlci1lbmRcIjtcblx0RE9NSW5zZXJ0aW9uVHlwZSQxW1wiQURKQUNFTlRfQkVGT1JFX0VORFwiXSA9IFwiYWRqYWNlbnQtYmVmb3JlLWVuZFwiO1xuXHRET01JbnNlcnRpb25UeXBlJDFbXCJBUFBFTkRfQ0hJTERcIl0gPSBcImFwcGVuZC1jaGlsZFwiO1xuXHRET01JbnNlcnRpb25UeXBlJDFbXCJOT05FXCJdID0gXCJub25lXCI7XG5cdHJldHVybiBET01JbnNlcnRpb25UeXBlJDE7XG59KHt9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL2NvcmUvRmVhdHVyZUdhdGVzLnRzXG5sZXQgRmVhdHVyZUdhdGVzID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKEZlYXR1cmVHYXRlcyQxKSB7XG5cdEZlYXR1cmVHYXRlcyQxW1wiSXNDbGllbnRTZXNzaW9uRW5hYmxlZFwiXSA9IFwiaXNfY2xpZW50X3Nlc3Npb25fZW5hYmxlZFwiO1xuXHRGZWF0dXJlR2F0ZXMkMVtcIklzTmV3RmVhdHVyZUVuYWJsZWRcIl0gPSBcImlzX25ld19mZWF0dXJlX2VuYWJsZWRcIjtcblx0RmVhdHVyZUdhdGVzJDFbXCJJc0ZpbmVUdW5lZE1vZGVsOGJcIl0gPSBcImlzX2ZpbmVfdHVuZWRfbW9kZWxfOGJcIjtcblx0RmVhdHVyZUdhdGVzJDFbXCJJc0ltYWdlQmFubmVyRW5hYmxlZFwiXSA9IFwiaXNfaW1hZ2VfYmFubmVyX2VuYWJsZWRcIjtcblx0RmVhdHVyZUdhdGVzJDFbXCJJc09yZGVyTG9va3VwRW5hYmxlZFwiXSA9IFwiaXNfb3JkZXJfbG9va3VwX2VuYWJsZWRcIjtcblx0RmVhdHVyZUdhdGVzJDFbXCJJc1N1bW1hcml6ZVJldmlld3NFbmFibGVkXCJdID0gXCJpc19zdW1tYXJpemVfcmV2aWV3c19lbmFibGVkXCI7XG5cdEZlYXR1cmVHYXRlcyQxW1wiSXNHbG9iYWxTZWFyY2hFbmFibGVkXCJdID0gXCJpc19nbG9iYWxfc2VhcmNoX2VuYWJsZWRcIjtcblx0RmVhdHVyZUdhdGVzJDFbXCJJc0ltYWdlUHJvbXB0RW5hYmxlZFwiXSA9IFwiaXNfaW1hZ2VfcHJvbXB0X2VuYWJsZWRcIjtcblx0RmVhdHVyZUdhdGVzJDFbXCJJc1dhdGVybWFya0VuYWJsZWRcIl0gPSBcImlzX3dhdGVybWFya19lbmFibGVkXCI7XG5cdEZlYXR1cmVHYXRlcyQxW1wiSXNJbmZlcmVuY2VSZWdpb24wXCJdID0gXCJpc19pbmZlcmVuY2VfcmVnaW9uXzBcIjtcblx0RmVhdHVyZUdhdGVzJDFbXCJJc0NoYXRWYXJpYW50RW5hYmxlZFwiXSA9IFwiaXNfY2hhdF92YXJpYW50X2VuYWJsZWRcIjtcblx0RmVhdHVyZUdhdGVzJDFbXCJJc0NoYXRWYXJpYW50QUVuYWJsZWRcIl0gPSBcImlzX2NoYXRfdmFyaWFudF9hX2VuYWJsZWRcIjtcblx0RmVhdHVyZUdhdGVzJDFbXCJJc0NoYXRWYXJpYW50QkVuYWJsZWRcIl0gPSBcImlzX2NoYXRfdmFyaWFudF9iX2VuYWJsZWRcIjtcblx0RmVhdHVyZUdhdGVzJDFbXCJJc1VzZXJRdWVyeUFsd2F5c0VuYWJsZWRcIl0gPSBcImlzX3VzZXJfcXVlcnlfYWx3YXlzX2VuYWJsZWRcIjtcblx0RmVhdHVyZUdhdGVzJDFbXCJJc1NlYXJjaEF1dG9jb21wbGV0ZUVuYWJsZWRcIl0gPSBcImlzX3NlYXJjaF9hdXRvY29tcGxldGVfZW5hYmxlZFwiO1xuXHRGZWF0dXJlR2F0ZXMkMVtcIklzRW1wdHlEaXZQTFBFbmFibGVkXCJdID0gXCJpc19lbXB0eV9kaXZfcGxwX2VuYWJsZWRcIjtcblx0RmVhdHVyZUdhdGVzJDFbXCJJc1JlY29tbWVuZGVkUHJvZHVjdHNFbmFibGVkXCJdID0gXCJpc19yZWNvbW1lbmRlZF9wcm9kdWN0c19lbmFibGVkXCI7XG5cdEZlYXR1cmVHYXRlcyQxW1wiSXNDaGF0U2Nyb2xsUGF1c2VkXCJdID0gXCJpc19jaGF0X3Njcm9sbF9wYXVzZWRcIjtcblx0cmV0dXJuIEZlYXR1cmVHYXRlcyQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9jb3JlL0dyaWRJbnNlcnRpb24udHNcbmxldCBHcmlkSW5zZXJ0aW9uVHlwZSA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihHcmlkSW5zZXJ0aW9uVHlwZSQxKSB7XG5cdEdyaWRJbnNlcnRpb25UeXBlJDFbXCJGSVhFRF8xXCJdID0gXCJmaXhlZC0xXCI7XG5cdEdyaWRJbnNlcnRpb25UeXBlJDFbXCJGSVhFRF8yXCJdID0gXCJmaXhlZC0yXCI7XG5cdEdyaWRJbnNlcnRpb25UeXBlJDFbXCJGSVhFRF8zXCJdID0gXCJmaXhlZC0zXCI7XG5cdEdyaWRJbnNlcnRpb25UeXBlJDFbXCJGSVhFRF80XCJdID0gXCJmaXhlZC00XCI7XG5cdEdyaWRJbnNlcnRpb25UeXBlJDFbXCJGSVhFRF81XCJdID0gXCJmaXhlZC01XCI7XG5cdEdyaWRJbnNlcnRpb25UeXBlJDFbXCJGSVhFRF82XCJdID0gXCJmaXhlZC02XCI7XG5cdEdyaWRJbnNlcnRpb25UeXBlJDFbXCJGSVhFRF83XCJdID0gXCJmaXhlZC03XCI7XG5cdEdyaWRJbnNlcnRpb25UeXBlJDFbXCJGSVhFRF84XCJdID0gXCJmaXhlZC04XCI7XG5cdEdyaWRJbnNlcnRpb25UeXBlJDFbXCJGSVhFRF85XCJdID0gXCJmaXhlZC05XCI7XG5cdEdyaWRJbnNlcnRpb25UeXBlJDFbXCJGSVhFRF8xMlwiXSA9IFwiZml4ZWQtMTJcIjtcblx0R3JpZEluc2VydGlvblR5cGUkMVtcIkZJWEVEXzEzXCJdID0gXCJmaXhlZC0xM1wiO1xuXHRHcmlkSW5zZXJ0aW9uVHlwZSQxW1wiUk9XXzFcIl0gPSBcInJvdy0xXCI7XG5cdEdyaWRJbnNlcnRpb25UeXBlJDFbXCJST1dfMlwiXSA9IFwicm93LTJcIjtcblx0R3JpZEluc2VydGlvblR5cGUkMVtcIlJPV18zXCJdID0gXCJyb3ctM1wiO1xuXHRHcmlkSW5zZXJ0aW9uVHlwZSQxW1wiUk9XXzRcIl0gPSBcInJvdy00XCI7XG5cdHJldHVybiBHcmlkSW5zZXJ0aW9uVHlwZSQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9jb3JlL0xvY2FsU3RvcmFnZUtleXMudHNcbmxldCBMb2NhbFN0b3JhZ2VLZXlzID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKExvY2FsU3RvcmFnZUtleXMkMSkge1xuXHRMb2NhbFN0b3JhZ2VLZXlzJDFbXCJDaGF0SWRcIl0gPSBcInYxLXNwaWZmeS1jaGF0LXNlc3Npb24taWRcIjtcblx0TG9jYWxTdG9yYWdlS2V5cyQxW1wiU3BpZmZ5T25PdmVycmlkZVwiXSA9IFwic3BpZmZ5X29uXCI7XG5cdExvY2FsU3RvcmFnZUtleXMkMVtcIkVudml2ZU9uT3ZlcnJpZGVcIl0gPSBcImVudml2ZV9vblwiO1xuXHRyZXR1cm4gTG9jYWxTdG9yYWdlS2V5cyQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9jb3JlL1BhZ2VWYXJpYW50VGVzdC50c1xubGV0IFBhZ2VWYXJpYW50VGVzdFR5cGUgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oUGFnZVZhcmlhbnRUZXN0VHlwZSQxKSB7XG5cdFBhZ2VWYXJpYW50VGVzdFR5cGUkMVtcIlNob3BpZnlQTFBcIl0gPSBcIlNob3BpZnlQTFBcIjtcblx0UGFnZVZhcmlhbnRUZXN0VHlwZSQxW1wiU2hvcGlmeVBEUFwiXSA9IFwiU2hvcGlmeVBEUFwiO1xuXHRQYWdlVmFyaWFudFRlc3RUeXBlJDFbXCJQYWdlQ2F0ZWdvcnlcIl0gPSBcIlBhZ2VDYXRlZ29yeVwiO1xuXHRQYWdlVmFyaWFudFRlc3RUeXBlJDFbXCJDYXRhbG9nQ2F0ZWdvcnlcIl0gPSBcIkNhdGFsb2dDYXRlZ29yeVwiO1xuXHRQYWdlVmFyaWFudFRlc3RUeXBlJDFbXCJUb3BDYXRhbG9nQ2F0ZWdvcnlcIl0gPSBcIlRvcENhdGFsb2dDYXRlZ29yeVwiO1xuXHRQYWdlVmFyaWFudFRlc3RUeXBlJDFbXCJIYXNSZXZpZXdzXCJdID0gXCJIYXNSZXZpZXdzXCI7XG5cdFBhZ2VWYXJpYW50VGVzdFR5cGUkMVtcIkluQ29sbGVjdGlvblwiXSA9IFwiSW5Db2xsZWN0aW9uXCI7XG5cdFBhZ2VWYXJpYW50VGVzdFR5cGUkMVtcIkhhc01lcmNoYW50VGFnXCJdID0gXCJIYXNNZXJjaGFudFRhZ1wiO1xuXHRQYWdlVmFyaWFudFRlc3RUeXBlJDFbXCJGZWF0dXJlR2F0ZVwiXSA9IFwiRmVhdHVyZUdhdGVcIjtcblx0UGFnZVZhcmlhbnRUZXN0VHlwZSQxW1wiUGxwSWRcIl0gPSBcIlBscElkXCI7XG5cdFBhZ2VWYXJpYW50VGVzdFR5cGUkMVtcIlF1ZXJ5UGFyYW1cIl0gPSBcIlF1ZXJ5UGFyYW1cIjtcblx0UGFnZVZhcmlhbnRUZXN0VHlwZSQxW1wiUHJvZHVjdElkXCJdID0gXCJQcm9kdWN0SWRcIjtcblx0UGFnZVZhcmlhbnRUZXN0VHlwZSQxW1wiVXNlckhhc0ludGVyYWN0ZWRcIl0gPSBcIlVzZXJIYXNJbnRlcmFjdGVkXCI7XG5cdFBhZ2VWYXJpYW50VGVzdFR5cGUkMVtcIlVzZXJIYXNOb3RJbnRlcmFjdGVkXCJdID0gXCJVc2VySGFzTm90SW50ZXJhY3RlZFwiO1xuXHRQYWdlVmFyaWFudFRlc3RUeXBlJDFbXCJpc0xvYWRpbmdcIl0gPSBcImlzTG9hZGluZ1wiO1xuXHRQYWdlVmFyaWFudFRlc3RUeXBlJDFbXCJpc1Byb2R1Y3RDb21wYXJpc29uXCJdID0gXCJpc1Byb2R1Y3RDb21wYXJpc29uXCI7XG5cdFBhZ2VWYXJpYW50VGVzdFR5cGUkMVtcIkZhbGxiYWNrXCJdID0gXCJGYWxsYmFja1wiO1xuXHRQYWdlVmFyaWFudFRlc3RUeXBlJDFbXCJVcmxSZXNvbHZlclwiXSA9IFwiVXJsUmVzb2x2ZXJcIjtcblx0UGFnZVZhcmlhbnRUZXN0VHlwZSQxW1wiTnVsbFwiXSA9IFwibnVsbFwiO1xuXHRyZXR1cm4gUGFnZVZhcmlhbnRUZXN0VHlwZSQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9jb3JlL1BhZ2VWaXNpdENhdGVnb3J5LnRzXG5sZXQgUGFnZVZpc2l0Q2F0ZWdvcnkgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oUGFnZVZpc2l0Q2F0ZWdvcnkkMikge1xuXHRQYWdlVmlzaXRDYXRlZ29yeSQyW1wiUHJvZHVjdFwiXSA9IFwicHJvZHVjdFwiO1xuXHRQYWdlVmlzaXRDYXRlZ29yeSQyW1wiU2VhcmNoXCJdID0gXCJzZWFyY2hcIjtcblx0UGFnZVZpc2l0Q2F0ZWdvcnkkMltcIkludGVybmFsXCJdID0gXCJpbnRlcm5hbFwiO1xuXHRQYWdlVmlzaXRDYXRlZ29yeSQyW1wiRXh0ZXJuYWxcIl0gPSBcImV4dGVybmFsXCI7XG5cdHJldHVybiBQYWdlVmlzaXRDYXRlZ29yeSQyO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9vcmdhbml6YXRpb24vT3JnU2hvcnROYW1lLnRzXG5sZXQgT3JnU2hvcnROYW1lID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKE9yZ1Nob3J0TmFtZSQxKSB7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiQ290ZXJpZVwiXSA9IFwiY290ZXJpZVwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIkZvckxvdmVBbmRMZW1vbnNcIl0gPSBcImZvci1sb3ZlLWFuZC1sZW1vbnNcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJHcmVlbnBhblwiXSA9IFwiZ3JlZW5wYW5cIjtcblx0T3JnU2hvcnROYW1lJDFbXCJKb3JkYW5DcmFpZ1wiXSA9IFwiam9yZGFuLWNyYWlnXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiTGFycnlBbmRTZXJnZXNcIl0gPSBcImxhcnJ5X2FuZF9zZXJnZXNcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJMZWFwc0FuZFJlYm91bmRzXCJdID0gXCJsZWFwcy1hbmQtcmVib3VuZHNcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJNYW50cmFCcmFuZFwiXSA9IFwibWFudHJhLWJyYW5kXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiU3BhbnhcIl0gPSBcInNwYW54XCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiU3BhbnhTdGFnaW5nXCJdID0gXCJzdGFnaW5nLXNwYW54XCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiU3VwZXJnb29wXCJdID0gXCJzdXBlcmdvb3BcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJVbmlxdWVWaW50YWdlXCJdID0gXCJ1bmlxdWUtdmludGFnZVwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIkphY2tBcmNoZXJcIl0gPSBcImphY2stYXJjaGVyXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiU2tpblBlcmZlY3Rpb25cIl0gPSBcInNraW4tcGVyZmVjdGlvblwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIkxvb2tPcHRpY1wiXSA9IFwibG9vay1vcHRpY1wiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIkZpdmVDYmRcIl0gPSBcImZpdmUtY2JkXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiU25hcFN1cHBsZW1lbnRzXCJdID0gXCJzbmFwLXN1cHBsZW1lbnRzXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiTG9uZ2V2aXR5cnhcIl0gPSBcImxvbmdldml0eXJ4XCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiVmVuYUNiZFwiXSA9IFwidmVuYS1jYmRcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJNZWR0ZXJyYVwiXSA9IFwibWVkdGVycmFcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJNb2RlbGxzXCJdID0gXCJtb2RlbGxzXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiUHJlc3NlZEZsb3JhbFwiXSA9IFwicHJlc3NlZC1mbG9yYWxcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJLaW5kcmVkQnJhdmVseVwiXSA9IFwia2luZHJlZC1icmF2ZWx5XCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiV2luZUVudGh1c2lhc3RcIl0gPSBcIndpbmUtZW50aHVzaWFzdFwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIkhvbWVncm93bkNhbm5hYmlzXCJdID0gXCJob21lZ3Jvd24tY2FubmFiaXNcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJEcmVhbWxhbmRCYWJ5XCJdID0gXCJkcmVhbWxhbmQtYmFieVwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIkJhbmRvbGllclwiXSA9IFwiYmFuZG9saWVyXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiV2VzdG9uSm9uQm91Y2hlclwiXSA9IFwid2VzdG9uLWpvbi1ib3VjaGVyXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiS3V0RnJvbVRoZUtsb3RoXCJdID0gXCJrdXQtZnJvbS10aGUta2xvdGhcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJHcm9vdmVMaWZlXCJdID0gXCJncm9vdmUtbGlmZVwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIkNhcnBlXCJdID0gXCJjYXJwZVwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIldvbGZUYWN0aWNhbFwiXSA9IFwid29sZi10YWN0aWNhbFwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIldvbGZNYXR0cmVzc1wiXSA9IFwid29sZm1hdHRyZXNzXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiRGVmYXVsdFwiXSA9IFwiZGVmYXVsdFwiO1xuXHRyZXR1cm4gT3JnU2hvcnROYW1lJDE7XG59KHt9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL3Byb2R1Y3QvQ2F0ZWdvcnlFeHRyYWN0b3IudHNcbmxldCBDYXRlZ29yeUV4dHJhY3RvclR5cGUgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oQ2F0ZWdvcnlFeHRyYWN0b3JUeXBlJDEpIHtcblx0Q2F0ZWdvcnlFeHRyYWN0b3JUeXBlJDFbXCJWaXNpdENhdGVnb3J5TWFwXCJdID0gXCJWaXNpdENhdGVnb3J5TWFwXCI7XG5cdENhdGVnb3J5RXh0cmFjdG9yVHlwZSQxW1wiVmlzaXRDYXRlZ29yeURlZmF1bHRcIl0gPSBcIlZpc2l0Q2F0ZWdvcnlEZWZhdWx0XCI7XG5cdHJldHVybiBDYXRlZ29yeUV4dHJhY3RvclR5cGUkMTtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvcHJvZHVjdC9Qcm9kdWN0RXhwZXJpbWVudC50c1xubGV0IFByb2R1Y3RFeHBlcmltZW50ID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKFByb2R1Y3RFeHBlcmltZW50JDEpIHtcblx0UHJvZHVjdEV4cGVyaW1lbnQkMVtcIkRFRkFVTFRcIl0gPSBcImRlZmF1bHRcIjtcblx0cmV0dXJuIFByb2R1Y3RFeHBlcmltZW50JDE7XG59KHt9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL3Byb2R1Y3QvUHJvZHVjdFNvcnRpbmcudHNcbmxldCBQcm9kdWN0U29ydGluZyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihQcm9kdWN0U29ydGluZyQxKSB7XG5cdFByb2R1Y3RTb3J0aW5nJDFbXCJGRUFUVVJFRFwiXSA9IFwiZmVhdHVyZWRcIjtcblx0UHJvZHVjdFNvcnRpbmckMVtcIlBSSUNFX0FTQ1wiXSA9IFwicHJpY2VfYXNjXCI7XG5cdFByb2R1Y3RTb3J0aW5nJDFbXCJQUklDRV9ERVNDXCJdID0gXCJwcmljZV9kZXNjXCI7XG5cdHJldHVybiBQcm9kdWN0U29ydGluZyQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9wcm9kdWN0L1ZhcmlhbnRJbmZvLnRzXG5sZXQgVmFyaWFudFR5cGVFbnVtID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKFZhcmlhbnRUeXBlRW51bSQxKSB7XG5cdFZhcmlhbnRUeXBlRW51bSQxW1wiUGRwXCJdID0gXCJwZHBcIjtcblx0VmFyaWFudFR5cGVFbnVtJDFbXCJQbHBcIl0gPSBcInBscFwiO1xuXHRWYXJpYW50VHlwZUVudW0kMVtcIlBhZ2VWaXNpdFwiXSA9IFwicGFnZV92aXNpdFwiO1xuXHRyZXR1cm4gVmFyaWFudFR5cGVFbnVtJDE7XG59KHt9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL3NlYXJjaC9DaGF0U2VhcmNoU29ydE92ZXJyaWRlcy50c1xubGV0IENoYXRTZWFyY2hTb3J0T3ZlcnJpZGVzID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKENoYXRTZWFyY2hTb3J0T3ZlcnJpZGVzJDEpIHtcblx0Q2hhdFNlYXJjaFNvcnRPdmVycmlkZXMkMVtcIkRFU0tUT1BfRklMVEVSX0NPTlRBSU5FUlwiXSA9IFwic3BpZmZ5LWNoYXQtc2VhcmNoLWZpbHRlci1jb250YWluZXJcIjtcblx0Q2hhdFNlYXJjaFNvcnRPdmVycmlkZXMkMVtcIkRFU0tUT1BfRklMVEVSX1NFTEVDVF9DT01QT05FTlRcIl0gPSBcInNwaWZmeS1jaGF0LXNlYXJjaC1maWx0ZXItc2VsZWN0LWNvbXBvbmVudFwiO1xuXHRDaGF0U2VhcmNoU29ydE92ZXJyaWRlcyQxW1wiREVTS1RPUF9GSUxURVJfU0VMRUNUX0lDT05cIl0gPSBcInNwaWZmeS1jaGF0LXNlYXJjaC1maWx0ZXItc2VsZWN0LWljb25cIjtcblx0Q2hhdFNlYXJjaFNvcnRPdmVycmlkZXMkMVtcIk1PQklMRV9GSUxURVJfQlVUVE9OXCJdID0gXCJzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLWJ1dHRvblwiO1xuXHRDaGF0U2VhcmNoU29ydE92ZXJyaWRlcyQxW1wiTU9CSUxFX0ZJTFRFUl9NT0RBTF9DT05UQUlORVJcIl0gPSBcInNwaWZmeS1jaGF0LXNlYXJjaC1maWx0ZXItbW9kYWwtY29udGFpbmVyXCI7XG5cdENoYXRTZWFyY2hTb3J0T3ZlcnJpZGVzJDFbXCJNT0JJTEVfRklMVEVSX01PREFMX0hFQURFUlwiXSA9IFwic3BpZmZ5LWNoYXQtc2VhcmNoLWZpbHRlci1tb2RhbC1oZWFkZXJcIjtcblx0Q2hhdFNlYXJjaFNvcnRPdmVycmlkZXMkMVtcIk1PQklMRV9GSUxURVJfTU9EQUxfU0VMRUNUSU9OXCJdID0gXCJzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLW1vZGFsLXNlbGVjdGlvblwiO1xuXHRDaGF0U2VhcmNoU29ydE92ZXJyaWRlcyQxW1wiTU9CSUxFX0ZJTFRFUl9NT0RBTF9PUFRJT05cIl0gPSBcInNwaWZmeS1jaGF0LXNlYXJjaC1maWx0ZXItbW9kYWwtb3B0aW9uXCI7XG5cdENoYXRTZWFyY2hTb3J0T3ZlcnJpZGVzJDFbXCJNT0JJTEVfRklMVEVSX01PREFMX09QVElPTl9QSUxMXCJdID0gXCJzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLW1vZGFsLW9wdGlvbi1waWxsXCI7XG5cdENoYXRTZWFyY2hTb3J0T3ZlcnJpZGVzJDFbXCJNT0JJTEVfRklMVEVSX01PREFMX09QVElPTl9ERVNDUklQVElPTlwiXSA9IFwic3BpZmZ5LWNoYXQtc2VhcmNoLWZpbHRlci1tb2RhbC1vcHRpb24tZGVzY1wiO1xuXHRDaGF0U2VhcmNoU29ydE92ZXJyaWRlcyQxW1wiTU9CSUxFX0ZJTFRFUl9NT0RBTF9BUFBMWV9CVVRUT05cIl0gPSBcInNwaWZmeS1jaGF0LXNlYXJjaC1maWx0ZXItbW9kYWwtYXBwbHktYnV0dG9uXCI7XG5cdHJldHVybiBDaGF0U2VhcmNoU29ydE92ZXJyaWRlcyQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9zZWFyY2gvU2VhcmNoUmVzdWx0c1N0YXRlLnRzXG5sZXQgU2VhcmNoUmVzdWx0c1N0YXRlID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKFNlYXJjaFJlc3VsdHNTdGF0ZSQxKSB7XG5cdFNlYXJjaFJlc3VsdHNTdGF0ZSQxW1NlYXJjaFJlc3VsdHNTdGF0ZSQxW1wiTG9hZGluZ1wiXSA9IDBdID0gXCJMb2FkaW5nXCI7XG5cdFNlYXJjaFJlc3VsdHNTdGF0ZSQxW1NlYXJjaFJlc3VsdHNTdGF0ZSQxW1wiUmVzdWx0c1wiXSA9IDFdID0gXCJSZXN1bHRzXCI7XG5cdFNlYXJjaFJlc3VsdHNTdGF0ZSQxW1NlYXJjaFJlc3VsdHNTdGF0ZSQxW1wiTm9SZXN1bHRzXCJdID0gMl0gPSBcIk5vUmVzdWx0c1wiO1xuXHRyZXR1cm4gU2VhcmNoUmVzdWx0c1N0YXRlJDE7XG59KHt9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL3dpZGdldHMvU3BpZmZ5V2lkZ2V0cy50c1xuLyoqXG4qIEVudW0gb2YgYWxsIHdpZGdldCBuYW1lcy4gVGhlc2UgYXJlIHdpZGdldHMgdGhhdCBhcmUgcmVuZGVyZWQgYW5kIGludGVncmF0ZWQgaW50b1xuKiBhIG1lcmNoYW50J3Mgd2Vic2l0ZS5cbiovXG5sZXQgU3BpZmZ5V2lkZ2V0cyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihTcGlmZnlXaWRnZXRzJDEpIHtcblx0U3BpZmZ5V2lkZ2V0cyQxW1wiSW1hZ2VCYW5uZXJcIl0gPSBcImltYWdlX2Jhbm5lclwiO1xuXHRTcGlmZnlXaWRnZXRzJDFbXCJJbWFnZVByb21wdENhcmRcIl0gPSBcImltYWdlX3Byb21wdF9jYXJkXCI7XG5cdFNwaWZmeVdpZGdldHMkMVtcIlNpbmdsZUltYWdlUHJvbXB0XCJdID0gXCJzaW5nbGVfaW1hZ2VfcHJvbXB0XCI7XG5cdFNwaWZmeVdpZGdldHMkMVtcIkVtYmVkZGVkV2lkZ2V0XCJdID0gXCJlbWJlZGRlZF93aWRnZXRcIjtcblx0U3BpZmZ5V2lkZ2V0cyQxW1wiRmxvYXRpbmdCdXR0b25cIl0gPSBcImZsb2F0aW5nX2J1dHRvblwiO1xuXHRTcGlmZnlXaWRnZXRzJDFbXCJTdWdnZXN0aW9uQmFyXCJdID0gXCJzdWdnZXN0aW9uX2JhclwiO1xuXHRTcGlmZnlXaWRnZXRzJDFbXCJTZWFyY2hQcm9tcHRcIl0gPSBcInNlYXJjaF9wcm9tcHRcIjtcblx0U3BpZmZ5V2lkZ2V0cyQxW1wiR2xvYmFsU2VhcmNoXCJdID0gXCJnbG9iYWxfc2VhcmNoXCI7XG5cdFNwaWZmeVdpZGdldHMkMVtcIlNlYXJjaFJlc3VsdHNcIl0gPSBcInNlYXJjaF9yZXN1bHRzXCI7XG5cdFNwaWZmeVdpZGdldHMkMVtcIkdsb2JhbFNlYXJjaEVudHJ5UG9pbnRcIl0gPSBcImdsb2JhbF9zZWFyY2hfZW50cnlfcG9pbnRcIjtcblx0cmV0dXJuIFNwaWZmeVdpZGdldHMkMTtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvd2lkZ2V0cy9XaWRnZXRUeXBlLnRzXG5sZXQgV2lkZ2V0VHlwZSA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihXaWRnZXRUeXBlJDEpIHtcblx0V2lkZ2V0VHlwZSQxW1wiQ2hhdFByZXZpZXdcIl0gPSBcIkNoYXRQcmV2aWV3XCI7XG5cdFdpZGdldFR5cGUkMVtcIlNvY2lhbFByb29mVjJcIl0gPSBcIlNvY2lhbFByb29mVjJcIjtcblx0V2lkZ2V0VHlwZSQxW1wiQ2hhdFByZXZpZXdWMlwiXSA9IFwiQ2hhdFByZXZpZXdWMlwiO1xuXHRXaWRnZXRUeXBlJDFbXCJDaGF0UHJldmlld0lzTG9hZGluZ1wiXSA9IFwiQ2hhdFByZXZpZXdJc0xvYWRpbmdcIjtcblx0V2lkZ2V0VHlwZSQxW1wiQ2hhdFByZXZpZXdQb3N0SW50ZXJhY3Rpb25cIl0gPSBcIkNoYXRQcmV2aWV3UG9zdEludGVyYWN0aW9uXCI7XG5cdFdpZGdldFR5cGUkMVtcIkNoYXRQcmV2aWV3UHJvZHVjdENvbXBhcmlzb25cIl0gPSBcIkNoYXRQcmV2aWV3UHJvZHVjdENvbXBhcmlzb25cIjtcblx0V2lkZ2V0VHlwZSQxW1wiU3VnZ2VzdGlvbkJhclwiXSA9IFwiU3VnZ2VzdGlvbkJhclwiO1xuXHRXaWRnZXRUeXBlJDFbXCJTdWdnZXN0aW9uQmFyVjJcIl0gPSBcIlN1Z2dlc3Rpb25CYXJWMlwiO1xuXHRXaWRnZXRUeXBlJDFbXCJJbWFnZVByb21wdENhcmRcIl0gPSBcIkltYWdlUHJvbXB0Q2FyZFwiO1xuXHRXaWRnZXRUeXBlJDFbXCJJbWFnZUJhbm5lclwiXSA9IFwiSW1hZ2VCYW5uZXJcIjtcblx0V2lkZ2V0VHlwZSQxW1wiU2luZ2xlSW1hZ2VQcm9tcHRcIl0gPSBcIlNpbmdsZUltYWdlUHJvbXB0XCI7XG5cdFdpZGdldFR5cGUkMVtcIlNlYXJjaFByb21wdFwiXSA9IFwiU2VhcmNoUHJvbXB0XCI7XG5cdFdpZGdldFR5cGUkMVtcIlNlYXJjaFplcm9TdGF0ZUVudHJ5UG9pbnRcIl0gPSBcIlNlYXJjaFplcm9TdGF0ZUVudHJ5UG9pbnRcIjtcblx0V2lkZ2V0VHlwZSQxW1wiU2VhcmNoUmVzdWx0c0VudHJ5UG9pbnRcIl0gPSBcIlNlYXJjaFJlc3VsdHNFbnRyeVBvaW50XCI7XG5cdFdpZGdldFR5cGUkMVtcIlNlYXJjaE92ZXJsYXlIb3N0XCJdID0gXCJTZWFyY2hPdmVybGF5SG9zdFwiO1xuXHRXaWRnZXRUeXBlJDFbXCJOb09wXCJdID0gXCJOb09wXCI7XG5cdHJldHVybiBXaWRnZXRUeXBlJDE7XG59KHt9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L3J1bnRpbWUuanNcbnZhciByZXF1aXJlX3J1bnRpbWUgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L3J1bnRpbWUuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHR2YXIgX19hd2FpdGVyJDUgPSBleHBvcnRzICYmIGV4cG9ydHMuX19hd2FpdGVyIHx8IGZ1bmN0aW9uKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuXHRcdGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbihyZXNvbHZlKSB7XG5cdFx0XHRcdHJlc29sdmUodmFsdWUpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0c3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmdW5jdGlvbiBzdGVwKHJlc3VsdCkge1xuXHRcdFx0XHRyZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTtcblx0XHRcdH1cblx0XHRcdHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcblx0XHR9KTtcblx0fTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLlRleHRBcGlSZXNwb25zZSA9IGV4cG9ydHMuQmxvYkFwaVJlc3BvbnNlID0gZXhwb3J0cy5Wb2lkQXBpUmVzcG9uc2UgPSBleHBvcnRzLkpTT05BcGlSZXNwb25zZSA9IGV4cG9ydHMuQ09MTEVDVElPTl9GT1JNQVRTID0gZXhwb3J0cy5SZXF1aXJlZEVycm9yID0gZXhwb3J0cy5GZXRjaEVycm9yID0gZXhwb3J0cy5SZXNwb25zZUVycm9yID0gZXhwb3J0cy5CYXNlQVBJID0gZXhwb3J0cy5EZWZhdWx0Q29uZmlnID0gZXhwb3J0cy5Db25maWd1cmF0aW9uID0gZXhwb3J0cy5CQVNFX1BBVEggPSB2b2lkIDA7XG5cdGV4cG9ydHMucXVlcnlzdHJpbmcgPSBxdWVyeXN0cmluZztcblx0ZXhwb3J0cy5leGlzdHMgPSBleGlzdHM7XG5cdGV4cG9ydHMubWFwVmFsdWVzID0gbWFwVmFsdWVzO1xuXHRleHBvcnRzLmNhbkNvbnN1bWVGb3JtID0gY2FuQ29uc3VtZUZvcm07XG5cdGV4cG9ydHMuQkFTRV9QQVRIID0gXCJodHRwOi8vbG9jYWxob3N0XCIucmVwbGFjZSgvXFwvKyQvLCBcIlwiKTtcblx0dmFyIENvbmZpZ3VyYXRpb24gPSBjbGFzcyB7XG5cdFx0Y29uc3RydWN0b3IoY29uZmlndXJhdGlvbiA9IHt9KSB7XG5cdFx0XHR0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uO1xuXHRcdH1cblx0XHRzZXQgY29uZmlnKGNvbmZpZ3VyYXRpb24pIHtcblx0XHRcdHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XG5cdFx0fVxuXHRcdGdldCBiYXNlUGF0aCgpIHtcblx0XHRcdHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGggIT0gbnVsbCA/IHRoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aCA6IGV4cG9ydHMuQkFTRV9QQVRIO1xuXHRcdH1cblx0XHRnZXQgZmV0Y2hBcGkoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uLmZldGNoQXBpO1xuXHRcdH1cblx0XHRnZXQgbWlkZGxld2FyZSgpIHtcblx0XHRcdHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb24ubWlkZGxld2FyZSB8fCBbXTtcblx0XHR9XG5cdFx0Z2V0IHF1ZXJ5UGFyYW1zU3RyaW5naWZ5KCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi5xdWVyeVBhcmFtc1N0cmluZ2lmeSB8fCBxdWVyeXN0cmluZztcblx0XHR9XG5cdFx0Z2V0IHVzZXJuYW1lKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi51c2VybmFtZTtcblx0XHR9XG5cdFx0Z2V0IHBhc3N3b3JkKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi5wYXNzd29yZDtcblx0XHR9XG5cdFx0Z2V0IGFwaUtleSgpIHtcblx0XHRcdGNvbnN0IGFwaUtleSA9IHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXk7XG5cdFx0XHRpZiAoYXBpS2V5KSByZXR1cm4gdHlwZW9mIGFwaUtleSA9PT0gXCJmdW5jdGlvblwiID8gYXBpS2V5IDogKCkgPT4gYXBpS2V5O1xuXHRcdH1cblx0XHRnZXQgYWNjZXNzVG9rZW4oKSB7XG5cdFx0XHRjb25zdCBhY2Nlc3NUb2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbjtcblx0XHRcdGlmIChhY2Nlc3NUb2tlbikgcmV0dXJuIHR5cGVvZiBhY2Nlc3NUb2tlbiA9PT0gXCJmdW5jdGlvblwiID8gYWNjZXNzVG9rZW4gOiAoKSA9PiBfX2F3YWl0ZXIkNSh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0cmV0dXJuIGFjY2Vzc1Rva2VuO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGdldCBoZWFkZXJzKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi5oZWFkZXJzO1xuXHRcdH1cblx0XHRnZXQgY3JlZGVudGlhbHMoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uLmNyZWRlbnRpYWxzO1xuXHRcdH1cblx0fTtcblx0ZXhwb3J0cy5Db25maWd1cmF0aW9uID0gQ29uZmlndXJhdGlvbjtcblx0ZXhwb3J0cy5EZWZhdWx0Q29uZmlnID0gbmV3IENvbmZpZ3VyYXRpb24oKTtcblx0LyoqXG5cdCogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgYWxsIGdlbmVyYXRlZCBBUEkgY2xhc3Nlcy5cblx0Ki9cblx0dmFyIEJhc2VBUEkgPSBjbGFzcyBCYXNlQVBJIHtcblx0XHRjb25zdHJ1Y3Rvcihjb25maWd1cmF0aW9uID0gZXhwb3J0cy5EZWZhdWx0Q29uZmlnKSB7XG5cdFx0XHR0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uO1xuXHRcdFx0dGhpcy5mZXRjaEFwaSA9ICh1cmwsIGluaXQpID0+IF9fYXdhaXRlciQ1KHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRsZXQgZmV0Y2hQYXJhbXMgPSB7XG5cdFx0XHRcdFx0dXJsLFxuXHRcdFx0XHRcdGluaXRcblx0XHRcdFx0fTtcblx0XHRcdFx0Zm9yIChjb25zdCBtaWRkbGV3YXJlIG9mIHRoaXMubWlkZGxld2FyZSkgaWYgKG1pZGRsZXdhcmUucHJlKSBmZXRjaFBhcmFtcyA9ICh5aWVsZCBtaWRkbGV3YXJlLnByZShPYmplY3QuYXNzaWduKHsgZmV0Y2g6IHRoaXMuZmV0Y2hBcGkgfSwgZmV0Y2hQYXJhbXMpKSkgfHwgZmV0Y2hQYXJhbXM7XG5cdFx0XHRcdGxldCByZXNwb25zZSA9IHZvaWQgMDtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRyZXNwb25zZSA9IHlpZWxkICh0aGlzLmNvbmZpZ3VyYXRpb24uZmV0Y2hBcGkgfHwgZmV0Y2gpKGZldGNoUGFyYW1zLnVybCwgZmV0Y2hQYXJhbXMuaW5pdCk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IG1pZGRsZXdhcmUgb2YgdGhpcy5taWRkbGV3YXJlKSBpZiAobWlkZGxld2FyZS5vbkVycm9yKSByZXNwb25zZSA9ICh5aWVsZCBtaWRkbGV3YXJlLm9uRXJyb3Ioe1xuXHRcdFx0XHRcdFx0ZmV0Y2g6IHRoaXMuZmV0Y2hBcGksXG5cdFx0XHRcdFx0XHR1cmw6IGZldGNoUGFyYW1zLnVybCxcblx0XHRcdFx0XHRcdGluaXQ6IGZldGNoUGFyYW1zLmluaXQsXG5cdFx0XHRcdFx0XHRlcnJvcjogZSxcblx0XHRcdFx0XHRcdHJlc3BvbnNlOiByZXNwb25zZSA/IHJlc3BvbnNlLmNsb25lKCkgOiB2b2lkIDBcblx0XHRcdFx0XHR9KSkgfHwgcmVzcG9uc2U7XG5cdFx0XHRcdFx0aWYgKHJlc3BvbnNlID09PSB2b2lkIDApIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHRocm93IG5ldyBGZXRjaEVycm9yKGUsIFwiVGhlIHJlcXVlc3QgZmFpbGVkIGFuZCB0aGUgaW50ZXJjZXB0b3JzIGRpZCBub3QgcmV0dXJuIGFuIGFsdGVybmF0aXZlIHJlc3BvbnNlXCIpO1xuXHRcdFx0XHRcdGVsc2UgdGhyb3cgZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRmb3IgKGNvbnN0IG1pZGRsZXdhcmUgb2YgdGhpcy5taWRkbGV3YXJlKSBpZiAobWlkZGxld2FyZS5wb3N0KSByZXNwb25zZSA9ICh5aWVsZCBtaWRkbGV3YXJlLnBvc3Qoe1xuXHRcdFx0XHRcdGZldGNoOiB0aGlzLmZldGNoQXBpLFxuXHRcdFx0XHRcdHVybDogZmV0Y2hQYXJhbXMudXJsLFxuXHRcdFx0XHRcdGluaXQ6IGZldGNoUGFyYW1zLmluaXQsXG5cdFx0XHRcdFx0cmVzcG9uc2U6IHJlc3BvbnNlLmNsb25lKClcblx0XHRcdFx0fSkpIHx8IHJlc3BvbnNlO1xuXHRcdFx0XHRyZXR1cm4gcmVzcG9uc2U7XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMubWlkZGxld2FyZSA9IGNvbmZpZ3VyYXRpb24ubWlkZGxld2FyZTtcblx0XHR9XG5cdFx0d2l0aE1pZGRsZXdhcmUoLi4ubWlkZGxld2FyZXMpIHtcblx0XHRcdGNvbnN0IG5leHQgPSB0aGlzLmNsb25lKCk7XG5cdFx0XHRuZXh0Lm1pZGRsZXdhcmUgPSBuZXh0Lm1pZGRsZXdhcmUuY29uY2F0KC4uLm1pZGRsZXdhcmVzKTtcblx0XHRcdHJldHVybiBuZXh0O1xuXHRcdH1cblx0XHR3aXRoUHJlTWlkZGxld2FyZSguLi5wcmVNaWRkbGV3YXJlcykge1xuXHRcdFx0Y29uc3QgbWlkZGxld2FyZXMgPSBwcmVNaWRkbGV3YXJlcy5tYXAoKHByZSkgPT4gKHsgcHJlIH0pKTtcblx0XHRcdHJldHVybiB0aGlzLndpdGhNaWRkbGV3YXJlKC4uLm1pZGRsZXdhcmVzKTtcblx0XHR9XG5cdFx0d2l0aFBvc3RNaWRkbGV3YXJlKC4uLnBvc3RNaWRkbGV3YXJlcykge1xuXHRcdFx0Y29uc3QgbWlkZGxld2FyZXMgPSBwb3N0TWlkZGxld2FyZXMubWFwKChwb3N0KSA9PiAoeyBwb3N0IH0pKTtcblx0XHRcdHJldHVybiB0aGlzLndpdGhNaWRkbGV3YXJlKC4uLm1pZGRsZXdhcmVzKTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBDaGVjayBpZiB0aGUgZ2l2ZW4gTUlNRSBpcyBhIEpTT04gTUlNRS5cblx0XHQqIEpTT04gTUlNRSBleGFtcGxlczpcblx0XHQqICAgYXBwbGljYXRpb24vanNvblxuXHRcdCogICBhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PVVURjhcblx0XHQqICAgQVBQTElDQVRJT04vSlNPTlxuXHRcdCogICBhcHBsaWNhdGlvbi92bmQuY29tcGFueStqc29uXG5cdFx0KiBAcGFyYW0gbWltZSAtIE1JTUUgKE11bHRpcHVycG9zZSBJbnRlcm5ldCBNYWlsIEV4dGVuc2lvbnMpXG5cdFx0KiBAcmV0dXJuIFRydWUgaWYgdGhlIGdpdmVuIE1JTUUgaXMgSlNPTiwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHRcdCovXG5cdFx0aXNKc29uTWltZShtaW1lKSB7XG5cdFx0XHRpZiAoIW1pbWUpIHJldHVybiBmYWxzZTtcblx0XHRcdHJldHVybiBCYXNlQVBJLmpzb25SZWdleC50ZXN0KG1pbWUpO1xuXHRcdH1cblx0XHRyZXF1ZXN0KGNvbnRleHQsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkNSh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0Y29uc3QgeyB1cmwsIGluaXQgfSA9IHlpZWxkIHRoaXMuY3JlYXRlRmV0Y2hQYXJhbXMoY29udGV4dCwgaW5pdE92ZXJyaWRlcyk7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5mZXRjaEFwaSh1cmwsIGluaXQpO1xuXHRcdFx0XHRpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2Uuc3RhdHVzID49IDIwMCAmJiByZXNwb25zZS5zdGF0dXMgPCAzMDApIHJldHVybiByZXNwb25zZTtcblx0XHRcdFx0dGhyb3cgbmV3IFJlc3BvbnNlRXJyb3IocmVzcG9uc2UsIFwiUmVzcG9uc2UgcmV0dXJuZWQgYW4gZXJyb3IgY29kZVwiKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRjcmVhdGVGZXRjaFBhcmFtcyhjb250ZXh0LCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDUodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGxldCB1cmwgPSB0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGggKyBjb250ZXh0LnBhdGg7XG5cdFx0XHRcdGlmIChjb250ZXh0LnF1ZXJ5ICE9PSB2b2lkIDAgJiYgT2JqZWN0LmtleXMoY29udGV4dC5xdWVyeSkubGVuZ3RoICE9PSAwKSB1cmwgKz0gXCI/XCIgKyB0aGlzLmNvbmZpZ3VyYXRpb24ucXVlcnlQYXJhbXNTdHJpbmdpZnkoY29udGV4dC5xdWVyeSk7XG5cdFx0XHRcdGNvbnN0IGhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbmZpZ3VyYXRpb24uaGVhZGVycywgY29udGV4dC5oZWFkZXJzKTtcblx0XHRcdFx0T2JqZWN0LmtleXMoaGVhZGVycykuZm9yRWFjaCgoa2V5KSA9PiBoZWFkZXJzW2tleV0gPT09IHZvaWQgMCA/IGRlbGV0ZSBoZWFkZXJzW2tleV0gOiB7fSk7XG5cdFx0XHRcdGNvbnN0IGluaXRPdmVycmlkZUZuID0gdHlwZW9mIGluaXRPdmVycmlkZXMgPT09IFwiZnVuY3Rpb25cIiA/IGluaXRPdmVycmlkZXMgOiAoKSA9PiBfX2F3YWl0ZXIkNSh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0XHRyZXR1cm4gaW5pdE92ZXJyaWRlcztcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGNvbnN0IGluaXRQYXJhbXMgPSB7XG5cdFx0XHRcdFx0bWV0aG9kOiBjb250ZXh0Lm1ldGhvZCxcblx0XHRcdFx0XHRoZWFkZXJzLFxuXHRcdFx0XHRcdGJvZHk6IGNvbnRleHQuYm9keSxcblx0XHRcdFx0XHRjcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLmNyZWRlbnRpYWxzXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbnN0IG92ZXJyaWRkZW5Jbml0ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBpbml0UGFyYW1zKSwgeWllbGQgaW5pdE92ZXJyaWRlRm4oe1xuXHRcdFx0XHRcdGluaXQ6IGluaXRQYXJhbXMsXG5cdFx0XHRcdFx0Y29udGV4dFxuXHRcdFx0XHR9KSk7XG5cdFx0XHRcdGxldCBib2R5O1xuXHRcdFx0XHRpZiAoaXNGb3JtRGF0YShvdmVycmlkZGVuSW5pdC5ib2R5KSB8fCBvdmVycmlkZGVuSW5pdC5ib2R5IGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zIHx8IGlzQmxvYihvdmVycmlkZGVuSW5pdC5ib2R5KSkgYm9keSA9IG92ZXJyaWRkZW5Jbml0LmJvZHk7XG5cdFx0XHRcdGVsc2UgaWYgKHRoaXMuaXNKc29uTWltZShoZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdKSkgYm9keSA9IEpTT04uc3RyaW5naWZ5KG92ZXJyaWRkZW5Jbml0LmJvZHkpO1xuXHRcdFx0XHRlbHNlIGJvZHkgPSBvdmVycmlkZGVuSW5pdC5ib2R5O1xuXHRcdFx0XHRjb25zdCBpbml0ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvdmVycmlkZGVuSW5pdCksIHsgYm9keSB9KTtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHR1cmwsXG5cdFx0XHRcdFx0aW5pdFxuXHRcdFx0XHR9O1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogQ3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBvZiBgdGhpc2AgYnkgY29uc3RydWN0aW5nIGEgbmV3IGluc3RhbmNlXG5cdFx0KiBhbmQgdGhlbiBzaGFsbG93IGNsb25pbmcgZGF0YSBtZW1iZXJzLlxuXHRcdCovXG5cdFx0Y2xvbmUoKSB7XG5cdFx0XHRjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7XG5cdFx0XHRjb25zdCBuZXh0ID0gbmV3IGNvbnN0cnVjdG9yKHRoaXMuY29uZmlndXJhdGlvbik7XG5cdFx0XHRuZXh0Lm1pZGRsZXdhcmUgPSB0aGlzLm1pZGRsZXdhcmUuc2xpY2UoKTtcblx0XHRcdHJldHVybiBuZXh0O1xuXHRcdH1cblx0fTtcblx0ZXhwb3J0cy5CYXNlQVBJID0gQmFzZUFQSTtcblx0QmFzZUFQSS5qc29uUmVnZXggPSBuZXcgUmVnRXhwKFwiXig6P2FwcGxpY2F0aW9uL2pzb258W147LyBcdF0rL1teOy8gXHRdK1srXWpzb24pWyBcdF0qKDo/Oy4qKT8kXCIsIFwiaVwiKTtcblx0ZnVuY3Rpb24gaXNCbG9iKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHR5cGVvZiBCbG9iICE9PSBcInVuZGVmaW5lZFwiICYmIHZhbHVlIGluc3RhbmNlb2YgQmxvYjtcblx0fVxuXHRmdW5jdGlvbiBpc0Zvcm1EYXRhKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHR5cGVvZiBGb3JtRGF0YSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB2YWx1ZSBpbnN0YW5jZW9mIEZvcm1EYXRhO1xuXHR9XG5cdHZhciBSZXNwb25zZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBFcnJvciB7XG5cdFx0Y29uc3RydWN0b3IocmVzcG9uc2UsIG1zZykge1xuXHRcdFx0c3VwZXIobXNnKTtcblx0XHRcdHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcblx0XHRcdHRoaXMubmFtZSA9IFwiUmVzcG9uc2VFcnJvclwiO1xuXHRcdH1cblx0fTtcblx0ZXhwb3J0cy5SZXNwb25zZUVycm9yID0gUmVzcG9uc2VFcnJvcjtcblx0dmFyIEZldGNoRXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHtcblx0XHRjb25zdHJ1Y3RvcihjYXVzZSwgbXNnKSB7XG5cdFx0XHRzdXBlcihtc2cpO1xuXHRcdFx0dGhpcy5jYXVzZSA9IGNhdXNlO1xuXHRcdFx0dGhpcy5uYW1lID0gXCJGZXRjaEVycm9yXCI7XG5cdFx0fVxuXHR9O1xuXHRleHBvcnRzLkZldGNoRXJyb3IgPSBGZXRjaEVycm9yO1xuXHR2YXIgUmVxdWlyZWRFcnJvciA9IGNsYXNzIGV4dGVuZHMgRXJyb3Ige1xuXHRcdGNvbnN0cnVjdG9yKGZpZWxkLCBtc2cpIHtcblx0XHRcdHN1cGVyKG1zZyk7XG5cdFx0XHR0aGlzLmZpZWxkID0gZmllbGQ7XG5cdFx0XHR0aGlzLm5hbWUgPSBcIlJlcXVpcmVkRXJyb3JcIjtcblx0XHR9XG5cdH07XG5cdGV4cG9ydHMuUmVxdWlyZWRFcnJvciA9IFJlcXVpcmVkRXJyb3I7XG5cdGV4cG9ydHMuQ09MTEVDVElPTl9GT1JNQVRTID0ge1xuXHRcdGNzdjogXCIsXCIsXG5cdFx0c3N2OiBcIiBcIixcblx0XHR0c3Y6IFwiXHRcIixcblx0XHRwaXBlczogXCJ8XCJcblx0fTtcblx0ZnVuY3Rpb24gcXVlcnlzdHJpbmcocGFyYW1zLCBwcmVmaXggPSBcIlwiKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKHBhcmFtcykubWFwKChrZXkpID0+IHF1ZXJ5c3RyaW5nU2luZ2xlS2V5KGtleSwgcGFyYW1zW2tleV0sIHByZWZpeCkpLmZpbHRlcigocGFydCkgPT4gcGFydC5sZW5ndGggPiAwKS5qb2luKFwiJlwiKTtcblx0fVxuXHRmdW5jdGlvbiBxdWVyeXN0cmluZ1NpbmdsZUtleShrZXksIHZhbHVlLCBrZXlQcmVmaXggPSBcIlwiKSB7XG5cdFx0Y29uc3QgZnVsbEtleSA9IGtleVByZWZpeCArIChrZXlQcmVmaXgubGVuZ3RoID8gYFske2tleX1dYCA6IGtleSk7XG5cdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpIHtcblx0XHRcdGNvbnN0IG11bHRpVmFsdWUgPSB2YWx1ZS5tYXAoKHNpbmdsZVZhbHVlKSA9PiBlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKHNpbmdsZVZhbHVlKSkpLmpvaW4oYCYke2VuY29kZVVSSUNvbXBvbmVudChmdWxsS2V5KX09YCk7XG5cdFx0XHRyZXR1cm4gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGZ1bGxLZXkpfT0ke211bHRpVmFsdWV9YDtcblx0XHR9XG5cdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgU2V0KSByZXR1cm4gcXVlcnlzdHJpbmdTaW5nbGVLZXkoa2V5LCBBcnJheS5mcm9tKHZhbHVlKSwga2V5UHJlZml4KTtcblx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGZ1bGxLZXkpfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWx1ZS50b0lTT1N0cmluZygpKX1gO1xuXHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkgcmV0dXJuIHF1ZXJ5c3RyaW5nKHZhbHVlLCBmdWxsS2V5KTtcblx0XHRyZXR1cm4gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGZ1bGxLZXkpfT0ke2VuY29kZVVSSUNvbXBvbmVudChTdHJpbmcodmFsdWUpKX1gO1xuXHR9XG5cdGZ1bmN0aW9uIGV4aXN0cyhqc29uLCBrZXkpIHtcblx0XHRjb25zdCB2YWx1ZSA9IGpzb25ba2V5XTtcblx0XHRyZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHZvaWQgMDtcblx0fVxuXHRmdW5jdGlvbiBtYXBWYWx1ZXMoZGF0YSwgZm4pIHtcblx0XHRyZXR1cm4gT2JqZWN0LmtleXMoZGF0YSkucmVkdWNlKChhY2MsIGtleSkgPT4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBhY2MpLCB7IFtrZXldOiBmbihkYXRhW2tleV0pIH0pLCB7fSk7XG5cdH1cblx0ZnVuY3Rpb24gY2FuQ29uc3VtZUZvcm0oY29uc3VtZXMpIHtcblx0XHRmb3IgKGNvbnN0IGNvbnN1bWUgb2YgY29uc3VtZXMpIGlmIChcIm11bHRpcGFydC9mb3JtLWRhdGFcIiA9PT0gY29uc3VtZS5jb250ZW50VHlwZSkgcmV0dXJuIHRydWU7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHZhciBKU09OQXBpUmVzcG9uc2UgPSBjbGFzcyB7XG5cdFx0Y29uc3RydWN0b3IocmF3LCB0cmFuc2Zvcm1lciA9IChqc29uVmFsdWUpID0+IGpzb25WYWx1ZSkge1xuXHRcdFx0dGhpcy5yYXcgPSByYXc7XG5cdFx0XHR0aGlzLnRyYW5zZm9ybWVyID0gdHJhbnNmb3JtZXI7XG5cdFx0fVxuXHRcdHZhbHVlKCkge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQ1KHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy50cmFuc2Zvcm1lcih5aWVsZCB0aGlzLnJhdy5qc29uKCkpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xuXHRleHBvcnRzLkpTT05BcGlSZXNwb25zZSA9IEpTT05BcGlSZXNwb25zZTtcblx0dmFyIFZvaWRBcGlSZXNwb25zZSA9IGNsYXNzIHtcblx0XHRjb25zdHJ1Y3RvcihyYXcpIHtcblx0XHRcdHRoaXMucmF3ID0gcmF3O1xuXHRcdH1cblx0XHR2YWx1ZSgpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkNSh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHt9KTtcblx0XHR9XG5cdH07XG5cdGV4cG9ydHMuVm9pZEFwaVJlc3BvbnNlID0gVm9pZEFwaVJlc3BvbnNlO1xuXHR2YXIgQmxvYkFwaVJlc3BvbnNlID0gY2xhc3Mge1xuXHRcdGNvbnN0cnVjdG9yKHJhdykge1xuXHRcdFx0dGhpcy5yYXcgPSByYXc7XG5cdFx0fVxuXHRcdHZhbHVlKCkge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQ1KHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgdGhpcy5yYXcuYmxvYigpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xuXHRleHBvcnRzLkJsb2JBcGlSZXNwb25zZSA9IEJsb2JBcGlSZXNwb25zZTtcblx0dmFyIFRleHRBcGlSZXNwb25zZSA9IGNsYXNzIHtcblx0XHRjb25zdHJ1Y3RvcihyYXcpIHtcblx0XHRcdHRoaXMucmF3ID0gcmF3O1xuXHRcdH1cblx0XHR2YWx1ZSgpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkNSh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0cmV0dXJuIHlpZWxkIHRoaXMucmF3LnRleHQoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblx0ZXhwb3J0cy5UZXh0QXBpUmVzcG9uc2UgPSBUZXh0QXBpUmVzcG9uc2U7XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9DdXN0b21lclNlcnZpY2VQcm92aWRlci5qc1xudmFyIHJlcXVpcmVfQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9DdXN0b21lclNlcnZpY2VQcm92aWRlci5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5DdXN0b21lclNlcnZpY2VQcm92aWRlciA9IHZvaWQgMDtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIgPSBpbnN0YW5jZU9mQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXI7XG5cdGV4cG9ydHMuQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJGcm9tSlNPTiA9IEN1c3RvbWVyU2VydmljZVByb3ZpZGVyRnJvbUpTT047XG5cdGV4cG9ydHMuQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJGcm9tSlNPTlR5cGVkID0gQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLkN1c3RvbWVyU2VydmljZVByb3ZpZGVyVG9KU09OID0gQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJUb0pTT047XG5cdGV4cG9ydHMuQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJUb0pTT05UeXBlZCA9IEN1c3RvbWVyU2VydmljZVByb3ZpZGVyVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqXG5cdCogQGV4cG9ydFxuXHQqIEBlbnVtIHtzdHJpbmd9XG5cdCovXG5cdHZhciBDdXN0b21lclNlcnZpY2VQcm92aWRlcjtcblx0KGZ1bmN0aW9uKEN1c3RvbWVyU2VydmljZVByb3ZpZGVyJDEpIHtcblx0XHRDdXN0b21lclNlcnZpY2VQcm92aWRlciQxW1wiR2xhZGx5XCJdID0gXCJHTEFETFlcIjtcblx0XHRDdXN0b21lclNlcnZpY2VQcm92aWRlciQxW1wiS3VzdG9tZXJcIl0gPSBcIktVU1RPTUVSXCI7XG5cdFx0Q3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIkMVtcIkdvcmdpYXNcIl0gPSBcIkdPUkdJQVNcIjtcblx0XHRDdXN0b21lclNlcnZpY2VQcm92aWRlciQxW1wiVW5zdXBwb3J0ZWRcIl0gPSBcIlVOU1VQUE9SVEVEXCI7XG5cdH0pKEN1c3RvbWVyU2VydmljZVByb3ZpZGVyIHx8IChleHBvcnRzLkN1c3RvbWVyU2VydmljZVByb3ZpZGVyID0gQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIgPSB7fSkpO1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIodmFsdWUpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBDdXN0b21lclNlcnZpY2VQcm92aWRlcikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChDdXN0b21lclNlcnZpY2VQcm92aWRlciwga2V5KSkge1xuXHRcdFx0aWYgKEN1c3RvbWVyU2VydmljZVByb3ZpZGVyW2tleV0gPT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RvbWVyU2VydmljZVByb3ZpZGVyRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBDdXN0b21lclNlcnZpY2VQcm92aWRlckZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RvbWVyU2VydmljZVByb3ZpZGVyRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0cmV0dXJuIGpzb247XG5cdH1cblx0ZnVuY3Rpb24gQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJUb0pTT04odmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0ZnVuY3Rpb24gQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdC5qc1xudmFyIHJlcXVpcmVfQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdCA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0FkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlcXVlc3QuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlcXVlc3QgPSBpbnN0YW5jZU9mQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdDtcblx0ZXhwb3J0cy5BZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0RnJvbUpTT04gPSBBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0RnJvbUpTT047XG5cdGV4cG9ydHMuQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdEZyb21KU09OVHlwZWQgPSBBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5BZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0VG9KU09OID0gQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdFRvSlNPTjtcblx0ZXhwb3J0cy5BZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0VG9KU09OVHlwZWQgPSBBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0VG9KU09OVHlwZWQ7XG5cdGNvbnN0IEN1c3RvbWVyU2VydmljZVByb3ZpZGVyXzEkNCA9IHJlcXVpcmVfQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0KHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJlbWFpbFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImVtYWlsXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInNwaWZmeV91c2VyX2lkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wic3BpZmZ5X3VzZXJfaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIEFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlcXVlc3RGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlcXVlc3RGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY3VzdG9tZXJfc2VydmljZV9wcm92aWRlclwiOiBqc29uW1wiY3VzdG9tZXJfc2VydmljZV9wcm92aWRlclwiXSA9PSBudWxsID8gdm9pZCAwIDogKDAsIEN1c3RvbWVyU2VydmljZVByb3ZpZGVyXzEkNC5DdXN0b21lclNlcnZpY2VQcm92aWRlckZyb21KU09OKShqc29uW1wiY3VzdG9tZXJfc2VydmljZV9wcm92aWRlclwiXSksXG5cdFx0XHRcImVtYWlsXCI6IGpzb25bXCJlbWFpbFwiXSxcblx0XHRcdFwibmFtZVwiOiBqc29uW1wibmFtZVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm5hbWVcIl0sXG5cdFx0XHRcInNwaWZmeV91c2VyX2lkXCI6IGpzb25bXCJzcGlmZnlfdXNlcl9pZFwiXSxcblx0XHRcdFwic3ViamVjdFwiOiBqc29uW1wic3ViamVjdFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInN1YmplY3RcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIEFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlcXVlc3RUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0VG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlcXVlc3RUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCI6ICgwLCBDdXN0b21lclNlcnZpY2VQcm92aWRlcl8xJDQuQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJUb0pTT04pKHZhbHVlW1wiY3VzdG9tZXJfc2VydmljZV9wcm92aWRlclwiXSksXG5cdFx0XHRcImVtYWlsXCI6IHZhbHVlW1wiZW1haWxcIl0sXG5cdFx0XHRcIm5hbWVcIjogdmFsdWVbXCJuYW1lXCJdLFxuXHRcdFx0XCJzcGlmZnlfdXNlcl9pZFwiOiB2YWx1ZVtcInNwaWZmeV91c2VyX2lkXCJdLFxuXHRcdFx0XCJzdWJqZWN0XCI6IHZhbHVlW1wic3ViamVjdFwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0FkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlc3BvbnNlLmpzXG52YXIgcmVxdWlyZV9BZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXNwb25zZSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0FkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlc3BvbnNlLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXNwb25zZSA9IGluc3RhbmNlT2ZBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXNwb25zZTtcblx0ZXhwb3J0cy5BZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXNwb25zZUZyb21KU09OID0gQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2VGcm9tSlNPTjtcblx0ZXhwb3J0cy5BZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXNwb25zZUZyb21KU09OVHlwZWQgPSBBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXNwb25zZUZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2VUb0pTT04gPSBBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXNwb25zZVRvSlNPTjtcblx0ZXhwb3J0cy5BZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXNwb25zZVRvSlNPTlR5cGVkID0gQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2VUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2UgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2UodmFsdWUpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXNwb25zZUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2VGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXNwb25zZUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvbnZlcnNhdGlvbl9pZFwiOiBqc29uW1wiY29udmVyc2F0aW9uX2lkXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiY29udmVyc2F0aW9uX2lkXCJdLFxuXHRcdFx0XCJjdXN0b21lcl9pZFwiOiBqc29uW1wiY3VzdG9tZXJfaWRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJjdXN0b21lcl9pZFwiXSxcblx0XHRcdFwibWVzc2FnZVwiOiBqc29uW1wibWVzc2FnZVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm1lc3NhZ2VcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIEFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlc3BvbnNlVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2VUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2VUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb252ZXJzYXRpb25faWRcIjogdmFsdWVbXCJjb252ZXJzYXRpb25faWRcIl0sXG5cdFx0XHRcImN1c3RvbWVyX2lkXCI6IHZhbHVlW1wiY3VzdG9tZXJfaWRcIl0sXG5cdFx0XHRcIm1lc3NhZ2VcIjogdmFsdWVbXCJtZXNzYWdlXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQWRkVG9DYXJ0QXR0cmlidXRlcy5qc1xudmFyIHJlcXVpcmVfQWRkVG9DYXJ0QXR0cmlidXRlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0FkZFRvQ2FydEF0dHJpYnV0ZXMuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkFkZFRvQ2FydEF0dHJpYnV0ZXMgPSBpbnN0YW5jZU9mQWRkVG9DYXJ0QXR0cmlidXRlcztcblx0ZXhwb3J0cy5BZGRUb0NhcnRBdHRyaWJ1dGVzRnJvbUpTT04gPSBBZGRUb0NhcnRBdHRyaWJ1dGVzRnJvbUpTT047XG5cdGV4cG9ydHMuQWRkVG9DYXJ0QXR0cmlidXRlc0Zyb21KU09OVHlwZWQgPSBBZGRUb0NhcnRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5BZGRUb0NhcnRBdHRyaWJ1dGVzVG9KU09OID0gQWRkVG9DYXJ0QXR0cmlidXRlc1RvSlNPTjtcblx0ZXhwb3J0cy5BZGRUb0NhcnRBdHRyaWJ1dGVzVG9KU09OVHlwZWQgPSBBZGRUb0NhcnRBdHRyaWJ1dGVzVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIEFkZFRvQ2FydEF0dHJpYnV0ZXMgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mQWRkVG9DYXJ0QXR0cmlidXRlcyh2YWx1ZSkge1xuXHRcdGlmICghKFwicHJvZHVjdF9pZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInByb2R1Y3RfaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIEFkZFRvQ2FydEF0dHJpYnV0ZXNGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEFkZFRvQ2FydEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBBZGRUb0NhcnRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHsgXCJwcm9kdWN0X2lkXCI6IGpzb25bXCJwcm9kdWN0X2lkXCJdIH07XG5cdH1cblx0ZnVuY3Rpb24gQWRkVG9DYXJ0QXR0cmlidXRlc1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEFkZFRvQ2FydEF0dHJpYnV0ZXNUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQWRkVG9DYXJ0QXR0cmlidXRlc1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7IFwicHJvZHVjdF9pZFwiOiB2YWx1ZVtcInByb2R1Y3RfaWRcIl0gfTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0LmpzXG52YXIgcmVxdWlyZV9BbmFseXRpY3NJZGVudGlmeVJlcXVlc3QgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9BbmFseXRpY3NJZGVudGlmeVJlcXVlc3QuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkFuYWx5dGljc0lkZW50aWZ5UmVxdWVzdCA9IGluc3RhbmNlT2ZBbmFseXRpY3NJZGVudGlmeVJlcXVlc3Q7XG5cdGV4cG9ydHMuQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0RnJvbUpTT04gPSBBbmFseXRpY3NJZGVudGlmeVJlcXVlc3RGcm9tSlNPTjtcblx0ZXhwb3J0cy5BbmFseXRpY3NJZGVudGlmeVJlcXVlc3RGcm9tSlNPTlR5cGVkID0gQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5BbmFseXRpY3NJZGVudGlmeVJlcXVlc3RUb0pTT04gPSBBbmFseXRpY3NJZGVudGlmeVJlcXVlc3RUb0pTT047XG5cdGV4cG9ydHMuQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0VG9KU09OVHlwZWQgPSBBbmFseXRpY3NJZGVudGlmeVJlcXVlc3RUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0IGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkFuYWx5dGljc0lkZW50aWZ5UmVxdWVzdCh2YWx1ZSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIEFuYWx5dGljc0lkZW50aWZ5UmVxdWVzdEZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiYXBwX3ZlcnNpb25cIjoganNvbltcImFwcF92ZXJzaW9uXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiYXBwX3ZlcnNpb25cIl0sXG5cdFx0XHRcImNhcnJpZXJcIjoganNvbltcImNhcnJpZXJcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJjYXJyaWVyXCJdLFxuXHRcdFx0XCJjaXR5XCI6IGpzb25bXCJjaXR5XCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiY2l0eVwiXSxcblx0XHRcdFwiY291bnRyeVwiOiBqc29uW1wiY291bnRyeVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImNvdW50cnlcIl0sXG5cdFx0XHRcImRldmljZV9icmFuZFwiOiBqc29uW1wiZGV2aWNlX2JyYW5kXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiZGV2aWNlX2JyYW5kXCJdLFxuXHRcdFx0XCJkZXZpY2VfaWRcIjoganNvbltcImRldmljZV9pZFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImRldmljZV9pZFwiXSxcblx0XHRcdFwiZGV2aWNlX21hbnVmYWN0dXJlclwiOiBqc29uW1wiZGV2aWNlX21hbnVmYWN0dXJlclwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImRldmljZV9tYW51ZmFjdHVyZXJcIl0sXG5cdFx0XHRcImRldmljZV9tb2RlbFwiOiBqc29uW1wiZGV2aWNlX21vZGVsXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiZGV2aWNlX21vZGVsXCJdLFxuXHRcdFx0XCJkbWFcIjoganNvbltcImRtYVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImRtYVwiXSxcblx0XHRcdFwiZ3JvdXBzXCI6IGpzb25bXCJncm91cHNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJncm91cHNcIl0sXG5cdFx0XHRcIm9zX25hbWVcIjoganNvbltcIm9zX25hbWVcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJvc19uYW1lXCJdLFxuXHRcdFx0XCJvc192ZXJzaW9uXCI6IGpzb25bXCJvc192ZXJzaW9uXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wib3NfdmVyc2lvblwiXSxcblx0XHRcdFwicGxhdGZvcm1cIjoganNvbltcInBsYXRmb3JtXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wicGxhdGZvcm1cIl0sXG5cdFx0XHRcInJlZ2lvblwiOiBqc29uW1wicmVnaW9uXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wicmVnaW9uXCJdLFxuXHRcdFx0XCJ1c2VyX2lkXCI6IGpzb25bXCJ1c2VyX2lkXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1widXNlcl9pZFwiXSxcblx0XHRcdFwidXNlcl9wcm9wZXJ0aWVzXCI6IGpzb25bXCJ1c2VyX3Byb3BlcnRpZXNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJ1c2VyX3Byb3BlcnRpZXNcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIEFuYWx5dGljc0lkZW50aWZ5UmVxdWVzdFRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEFuYWx5dGljc0lkZW50aWZ5UmVxdWVzdFRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBBbmFseXRpY3NJZGVudGlmeVJlcXVlc3RUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJhcHBfdmVyc2lvblwiOiB2YWx1ZVtcImFwcF92ZXJzaW9uXCJdLFxuXHRcdFx0XCJjYXJyaWVyXCI6IHZhbHVlW1wiY2FycmllclwiXSxcblx0XHRcdFwiY2l0eVwiOiB2YWx1ZVtcImNpdHlcIl0sXG5cdFx0XHRcImNvdW50cnlcIjogdmFsdWVbXCJjb3VudHJ5XCJdLFxuXHRcdFx0XCJkZXZpY2VfYnJhbmRcIjogdmFsdWVbXCJkZXZpY2VfYnJhbmRcIl0sXG5cdFx0XHRcImRldmljZV9pZFwiOiB2YWx1ZVtcImRldmljZV9pZFwiXSxcblx0XHRcdFwiZGV2aWNlX21hbnVmYWN0dXJlclwiOiB2YWx1ZVtcImRldmljZV9tYW51ZmFjdHVyZXJcIl0sXG5cdFx0XHRcImRldmljZV9tb2RlbFwiOiB2YWx1ZVtcImRldmljZV9tb2RlbFwiXSxcblx0XHRcdFwiZG1hXCI6IHZhbHVlW1wiZG1hXCJdLFxuXHRcdFx0XCJncm91cHNcIjogdmFsdWVbXCJncm91cHNcIl0sXG5cdFx0XHRcIm9zX25hbWVcIjogdmFsdWVbXCJvc19uYW1lXCJdLFxuXHRcdFx0XCJvc192ZXJzaW9uXCI6IHZhbHVlW1wib3NfdmVyc2lvblwiXSxcblx0XHRcdFwicGxhdGZvcm1cIjogdmFsdWVbXCJwbGF0Zm9ybVwiXSxcblx0XHRcdFwicmVnaW9uXCI6IHZhbHVlW1wicmVnaW9uXCJdLFxuXHRcdFx0XCJ1c2VyX2lkXCI6IHZhbHVlW1widXNlcl9pZFwiXSxcblx0XHRcdFwidXNlcl9wcm9wZXJ0aWVzXCI6IHZhbHVlW1widXNlcl9wcm9wZXJ0aWVzXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQW5hbHl0aWNzVHJhY2tFdmVudFJlcXVlc3QuanNcbnZhciByZXF1aXJlX0FuYWx5dGljc1RyYWNrRXZlbnRSZXF1ZXN0ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQW5hbHl0aWNzVHJhY2tFdmVudFJlcXVlc3QuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkFuYWx5dGljc1RyYWNrRXZlbnRSZXF1ZXN0ID0gaW5zdGFuY2VPZkFuYWx5dGljc1RyYWNrRXZlbnRSZXF1ZXN0O1xuXHRleHBvcnRzLkFuYWx5dGljc1RyYWNrRXZlbnRSZXF1ZXN0RnJvbUpTT04gPSBBbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdEZyb21KU09OO1xuXHRleHBvcnRzLkFuYWx5dGljc1RyYWNrRXZlbnRSZXF1ZXN0RnJvbUpTT05UeXBlZCA9IEFuYWx5dGljc1RyYWNrRXZlbnRSZXF1ZXN0RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5BbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdFRvSlNPTiA9IEFuYWx5dGljc1RyYWNrRXZlbnRSZXF1ZXN0VG9KU09OO1xuXHRleHBvcnRzLkFuYWx5dGljc1RyYWNrRXZlbnRSZXF1ZXN0VG9KU09OVHlwZWQgPSBBbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdFRvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBBbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZBbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdCh2YWx1ZSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIEFuYWx5dGljc1RyYWNrRXZlbnRSZXF1ZXN0RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBBbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEFuYWx5dGljc1RyYWNrRXZlbnRSZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiZXZlbnRcIjoganNvbltcImV2ZW50XCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiZXZlbnRcIl0sXG5cdFx0XHRcImV2ZW50X3Byb3BlcnRpZXNcIjoganNvbltcImV2ZW50X3Byb3BlcnRpZXNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJldmVudF9wcm9wZXJ0aWVzXCJdLFxuXHRcdFx0XCJ1c2VyX2lkXCI6IGpzb25bXCJ1c2VyX2lkXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1widXNlcl9pZFwiXSxcblx0XHRcdFwidXNlcl9wcm9wZXJ0aWVzXCI6IGpzb25bXCJ1c2VyX3Byb3BlcnRpZXNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJ1c2VyX3Byb3BlcnRpZXNcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIEFuYWx5dGljc1RyYWNrRXZlbnRSZXF1ZXN0VG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQW5hbHl0aWNzVHJhY2tFdmVudFJlcXVlc3RUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQW5hbHl0aWNzVHJhY2tFdmVudFJlcXVlc3RUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJldmVudFwiOiB2YWx1ZVtcImV2ZW50XCJdLFxuXHRcdFx0XCJldmVudF9wcm9wZXJ0aWVzXCI6IHZhbHVlW1wiZXZlbnRfcHJvcGVydGllc1wiXSxcblx0XHRcdFwidXNlcl9pZFwiOiB2YWx1ZVtcInVzZXJfaWRcIl0sXG5cdFx0XHRcInVzZXJfcHJvcGVydGllc1wiOiB2YWx1ZVtcInVzZXJfcHJvcGVydGllc1wiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0F0dGFjaG1lbnRSZXF1ZXN0LmpzXG52YXIgcmVxdWlyZV9BdHRhY2htZW50UmVxdWVzdCA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0F0dGFjaG1lbnRSZXF1ZXN0LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZBdHRhY2htZW50UmVxdWVzdCA9IGluc3RhbmNlT2ZBdHRhY2htZW50UmVxdWVzdDtcblx0ZXhwb3J0cy5BdHRhY2htZW50UmVxdWVzdEZyb21KU09OID0gQXR0YWNobWVudFJlcXVlc3RGcm9tSlNPTjtcblx0ZXhwb3J0cy5BdHRhY2htZW50UmVxdWVzdEZyb21KU09OVHlwZWQgPSBBdHRhY2htZW50UmVxdWVzdEZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuQXR0YWNobWVudFJlcXVlc3RUb0pTT04gPSBBdHRhY2htZW50UmVxdWVzdFRvSlNPTjtcblx0ZXhwb3J0cy5BdHRhY2htZW50UmVxdWVzdFRvSlNPTlR5cGVkID0gQXR0YWNobWVudFJlcXVlc3RUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgQXR0YWNobWVudFJlcXVlc3QgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mQXR0YWNobWVudFJlcXVlc3QodmFsdWUpIHtcblx0XHRpZiAoIShcImJhc2U2NF9jb250ZW50XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiYmFzZTY0X2NvbnRlbnRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiY29udGVudF90eXBlXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY29udGVudF90eXBlXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImZpbGVfbmFtZVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImZpbGVfbmFtZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gQXR0YWNobWVudFJlcXVlc3RGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEF0dGFjaG1lbnRSZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQXR0YWNobWVudFJlcXVlc3RGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJiYXNlNjRfY29udGVudFwiOiBqc29uW1wiYmFzZTY0X2NvbnRlbnRcIl0sXG5cdFx0XHRcImNvbnRlbnRfdHlwZVwiOiBqc29uW1wiY29udGVudF90eXBlXCJdLFxuXHRcdFx0XCJmaWxlX25hbWVcIjoganNvbltcImZpbGVfbmFtZVwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gQXR0YWNobWVudFJlcXVlc3RUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBBdHRhY2htZW50UmVxdWVzdFRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBBdHRhY2htZW50UmVxdWVzdFRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImJhc2U2NF9jb250ZW50XCI6IHZhbHVlW1wiYmFzZTY0X2NvbnRlbnRcIl0sXG5cdFx0XHRcImNvbnRlbnRfdHlwZVwiOiB2YWx1ZVtcImNvbnRlbnRfdHlwZVwiXSxcblx0XHRcdFwiZmlsZV9uYW1lXCI6IHZhbHVlW1wiZmlsZV9uYW1lXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvRm9ybVR5cGUuanNcbnZhciByZXF1aXJlX0Zvcm1UeXBlID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvRm9ybVR5cGUuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuRm9ybVR5cGUgPSB2b2lkIDA7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkZvcm1UeXBlID0gaW5zdGFuY2VPZkZvcm1UeXBlO1xuXHRleHBvcnRzLkZvcm1UeXBlRnJvbUpTT04gPSBGb3JtVHlwZUZyb21KU09OO1xuXHRleHBvcnRzLkZvcm1UeXBlRnJvbUpTT05UeXBlZCA9IEZvcm1UeXBlRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5Gb3JtVHlwZVRvSlNPTiA9IEZvcm1UeXBlVG9KU09OO1xuXHRleHBvcnRzLkZvcm1UeXBlVG9KU09OVHlwZWQgPSBGb3JtVHlwZVRvSlNPTlR5cGVkO1xuXHQvKipcblx0KlxuXHQqIEBleHBvcnRcblx0KiBAZW51bSB7c3RyaW5nfVxuXHQqL1xuXHR2YXIgRm9ybVR5cGU7XG5cdChmdW5jdGlvbihGb3JtVHlwZSQxKSB7XG5cdFx0Rm9ybVR5cGUkMVtcIkVzY2FsYXRpb25cIl0gPSBcImVzY2FsYXRpb25cIjtcblx0XHRGb3JtVHlwZSQxW1wiT3JkZXJMb29rdXBcIl0gPSBcIm9yZGVyX2xvb2t1cFwiO1xuXHR9KShGb3JtVHlwZSB8fCAoZXhwb3J0cy5Gb3JtVHlwZSA9IEZvcm1UeXBlID0ge30pKTtcblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkZvcm1UeXBlKHZhbHVlKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gRm9ybVR5cGUpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoRm9ybVR5cGUsIGtleSkpIHtcblx0XHRcdGlmIChGb3JtVHlwZVtrZXldID09PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRmdW5jdGlvbiBGb3JtVHlwZUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gRm9ybVR5cGVGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBGb3JtVHlwZUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdHJldHVybiBqc29uO1xuXHR9XG5cdGZ1bmN0aW9uIEZvcm1UeXBlVG9KU09OKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdGZ1bmN0aW9uIEZvcm1UeXBlVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0F1dG9Gb3JtLmpzXG52YXIgcmVxdWlyZV9BdXRvRm9ybSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0F1dG9Gb3JtLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZBdXRvRm9ybSA9IGluc3RhbmNlT2ZBdXRvRm9ybTtcblx0ZXhwb3J0cy5BdXRvRm9ybUZyb21KU09OID0gQXV0b0Zvcm1Gcm9tSlNPTjtcblx0ZXhwb3J0cy5BdXRvRm9ybUZyb21KU09OVHlwZWQgPSBBdXRvRm9ybUZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuQXV0b0Zvcm1Ub0pTT04gPSBBdXRvRm9ybVRvSlNPTjtcblx0ZXhwb3J0cy5BdXRvRm9ybVRvSlNPTlR5cGVkID0gQXV0b0Zvcm1Ub0pTT05UeXBlZDtcblx0Y29uc3QgRm9ybVR5cGVfMSQyID0gcmVxdWlyZV9Gb3JtVHlwZSgpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBBdXRvRm9ybSBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZBdXRvRm9ybSh2YWx1ZSkge1xuXHRcdGlmICghKFwiZm9ybV90eXBlXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiZm9ybV90eXBlXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBBdXRvRm9ybUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQXV0b0Zvcm1Gcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBBdXRvRm9ybUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7IFwiZm9ybV90eXBlXCI6ICgwLCBGb3JtVHlwZV8xJDIuRm9ybVR5cGVGcm9tSlNPTikoanNvbltcImZvcm1fdHlwZVwiXSkgfTtcblx0fVxuXHRmdW5jdGlvbiBBdXRvRm9ybVRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEF1dG9Gb3JtVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEF1dG9Gb3JtVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHsgXCJmb3JtX3R5cGVcIjogKDAsIEZvcm1UeXBlXzEkMi5Gb3JtVHlwZVRvSlNPTikodmFsdWVbXCJmb3JtX3R5cGVcIl0pIH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0NvbnRleHQuanNcbnZhciByZXF1aXJlX0NvbnRleHQgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Db250ZXh0LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLkNvbnRleHRTb3VyY2VFbnVtID0gZXhwb3J0cy5Db250ZXh0RW52RW51bSA9IHZvaWQgMDtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mQ29udGV4dCA9IGluc3RhbmNlT2ZDb250ZXh0O1xuXHRleHBvcnRzLkNvbnRleHRGcm9tSlNPTiA9IENvbnRleHRGcm9tSlNPTjtcblx0ZXhwb3J0cy5Db250ZXh0RnJvbUpTT05UeXBlZCA9IENvbnRleHRGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLkNvbnRleHRUb0pTT04gPSBDb250ZXh0VG9KU09OO1xuXHRleHBvcnRzLkNvbnRleHRUb0pTT05UeXBlZCA9IENvbnRleHRUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQGV4cG9ydFxuXHQqIEBlbnVtIHtzdHJpbmd9XG5cdCovXG5cdHZhciBDb250ZXh0RW52RW51bTtcblx0KGZ1bmN0aW9uKENvbnRleHRFbnZFbnVtJDEpIHtcblx0XHRDb250ZXh0RW52RW51bSQxW1wiUHJvZFwiXSA9IFwicHJvZFwiO1xuXHRcdENvbnRleHRFbnZFbnVtJDFbXCJEZXZcIl0gPSBcImRldlwiO1xuXHR9KShDb250ZXh0RW52RW51bSB8fCAoZXhwb3J0cy5Db250ZXh0RW52RW51bSA9IENvbnRleHRFbnZFbnVtID0ge30pKTtcblx0LyoqXG5cdCogQGV4cG9ydFxuXHQqIEBlbnVtIHtzdHJpbmd9XG5cdCovXG5cdHZhciBDb250ZXh0U291cmNlRW51bTtcblx0KGZ1bmN0aW9uKENvbnRleHRTb3VyY2VFbnVtJDEpIHtcblx0XHRDb250ZXh0U291cmNlRW51bSQxW1wiRm9ya1wiXSA9IFwiZm9ya1wiO1xuXHRcdENvbnRleHRTb3VyY2VFbnVtJDFbXCJQbGF5Z3JvdW5kXCJdID0gXCJwbGF5Z3JvdW5kXCI7XG5cdFx0Q29udGV4dFNvdXJjZUVudW0kMVtcIkFwcFwiXSA9IFwiYXBwXCI7XG5cdFx0Q29udGV4dFNvdXJjZUVudW0kMVtcIlRlc3RcIl0gPSBcInRlc3RcIjtcblx0fSkoQ29udGV4dFNvdXJjZUVudW0gfHwgKGV4cG9ydHMuQ29udGV4dFNvdXJjZUVudW0gPSBDb250ZXh0U291cmNlRW51bSA9IHt9KSk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIENvbnRleHQgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mQ29udGV4dCh2YWx1ZSkge1xuXHRcdGlmICghKFwidXNlcl9pZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInVzZXJfaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIENvbnRleHRGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIENvbnRleHRGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBDb250ZXh0RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY2hhdF9pZFwiOiBqc29uW1wiY2hhdF9pZFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImNoYXRfaWRcIl0sXG5cdFx0XHRcImVudlwiOiBqc29uW1wiZW52XCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiZW52XCJdLFxuXHRcdFx0XCJvcmdfaWRcIjoganNvbltcIm9yZ19pZFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm9yZ19pZFwiXSxcblx0XHRcdFwib3JnX3Nob3J0X25hbWVcIjoganNvbltcIm9yZ19zaG9ydF9uYW1lXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wib3JnX3Nob3J0X25hbWVcIl0sXG5cdFx0XHRcInNvdXJjZVwiOiBqc29uW1wic291cmNlXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wic291cmNlXCJdLFxuXHRcdFx0XCJ1c2VyX2lkXCI6IGpzb25bXCJ1c2VyX2lkXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBDb250ZXh0VG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQ29udGV4dFRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBDb250ZXh0VG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY2hhdF9pZFwiOiB2YWx1ZVtcImNoYXRfaWRcIl0sXG5cdFx0XHRcImVudlwiOiB2YWx1ZVtcImVudlwiXSxcblx0XHRcdFwib3JnX2lkXCI6IHZhbHVlW1wib3JnX2lkXCJdLFxuXHRcdFx0XCJvcmdfc2hvcnRfbmFtZVwiOiB2YWx1ZVtcIm9yZ19zaG9ydF9uYW1lXCJdLFxuXHRcdFx0XCJzb3VyY2VcIjogdmFsdWVbXCJzb3VyY2VcIl0sXG5cdFx0XHRcInVzZXJfaWRcIjogdmFsdWVbXCJ1c2VyX2lkXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ29udmVyc2F0aW9uU3RhdHVzLmpzXG52YXIgcmVxdWlyZV9Db252ZXJzYXRpb25TdGF0dXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Db252ZXJzYXRpb25TdGF0dXMuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuQ29udmVyc2F0aW9uU3RhdHVzID0gdm9pZCAwO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZDb252ZXJzYXRpb25TdGF0dXMgPSBpbnN0YW5jZU9mQ29udmVyc2F0aW9uU3RhdHVzO1xuXHRleHBvcnRzLkNvbnZlcnNhdGlvblN0YXR1c0Zyb21KU09OID0gQ29udmVyc2F0aW9uU3RhdHVzRnJvbUpTT047XG5cdGV4cG9ydHMuQ29udmVyc2F0aW9uU3RhdHVzRnJvbUpTT05UeXBlZCA9IENvbnZlcnNhdGlvblN0YXR1c0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuQ29udmVyc2F0aW9uU3RhdHVzVG9KU09OID0gQ29udmVyc2F0aW9uU3RhdHVzVG9KU09OO1xuXHRleHBvcnRzLkNvbnZlcnNhdGlvblN0YXR1c1RvSlNPTlR5cGVkID0gQ29udmVyc2F0aW9uU3RhdHVzVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIFN0YW5kYXJkaXplZCBzdGF0dXMgdmFsdWVzIGZvciBjdXN0b21lciBzZXJ2aWNlIGNvbnZlcnNhdGlvbnMgYWNyb3NzIHBsYXRmb3Jtc1xuXHQqIEBleHBvcnRcblx0KiBAZW51bSB7c3RyaW5nfVxuXHQqL1xuXHR2YXIgQ29udmVyc2F0aW9uU3RhdHVzO1xuXHQoZnVuY3Rpb24oQ29udmVyc2F0aW9uU3RhdHVzJDEpIHtcblx0XHRDb252ZXJzYXRpb25TdGF0dXMkMVtcIk9wZW5cIl0gPSBcIk9QRU5cIjtcblx0XHRDb252ZXJzYXRpb25TdGF0dXMkMVtcIkNsb3NlZFwiXSA9IFwiQ0xPU0VEXCI7XG5cdFx0Q29udmVyc2F0aW9uU3RhdHVzJDFbXCJQZW5kaW5nXCJdID0gXCJQRU5ESU5HXCI7XG5cdFx0Q29udmVyc2F0aW9uU3RhdHVzJDFbXCJPdGhlclwiXSA9IFwiT1RIRVJcIjtcblx0fSkoQ29udmVyc2F0aW9uU3RhdHVzIHx8IChleHBvcnRzLkNvbnZlcnNhdGlvblN0YXR1cyA9IENvbnZlcnNhdGlvblN0YXR1cyA9IHt9KSk7XG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZDb252ZXJzYXRpb25TdGF0dXModmFsdWUpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBDb252ZXJzYXRpb25TdGF0dXMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQ29udmVyc2F0aW9uU3RhdHVzLCBrZXkpKSB7XG5cdFx0XHRpZiAoQ29udmVyc2F0aW9uU3RhdHVzW2tleV0gPT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGZ1bmN0aW9uIENvbnZlcnNhdGlvblN0YXR1c0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQ29udmVyc2F0aW9uU3RhdHVzRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQ29udmVyc2F0aW9uU3RhdHVzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0cmV0dXJuIGpzb247XG5cdH1cblx0ZnVuY3Rpb24gQ29udmVyc2F0aW9uU3RhdHVzVG9KU09OKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdGZ1bmN0aW9uIENvbnZlcnNhdGlvblN0YXR1c1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9DcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0LmpzXG52YXIgcmVxdWlyZV9DcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdC5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdCA9IGluc3RhbmNlT2ZDcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0O1xuXHRleHBvcnRzLkNyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3RGcm9tSlNPTiA9IENyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3RGcm9tSlNPTjtcblx0ZXhwb3J0cy5DcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0RnJvbUpTT05UeXBlZCA9IENyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3RGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLkNyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3RUb0pTT04gPSBDcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0VG9KU09OO1xuXHRleHBvcnRzLkNyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3RUb0pTT05UeXBlZCA9IENyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3RUb0pTT05UeXBlZDtcblx0Y29uc3QgQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJfMSQzID0gcmVxdWlyZV9DdXN0b21lclNlcnZpY2VQcm92aWRlcigpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBDcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0IGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkNyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3QodmFsdWUpIHtcblx0XHRpZiAoIShcImVtYWlsXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiZW1haWxcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwic3BpZmZ5X3VzZXJfaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJzcGlmZnlfdXNlcl9pZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdEZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIENyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3RGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCI6IGpzb25bXCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCJdID09IG51bGwgPyB2b2lkIDAgOiAoMCwgQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJfMSQzLkN1c3RvbWVyU2VydmljZVByb3ZpZGVyRnJvbUpTT04pKGpzb25bXCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCJdKSxcblx0XHRcdFwiZW1haWxcIjoganNvbltcImVtYWlsXCJdLFxuXHRcdFx0XCJuYW1lXCI6IGpzb25bXCJuYW1lXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wibmFtZVwiXSxcblx0XHRcdFwic3BpZmZ5X3VzZXJfaWRcIjoganNvbltcInNwaWZmeV91c2VyX2lkXCJdLFxuXHRcdFx0XCJzdWJqZWN0XCI6IGpzb25bXCJzdWJqZWN0XCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wic3ViamVjdFwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdFRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIENyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3RUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdFRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXJcIjogKDAsIEN1c3RvbWVyU2VydmljZVByb3ZpZGVyXzEkMy5DdXN0b21lclNlcnZpY2VQcm92aWRlclRvSlNPTikodmFsdWVbXCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCJdKSxcblx0XHRcdFwiZW1haWxcIjogdmFsdWVbXCJlbWFpbFwiXSxcblx0XHRcdFwibmFtZVwiOiB2YWx1ZVtcIm5hbWVcIl0sXG5cdFx0XHRcInNwaWZmeV91c2VyX2lkXCI6IHZhbHVlW1wic3BpZmZ5X3VzZXJfaWRcIl0sXG5cdFx0XHRcInN1YmplY3RcIjogdmFsdWVbXCJzdWJqZWN0XCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ3VzdFNlcnZpY2VDb252ZXJzYXRpb24uanNcbnZhciByZXF1aXJlX0N1c3RTZXJ2aWNlQ29udmVyc2F0aW9uID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ3VzdFNlcnZpY2VDb252ZXJzYXRpb24uanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uID0gaW5zdGFuY2VPZkN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uO1xuXHRleHBvcnRzLkN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uRnJvbUpTT04gPSBDdXN0U2VydmljZUNvbnZlcnNhdGlvbkZyb21KU09OO1xuXHRleHBvcnRzLkN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uRnJvbUpTT05UeXBlZCA9IEN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5DdXN0U2VydmljZUNvbnZlcnNhdGlvblRvSlNPTiA9IEN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uVG9KU09OO1xuXHRleHBvcnRzLkN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uVG9KU09OVHlwZWQgPSBDdXN0U2VydmljZUNvbnZlcnNhdGlvblRvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBDdXN0U2VydmljZUNvbnZlcnNhdGlvbiBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZDdXN0U2VydmljZUNvbnZlcnNhdGlvbih2YWx1ZSkge1xuXHRcdGlmICghKFwiY3JlYXRlZF9hdFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNyZWF0ZWRfYXRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiY3VzdG9tZXJfaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJjdXN0b21lcl9pZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJpZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImlkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcIm5hbWVcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJuYW1lXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInN0YXR1c1wiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInN0YXR1c1wiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25Gcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25Gcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjcmVhdGVkX2F0XCI6IG5ldyBEYXRlKGpzb25bXCJjcmVhdGVkX2F0XCJdKSxcblx0XHRcdFwiY3VzdG9tZXJfaWRcIjoganNvbltcImN1c3RvbWVyX2lkXCJdLFxuXHRcdFx0XCJpZFwiOiBqc29uW1wiaWRcIl0sXG5cdFx0XHRcIm5hbWVcIjoganNvbltcIm5hbWVcIl0sXG5cdFx0XHRcInN0YXR1c1wiOiBqc29uW1wic3RhdHVzXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBDdXN0U2VydmljZUNvbnZlcnNhdGlvblRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY3JlYXRlZF9hdFwiOiB2YWx1ZVtcImNyZWF0ZWRfYXRcIl0udG9JU09TdHJpbmcoKSxcblx0XHRcdFwiY3VzdG9tZXJfaWRcIjogdmFsdWVbXCJjdXN0b21lcl9pZFwiXSxcblx0XHRcdFwiaWRcIjogdmFsdWVbXCJpZFwiXSxcblx0XHRcdFwibmFtZVwiOiB2YWx1ZVtcIm5hbWVcIl0sXG5cdFx0XHRcInN0YXR1c1wiOiB2YWx1ZVtcInN0YXR1c1wiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0N1c3RTZXJ2aWNlQ3VzdG9tZXIuanNcbnZhciByZXF1aXJlX0N1c3RTZXJ2aWNlQ3VzdG9tZXIgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9DdXN0U2VydmljZUN1c3RvbWVyLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZDdXN0U2VydmljZUN1c3RvbWVyID0gaW5zdGFuY2VPZkN1c3RTZXJ2aWNlQ3VzdG9tZXI7XG5cdGV4cG9ydHMuQ3VzdFNlcnZpY2VDdXN0b21lckZyb21KU09OID0gQ3VzdFNlcnZpY2VDdXN0b21lckZyb21KU09OO1xuXHRleHBvcnRzLkN1c3RTZXJ2aWNlQ3VzdG9tZXJGcm9tSlNPTlR5cGVkID0gQ3VzdFNlcnZpY2VDdXN0b21lckZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuQ3VzdFNlcnZpY2VDdXN0b21lclRvSlNPTiA9IEN1c3RTZXJ2aWNlQ3VzdG9tZXJUb0pTT047XG5cdGV4cG9ydHMuQ3VzdFNlcnZpY2VDdXN0b21lclRvSlNPTlR5cGVkID0gQ3VzdFNlcnZpY2VDdXN0b21lclRvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBDdXN0U2VydmljZUN1c3RvbWVyIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkN1c3RTZXJ2aWNlQ3VzdG9tZXIodmFsdWUpIHtcblx0XHRpZiAoIShcImVtYWlsXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiZW1haWxcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJpZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gQ3VzdFNlcnZpY2VDdXN0b21lckZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQ3VzdFNlcnZpY2VDdXN0b21lckZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RTZXJ2aWNlQ3VzdG9tZXJGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJlbWFpbFwiOiBqc29uW1wiZW1haWxcIl0sXG5cdFx0XHRcImlkXCI6IGpzb25bXCJpZFwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gQ3VzdFNlcnZpY2VDdXN0b21lclRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEN1c3RTZXJ2aWNlQ3VzdG9tZXJUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQ3VzdFNlcnZpY2VDdXN0b21lclRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImVtYWlsXCI6IHZhbHVlW1wiZW1haWxcIl0sXG5cdFx0XHRcImlkXCI6IHZhbHVlW1wiaWRcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9DcmVhdGVDb252ZXJzYXRpb25SZXNwb25zZS5qc1xudmFyIHJlcXVpcmVfQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2UgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9DcmVhdGVDb252ZXJzYXRpb25SZXNwb25zZS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2UgPSBpbnN0YW5jZU9mQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2U7XG5cdGV4cG9ydHMuQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2VGcm9tSlNPTiA9IENyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlRnJvbUpTT047XG5cdGV4cG9ydHMuQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2VGcm9tSlNPTlR5cGVkID0gQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2VGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLkNyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlVG9KU09OID0gQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2VUb0pTT047XG5cdGV4cG9ydHMuQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2VUb0pTT05UeXBlZCA9IENyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlVG9KU09OVHlwZWQ7XG5cdGNvbnN0IEN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uXzEgPSByZXF1aXJlX0N1c3RTZXJ2aWNlQ29udmVyc2F0aW9uKCk7XG5cdGNvbnN0IEN1c3RTZXJ2aWNlQ3VzdG9tZXJfMSA9IHJlcXVpcmVfQ3VzdFNlcnZpY2VDdXN0b21lcigpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBDcmVhdGVDb252ZXJzYXRpb25SZXNwb25zZSBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZDcmVhdGVDb252ZXJzYXRpb25SZXNwb25zZSh2YWx1ZSkge1xuXHRcdGlmICghKFwiY29udmVyc2F0aW9uXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY29udmVyc2F0aW9uXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImN1c3RvbWVyXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY3VzdG9tZXJcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIENyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBDcmVhdGVDb252ZXJzYXRpb25SZXNwb25zZUZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIENyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29udmVyc2F0aW9uXCI6ICgwLCBDdXN0U2VydmljZUNvbnZlcnNhdGlvbl8xLkN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uRnJvbUpTT04pKGpzb25bXCJjb252ZXJzYXRpb25cIl0pLFxuXHRcdFx0XCJjdXN0b21lclwiOiAoMCwgQ3VzdFNlcnZpY2VDdXN0b21lcl8xLkN1c3RTZXJ2aWNlQ3VzdG9tZXJGcm9tSlNPTikoanNvbltcImN1c3RvbWVyXCJdKVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2VUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBDcmVhdGVDb252ZXJzYXRpb25SZXNwb25zZVRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBDcmVhdGVDb252ZXJzYXRpb25SZXNwb25zZVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvbnZlcnNhdGlvblwiOiAoMCwgQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25fMS5DdXN0U2VydmljZUNvbnZlcnNhdGlvblRvSlNPTikodmFsdWVbXCJjb252ZXJzYXRpb25cIl0pLFxuXHRcdFx0XCJjdXN0b21lclwiOiAoMCwgQ3VzdFNlcnZpY2VDdXN0b21lcl8xLkN1c3RTZXJ2aWNlQ3VzdG9tZXJUb0pTT04pKHZhbHVlW1wiY3VzdG9tZXJcIl0pXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ3VzdFNlcnZpY2VBdHRhY2htZW50LmpzXG52YXIgcmVxdWlyZV9DdXN0U2VydmljZUF0dGFjaG1lbnQgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9DdXN0U2VydmljZUF0dGFjaG1lbnQuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkN1c3RTZXJ2aWNlQXR0YWNobWVudCA9IGluc3RhbmNlT2ZDdXN0U2VydmljZUF0dGFjaG1lbnQ7XG5cdGV4cG9ydHMuQ3VzdFNlcnZpY2VBdHRhY2htZW50RnJvbUpTT04gPSBDdXN0U2VydmljZUF0dGFjaG1lbnRGcm9tSlNPTjtcblx0ZXhwb3J0cy5DdXN0U2VydmljZUF0dGFjaG1lbnRGcm9tSlNPTlR5cGVkID0gQ3VzdFNlcnZpY2VBdHRhY2htZW50RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5DdXN0U2VydmljZUF0dGFjaG1lbnRUb0pTT04gPSBDdXN0U2VydmljZUF0dGFjaG1lbnRUb0pTT047XG5cdGV4cG9ydHMuQ3VzdFNlcnZpY2VBdHRhY2htZW50VG9KU09OVHlwZWQgPSBDdXN0U2VydmljZUF0dGFjaG1lbnRUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgQ3VzdFNlcnZpY2VBdHRhY2htZW50IGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkN1c3RTZXJ2aWNlQXR0YWNobWVudCh2YWx1ZSkge1xuXHRcdGlmICghKFwiY29udGVudF9sZW5ndGhcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJjb250ZW50X2xlbmd0aFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJjb250ZW50X3R5cGVcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJjb250ZW50X3R5cGVcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJpZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJuYW1lXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wibmFtZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gQ3VzdFNlcnZpY2VBdHRhY2htZW50RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBDdXN0U2VydmljZUF0dGFjaG1lbnRGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBDdXN0U2VydmljZUF0dGFjaG1lbnRGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb250ZW50X2xlbmd0aFwiOiBqc29uW1wiY29udGVudF9sZW5ndGhcIl0sXG5cdFx0XHRcImNvbnRlbnRfdHlwZVwiOiBqc29uW1wiY29udGVudF90eXBlXCJdLFxuXHRcdFx0XCJpZFwiOiBqc29uW1wiaWRcIl0sXG5cdFx0XHRcIm5hbWVcIjoganNvbltcIm5hbWVcIl0sXG5cdFx0XHRcInVybFwiOiBqc29uW1widXJsXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1widXJsXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBDdXN0U2VydmljZUF0dGFjaG1lbnRUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBDdXN0U2VydmljZUF0dGFjaG1lbnRUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQ3VzdFNlcnZpY2VBdHRhY2htZW50VG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29udGVudF9sZW5ndGhcIjogdmFsdWVbXCJjb250ZW50X2xlbmd0aFwiXSxcblx0XHRcdFwiY29udGVudF90eXBlXCI6IHZhbHVlW1wiY29udGVudF90eXBlXCJdLFxuXHRcdFx0XCJpZFwiOiB2YWx1ZVtcImlkXCJdLFxuXHRcdFx0XCJuYW1lXCI6IHZhbHVlW1wibmFtZVwiXSxcblx0XHRcdFwidXJsXCI6IHZhbHVlW1widXJsXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ3VzdFNlcnZpY2VNZXNzYWdlLmpzXG52YXIgcmVxdWlyZV9DdXN0U2VydmljZU1lc3NhZ2UgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9DdXN0U2VydmljZU1lc3NhZ2UuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkN1c3RTZXJ2aWNlTWVzc2FnZSA9IGluc3RhbmNlT2ZDdXN0U2VydmljZU1lc3NhZ2U7XG5cdGV4cG9ydHMuQ3VzdFNlcnZpY2VNZXNzYWdlRnJvbUpTT04gPSBDdXN0U2VydmljZU1lc3NhZ2VGcm9tSlNPTjtcblx0ZXhwb3J0cy5DdXN0U2VydmljZU1lc3NhZ2VGcm9tSlNPTlR5cGVkID0gQ3VzdFNlcnZpY2VNZXNzYWdlRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5DdXN0U2VydmljZU1lc3NhZ2VUb0pTT04gPSBDdXN0U2VydmljZU1lc3NhZ2VUb0pTT047XG5cdGV4cG9ydHMuQ3VzdFNlcnZpY2VNZXNzYWdlVG9KU09OVHlwZWQgPSBDdXN0U2VydmljZU1lc3NhZ2VUb0pTT05UeXBlZDtcblx0Y29uc3QgQ3VzdFNlcnZpY2VBdHRhY2htZW50XzEgPSByZXF1aXJlX0N1c3RTZXJ2aWNlQXR0YWNobWVudCgpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBDdXN0U2VydmljZU1lc3NhZ2UgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mQ3VzdFNlcnZpY2VNZXNzYWdlKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJib2R5XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiYm9keVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJjcmVhdGVkX2F0XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY3JlYXRlZF9hdFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJjdXN0b21lcl9pZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImN1c3RvbWVyX2lkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImRpcmVjdGlvblwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImRpcmVjdGlvblwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJpZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImlkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImlzX2FnZW50XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaXNfYWdlbnRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiaXNfYXV0b21hdGljX21lc3NhZ2VcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJpc19hdXRvbWF0aWNfbWVzc2FnZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gQ3VzdFNlcnZpY2VNZXNzYWdlRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBDdXN0U2VydmljZU1lc3NhZ2VGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBDdXN0U2VydmljZU1lc3NhZ2VGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJhZ2VudF9pZFwiOiBqc29uW1wiYWdlbnRfaWRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJhZ2VudF9pZFwiXSxcblx0XHRcdFwiYWdlbnRfbmFtZVwiOiBqc29uW1wiYWdlbnRfbmFtZVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImFnZW50X25hbWVcIl0sXG5cdFx0XHRcImF0dGFjaG1lbnRzXCI6IGpzb25bXCJhdHRhY2htZW50c1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImF0dGFjaG1lbnRzXCJdLm1hcChDdXN0U2VydmljZUF0dGFjaG1lbnRfMS5DdXN0U2VydmljZUF0dGFjaG1lbnRGcm9tSlNPTiksXG5cdFx0XHRcImJvZHlcIjoganNvbltcImJvZHlcIl0sXG5cdFx0XHRcImNyZWF0ZWRfYXRcIjogbmV3IERhdGUoanNvbltcImNyZWF0ZWRfYXRcIl0pLFxuXHRcdFx0XCJjdXN0b21lcl9pZFwiOiBqc29uW1wiY3VzdG9tZXJfaWRcIl0sXG5cdFx0XHRcImRpcmVjdGlvblwiOiBqc29uW1wiZGlyZWN0aW9uXCJdLFxuXHRcdFx0XCJpZFwiOiBqc29uW1wiaWRcIl0sXG5cdFx0XHRcImlzX2FnZW50XCI6IGpzb25bXCJpc19hZ2VudFwiXSxcblx0XHRcdFwiaXNfYXV0b21hdGljX21lc3NhZ2VcIjoganNvbltcImlzX2F1dG9tYXRpY19tZXNzYWdlXCJdLFxuXHRcdFx0XCJpc19lbWFpbFwiOiBqc29uW1wiaXNfZW1haWxcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJpc19lbWFpbFwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gQ3VzdFNlcnZpY2VNZXNzYWdlVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQ3VzdFNlcnZpY2VNZXNzYWdlVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RTZXJ2aWNlTWVzc2FnZVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImFnZW50X2lkXCI6IHZhbHVlW1wiYWdlbnRfaWRcIl0sXG5cdFx0XHRcImFnZW50X25hbWVcIjogdmFsdWVbXCJhZ2VudF9uYW1lXCJdLFxuXHRcdFx0XCJhdHRhY2htZW50c1wiOiB2YWx1ZVtcImF0dGFjaG1lbnRzXCJdID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZVtcImF0dGFjaG1lbnRzXCJdLm1hcChDdXN0U2VydmljZUF0dGFjaG1lbnRfMS5DdXN0U2VydmljZUF0dGFjaG1lbnRUb0pTT04pLFxuXHRcdFx0XCJib2R5XCI6IHZhbHVlW1wiYm9keVwiXSxcblx0XHRcdFwiY3JlYXRlZF9hdFwiOiB2YWx1ZVtcImNyZWF0ZWRfYXRcIl0udG9JU09TdHJpbmcoKSxcblx0XHRcdFwiY3VzdG9tZXJfaWRcIjogdmFsdWVbXCJjdXN0b21lcl9pZFwiXSxcblx0XHRcdFwiZGlyZWN0aW9uXCI6IHZhbHVlW1wiZGlyZWN0aW9uXCJdLFxuXHRcdFx0XCJpZFwiOiB2YWx1ZVtcImlkXCJdLFxuXHRcdFx0XCJpc19hZ2VudFwiOiB2YWx1ZVtcImlzX2FnZW50XCJdLFxuXHRcdFx0XCJpc19hdXRvbWF0aWNfbWVzc2FnZVwiOiB2YWx1ZVtcImlzX2F1dG9tYXRpY19tZXNzYWdlXCJdLFxuXHRcdFx0XCJpc19lbWFpbFwiOiB2YWx1ZVtcImlzX2VtYWlsXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25NZXNzYWdlcy5qc1xudmFyIHJlcXVpcmVfQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25NZXNzYWdlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0N1c3RTZXJ2aWNlQ29udmVyc2F0aW9uTWVzc2FnZXMuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uTWVzc2FnZXMgPSBpbnN0YW5jZU9mQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25NZXNzYWdlcztcblx0ZXhwb3J0cy5DdXN0U2VydmljZUNvbnZlcnNhdGlvbk1lc3NhZ2VzRnJvbUpTT04gPSBDdXN0U2VydmljZUNvbnZlcnNhdGlvbk1lc3NhZ2VzRnJvbUpTT047XG5cdGV4cG9ydHMuQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25NZXNzYWdlc0Zyb21KU09OVHlwZWQgPSBDdXN0U2VydmljZUNvbnZlcnNhdGlvbk1lc3NhZ2VzRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5DdXN0U2VydmljZUNvbnZlcnNhdGlvbk1lc3NhZ2VzVG9KU09OID0gQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25NZXNzYWdlc1RvSlNPTjtcblx0ZXhwb3J0cy5DdXN0U2VydmljZUNvbnZlcnNhdGlvbk1lc3NhZ2VzVG9KU09OVHlwZWQgPSBDdXN0U2VydmljZUNvbnZlcnNhdGlvbk1lc3NhZ2VzVG9KU09OVHlwZWQ7XG5cdGNvbnN0IEN1c3RTZXJ2aWNlTWVzc2FnZV8xJDEgPSByZXF1aXJlX0N1c3RTZXJ2aWNlTWVzc2FnZSgpO1xuXHRjb25zdCBDb252ZXJzYXRpb25TdGF0dXNfMSA9IHJlcXVpcmVfQ29udmVyc2F0aW9uU3RhdHVzKCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIEN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uTWVzc2FnZXMgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25NZXNzYWdlcyh2YWx1ZSkge1xuXHRcdGlmICghKFwiZGF0YVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImRhdGFcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uTWVzc2FnZXNGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uTWVzc2FnZXNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBDdXN0U2VydmljZUNvbnZlcnNhdGlvbk1lc3NhZ2VzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29udmVyc2F0aW9uX3N0YXR1c1wiOiBqc29uW1wiY29udmVyc2F0aW9uX3N0YXR1c1wiXSA9PSBudWxsID8gdm9pZCAwIDogKDAsIENvbnZlcnNhdGlvblN0YXR1c18xLkNvbnZlcnNhdGlvblN0YXR1c0Zyb21KU09OKShqc29uW1wiY29udmVyc2F0aW9uX3N0YXR1c1wiXSksXG5cdFx0XHRcImRhdGFcIjoganNvbltcImRhdGFcIl0ubWFwKEN1c3RTZXJ2aWNlTWVzc2FnZV8xJDEuQ3VzdFNlcnZpY2VNZXNzYWdlRnJvbUpTT04pLFxuXHRcdFx0XCJuZXh0X3BhZ2VcIjoganNvbltcIm5leHRfcGFnZVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm5leHRfcGFnZVwiXSxcblx0XHRcdFwicHJldmlvdXNfcGFnZVwiOiBqc29uW1wicHJldmlvdXNfcGFnZVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInByZXZpb3VzX3BhZ2VcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uTWVzc2FnZXNUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBDdXN0U2VydmljZUNvbnZlcnNhdGlvbk1lc3NhZ2VzVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uTWVzc2FnZXNUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb252ZXJzYXRpb25fc3RhdHVzXCI6ICgwLCBDb252ZXJzYXRpb25TdGF0dXNfMS5Db252ZXJzYXRpb25TdGF0dXNUb0pTT04pKHZhbHVlW1wiY29udmVyc2F0aW9uX3N0YXR1c1wiXSksXG5cdFx0XHRcImRhdGFcIjogdmFsdWVbXCJkYXRhXCJdLm1hcChDdXN0U2VydmljZU1lc3NhZ2VfMSQxLkN1c3RTZXJ2aWNlTWVzc2FnZVRvSlNPTiksXG5cdFx0XHRcIm5leHRfcGFnZVwiOiB2YWx1ZVtcIm5leHRfcGFnZVwiXSxcblx0XHRcdFwicHJldmlvdXNfcGFnZVwiOiB2YWx1ZVtcInByZXZpb3VzX3BhZ2VcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9NYW51YWxGb3JtLmpzXG52YXIgcmVxdWlyZV9NYW51YWxGb3JtID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvTWFudWFsRm9ybS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mTWFudWFsRm9ybSA9IGluc3RhbmNlT2ZNYW51YWxGb3JtO1xuXHRleHBvcnRzLk1hbnVhbEZvcm1Gcm9tSlNPTiA9IE1hbnVhbEZvcm1Gcm9tSlNPTjtcblx0ZXhwb3J0cy5NYW51YWxGb3JtRnJvbUpTT05UeXBlZCA9IE1hbnVhbEZvcm1Gcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLk1hbnVhbEZvcm1Ub0pTT04gPSBNYW51YWxGb3JtVG9KU09OO1xuXHRleHBvcnRzLk1hbnVhbEZvcm1Ub0pTT05UeXBlZCA9IE1hbnVhbEZvcm1Ub0pTT05UeXBlZDtcblx0Y29uc3QgRm9ybVR5cGVfMSQxID0gcmVxdWlyZV9Gb3JtVHlwZSgpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBNYW51YWxGb3JtIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZk1hbnVhbEZvcm0odmFsdWUpIHtcblx0XHRpZiAoIShcImZvcm1fdHlwZVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImZvcm1fdHlwZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gTWFudWFsRm9ybUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gTWFudWFsRm9ybUZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIE1hbnVhbEZvcm1Gcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4geyBcImZvcm1fdHlwZVwiOiAoMCwgRm9ybVR5cGVfMSQxLkZvcm1UeXBlRnJvbUpTT04pKGpzb25bXCJmb3JtX3R5cGVcIl0pIH07XG5cdH1cblx0ZnVuY3Rpb24gTWFudWFsRm9ybVRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIE1hbnVhbEZvcm1Ub0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gTWFudWFsRm9ybVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7IFwiZm9ybV90eXBlXCI6ICgwLCBGb3JtVHlwZV8xJDEuRm9ybVR5cGVUb0pTT04pKHZhbHVlW1wiZm9ybV90eXBlXCJdKSB9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Gb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5LmpzXG52YXIgcmVxdWlyZV9Gb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5Gb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5RnJvbUpTT04gPSBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5RnJvbUpTT047XG5cdGV4cG9ydHMuRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeUZyb21KU09OVHlwZWQgPSBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5Gb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5VG9KU09OID0gRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeVRvSlNPTjtcblx0ZXhwb3J0cy5Gb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5VG9KU09OVHlwZWQgPSBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5VG9KU09OVHlwZWQ7XG5cdGNvbnN0IEF1dG9Gb3JtXzEgPSByZXF1aXJlX0F1dG9Gb3JtKCk7XG5cdGNvbnN0IE1hbnVhbEZvcm1fMSA9IHJlcXVpcmVfTWFudWFsRm9ybSgpO1xuXHRmdW5jdGlvbiBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdGlmICgoMCwgQXV0b0Zvcm1fMS5pbnN0YW5jZU9mQXV0b0Zvcm0pKGpzb24pKSByZXR1cm4gKDAsIEF1dG9Gb3JtXzEuQXV0b0Zvcm1Gcm9tSlNPTlR5cGVkKShqc29uLCB0cnVlKTtcblx0XHRpZiAoKDAsIE1hbnVhbEZvcm1fMS5pbnN0YW5jZU9mTWFudWFsRm9ybSkoanNvbikpIHJldHVybiAoMCwgTWFudWFsRm9ybV8xLk1hbnVhbEZvcm1Gcm9tSlNPTlR5cGVkKShqc29uLCB0cnVlKTtcblx0XHRyZXR1cm4ge307XG5cdH1cblx0ZnVuY3Rpb24gRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeVRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEZvcm1SZXNwb25zZUF0dHJpYnV0ZXNGb3JtQ2F0ZWdvcnlUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdGlmICgoMCwgQXV0b0Zvcm1fMS5pbnN0YW5jZU9mQXV0b0Zvcm0pKHZhbHVlKSkgcmV0dXJuICgwLCBBdXRvRm9ybV8xLkF1dG9Gb3JtVG9KU09OKSh2YWx1ZSk7XG5cdFx0aWYgKCgwLCBNYW51YWxGb3JtXzEuaW5zdGFuY2VPZk1hbnVhbEZvcm0pKHZhbHVlKSkgcmV0dXJuICgwLCBNYW51YWxGb3JtXzEuTWFudWFsRm9ybVRvSlNPTikodmFsdWUpO1xuXHRcdHJldHVybiB7fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvRm9ybVJlc3BvbnNlQXR0cmlidXRlcy5qc1xudmFyIHJlcXVpcmVfRm9ybVJlc3BvbnNlQXR0cmlidXRlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0Zvcm1SZXNwb25zZUF0dHJpYnV0ZXMuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkZvcm1SZXNwb25zZUF0dHJpYnV0ZXMgPSBpbnN0YW5jZU9mRm9ybVJlc3BvbnNlQXR0cmlidXRlcztcblx0ZXhwb3J0cy5Gb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRnJvbUpTT04gPSBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRnJvbUpTT047XG5cdGV4cG9ydHMuRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OVHlwZWQgPSBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5Gb3JtUmVzcG9uc2VBdHRyaWJ1dGVzVG9KU09OID0gRm9ybVJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTjtcblx0ZXhwb3J0cy5Gb3JtUmVzcG9uc2VBdHRyaWJ1dGVzVG9KU09OVHlwZWQgPSBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzVG9KU09OVHlwZWQ7XG5cdGNvbnN0IEZvcm1SZXNwb25zZUF0dHJpYnV0ZXNGb3JtQ2F0ZWdvcnlfMSA9IHJlcXVpcmVfRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeSgpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkZvcm1SZXNwb25zZUF0dHJpYnV0ZXModmFsdWUpIHtcblx0XHRpZiAoIShcInNjaGVtYVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInNjaGVtYVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEZvcm1SZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJmb3JtX2NhdGVnb3J5XCI6IGpzb25bXCJmb3JtX2NhdGVnb3J5XCJdID09IG51bGwgPyB2b2lkIDAgOiAoMCwgRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeV8xLkZvcm1SZXNwb25zZUF0dHJpYnV0ZXNGb3JtQ2F0ZWdvcnlGcm9tSlNPTikoanNvbltcImZvcm1fY2F0ZWdvcnlcIl0pLFxuXHRcdFx0XCJzY2hlbWFcIjoganNvbltcInNjaGVtYVwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gRm9ybVJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEZvcm1SZXNwb25zZUF0dHJpYnV0ZXNUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gRm9ybVJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImZvcm1fY2F0ZWdvcnlcIjogKDAsIEZvcm1SZXNwb25zZUF0dHJpYnV0ZXNGb3JtQ2F0ZWdvcnlfMS5Gb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5VG9KU09OKSh2YWx1ZVtcImZvcm1fY2F0ZWdvcnlcIl0pLFxuXHRcdFx0XCJzY2hlbWFcIjogdmFsdWVbXCJzY2hlbWFcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Gb3JtU3VibWl0dGVkQXR0cmlidXRlcy5qc1xudmFyIHJlcXVpcmVfRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Gb3JtU3VibWl0dGVkQXR0cmlidXRlcy5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXMgPSBpbnN0YW5jZU9mRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXM7XG5cdGV4cG9ydHMuRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXNGcm9tSlNPTiA9IEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzRnJvbUpTT047XG5cdGV4cG9ydHMuRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkID0gRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLkZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzVG9KU09OID0gRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXNUb0pTT047XG5cdGV4cG9ydHMuRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXNUb0pTT05UeXBlZCA9IEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzVG9KU09OVHlwZWQ7XG5cdGNvbnN0IEZvcm1UeXBlXzEgPSByZXF1aXJlX0Zvcm1UeXBlKCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJmaWxsZWRfc2NoZW1hXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiZmlsbGVkX3NjaGVtYVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJmb3JtX3Jlc3BvbnNlX2lkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiZm9ybV9yZXNwb25zZV9pZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJmb3JtX3R5cGVcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJmb3JtX3R5cGVcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBGb3JtU3VibWl0dGVkQXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiZmlsbGVkX3NjaGVtYVwiOiBqc29uW1wiZmlsbGVkX3NjaGVtYVwiXSxcblx0XHRcdFwiZm9ybV9yZXNwb25zZV9pZFwiOiBqc29uW1wiZm9ybV9yZXNwb25zZV9pZFwiXSxcblx0XHRcdFwiZm9ybV90eXBlXCI6ICgwLCBGb3JtVHlwZV8xLkZvcm1UeXBlRnJvbUpTT04pKGpzb25bXCJmb3JtX3R5cGVcIl0pXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBGb3JtU3VibWl0dGVkQXR0cmlidXRlc1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiZmlsbGVkX3NjaGVtYVwiOiB2YWx1ZVtcImZpbGxlZF9zY2hlbWFcIl0sXG5cdFx0XHRcImZvcm1fcmVzcG9uc2VfaWRcIjogdmFsdWVbXCJmb3JtX3Jlc3BvbnNlX2lkXCJdLFxuXHRcdFx0XCJmb3JtX3R5cGVcIjogKDAsIEZvcm1UeXBlXzEuRm9ybVR5cGVUb0pTT04pKHZhbHVlW1wiZm9ybV90eXBlXCJdKVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0Z1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5qc1xudmFyIHJlcXVpcmVfRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLkZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyA9IHZvaWQgMDtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzID0gaW5zdGFuY2VPZkZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cztcblx0ZXhwb3J0cy5GdWxmaWxsbWVudERpc3BsYXlTdGF0dXNGcm9tSlNPTiA9IEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1c0Zyb21KU09OO1xuXHRleHBvcnRzLkZ1bGZpbGxtZW50RGlzcGxheVN0YXR1c0Zyb21KU09OVHlwZWQgPSBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXNGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLkZ1bGZpbGxtZW50RGlzcGxheVN0YXR1c1RvSlNPTiA9IEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1c1RvSlNPTjtcblx0ZXhwb3J0cy5GdWxmaWxsbWVudERpc3BsYXlTdGF0dXNUb0pTT05UeXBlZCA9IEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1c1RvSlNPTlR5cGVkO1xuXHQvKipcblx0KlxuXHQqIEBleHBvcnRcblx0KiBAZW51bSB7c3RyaW5nfVxuXHQqL1xuXHR2YXIgRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzO1xuXHQoZnVuY3Rpb24oRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDEpIHtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIkFUVEVNUFRFRF9ERUxJVkVSWVwiXSA9IFwiQXR0ZW1wdGVkIGRlbGl2ZXJ5XCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJDQU5DRUxFRFwiXSA9IFwiQ2FuY2VsZWRcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIkNPTkZJUk1FRFwiXSA9IFwiQ29uZmlybWVkXCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJERUxJVkVSRURcIl0gPSBcIkRlbGl2ZXJlZFwiO1xuXHRcdEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyQxW1wiRkFJTFVSRVwiXSA9IFwiRmFpbHVyZVwiO1xuXHRcdEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyQxW1wiRlVMRklMTEVEXCJdID0gXCJGdWxmaWxsZWRcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIklOX1RSQU5TSVRcIl0gPSBcIkluIHRyYW5zaXRcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIkxBQkVMX1BSSU5URURcIl0gPSBcIkxhYmVsIHByaW50ZWRcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIkxBQkVMX1BVUkNIQVNFRFwiXSA9IFwiTGFiZWwgcHVyY2hhc2VkXCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJMQUJFTF9WT0lERURcIl0gPSBcIkxhYmVsIHZvaWRlZFwiO1xuXHRcdEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyQxW1wiTUFSS0VEX0FTX0ZVTEZJTExFRFwiXSA9IFwiTWFya2VkIGFzIGZ1bGZpbGxlZFwiO1xuXHRcdEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyQxW1wiTk9UX0RFTElWRVJFRFwiXSA9IFwiTm90IGRlbGl2ZXJlZFwiO1xuXHRcdEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyQxW1wiT1VUX0ZPUl9ERUxJVkVSWVwiXSA9IFwiT3V0IGZvciBkZWxpdmVyeVwiO1xuXHRcdEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyQxW1wiUElDS0VEX1VQXCJdID0gXCJQaWNrZWQgdXBcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIlJFQURZX0ZPUl9QSUNLVVBcIl0gPSBcIlJlYWR5IGZvciBwaWNrdXBcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIlNVQk1JVFRFRFwiXSA9IFwiU3VibWl0dGVkXCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJJTl9QUk9HUkVTU1wiXSA9IFwiSW4gcHJvZ3Jlc3NcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIk9OX0hPTERcIl0gPSBcIk9uIGhvbGRcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIk9QRU5cIl0gPSBcIk9wZW5cIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIlBBUlRJQUxMWV9GVUxGSUxMRURcIl0gPSBcIlBhcnRpYWxseSBmdWxmaWxsZWRcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIlBFTkRJTkdfRlVMRklMTE1FTlRcIl0gPSBcIlBlbmRpbmcgZnVsZmlsbG1lbnRcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIlJFUVVFU1RfREVDTElORURcIl0gPSBcIlJlcXVlc3QgZGVjbGluZWRcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIlJFU1RPQ0tFRFwiXSA9IFwiUmVzdG9ja2VkXCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJTQ0hFRFVMRURcIl0gPSBcIlNjaGVkdWxlZFwiO1xuXHRcdEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyQxW1wiVU5GVUxGSUxMRURcIl0gPSBcIlVuZnVsZmlsbGVkXCI7XG5cdH0pKEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyB8fCAoZXhwb3J0cy5GdWxmaWxsbWVudERpc3BsYXlTdGF0dXMgPSBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMgPSB7fSkpO1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzKHZhbHVlKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cywga2V5KSkge1xuXHRcdFx0aWYgKEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1c1trZXldID09PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRmdW5jdGlvbiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXNGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1c0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1c0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdHJldHVybiBqc29uO1xuXHR9XG5cdGZ1bmN0aW9uIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1c1RvSlNPTih2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRmdW5jdGlvbiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXNUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvR2VuZXJhdGlvblBhcmFtcy5qc1xudmFyIHJlcXVpcmVfR2VuZXJhdGlvblBhcmFtcyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0dlbmVyYXRpb25QYXJhbXMuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkdlbmVyYXRpb25QYXJhbXMgPSBpbnN0YW5jZU9mR2VuZXJhdGlvblBhcmFtcztcblx0ZXhwb3J0cy5HZW5lcmF0aW9uUGFyYW1zRnJvbUpTT04gPSBHZW5lcmF0aW9uUGFyYW1zRnJvbUpTT047XG5cdGV4cG9ydHMuR2VuZXJhdGlvblBhcmFtc0Zyb21KU09OVHlwZWQgPSBHZW5lcmF0aW9uUGFyYW1zRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5HZW5lcmF0aW9uUGFyYW1zVG9KU09OID0gR2VuZXJhdGlvblBhcmFtc1RvSlNPTjtcblx0ZXhwb3J0cy5HZW5lcmF0aW9uUGFyYW1zVG9KU09OVHlwZWQgPSBHZW5lcmF0aW9uUGFyYW1zVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIEdlbmVyYXRpb25QYXJhbXMgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mR2VuZXJhdGlvblBhcmFtcyh2YWx1ZSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIEdlbmVyYXRpb25QYXJhbXNGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEdlbmVyYXRpb25QYXJhbXNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBHZW5lcmF0aW9uUGFyYW1zRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwibWF4X3Rva2Vuc1wiOiBqc29uW1wibWF4X3Rva2Vuc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm1heF90b2tlbnNcIl0sXG5cdFx0XHRcIm1vZGVsXCI6IGpzb25bXCJtb2RlbFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm1vZGVsXCJdLFxuXHRcdFx0XCJudW1fc3VnZ2VzdGlvbnNcIjoganNvbltcIm51bV9zdWdnZXN0aW9uc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm51bV9zdWdnZXN0aW9uc1wiXSxcblx0XHRcdFwicmVzcG9uc2VfY2FjaGluZ1wiOiBqc29uW1wicmVzcG9uc2VfY2FjaGluZ1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInJlc3BvbnNlX2NhY2hpbmdcIl0sXG5cdFx0XHRcInJlc3BvbnNlX3N5c3RlbV9wcm9tcHRcIjoganNvbltcInJlc3BvbnNlX3N5c3RlbV9wcm9tcHRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJyZXNwb25zZV9zeXN0ZW1fcHJvbXB0XCJdLFxuXHRcdFx0XCJzdG9wXCI6IGpzb25bXCJzdG9wXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wic3RvcFwiXSxcblx0XHRcdFwic3RyZWFtXCI6IGpzb25bXCJzdHJlYW1cIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJzdHJlYW1cIl0sXG5cdFx0XHRcInN1Z2dlc3Rpb25fc3lzdGVtX3Byb21wdFwiOiBqc29uW1wic3VnZ2VzdGlvbl9zeXN0ZW1fcHJvbXB0XCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wic3VnZ2VzdGlvbl9zeXN0ZW1fcHJvbXB0XCJdLFxuXHRcdFx0XCJ0ZW1wZXJhdHVyZVwiOiBqc29uW1widGVtcGVyYXR1cmVcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJ0ZW1wZXJhdHVyZVwiXSxcblx0XHRcdFwidG9wX3BcIjoganNvbltcInRvcF9wXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1widG9wX3BcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIEdlbmVyYXRpb25QYXJhbXNUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBHZW5lcmF0aW9uUGFyYW1zVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEdlbmVyYXRpb25QYXJhbXNUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJtYXhfdG9rZW5zXCI6IHZhbHVlW1wibWF4X3Rva2Vuc1wiXSxcblx0XHRcdFwibW9kZWxcIjogdmFsdWVbXCJtb2RlbFwiXSxcblx0XHRcdFwibnVtX3N1Z2dlc3Rpb25zXCI6IHZhbHVlW1wibnVtX3N1Z2dlc3Rpb25zXCJdLFxuXHRcdFx0XCJyZXNwb25zZV9jYWNoaW5nXCI6IHZhbHVlW1wicmVzcG9uc2VfY2FjaGluZ1wiXSxcblx0XHRcdFwicmVzcG9uc2Vfc3lzdGVtX3Byb21wdFwiOiB2YWx1ZVtcInJlc3BvbnNlX3N5c3RlbV9wcm9tcHRcIl0sXG5cdFx0XHRcInN0b3BcIjogdmFsdWVbXCJzdG9wXCJdLFxuXHRcdFx0XCJzdHJlYW1cIjogdmFsdWVbXCJzdHJlYW1cIl0sXG5cdFx0XHRcInN1Z2dlc3Rpb25fc3lzdGVtX3Byb21wdFwiOiB2YWx1ZVtcInN1Z2dlc3Rpb25fc3lzdGVtX3Byb21wdFwiXSxcblx0XHRcdFwidGVtcGVyYXR1cmVcIjogdmFsdWVbXCJ0ZW1wZXJhdHVyZVwiXSxcblx0XHRcdFwidG9wX3BcIjogdmFsdWVbXCJ0b3BfcFwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0dldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdC5qc1xudmFyIHJlcXVpcmVfR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZHZXRDb252ZXJzYXRpb25NZXNzYWdlc1JlcXVlc3QgPSBpbnN0YW5jZU9mR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0O1xuXHRleHBvcnRzLkdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdEZyb21KU09OID0gR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0RnJvbUpTT047XG5cdGV4cG9ydHMuR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0RnJvbUpTT05UeXBlZCA9IEdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdEZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0VG9KU09OID0gR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0VG9KU09OO1xuXHRleHBvcnRzLkdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdFRvSlNPTlR5cGVkID0gR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0VG9KU09OVHlwZWQ7XG5cdGNvbnN0IEN1c3RvbWVyU2VydmljZVByb3ZpZGVyXzEkMiA9IHJlcXVpcmVfQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0IGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdCh2YWx1ZSkge1xuXHRcdGlmICghKFwiY29udmVyc2F0aW9uX2lkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY29udmVyc2F0aW9uX2lkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBHZXRDb252ZXJzYXRpb25NZXNzYWdlc1JlcXVlc3RGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvbnZlcnNhdGlvbl9pZFwiOiBqc29uW1wiY29udmVyc2F0aW9uX2lkXCJdLFxuXHRcdFx0XCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCI6IGpzb25bXCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCJdID09IG51bGwgPyB2b2lkIDAgOiAoMCwgQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJfMSQyLkN1c3RvbWVyU2VydmljZVByb3ZpZGVyRnJvbUpTT04pKGpzb25bXCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCJdKVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0VG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0VG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdFRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvbnZlcnNhdGlvbl9pZFwiOiB2YWx1ZVtcImNvbnZlcnNhdGlvbl9pZFwiXSxcblx0XHRcdFwiY3VzdG9tZXJfc2VydmljZV9wcm92aWRlclwiOiAoMCwgQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJfMSQyLkN1c3RvbWVyU2VydmljZVByb3ZpZGVyVG9KU09OKSh2YWx1ZVtcImN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXJcIl0pXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvSXNCdXNpbmVzc0hvdXJzUmVxdWVzdC5qc1xudmFyIHJlcXVpcmVfSXNCdXNpbmVzc0hvdXJzUmVxdWVzdCA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0lzQnVzaW5lc3NIb3Vyc1JlcXVlc3QuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZklzQnVzaW5lc3NIb3Vyc1JlcXVlc3QgPSBpbnN0YW5jZU9mSXNCdXNpbmVzc0hvdXJzUmVxdWVzdDtcblx0ZXhwb3J0cy5Jc0J1c2luZXNzSG91cnNSZXF1ZXN0RnJvbUpTT04gPSBJc0J1c2luZXNzSG91cnNSZXF1ZXN0RnJvbUpTT047XG5cdGV4cG9ydHMuSXNCdXNpbmVzc0hvdXJzUmVxdWVzdEZyb21KU09OVHlwZWQgPSBJc0J1c2luZXNzSG91cnNSZXF1ZXN0RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5Jc0J1c2luZXNzSG91cnNSZXF1ZXN0VG9KU09OID0gSXNCdXNpbmVzc0hvdXJzUmVxdWVzdFRvSlNPTjtcblx0ZXhwb3J0cy5Jc0J1c2luZXNzSG91cnNSZXF1ZXN0VG9KU09OVHlwZWQgPSBJc0J1c2luZXNzSG91cnNSZXF1ZXN0VG9KU09OVHlwZWQ7XG5cdGNvbnN0IEN1c3RvbWVyU2VydmljZVByb3ZpZGVyXzEkMSA9IHJlcXVpcmVfQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgSXNCdXNpbmVzc0hvdXJzUmVxdWVzdCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZJc0J1c2luZXNzSG91cnNSZXF1ZXN0KHZhbHVlKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gSXNCdXNpbmVzc0hvdXJzUmVxdWVzdEZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gSXNCdXNpbmVzc0hvdXJzUmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIElzQnVzaW5lc3NIb3Vyc1JlcXVlc3RGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4geyBcImN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXJcIjoganNvbltcImN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXJcIl0gPT0gbnVsbCA/IHZvaWQgMCA6ICgwLCBDdXN0b21lclNlcnZpY2VQcm92aWRlcl8xJDEuQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJGcm9tSlNPTikoanNvbltcImN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXJcIl0pIH07XG5cdH1cblx0ZnVuY3Rpb24gSXNCdXNpbmVzc0hvdXJzUmVxdWVzdFRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIElzQnVzaW5lc3NIb3Vyc1JlcXVlc3RUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gSXNCdXNpbmVzc0hvdXJzUmVxdWVzdFRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7IFwiY3VzdG9tZXJfc2VydmljZV9wcm92aWRlclwiOiAoMCwgQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJfMSQxLkN1c3RvbWVyU2VydmljZVByb3ZpZGVyVG9KU09OKSh2YWx1ZVtcImN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXJcIl0pIH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0lzQnVzaW5lc3NIb3Vyc1Jlc3BvbnNlLmpzXG52YXIgcmVxdWlyZV9Jc0J1c2luZXNzSG91cnNSZXNwb25zZSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0lzQnVzaW5lc3NIb3Vyc1Jlc3BvbnNlLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZJc0J1c2luZXNzSG91cnNSZXNwb25zZSA9IGluc3RhbmNlT2ZJc0J1c2luZXNzSG91cnNSZXNwb25zZTtcblx0ZXhwb3J0cy5Jc0J1c2luZXNzSG91cnNSZXNwb25zZUZyb21KU09OID0gSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2VGcm9tSlNPTjtcblx0ZXhwb3J0cy5Jc0J1c2luZXNzSG91cnNSZXNwb25zZUZyb21KU09OVHlwZWQgPSBJc0J1c2luZXNzSG91cnNSZXNwb25zZUZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2VUb0pTT04gPSBJc0J1c2luZXNzSG91cnNSZXNwb25zZVRvSlNPTjtcblx0ZXhwb3J0cy5Jc0J1c2luZXNzSG91cnNSZXNwb25zZVRvSlNPTlR5cGVkID0gSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2VUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2UgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2UodmFsdWUpIHtcblx0XHRpZiAoIShcImlzX2J1c2luZXNzX2hvdXJzXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaXNfYnVzaW5lc3NfaG91cnNcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIElzQnVzaW5lc3NIb3Vyc1Jlc3BvbnNlRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBJc0J1c2luZXNzSG91cnNSZXNwb25zZUZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIElzQnVzaW5lc3NIb3Vyc1Jlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiZGV0YWlsc1wiOiBqc29uW1wiZGV0YWlsc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImRldGFpbHNcIl0sXG5cdFx0XHRcImlzX2J1c2luZXNzX2hvdXJzXCI6IGpzb25bXCJpc19idXNpbmVzc19ob3Vyc1wiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2VUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBJc0J1c2luZXNzSG91cnNSZXNwb25zZVRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBJc0J1c2luZXNzSG91cnNSZXNwb25zZVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImRldGFpbHNcIjogdmFsdWVbXCJkZXRhaWxzXCJdLFxuXHRcdFx0XCJpc19idXNpbmVzc19ob3Vyc1wiOiB2YWx1ZVtcImlzX2J1c2luZXNzX2hvdXJzXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvTGFiZWxWYWx1ZS5qc1xudmFyIHJlcXVpcmVfTGFiZWxWYWx1ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0xhYmVsVmFsdWUuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkxhYmVsVmFsdWUgPSBpbnN0YW5jZU9mTGFiZWxWYWx1ZTtcblx0ZXhwb3J0cy5MYWJlbFZhbHVlRnJvbUpTT04gPSBMYWJlbFZhbHVlRnJvbUpTT047XG5cdGV4cG9ydHMuTGFiZWxWYWx1ZUZyb21KU09OVHlwZWQgPSBMYWJlbFZhbHVlRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5MYWJlbFZhbHVlVG9KU09OID0gTGFiZWxWYWx1ZVRvSlNPTjtcblx0ZXhwb3J0cy5MYWJlbFZhbHVlVG9KU09OVHlwZWQgPSBMYWJlbFZhbHVlVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIExhYmVsVmFsdWUgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mTGFiZWxWYWx1ZSh2YWx1ZSkge1xuXHRcdGlmICghKFwibGFiZWxcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJsYWJlbFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJ2YWx1ZVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInZhbHVlXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBMYWJlbFZhbHVlRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBMYWJlbFZhbHVlRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gTGFiZWxWYWx1ZUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImxhYmVsXCI6IGpzb25bXCJsYWJlbFwiXSxcblx0XHRcdFwidmFsdWVcIjoganNvbltcInZhbHVlXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBMYWJlbFZhbHVlVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gTGFiZWxWYWx1ZVRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBMYWJlbFZhbHVlVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwibGFiZWxcIjogdmFsdWVbXCJsYWJlbFwiXSxcblx0XHRcdFwidmFsdWVcIjogdmFsdWVbXCJ2YWx1ZVwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1VzZXJFdmVudENhdGVnb3J5LmpzXG52YXIgcmVxdWlyZV9Vc2VyRXZlbnRDYXRlZ29yeSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1VzZXJFdmVudENhdGVnb3J5LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLlVzZXJFdmVudENhdGVnb3J5ID0gdm9pZCAwO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZVc2VyRXZlbnRDYXRlZ29yeSA9IGluc3RhbmNlT2ZVc2VyRXZlbnRDYXRlZ29yeTtcblx0ZXhwb3J0cy5Vc2VyRXZlbnRDYXRlZ29yeUZyb21KU09OID0gVXNlckV2ZW50Q2F0ZWdvcnlGcm9tSlNPTjtcblx0ZXhwb3J0cy5Vc2VyRXZlbnRDYXRlZ29yeUZyb21KU09OVHlwZWQgPSBVc2VyRXZlbnRDYXRlZ29yeUZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuVXNlckV2ZW50Q2F0ZWdvcnlUb0pTT04gPSBVc2VyRXZlbnRDYXRlZ29yeVRvSlNPTjtcblx0ZXhwb3J0cy5Vc2VyRXZlbnRDYXRlZ29yeVRvSlNPTlR5cGVkID0gVXNlckV2ZW50Q2F0ZWdvcnlUb0pTT05UeXBlZDtcblx0LyoqXG5cdCpcblx0KiBAZXhwb3J0XG5cdCogQGVudW0ge3N0cmluZ31cblx0Ki9cblx0dmFyIFVzZXJFdmVudENhdGVnb3J5O1xuXHQoZnVuY3Rpb24oVXNlckV2ZW50Q2F0ZWdvcnkkMSkge1xuXHRcdFVzZXJFdmVudENhdGVnb3J5JDFbXCJBcHBMb2FkZWRcIl0gPSBcImFwcF9sb2FkZWRcIjtcblx0XHRVc2VyRXZlbnRDYXRlZ29yeSQxW1wiU2VhcmNoXCJdID0gXCJzZWFyY2hcIjtcblx0XHRVc2VyRXZlbnRDYXRlZ29yeSQxW1wiU3VnZ2VzdGlvbkNsaWNrZWRcIl0gPSBcInN1Z2dlc3Rpb25fY2xpY2tlZFwiO1xuXHRcdFVzZXJFdmVudENhdGVnb3J5JDFbXCJRdWVyeVR5cGVkXCJdID0gXCJxdWVyeV90eXBlZFwiO1xuXHRcdFVzZXJFdmVudENhdGVnb3J5JDFbXCJBcHBVbmxvYWRlZFwiXSA9IFwiYXBwX3VubG9hZGVkXCI7XG5cdFx0VXNlckV2ZW50Q2F0ZWdvcnkkMVtcIlBkcFZpc2l0XCJdID0gXCJwZHBfdmlzaXRcIjtcblx0XHRVc2VyRXZlbnRDYXRlZ29yeSQxW1wiUGxwVmlzaXRcIl0gPSBcInBscF92aXNpdFwiO1xuXHRcdFVzZXJFdmVudENhdGVnb3J5JDFbXCJBZGRUb0NhcnRcIl0gPSBcImFkZF90b19jYXJ0XCI7XG5cdFx0VXNlckV2ZW50Q2F0ZWdvcnkkMVtcIkV4aXRTZWFyY2hcIl0gPSBcImV4aXRfc2VhcmNoXCI7XG5cdFx0VXNlckV2ZW50Q2F0ZWdvcnkkMVtcIlBhZ2VWaXNpdFwiXSA9IFwicGFnZV92aXNpdFwiO1xuXHRcdFVzZXJFdmVudENhdGVnb3J5JDFbXCJGb3JtU3VibWl0dGVkXCJdID0gXCJmb3JtX3N1Ym1pdHRlZFwiO1xuXHR9KShVc2VyRXZlbnRDYXRlZ29yeSB8fCAoZXhwb3J0cy5Vc2VyRXZlbnRDYXRlZ29yeSA9IFVzZXJFdmVudENhdGVnb3J5ID0ge30pKTtcblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlVzZXJFdmVudENhdGVnb3J5KHZhbHVlKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gVXNlckV2ZW50Q2F0ZWdvcnkpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXNlckV2ZW50Q2F0ZWdvcnksIGtleSkpIHtcblx0XHRcdGlmIChVc2VyRXZlbnRDYXRlZ29yeVtrZXldID09PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRmdW5jdGlvbiBVc2VyRXZlbnRDYXRlZ29yeUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVXNlckV2ZW50Q2F0ZWdvcnlGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBVc2VyRXZlbnRDYXRlZ29yeUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdHJldHVybiBqc29uO1xuXHR9XG5cdGZ1bmN0aW9uIFVzZXJFdmVudENhdGVnb3J5VG9KU09OKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdGZ1bmN0aW9uIFVzZXJFdmVudENhdGVnb3J5VG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1BEUEF0dHJpYnV0ZXMuanNcbnZhciByZXF1aXJlX1BEUEF0dHJpYnV0ZXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9QRFBBdHRyaWJ1dGVzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZQRFBBdHRyaWJ1dGVzID0gaW5zdGFuY2VPZlBEUEF0dHJpYnV0ZXM7XG5cdGV4cG9ydHMuUERQQXR0cmlidXRlc0Zyb21KU09OID0gUERQQXR0cmlidXRlc0Zyb21KU09OO1xuXHRleHBvcnRzLlBEUEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkID0gUERQQXR0cmlidXRlc0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuUERQQXR0cmlidXRlc1RvSlNPTiA9IFBEUEF0dHJpYnV0ZXNUb0pTT047XG5cdGV4cG9ydHMuUERQQXR0cmlidXRlc1RvSlNPTlR5cGVkID0gUERQQXR0cmlidXRlc1RvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBQRFBBdHRyaWJ1dGVzIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlBEUEF0dHJpYnV0ZXModmFsdWUpIHtcblx0XHRpZiAoIShcInByb2R1Y3RfaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJwcm9kdWN0X2lkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBQRFBBdHRyaWJ1dGVzRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBQRFBBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUERQQXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcInBhcmVudF9wcm9kdWN0X2lkXCI6IGpzb25bXCJwYXJlbnRfcHJvZHVjdF9pZFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInBhcmVudF9wcm9kdWN0X2lkXCJdLFxuXHRcdFx0XCJwcm9kdWN0X2lkXCI6IGpzb25bXCJwcm9kdWN0X2lkXCJdLFxuXHRcdFx0XCJ1cmxcIjoganNvbltcInVybFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInVybFwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gUERQQXR0cmlidXRlc1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFBEUEF0dHJpYnV0ZXNUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUERQQXR0cmlidXRlc1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcInBhcmVudF9wcm9kdWN0X2lkXCI6IHZhbHVlW1wicGFyZW50X3Byb2R1Y3RfaWRcIl0sXG5cdFx0XHRcInByb2R1Y3RfaWRcIjogdmFsdWVbXCJwcm9kdWN0X2lkXCJdLFxuXHRcdFx0XCJ1cmxcIjogdmFsdWVbXCJ1cmxcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9QTFBBdHRyaWJ1dGVDYXRlZ29yeS5qc1xudmFyIHJlcXVpcmVfUExQQXR0cmlidXRlQ2F0ZWdvcnkgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9QTFBBdHRyaWJ1dGVDYXRlZ29yeS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5QTFBBdHRyaWJ1dGVDYXRlZ29yeSA9IHZvaWQgMDtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mUExQQXR0cmlidXRlQ2F0ZWdvcnkgPSBpbnN0YW5jZU9mUExQQXR0cmlidXRlQ2F0ZWdvcnk7XG5cdGV4cG9ydHMuUExQQXR0cmlidXRlQ2F0ZWdvcnlGcm9tSlNPTiA9IFBMUEF0dHJpYnV0ZUNhdGVnb3J5RnJvbUpTT047XG5cdGV4cG9ydHMuUExQQXR0cmlidXRlQ2F0ZWdvcnlGcm9tSlNPTlR5cGVkID0gUExQQXR0cmlidXRlQ2F0ZWdvcnlGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlBMUEF0dHJpYnV0ZUNhdGVnb3J5VG9KU09OID0gUExQQXR0cmlidXRlQ2F0ZWdvcnlUb0pTT047XG5cdGV4cG9ydHMuUExQQXR0cmlidXRlQ2F0ZWdvcnlUb0pTT05UeXBlZCA9IFBMUEF0dHJpYnV0ZUNhdGVnb3J5VG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqXG5cdCogQGV4cG9ydFxuXHQqIEBlbnVtIHtzdHJpbmd9XG5cdCovXG5cdHZhciBQTFBBdHRyaWJ1dGVDYXRlZ29yeTtcblx0KGZ1bmN0aW9uKFBMUEF0dHJpYnV0ZUNhdGVnb3J5JDEpIHtcblx0XHRQTFBBdHRyaWJ1dGVDYXRlZ29yeSQxW1wiVXJsXCJdID0gXCJ1cmxcIjtcblx0XHRQTFBBdHRyaWJ1dGVDYXRlZ29yeSQxW1wiSWRcIl0gPSBcImlkXCI7XG5cdH0pKFBMUEF0dHJpYnV0ZUNhdGVnb3J5IHx8IChleHBvcnRzLlBMUEF0dHJpYnV0ZUNhdGVnb3J5ID0gUExQQXR0cmlidXRlQ2F0ZWdvcnkgPSB7fSkpO1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mUExQQXR0cmlidXRlQ2F0ZWdvcnkodmFsdWUpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBQTFBBdHRyaWJ1dGVDYXRlZ29yeSkgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChQTFBBdHRyaWJ1dGVDYXRlZ29yeSwga2V5KSkge1xuXHRcdFx0aWYgKFBMUEF0dHJpYnV0ZUNhdGVnb3J5W2tleV0gPT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGZ1bmN0aW9uIFBMUEF0dHJpYnV0ZUNhdGVnb3J5RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBQTFBBdHRyaWJ1dGVDYXRlZ29yeUZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFBMUEF0dHJpYnV0ZUNhdGVnb3J5RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0cmV0dXJuIGpzb247XG5cdH1cblx0ZnVuY3Rpb24gUExQQXR0cmlidXRlQ2F0ZWdvcnlUb0pTT04odmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0ZnVuY3Rpb24gUExQQXR0cmlidXRlQ2F0ZWdvcnlUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUExQSWRBdHRyaWJ1dGVzLmpzXG52YXIgcmVxdWlyZV9QTFBJZEF0dHJpYnV0ZXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9QTFBJZEF0dHJpYnV0ZXMuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlBMUElkQXR0cmlidXRlcyA9IGluc3RhbmNlT2ZQTFBJZEF0dHJpYnV0ZXM7XG5cdGV4cG9ydHMuUExQSWRBdHRyaWJ1dGVzRnJvbUpTT04gPSBQTFBJZEF0dHJpYnV0ZXNGcm9tSlNPTjtcblx0ZXhwb3J0cy5QTFBJZEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkID0gUExQSWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5QTFBJZEF0dHJpYnV0ZXNUb0pTT04gPSBQTFBJZEF0dHJpYnV0ZXNUb0pTT047XG5cdGV4cG9ydHMuUExQSWRBdHRyaWJ1dGVzVG9KU09OVHlwZWQgPSBQTFBJZEF0dHJpYnV0ZXNUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgUExQSWRBdHRyaWJ1dGVzIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlBMUElkQXR0cmlidXRlcyh2YWx1ZSkge1xuXHRcdGlmICghKFwiaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJpZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gUExQSWRBdHRyaWJ1dGVzRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBQTFBJZEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBQTFBJZEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4geyBcImlkXCI6IGpzb25bXCJpZFwiXSB9O1xuXHR9XG5cdGZ1bmN0aW9uIFBMUElkQXR0cmlidXRlc1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFBMUElkQXR0cmlidXRlc1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBQTFBJZEF0dHJpYnV0ZXNUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4geyBcImlkXCI6IHZhbHVlW1wiaWRcIl0gfTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUExQVXJsQXR0cmlidXRlcy5qc1xudmFyIHJlcXVpcmVfUExQVXJsQXR0cmlidXRlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1BMUFVybEF0dHJpYnV0ZXMuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlBMUFVybEF0dHJpYnV0ZXMgPSBpbnN0YW5jZU9mUExQVXJsQXR0cmlidXRlcztcblx0ZXhwb3J0cy5QTFBVcmxBdHRyaWJ1dGVzRnJvbUpTT04gPSBQTFBVcmxBdHRyaWJ1dGVzRnJvbUpTT047XG5cdGV4cG9ydHMuUExQVXJsQXR0cmlidXRlc0Zyb21KU09OVHlwZWQgPSBQTFBVcmxBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5QTFBVcmxBdHRyaWJ1dGVzVG9KU09OID0gUExQVXJsQXR0cmlidXRlc1RvSlNPTjtcblx0ZXhwb3J0cy5QTFBVcmxBdHRyaWJ1dGVzVG9KU09OVHlwZWQgPSBQTFBVcmxBdHRyaWJ1dGVzVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFBMUFVybEF0dHJpYnV0ZXMgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mUExQVXJsQXR0cmlidXRlcyh2YWx1ZSkge1xuXHRcdGlmICghKFwidXJsXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1widXJsXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBQTFBVcmxBdHRyaWJ1dGVzRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBQTFBVcmxBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUExQVXJsQXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7IFwidXJsXCI6IGpzb25bXCJ1cmxcIl0gfTtcblx0fVxuXHRmdW5jdGlvbiBQTFBVcmxBdHRyaWJ1dGVzVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUExQVXJsQXR0cmlidXRlc1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBQTFBVcmxBdHRyaWJ1dGVzVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHsgXCJ1cmxcIjogdmFsdWVbXCJ1cmxcIl0gfTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUExQQXR0cmlidXRlc0F0dHJpYnV0ZXMuanNcbnZhciByZXF1aXJlX1BMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUExQQXR0cmlidXRlc0F0dHJpYnV0ZXMuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuUExQQXR0cmlidXRlc0F0dHJpYnV0ZXNGcm9tSlNPTiA9IFBMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzRnJvbUpTT047XG5cdGV4cG9ydHMuUExQQXR0cmlidXRlc0F0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkID0gUExQQXR0cmlidXRlc0F0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlBMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzVG9KU09OID0gUExQQXR0cmlidXRlc0F0dHJpYnV0ZXNUb0pTT047XG5cdGV4cG9ydHMuUExQQXR0cmlidXRlc0F0dHJpYnV0ZXNUb0pTT05UeXBlZCA9IFBMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzVG9KU09OVHlwZWQ7XG5cdGNvbnN0IFBMUElkQXR0cmlidXRlc18xID0gcmVxdWlyZV9QTFBJZEF0dHJpYnV0ZXMoKTtcblx0Y29uc3QgUExQVXJsQXR0cmlidXRlc18xID0gcmVxdWlyZV9QTFBVcmxBdHRyaWJ1dGVzKCk7XG5cdGZ1bmN0aW9uIFBMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBQTFBBdHRyaWJ1dGVzQXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFBMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0aWYgKCgwLCBQTFBJZEF0dHJpYnV0ZXNfMS5pbnN0YW5jZU9mUExQSWRBdHRyaWJ1dGVzKShqc29uKSkgcmV0dXJuICgwLCBQTFBJZEF0dHJpYnV0ZXNfMS5QTFBJZEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKShqc29uLCB0cnVlKTtcblx0XHRpZiAoKDAsIFBMUFVybEF0dHJpYnV0ZXNfMS5pbnN0YW5jZU9mUExQVXJsQXR0cmlidXRlcykoanNvbikpIHJldHVybiAoMCwgUExQVXJsQXR0cmlidXRlc18xLlBMUFVybEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKShqc29uLCB0cnVlKTtcblx0XHRyZXR1cm4ge307XG5cdH1cblx0ZnVuY3Rpb24gUExQQXR0cmlidXRlc0F0dHJpYnV0ZXNUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBQTFBBdHRyaWJ1dGVzQXR0cmlidXRlc1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBQTFBBdHRyaWJ1dGVzQXR0cmlidXRlc1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdGlmICgoMCwgUExQSWRBdHRyaWJ1dGVzXzEuaW5zdGFuY2VPZlBMUElkQXR0cmlidXRlcykodmFsdWUpKSByZXR1cm4gKDAsIFBMUElkQXR0cmlidXRlc18xLlBMUElkQXR0cmlidXRlc1RvSlNPTikodmFsdWUpO1xuXHRcdGlmICgoMCwgUExQVXJsQXR0cmlidXRlc18xLmluc3RhbmNlT2ZQTFBVcmxBdHRyaWJ1dGVzKSh2YWx1ZSkpIHJldHVybiAoMCwgUExQVXJsQXR0cmlidXRlc18xLlBMUFVybEF0dHJpYnV0ZXNUb0pTT04pKHZhbHVlKTtcblx0XHRyZXR1cm4ge307XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1BMUEF0dHJpYnV0ZXMuanNcbnZhciByZXF1aXJlX1BMUEF0dHJpYnV0ZXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9QTFBBdHRyaWJ1dGVzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZQTFBBdHRyaWJ1dGVzID0gaW5zdGFuY2VPZlBMUEF0dHJpYnV0ZXM7XG5cdGV4cG9ydHMuUExQQXR0cmlidXRlc0Zyb21KU09OID0gUExQQXR0cmlidXRlc0Zyb21KU09OO1xuXHRleHBvcnRzLlBMUEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkID0gUExQQXR0cmlidXRlc0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuUExQQXR0cmlidXRlc1RvSlNPTiA9IFBMUEF0dHJpYnV0ZXNUb0pTT047XG5cdGV4cG9ydHMuUExQQXR0cmlidXRlc1RvSlNPTlR5cGVkID0gUExQQXR0cmlidXRlc1RvSlNPTlR5cGVkO1xuXHRjb25zdCBQTFBBdHRyaWJ1dGVDYXRlZ29yeV8xID0gcmVxdWlyZV9QTFBBdHRyaWJ1dGVDYXRlZ29yeSgpO1xuXHRjb25zdCBQTFBBdHRyaWJ1dGVzQXR0cmlidXRlc18xID0gcmVxdWlyZV9QTFBBdHRyaWJ1dGVzQXR0cmlidXRlcygpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBQTFBBdHRyaWJ1dGVzIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlBMUEF0dHJpYnV0ZXModmFsdWUpIHtcblx0XHRpZiAoIShcImF0dHJpYnV0ZXNcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJhdHRyaWJ1dGVzXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImNhdGVnb3J5XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY2F0ZWdvcnlcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFBMUEF0dHJpYnV0ZXNGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFBMUEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBQTFBBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiYXR0cmlidXRlc1wiOiAoMCwgUExQQXR0cmlidXRlc0F0dHJpYnV0ZXNfMS5QTFBBdHRyaWJ1dGVzQXR0cmlidXRlc0Zyb21KU09OKShqc29uW1wiYXR0cmlidXRlc1wiXSksXG5cdFx0XHRcImNhdGVnb3J5XCI6ICgwLCBQTFBBdHRyaWJ1dGVDYXRlZ29yeV8xLlBMUEF0dHJpYnV0ZUNhdGVnb3J5RnJvbUpTT04pKGpzb25bXCJjYXRlZ29yeVwiXSlcblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFBMUEF0dHJpYnV0ZXNUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBQTFBBdHRyaWJ1dGVzVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFBMUEF0dHJpYnV0ZXNUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJhdHRyaWJ1dGVzXCI6ICgwLCBQTFBBdHRyaWJ1dGVzQXR0cmlidXRlc18xLlBMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzVG9KU09OKSh2YWx1ZVtcImF0dHJpYnV0ZXNcIl0pLFxuXHRcdFx0XCJjYXRlZ29yeVwiOiAoMCwgUExQQXR0cmlidXRlQ2F0ZWdvcnlfMS5QTFBBdHRyaWJ1dGVDYXRlZ29yeVRvSlNPTikodmFsdWVbXCJjYXRlZ29yeVwiXSlcblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9QYWdlVmlzaXRDYXRlZ29yeS5qc1xudmFyIHJlcXVpcmVfUGFnZVZpc2l0Q2F0ZWdvcnkgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9QYWdlVmlzaXRDYXRlZ29yeS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5QYWdlVmlzaXRDYXRlZ29yeSA9IHZvaWQgMDtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mUGFnZVZpc2l0Q2F0ZWdvcnkgPSBpbnN0YW5jZU9mUGFnZVZpc2l0Q2F0ZWdvcnk7XG5cdGV4cG9ydHMuUGFnZVZpc2l0Q2F0ZWdvcnlGcm9tSlNPTiA9IFBhZ2VWaXNpdENhdGVnb3J5RnJvbUpTT047XG5cdGV4cG9ydHMuUGFnZVZpc2l0Q2F0ZWdvcnlGcm9tSlNPTlR5cGVkID0gUGFnZVZpc2l0Q2F0ZWdvcnlGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlBhZ2VWaXNpdENhdGVnb3J5VG9KU09OID0gUGFnZVZpc2l0Q2F0ZWdvcnlUb0pTT047XG5cdGV4cG9ydHMuUGFnZVZpc2l0Q2F0ZWdvcnlUb0pTT05UeXBlZCA9IFBhZ2VWaXNpdENhdGVnb3J5VG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqXG5cdCogQGV4cG9ydFxuXHQqIEBlbnVtIHtzdHJpbmd9XG5cdCovXG5cdHZhciBQYWdlVmlzaXRDYXRlZ29yeSQxO1xuXHQoZnVuY3Rpb24oUGFnZVZpc2l0Q2F0ZWdvcnkkMikge1xuXHRcdFBhZ2VWaXNpdENhdGVnb3J5JDJbXCJIZWxwXCJdID0gXCJoZWxwXCI7XG5cdFx0UGFnZVZpc2l0Q2F0ZWdvcnkkMltcIkhvbWVwYWdlXCJdID0gXCJob21lcGFnZVwiO1xuXHRcdFBhZ2VWaXNpdENhdGVnb3J5JDJbXCJPdGhlclwiXSA9IFwib3RoZXJcIjtcblx0XHRQYWdlVmlzaXRDYXRlZ29yeSQyW1wiUHJvZHVjdExpa2VcIl0gPSBcInByb2R1Y3RfbGlrZVwiO1xuXHRcdFBhZ2VWaXNpdENhdGVnb3J5JDJbXCJTZWFyY2hcIl0gPSBcInNlYXJjaFwiO1xuXHR9KShQYWdlVmlzaXRDYXRlZ29yeSQxIHx8IChleHBvcnRzLlBhZ2VWaXNpdENhdGVnb3J5ID0gUGFnZVZpc2l0Q2F0ZWdvcnkkMSA9IHt9KSk7XG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZQYWdlVmlzaXRDYXRlZ29yeSh2YWx1ZSkge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIFBhZ2VWaXNpdENhdGVnb3J5JDEpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUGFnZVZpc2l0Q2F0ZWdvcnkkMSwga2V5KSkge1xuXHRcdFx0aWYgKFBhZ2VWaXNpdENhdGVnb3J5JDFba2V5XSA9PT0gdmFsdWUpIHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0ZnVuY3Rpb24gUGFnZVZpc2l0Q2F0ZWdvcnlGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFBhZ2VWaXNpdENhdGVnb3J5RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUGFnZVZpc2l0Q2F0ZWdvcnlGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRyZXR1cm4ganNvbjtcblx0fVxuXHRmdW5jdGlvbiBQYWdlVmlzaXRDYXRlZ29yeVRvSlNPTih2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRmdW5jdGlvbiBQYWdlVmlzaXRDYXRlZ29yeVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9QYWdlVmlzaXRBdHRyaWJ1dGVzLmpzXG52YXIgcmVxdWlyZV9QYWdlVmlzaXRBdHRyaWJ1dGVzID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUGFnZVZpc2l0QXR0cmlidXRlcy5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mUGFnZVZpc2l0QXR0cmlidXRlcyA9IGluc3RhbmNlT2ZQYWdlVmlzaXRBdHRyaWJ1dGVzO1xuXHRleHBvcnRzLlBhZ2VWaXNpdEF0dHJpYnV0ZXNGcm9tSlNPTiA9IFBhZ2VWaXNpdEF0dHJpYnV0ZXNGcm9tSlNPTjtcblx0ZXhwb3J0cy5QYWdlVmlzaXRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZCA9IFBhZ2VWaXNpdEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlBhZ2VWaXNpdEF0dHJpYnV0ZXNUb0pTT04gPSBQYWdlVmlzaXRBdHRyaWJ1dGVzVG9KU09OO1xuXHRleHBvcnRzLlBhZ2VWaXNpdEF0dHJpYnV0ZXNUb0pTT05UeXBlZCA9IFBhZ2VWaXNpdEF0dHJpYnV0ZXNUb0pTT05UeXBlZDtcblx0Y29uc3QgUGFnZVZpc2l0Q2F0ZWdvcnlfMSA9IHJlcXVpcmVfUGFnZVZpc2l0Q2F0ZWdvcnkoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgUGFnZVZpc2l0QXR0cmlidXRlcyBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZQYWdlVmlzaXRBdHRyaWJ1dGVzKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJwYWdlX3Zpc2l0X2NhdGVnb3J5XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wicGFnZV92aXNpdF9jYXRlZ29yeVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJ1cmxcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJ1cmxcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFBhZ2VWaXNpdEF0dHJpYnV0ZXNGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFBhZ2VWaXNpdEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBQYWdlVmlzaXRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwicGFnZV92aXNpdF9jYXRlZ29yeVwiOiAoMCwgUGFnZVZpc2l0Q2F0ZWdvcnlfMS5QYWdlVmlzaXRDYXRlZ29yeUZyb21KU09OKShqc29uW1wicGFnZV92aXNpdF9jYXRlZ29yeVwiXSksXG5cdFx0XHRcInVybFwiOiBqc29uW1widXJsXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBQYWdlVmlzaXRBdHRyaWJ1dGVzVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUGFnZVZpc2l0QXR0cmlidXRlc1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBQYWdlVmlzaXRBdHRyaWJ1dGVzVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwicGFnZV92aXNpdF9jYXRlZ29yeVwiOiAoMCwgUGFnZVZpc2l0Q2F0ZWdvcnlfMS5QYWdlVmlzaXRDYXRlZ29yeVRvSlNPTikodmFsdWVbXCJwYWdlX3Zpc2l0X2NhdGVnb3J5XCJdKSxcblx0XHRcdFwidXJsXCI6IHZhbHVlW1widXJsXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUXVlcnlUeXBlZEF0dHJpYnV0ZXMuanNcbnZhciByZXF1aXJlX1F1ZXJ5VHlwZWRBdHRyaWJ1dGVzID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUXVlcnlUeXBlZEF0dHJpYnV0ZXMuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlF1ZXJ5VHlwZWRBdHRyaWJ1dGVzID0gaW5zdGFuY2VPZlF1ZXJ5VHlwZWRBdHRyaWJ1dGVzO1xuXHRleHBvcnRzLlF1ZXJ5VHlwZWRBdHRyaWJ1dGVzRnJvbUpTT04gPSBRdWVyeVR5cGVkQXR0cmlidXRlc0Zyb21KU09OO1xuXHRleHBvcnRzLlF1ZXJ5VHlwZWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZCA9IFF1ZXJ5VHlwZWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5RdWVyeVR5cGVkQXR0cmlidXRlc1RvSlNPTiA9IFF1ZXJ5VHlwZWRBdHRyaWJ1dGVzVG9KU09OO1xuXHRleHBvcnRzLlF1ZXJ5VHlwZWRBdHRyaWJ1dGVzVG9KU09OVHlwZWQgPSBRdWVyeVR5cGVkQXR0cmlidXRlc1RvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBRdWVyeVR5cGVkQXR0cmlidXRlcyBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZRdWVyeVR5cGVkQXR0cmlidXRlcyh2YWx1ZSkge1xuXHRcdGlmICghKFwicXVlcnlcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJxdWVyeVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gUXVlcnlUeXBlZEF0dHJpYnV0ZXNGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFF1ZXJ5VHlwZWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUXVlcnlUeXBlZEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4geyBcInF1ZXJ5XCI6IGpzb25bXCJxdWVyeVwiXSB9O1xuXHR9XG5cdGZ1bmN0aW9uIFF1ZXJ5VHlwZWRBdHRyaWJ1dGVzVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUXVlcnlUeXBlZEF0dHJpYnV0ZXNUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUXVlcnlUeXBlZEF0dHJpYnV0ZXNUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4geyBcInF1ZXJ5XCI6IHZhbHVlW1wicXVlcnlcIl0gfTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU2VhcmNoQXR0cmlidXRlcy5qc1xudmFyIHJlcXVpcmVfU2VhcmNoQXR0cmlidXRlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1NlYXJjaEF0dHJpYnV0ZXMuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlNlYXJjaEF0dHJpYnV0ZXMgPSBpbnN0YW5jZU9mU2VhcmNoQXR0cmlidXRlcztcblx0ZXhwb3J0cy5TZWFyY2hBdHRyaWJ1dGVzRnJvbUpTT04gPSBTZWFyY2hBdHRyaWJ1dGVzRnJvbUpTT047XG5cdGV4cG9ydHMuU2VhcmNoQXR0cmlidXRlc0Zyb21KU09OVHlwZWQgPSBTZWFyY2hBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5TZWFyY2hBdHRyaWJ1dGVzVG9KU09OID0gU2VhcmNoQXR0cmlidXRlc1RvSlNPTjtcblx0ZXhwb3J0cy5TZWFyY2hBdHRyaWJ1dGVzVG9KU09OVHlwZWQgPSBTZWFyY2hBdHRyaWJ1dGVzVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFNlYXJjaEF0dHJpYnV0ZXMgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mU2VhcmNoQXR0cmlidXRlcyh2YWx1ZSkge1xuXHRcdGlmICghKFwic2VhcmNoX3Rlcm1cIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJzZWFyY2hfdGVybVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gU2VhcmNoQXR0cmlidXRlc0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU2VhcmNoQXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFNlYXJjaEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJzZWFyY2hfdGVybVwiOiBqc29uW1wic2VhcmNoX3Rlcm1cIl0sXG5cdFx0XHRcInNlbGVjdGVkX2ZpbHRlcnNcIjoganNvbltcInNlbGVjdGVkX2ZpbHRlcnNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJzZWxlY3RlZF9maWx0ZXJzXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBTZWFyY2hBdHRyaWJ1dGVzVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU2VhcmNoQXR0cmlidXRlc1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBTZWFyY2hBdHRyaWJ1dGVzVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwic2VhcmNoX3Rlcm1cIjogdmFsdWVbXCJzZWFyY2hfdGVybVwiXSxcblx0XHRcdFwic2VsZWN0ZWRfZmlsdGVyc1wiOiB2YWx1ZVtcInNlbGVjdGVkX2ZpbHRlcnNcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXMuanNcbnZhciByZXF1aXJlX1N1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1N1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcy5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzID0gaW5zdGFuY2VPZlN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcztcblx0ZXhwb3J0cy5TdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNGcm9tSlNPTiA9IFN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlc0Zyb21KU09OO1xuXHRleHBvcnRzLlN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlc0Zyb21KU09OVHlwZWQgPSBTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlc1RvSlNPTiA9IFN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlc1RvSlNPTjtcblx0ZXhwb3J0cy5TdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNUb0pTT05UeXBlZCA9IFN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlc1RvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXMgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJzdWdnZXN0aW9uX2lkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wic3VnZ2VzdGlvbl9pZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4geyBcInN1Z2dlc3Rpb25faWRcIjoganNvbltcInN1Z2dlc3Rpb25faWRcIl0gfTtcblx0fVxuXHRmdW5jdGlvbiBTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHsgXCJzdWdnZXN0aW9uX2lkXCI6IHZhbHVlW1wic3VnZ2VzdGlvbl9pZFwiXSB9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Vc2VyRXZlbnRBdHRyaWJ1dGVzLmpzXG52YXIgcmVxdWlyZV9Vc2VyRXZlbnRBdHRyaWJ1dGVzID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVXNlckV2ZW50QXR0cmlidXRlcy5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5Vc2VyRXZlbnRBdHRyaWJ1dGVzRnJvbUpTT04gPSBVc2VyRXZlbnRBdHRyaWJ1dGVzRnJvbUpTT047XG5cdGV4cG9ydHMuVXNlckV2ZW50QXR0cmlidXRlc0Zyb21KU09OVHlwZWQgPSBVc2VyRXZlbnRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5Vc2VyRXZlbnRBdHRyaWJ1dGVzVG9KU09OID0gVXNlckV2ZW50QXR0cmlidXRlc1RvSlNPTjtcblx0ZXhwb3J0cy5Vc2VyRXZlbnRBdHRyaWJ1dGVzVG9KU09OVHlwZWQgPSBVc2VyRXZlbnRBdHRyaWJ1dGVzVG9KU09OVHlwZWQ7XG5cdGNvbnN0IEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzXzEgPSByZXF1aXJlX0Zvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzKCk7XG5cdGNvbnN0IFBEUEF0dHJpYnV0ZXNfMSQxID0gcmVxdWlyZV9QRFBBdHRyaWJ1dGVzKCk7XG5cdGNvbnN0IFBMUEF0dHJpYnV0ZXNfMSQxID0gcmVxdWlyZV9QTFBBdHRyaWJ1dGVzKCk7XG5cdGNvbnN0IFBhZ2VWaXNpdEF0dHJpYnV0ZXNfMSA9IHJlcXVpcmVfUGFnZVZpc2l0QXR0cmlidXRlcygpO1xuXHRjb25zdCBRdWVyeVR5cGVkQXR0cmlidXRlc18xID0gcmVxdWlyZV9RdWVyeVR5cGVkQXR0cmlidXRlcygpO1xuXHRjb25zdCBTZWFyY2hBdHRyaWJ1dGVzXzEgPSByZXF1aXJlX1NlYXJjaEF0dHJpYnV0ZXMoKTtcblx0Y29uc3QgU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzXzEgPSByZXF1aXJlX1N1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcygpO1xuXHRmdW5jdGlvbiBVc2VyRXZlbnRBdHRyaWJ1dGVzRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBVc2VyRXZlbnRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVXNlckV2ZW50QXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdGlmICgoMCwgRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXNfMS5pbnN0YW5jZU9mRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXMpKGpzb24pKSByZXR1cm4gKDAsIEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzXzEuRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKShqc29uLCB0cnVlKTtcblx0XHRpZiAoKDAsIFBEUEF0dHJpYnV0ZXNfMSQxLmluc3RhbmNlT2ZQRFBBdHRyaWJ1dGVzKShqc29uKSkgcmV0dXJuICgwLCBQRFBBdHRyaWJ1dGVzXzEkMS5QRFBBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZCkoanNvbiwgdHJ1ZSk7XG5cdFx0aWYgKCgwLCBQTFBBdHRyaWJ1dGVzXzEkMS5pbnN0YW5jZU9mUExQQXR0cmlidXRlcykoanNvbikpIHJldHVybiAoMCwgUExQQXR0cmlidXRlc18xJDEuUExQQXR0cmlidXRlc0Zyb21KU09OVHlwZWQpKGpzb24sIHRydWUpO1xuXHRcdGlmICgoMCwgUGFnZVZpc2l0QXR0cmlidXRlc18xLmluc3RhbmNlT2ZQYWdlVmlzaXRBdHRyaWJ1dGVzKShqc29uKSkgcmV0dXJuICgwLCBQYWdlVmlzaXRBdHRyaWJ1dGVzXzEuUGFnZVZpc2l0QXR0cmlidXRlc0Zyb21KU09OVHlwZWQpKGpzb24sIHRydWUpO1xuXHRcdGlmICgoMCwgUXVlcnlUeXBlZEF0dHJpYnV0ZXNfMS5pbnN0YW5jZU9mUXVlcnlUeXBlZEF0dHJpYnV0ZXMpKGpzb24pKSByZXR1cm4gKDAsIFF1ZXJ5VHlwZWRBdHRyaWJ1dGVzXzEuUXVlcnlUeXBlZEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKShqc29uLCB0cnVlKTtcblx0XHRpZiAoKDAsIFNlYXJjaEF0dHJpYnV0ZXNfMS5pbnN0YW5jZU9mU2VhcmNoQXR0cmlidXRlcykoanNvbikpIHJldHVybiAoMCwgU2VhcmNoQXR0cmlidXRlc18xLlNlYXJjaEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKShqc29uLCB0cnVlKTtcblx0XHRpZiAoKDAsIFN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlc18xLmluc3RhbmNlT2ZTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXMpKGpzb24pKSByZXR1cm4gKDAsIFN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlc18xLlN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlc0Zyb21KU09OVHlwZWQpKGpzb24sIHRydWUpO1xuXHRcdHJldHVybiB7fTtcblx0fVxuXHRmdW5jdGlvbiBVc2VyRXZlbnRBdHRyaWJ1dGVzVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVXNlckV2ZW50QXR0cmlidXRlc1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBVc2VyRXZlbnRBdHRyaWJ1dGVzVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0aWYgKCgwLCBGb3JtU3VibWl0dGVkQXR0cmlidXRlc18xLmluc3RhbmNlT2ZGb3JtU3VibWl0dGVkQXR0cmlidXRlcykodmFsdWUpKSByZXR1cm4gKDAsIEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzXzEuRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXNUb0pTT04pKHZhbHVlKTtcblx0XHRpZiAoKDAsIFBEUEF0dHJpYnV0ZXNfMSQxLmluc3RhbmNlT2ZQRFBBdHRyaWJ1dGVzKSh2YWx1ZSkpIHJldHVybiAoMCwgUERQQXR0cmlidXRlc18xJDEuUERQQXR0cmlidXRlc1RvSlNPTikodmFsdWUpO1xuXHRcdGlmICgoMCwgUExQQXR0cmlidXRlc18xJDEuaW5zdGFuY2VPZlBMUEF0dHJpYnV0ZXMpKHZhbHVlKSkgcmV0dXJuICgwLCBQTFBBdHRyaWJ1dGVzXzEkMS5QTFBBdHRyaWJ1dGVzVG9KU09OKSh2YWx1ZSk7XG5cdFx0aWYgKCgwLCBQYWdlVmlzaXRBdHRyaWJ1dGVzXzEuaW5zdGFuY2VPZlBhZ2VWaXNpdEF0dHJpYnV0ZXMpKHZhbHVlKSkgcmV0dXJuICgwLCBQYWdlVmlzaXRBdHRyaWJ1dGVzXzEuUGFnZVZpc2l0QXR0cmlidXRlc1RvSlNPTikodmFsdWUpO1xuXHRcdGlmICgoMCwgUXVlcnlUeXBlZEF0dHJpYnV0ZXNfMS5pbnN0YW5jZU9mUXVlcnlUeXBlZEF0dHJpYnV0ZXMpKHZhbHVlKSkgcmV0dXJuICgwLCBRdWVyeVR5cGVkQXR0cmlidXRlc18xLlF1ZXJ5VHlwZWRBdHRyaWJ1dGVzVG9KU09OKSh2YWx1ZSk7XG5cdFx0aWYgKCgwLCBTZWFyY2hBdHRyaWJ1dGVzXzEuaW5zdGFuY2VPZlNlYXJjaEF0dHJpYnV0ZXMpKHZhbHVlKSkgcmV0dXJuICgwLCBTZWFyY2hBdHRyaWJ1dGVzXzEuU2VhcmNoQXR0cmlidXRlc1RvSlNPTikodmFsdWUpO1xuXHRcdGlmICgoMCwgU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzXzEuaW5zdGFuY2VPZlN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcykodmFsdWUpKSByZXR1cm4gKDAsIFN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlc18xLlN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlc1RvSlNPTikodmFsdWUpO1xuXHRcdHJldHVybiB7fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVXNlckV2ZW50LmpzXG52YXIgcmVxdWlyZV9Vc2VyRXZlbnQgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Vc2VyRXZlbnQuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlVzZXJFdmVudCA9IGluc3RhbmNlT2ZVc2VyRXZlbnQ7XG5cdGV4cG9ydHMuVXNlckV2ZW50RnJvbUpTT04gPSBVc2VyRXZlbnRGcm9tSlNPTjtcblx0ZXhwb3J0cy5Vc2VyRXZlbnRGcm9tSlNPTlR5cGVkID0gVXNlckV2ZW50RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5Vc2VyRXZlbnRUb0pTT04gPSBVc2VyRXZlbnRUb0pTT047XG5cdGV4cG9ydHMuVXNlckV2ZW50VG9KU09OVHlwZWQgPSBVc2VyRXZlbnRUb0pTT05UeXBlZDtcblx0Y29uc3QgVXNlckV2ZW50Q2F0ZWdvcnlfMSA9IHJlcXVpcmVfVXNlckV2ZW50Q2F0ZWdvcnkoKTtcblx0Y29uc3QgVXNlckV2ZW50QXR0cmlidXRlc18xID0gcmVxdWlyZV9Vc2VyRXZlbnRBdHRyaWJ1dGVzKCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFVzZXJFdmVudCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZVc2VyRXZlbnQodmFsdWUpIHtcblx0XHRpZiAoIShcImNhdGVnb3J5XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY2F0ZWdvcnlcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiY3JlYXRlZF9hdFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNyZWF0ZWRfYXRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiZXZlbnRfaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJldmVudF9pZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gVXNlckV2ZW50RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBVc2VyRXZlbnRGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBVc2VyRXZlbnRGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJhdHRyaWJ1dGVzXCI6IGpzb25bXCJhdHRyaWJ1dGVzXCJdID09IG51bGwgPyB2b2lkIDAgOiAoMCwgVXNlckV2ZW50QXR0cmlidXRlc18xLlVzZXJFdmVudEF0dHJpYnV0ZXNGcm9tSlNPTikoanNvbltcImF0dHJpYnV0ZXNcIl0pLFxuXHRcdFx0XCJjYXRlZ29yeVwiOiAoMCwgVXNlckV2ZW50Q2F0ZWdvcnlfMS5Vc2VyRXZlbnRDYXRlZ29yeUZyb21KU09OKShqc29uW1wiY2F0ZWdvcnlcIl0pLFxuXHRcdFx0XCJjcmVhdGVkX2F0XCI6IGpzb25bXCJjcmVhdGVkX2F0XCJdLFxuXHRcdFx0XCJldmVudF9pZFwiOiBqc29uW1wiZXZlbnRfaWRcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFVzZXJFdmVudFRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFVzZXJFdmVudFRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBVc2VyRXZlbnRUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJhdHRyaWJ1dGVzXCI6ICgwLCBVc2VyRXZlbnRBdHRyaWJ1dGVzXzEuVXNlckV2ZW50QXR0cmlidXRlc1RvSlNPTikodmFsdWVbXCJhdHRyaWJ1dGVzXCJdKSxcblx0XHRcdFwiY2F0ZWdvcnlcIjogKDAsIFVzZXJFdmVudENhdGVnb3J5XzEuVXNlckV2ZW50Q2F0ZWdvcnlUb0pTT04pKHZhbHVlW1wiY2F0ZWdvcnlcIl0pLFxuXHRcdFx0XCJjcmVhdGVkX2F0XCI6IHZhbHVlW1wiY3JlYXRlZF9hdFwiXSxcblx0XHRcdFwiZXZlbnRfaWRcIjogdmFsdWVbXCJldmVudF9pZFwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL05leHRNZXNzYWdlUmVxdWVzdC5qc1xudmFyIHJlcXVpcmVfTmV4dE1lc3NhZ2VSZXF1ZXN0ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvTmV4dE1lc3NhZ2VSZXF1ZXN0LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZOZXh0TWVzc2FnZVJlcXVlc3QgPSBpbnN0YW5jZU9mTmV4dE1lc3NhZ2VSZXF1ZXN0O1xuXHRleHBvcnRzLk5leHRNZXNzYWdlUmVxdWVzdEZyb21KU09OID0gTmV4dE1lc3NhZ2VSZXF1ZXN0RnJvbUpTT047XG5cdGV4cG9ydHMuTmV4dE1lc3NhZ2VSZXF1ZXN0RnJvbUpTT05UeXBlZCA9IE5leHRNZXNzYWdlUmVxdWVzdEZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuTmV4dE1lc3NhZ2VSZXF1ZXN0VG9KU09OID0gTmV4dE1lc3NhZ2VSZXF1ZXN0VG9KU09OO1xuXHRleHBvcnRzLk5leHRNZXNzYWdlUmVxdWVzdFRvSlNPTlR5cGVkID0gTmV4dE1lc3NhZ2VSZXF1ZXN0VG9KU09OVHlwZWQ7XG5cdGNvbnN0IENvbnRleHRfMSQzID0gcmVxdWlyZV9Db250ZXh0KCk7XG5cdGNvbnN0IEdlbmVyYXRpb25QYXJhbXNfMSA9IHJlcXVpcmVfR2VuZXJhdGlvblBhcmFtcygpO1xuXHRjb25zdCBVc2VyRXZlbnRfMSQzID0gcmVxdWlyZV9Vc2VyRXZlbnQoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgTmV4dE1lc3NhZ2VSZXF1ZXN0IGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZk5leHRNZXNzYWdlUmVxdWVzdCh2YWx1ZSkge1xuXHRcdGlmICghKFwiY29udGV4dFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNvbnRleHRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJpZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gTmV4dE1lc3NhZ2VSZXF1ZXN0RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBOZXh0TWVzc2FnZVJlcXVlc3RGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBOZXh0TWVzc2FnZVJlcXVlc3RGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb250ZXh0XCI6ICgwLCBDb250ZXh0XzEkMy5Db250ZXh0RnJvbUpTT04pKGpzb25bXCJjb250ZXh0XCJdKSxcblx0XHRcdFwiZmVhdHVyZV9mbGFnc1wiOiBqc29uW1wiZmVhdHVyZV9mbGFnc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImZlYXR1cmVfZmxhZ3NcIl0sXG5cdFx0XHRcImdlbmVyYXRpb25fcGFyYW1zXCI6IGpzb25bXCJnZW5lcmF0aW9uX3BhcmFtc1wiXSA9PSBudWxsID8gdm9pZCAwIDogKDAsIEdlbmVyYXRpb25QYXJhbXNfMS5HZW5lcmF0aW9uUGFyYW1zRnJvbUpTT04pKGpzb25bXCJnZW5lcmF0aW9uX3BhcmFtc1wiXSksXG5cdFx0XHRcImlkXCI6IGpzb25bXCJpZFwiXSxcblx0XHRcdFwib3JnX2Jhc2VfY29uZmlnX3ZlcnNpb25cIjoganNvbltcIm9yZ19iYXNlX2NvbmZpZ192ZXJzaW9uXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wib3JnX2Jhc2VfY29uZmlnX3ZlcnNpb25cIl0sXG5cdFx0XHRcInVzZXJfZXZlbnRzXCI6IGpzb25bXCJ1c2VyX2V2ZW50c1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInVzZXJfZXZlbnRzXCJdLm1hcChVc2VyRXZlbnRfMSQzLlVzZXJFdmVudEZyb21KU09OKVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gTmV4dE1lc3NhZ2VSZXF1ZXN0VG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gTmV4dE1lc3NhZ2VSZXF1ZXN0VG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIE5leHRNZXNzYWdlUmVxdWVzdFRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvbnRleHRcIjogKDAsIENvbnRleHRfMSQzLkNvbnRleHRUb0pTT04pKHZhbHVlW1wiY29udGV4dFwiXSksXG5cdFx0XHRcImZlYXR1cmVfZmxhZ3NcIjogdmFsdWVbXCJmZWF0dXJlX2ZsYWdzXCJdLFxuXHRcdFx0XCJnZW5lcmF0aW9uX3BhcmFtc1wiOiAoMCwgR2VuZXJhdGlvblBhcmFtc18xLkdlbmVyYXRpb25QYXJhbXNUb0pTT04pKHZhbHVlW1wiZ2VuZXJhdGlvbl9wYXJhbXNcIl0pLFxuXHRcdFx0XCJpZFwiOiB2YWx1ZVtcImlkXCJdLFxuXHRcdFx0XCJvcmdfYmFzZV9jb25maWdfdmVyc2lvblwiOiB2YWx1ZVtcIm9yZ19iYXNlX2NvbmZpZ192ZXJzaW9uXCJdLFxuXHRcdFx0XCJ1c2VyX2V2ZW50c1wiOiB2YWx1ZVtcInVzZXJfZXZlbnRzXCJdID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZVtcInVzZXJfZXZlbnRzXCJdLm1hcChVc2VyRXZlbnRfMSQzLlVzZXJFdmVudFRvSlNPTilcblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9PcmRlckl0ZW1JbmZvLmpzXG52YXIgcmVxdWlyZV9PcmRlckl0ZW1JbmZvID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvT3JkZXJJdGVtSW5mby5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mT3JkZXJJdGVtSW5mbyA9IGluc3RhbmNlT2ZPcmRlckl0ZW1JbmZvO1xuXHRleHBvcnRzLk9yZGVySXRlbUluZm9Gcm9tSlNPTiA9IE9yZGVySXRlbUluZm9Gcm9tSlNPTjtcblx0ZXhwb3J0cy5PcmRlckl0ZW1JbmZvRnJvbUpTT05UeXBlZCA9IE9yZGVySXRlbUluZm9Gcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLk9yZGVySXRlbUluZm9Ub0pTT04gPSBPcmRlckl0ZW1JbmZvVG9KU09OO1xuXHRleHBvcnRzLk9yZGVySXRlbUluZm9Ub0pTT05UeXBlZCA9IE9yZGVySXRlbUluZm9Ub0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgT3JkZXJJdGVtSW5mbyBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZPcmRlckl0ZW1JbmZvKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJpdGVtX3ByaWNlXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaXRlbV9wcmljZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJpdGVtX3F1YW50aXR5XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaXRlbV9xdWFudGl0eVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJpdGVtX3RpdGxlXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaXRlbV90aXRsZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJvcmRlcl9pdGVtX2lkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wib3JkZXJfaXRlbV9pZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gT3JkZXJJdGVtSW5mb0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gT3JkZXJJdGVtSW5mb0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIE9yZGVySXRlbUluZm9Gcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJkZWxpdmVyZWRfYXRcIjoganNvbltcImRlbGl2ZXJlZF9hdFwiXSA9PSBudWxsID8gdm9pZCAwIDogbmV3IERhdGUoanNvbltcImRlbGl2ZXJlZF9hdFwiXSksXG5cdFx0XHRcImVzdGltYXRlZF9kZWxpdmVyeV9hdFwiOiBqc29uW1wiZXN0aW1hdGVkX2RlbGl2ZXJ5X2F0XCJdID09IG51bGwgPyB2b2lkIDAgOiBuZXcgRGF0ZShqc29uW1wiZXN0aW1hdGVkX2RlbGl2ZXJ5X2F0XCJdKSxcblx0XHRcdFwiZnVsZmlsbG1lbnRfZGlzcGxheV9zdGF0dXNcIjoganNvbltcImZ1bGZpbGxtZW50X2Rpc3BsYXlfc3RhdHVzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiZnVsZmlsbG1lbnRfZGlzcGxheV9zdGF0dXNcIl0sXG5cdFx0XHRcImltYWdlXCI6IGpzb25bXCJpbWFnZVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImltYWdlXCJdLFxuXHRcdFx0XCJpbl90cmFuc2l0X2F0XCI6IGpzb25bXCJpbl90cmFuc2l0X2F0XCJdID09IG51bGwgPyB2b2lkIDAgOiBuZXcgRGF0ZShqc29uW1wiaW5fdHJhbnNpdF9hdFwiXSksXG5cdFx0XHRcIml0ZW1fcHJpY2VcIjoganNvbltcIml0ZW1fcHJpY2VcIl0sXG5cdFx0XHRcIml0ZW1fcXVhbnRpdHlcIjoganNvbltcIml0ZW1fcXVhbnRpdHlcIl0sXG5cdFx0XHRcIml0ZW1fdGl0bGVcIjoganNvbltcIml0ZW1fdGl0bGVcIl0sXG5cdFx0XHRcIm9yZGVyX2l0ZW1faWRcIjoganNvbltcIm9yZGVyX2l0ZW1faWRcIl0sXG5cdFx0XHRcInRyYWNraW5nX3VybFwiOiBqc29uW1widHJhY2tpbmdfdXJsXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1widHJhY2tpbmdfdXJsXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBPcmRlckl0ZW1JbmZvVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gT3JkZXJJdGVtSW5mb1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBPcmRlckl0ZW1JbmZvVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiZGVsaXZlcmVkX2F0XCI6IHZhbHVlW1wiZGVsaXZlcmVkX2F0XCJdID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZVtcImRlbGl2ZXJlZF9hdFwiXS50b0lTT1N0cmluZygpLFxuXHRcdFx0XCJlc3RpbWF0ZWRfZGVsaXZlcnlfYXRcIjogdmFsdWVbXCJlc3RpbWF0ZWRfZGVsaXZlcnlfYXRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IHZhbHVlW1wiZXN0aW1hdGVkX2RlbGl2ZXJ5X2F0XCJdLnRvSVNPU3RyaW5nKCksXG5cdFx0XHRcImZ1bGZpbGxtZW50X2Rpc3BsYXlfc3RhdHVzXCI6IHZhbHVlW1wiZnVsZmlsbG1lbnRfZGlzcGxheV9zdGF0dXNcIl0sXG5cdFx0XHRcImltYWdlXCI6IHZhbHVlW1wiaW1hZ2VcIl0sXG5cdFx0XHRcImluX3RyYW5zaXRfYXRcIjogdmFsdWVbXCJpbl90cmFuc2l0X2F0XCJdID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZVtcImluX3RyYW5zaXRfYXRcIl0udG9JU09TdHJpbmcoKSxcblx0XHRcdFwiaXRlbV9wcmljZVwiOiB2YWx1ZVtcIml0ZW1fcHJpY2VcIl0sXG5cdFx0XHRcIml0ZW1fcXVhbnRpdHlcIjogdmFsdWVbXCJpdGVtX3F1YW50aXR5XCJdLFxuXHRcdFx0XCJpdGVtX3RpdGxlXCI6IHZhbHVlW1wiaXRlbV90aXRsZVwiXSxcblx0XHRcdFwib3JkZXJfaXRlbV9pZFwiOiB2YWx1ZVtcIm9yZGVyX2l0ZW1faWRcIl0sXG5cdFx0XHRcInRyYWNraW5nX3VybFwiOiB2YWx1ZVtcInRyYWNraW5nX3VybFwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL09yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzLmpzXG52YXIgcmVxdWlyZV9PcmRlclJlc3BvbnNlQXR0cmlidXRlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL09yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZPcmRlclJlc3BvbnNlQXR0cmlidXRlcyA9IGluc3RhbmNlT2ZPcmRlclJlc3BvbnNlQXR0cmlidXRlcztcblx0ZXhwb3J0cy5PcmRlclJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OID0gT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTjtcblx0ZXhwb3J0cy5PcmRlclJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OVHlwZWQgPSBPcmRlclJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT04gPSBPcmRlclJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTjtcblx0ZXhwb3J0cy5PcmRlclJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTlR5cGVkID0gT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT05UeXBlZDtcblx0Y29uc3QgT3JkZXJJdGVtSW5mb18xID0gcmVxdWlyZV9PcmRlckl0ZW1JbmZvKCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIE9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZk9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJjcmVhdGVkX2F0XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY3JlYXRlZF9hdFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJsYXRlc3RfZXZlbnRfZGF0ZVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImxhdGVzdF9ldmVudF9kYXRlXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImxpbmVfaXRlbXNcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJsaW5lX2l0ZW1zXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcIm9yZGVyX2lkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wib3JkZXJfaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwib3JkZXJfbnVtYmVyXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wib3JkZXJfbnVtYmVyXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBPcmRlclJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBPcmRlclJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNyZWF0ZWRfYXRcIjogbmV3IERhdGUoanNvbltcImNyZWF0ZWRfYXRcIl0pLFxuXHRcdFx0XCJsYXRlc3RfZXZlbnRfZGF0ZVwiOiBuZXcgRGF0ZShqc29uW1wibGF0ZXN0X2V2ZW50X2RhdGVcIl0pLFxuXHRcdFx0XCJsaW5lX2l0ZW1zXCI6IGpzb25bXCJsaW5lX2l0ZW1zXCJdLm1hcChPcmRlckl0ZW1JbmZvXzEuT3JkZXJJdGVtSW5mb0Zyb21KU09OKSxcblx0XHRcdFwib3JkZXJfaWRcIjoganNvbltcIm9yZGVyX2lkXCJdLFxuXHRcdFx0XCJvcmRlcl9udW1iZXJcIjoganNvbltcIm9yZGVyX251bWJlclwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBPcmRlclJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBPcmRlclJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNyZWF0ZWRfYXRcIjogdmFsdWVbXCJjcmVhdGVkX2F0XCJdLnRvSVNPU3RyaW5nKCksXG5cdFx0XHRcImxhdGVzdF9ldmVudF9kYXRlXCI6IHZhbHVlW1wibGF0ZXN0X2V2ZW50X2RhdGVcIl0udG9JU09TdHJpbmcoKSxcblx0XHRcdFwibGluZV9pdGVtc1wiOiB2YWx1ZVtcImxpbmVfaXRlbXNcIl0ubWFwKE9yZGVySXRlbUluZm9fMS5PcmRlckl0ZW1JbmZvVG9KU09OKSxcblx0XHRcdFwib3JkZXJfaWRcIjogdmFsdWVbXCJvcmRlcl9pZFwiXSxcblx0XHRcdFwib3JkZXJfbnVtYmVyXCI6IHZhbHVlW1wib3JkZXJfbnVtYmVyXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvT3JnYW5pemF0aW9uLmpzXG52YXIgcmVxdWlyZV9Pcmdhbml6YXRpb24gPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Pcmdhbml6YXRpb24uanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuT3JnYW5pemF0aW9uU3RhdHVzRW51bSA9IHZvaWQgMDtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mT3JnYW5pemF0aW9uID0gaW5zdGFuY2VPZk9yZ2FuaXphdGlvbjtcblx0ZXhwb3J0cy5Pcmdhbml6YXRpb25Gcm9tSlNPTiA9IE9yZ2FuaXphdGlvbkZyb21KU09OO1xuXHRleHBvcnRzLk9yZ2FuaXphdGlvbkZyb21KU09OVHlwZWQgPSBPcmdhbml6YXRpb25Gcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLk9yZ2FuaXphdGlvblRvSlNPTiA9IE9yZ2FuaXphdGlvblRvSlNPTjtcblx0ZXhwb3J0cy5Pcmdhbml6YXRpb25Ub0pTT05UeXBlZCA9IE9yZ2FuaXphdGlvblRvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBAZXhwb3J0XG5cdCogQGVudW0ge3N0cmluZ31cblx0Ki9cblx0dmFyIE9yZ2FuaXphdGlvblN0YXR1c0VudW07XG5cdChmdW5jdGlvbihPcmdhbml6YXRpb25TdGF0dXNFbnVtJDEpIHtcblx0XHRPcmdhbml6YXRpb25TdGF0dXNFbnVtJDFbXCJBY3RpdmVcIl0gPSBcImFjdGl2ZVwiO1xuXHRcdE9yZ2FuaXphdGlvblN0YXR1c0VudW0kMVtcIkluYWN0aXZlXCJdID0gXCJpbmFjdGl2ZVwiO1xuXHR9KShPcmdhbml6YXRpb25TdGF0dXNFbnVtIHx8IChleHBvcnRzLk9yZ2FuaXphdGlvblN0YXR1c0VudW0gPSBPcmdhbml6YXRpb25TdGF0dXNFbnVtID0ge30pKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgT3JnYW5pemF0aW9uIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZk9yZ2FuaXphdGlvbih2YWx1ZSkge1xuXHRcdGlmICghKFwiZGlzcGxheV9uYW1lXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiZGlzcGxheV9uYW1lXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImRvbWFpblwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImRvbWFpblwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJpZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImlkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInNob3J0X25hbWVcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJzaG9ydF9uYW1lXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInN0YXR1c1wiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInN0YXR1c1wiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gT3JnYW5pemF0aW9uRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBPcmdhbml6YXRpb25Gcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBPcmdhbml6YXRpb25Gcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjcmVhdGVkX2F0XCI6IGpzb25bXCJjcmVhdGVkX2F0XCJdID09IG51bGwgPyB2b2lkIDAgOiBuZXcgRGF0ZShqc29uW1wiY3JlYXRlZF9hdFwiXSksXG5cdFx0XHRcImRpc3BsYXlfbmFtZVwiOiBqc29uW1wiZGlzcGxheV9uYW1lXCJdLFxuXHRcdFx0XCJkb21haW5cIjoganNvbltcImRvbWFpblwiXSxcblx0XHRcdFwiaWRcIjoganNvbltcImlkXCJdLFxuXHRcdFx0XCJzaG9ydF9uYW1lXCI6IGpzb25bXCJzaG9ydF9uYW1lXCJdLFxuXHRcdFx0XCJzdGF0dXNcIjoganNvbltcInN0YXR1c1wiXSxcblx0XHRcdFwidXBkYXRlZF9hdFwiOiBqc29uW1widXBkYXRlZF9hdFwiXSA9PSBudWxsID8gdm9pZCAwIDogbmV3IERhdGUoanNvbltcInVwZGF0ZWRfYXRcIl0pXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBPcmdhbml6YXRpb25Ub0pTT04oanNvbikge1xuXHRcdHJldHVybiBPcmdhbml6YXRpb25Ub0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gT3JnYW5pemF0aW9uVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY3JlYXRlZF9hdFwiOiB2YWx1ZVtcImNyZWF0ZWRfYXRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IHZhbHVlW1wiY3JlYXRlZF9hdFwiXS50b0lTT1N0cmluZygpLFxuXHRcdFx0XCJkaXNwbGF5X25hbWVcIjogdmFsdWVbXCJkaXNwbGF5X25hbWVcIl0sXG5cdFx0XHRcImRvbWFpblwiOiB2YWx1ZVtcImRvbWFpblwiXSxcblx0XHRcdFwiaWRcIjogdmFsdWVbXCJpZFwiXSxcblx0XHRcdFwic2hvcnRfbmFtZVwiOiB2YWx1ZVtcInNob3J0X25hbWVcIl0sXG5cdFx0XHRcInN0YXR1c1wiOiB2YWx1ZVtcInN0YXR1c1wiXSxcblx0XHRcdFwidXBkYXRlZF9hdFwiOiB2YWx1ZVtcInVwZGF0ZWRfYXRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IHZhbHVlW1widXBkYXRlZF9hdFwiXS50b0lTT1N0cmluZygpXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvT3JnYW5pemF0aW9uQ29uZmlnLmpzXG52YXIgcmVxdWlyZV9Pcmdhbml6YXRpb25Db25maWcgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Pcmdhbml6YXRpb25Db25maWcuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZk9yZ2FuaXphdGlvbkNvbmZpZyA9IGluc3RhbmNlT2ZPcmdhbml6YXRpb25Db25maWc7XG5cdGV4cG9ydHMuT3JnYW5pemF0aW9uQ29uZmlnRnJvbUpTT04gPSBPcmdhbml6YXRpb25Db25maWdGcm9tSlNPTjtcblx0ZXhwb3J0cy5Pcmdhbml6YXRpb25Db25maWdGcm9tSlNPTlR5cGVkID0gT3JnYW5pemF0aW9uQ29uZmlnRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5Pcmdhbml6YXRpb25Db25maWdUb0pTT04gPSBPcmdhbml6YXRpb25Db25maWdUb0pTT047XG5cdGV4cG9ydHMuT3JnYW5pemF0aW9uQ29uZmlnVG9KU09OVHlwZWQgPSBPcmdhbml6YXRpb25Db25maWdUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgT3JnYW5pemF0aW9uQ29uZmlnIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZk9yZ2FuaXphdGlvbkNvbmZpZyh2YWx1ZSkge1xuXHRcdGlmICghKFwiY29uZmlnXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY29uZmlnXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImNyZWF0ZWRfYXRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJjcmVhdGVkX2F0XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImlzX2xhdGVzdFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImlzX2xhdGVzdFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJuYW1lc3BhY2VcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJuYW1lc3BhY2VcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwidXBkYXRlZF9hdFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInVwZGF0ZWRfYXRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwidXBkYXRlZF9ieV9lbnRpdHlcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJ1cGRhdGVkX2J5X2VudGl0eVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJ1cGRhdGVkX2J5X2VudGl0eV9pZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInVwZGF0ZWRfYnlfZW50aXR5X2lkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInZlcnNpb25cIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJ2ZXJzaW9uXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBPcmdhbml6YXRpb25Db25maWdGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIE9yZ2FuaXphdGlvbkNvbmZpZ0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIE9yZ2FuaXphdGlvbkNvbmZpZ0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvbmZpZ1wiOiBqc29uW1wiY29uZmlnXCJdLFxuXHRcdFx0XCJjcmVhdGVkX2F0XCI6IG5ldyBEYXRlKGpzb25bXCJjcmVhdGVkX2F0XCJdKSxcblx0XHRcdFwiaWRcIjoganNvbltcImlkXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiaWRcIl0sXG5cdFx0XHRcImlzX2xhdGVzdFwiOiBqc29uW1wiaXNfbGF0ZXN0XCJdLFxuXHRcdFx0XCJuYW1lc3BhY2VcIjoganNvbltcIm5hbWVzcGFjZVwiXSxcblx0XHRcdFwib3JnYW5pemF0aW9uX2lkXCI6IGpzb25bXCJvcmdhbml6YXRpb25faWRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJvcmdhbml6YXRpb25faWRcIl0sXG5cdFx0XHRcInVwZGF0ZWRfYXRcIjogbmV3IERhdGUoanNvbltcInVwZGF0ZWRfYXRcIl0pLFxuXHRcdFx0XCJ1cGRhdGVkX2J5X2VudGl0eVwiOiBqc29uW1widXBkYXRlZF9ieV9lbnRpdHlcIl0sXG5cdFx0XHRcInVwZGF0ZWRfYnlfZW50aXR5X2lkXCI6IGpzb25bXCJ1cGRhdGVkX2J5X2VudGl0eV9pZFwiXSxcblx0XHRcdFwidmVyc2lvblwiOiBqc29uW1widmVyc2lvblwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gT3JnYW5pemF0aW9uQ29uZmlnVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gT3JnYW5pemF0aW9uQ29uZmlnVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIE9yZ2FuaXphdGlvbkNvbmZpZ1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvbmZpZ1wiOiB2YWx1ZVtcImNvbmZpZ1wiXSxcblx0XHRcdFwiY3JlYXRlZF9hdFwiOiB2YWx1ZVtcImNyZWF0ZWRfYXRcIl0udG9JU09TdHJpbmcoKSxcblx0XHRcdFwiaWRcIjogdmFsdWVbXCJpZFwiXSxcblx0XHRcdFwiaXNfbGF0ZXN0XCI6IHZhbHVlW1wiaXNfbGF0ZXN0XCJdLFxuXHRcdFx0XCJuYW1lc3BhY2VcIjogdmFsdWVbXCJuYW1lc3BhY2VcIl0sXG5cdFx0XHRcIm9yZ2FuaXphdGlvbl9pZFwiOiB2YWx1ZVtcIm9yZ2FuaXphdGlvbl9pZFwiXSxcblx0XHRcdFwidXBkYXRlZF9hdFwiOiB2YWx1ZVtcInVwZGF0ZWRfYXRcIl0udG9JU09TdHJpbmcoKSxcblx0XHRcdFwidXBkYXRlZF9ieV9lbnRpdHlcIjogdmFsdWVbXCJ1cGRhdGVkX2J5X2VudGl0eVwiXSxcblx0XHRcdFwidXBkYXRlZF9ieV9lbnRpdHlfaWRcIjogdmFsdWVbXCJ1cGRhdGVkX2J5X2VudGl0eV9pZFwiXSxcblx0XHRcdFwidmVyc2lvblwiOiB2YWx1ZVtcInZlcnNpb25cIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Pcmdhbml6YXRpb25TZXR0aW5ncy5qc1xudmFyIHJlcXVpcmVfT3JnYW5pemF0aW9uU2V0dGluZ3MgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Pcmdhbml6YXRpb25TZXR0aW5ncy5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mT3JnYW5pemF0aW9uU2V0dGluZ3MgPSBpbnN0YW5jZU9mT3JnYW5pemF0aW9uU2V0dGluZ3M7XG5cdGV4cG9ydHMuT3JnYW5pemF0aW9uU2V0dGluZ3NGcm9tSlNPTiA9IE9yZ2FuaXphdGlvblNldHRpbmdzRnJvbUpTT047XG5cdGV4cG9ydHMuT3JnYW5pemF0aW9uU2V0dGluZ3NGcm9tSlNPTlR5cGVkID0gT3JnYW5pemF0aW9uU2V0dGluZ3NGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLk9yZ2FuaXphdGlvblNldHRpbmdzVG9KU09OID0gT3JnYW5pemF0aW9uU2V0dGluZ3NUb0pTT047XG5cdGV4cG9ydHMuT3JnYW5pemF0aW9uU2V0dGluZ3NUb0pTT05UeXBlZCA9IE9yZ2FuaXphdGlvblNldHRpbmdzVG9KU09OVHlwZWQ7XG5cdGNvbnN0IE9yZ2FuaXphdGlvbl8xID0gcmVxdWlyZV9Pcmdhbml6YXRpb24oKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgT3JnYW5pemF0aW9uU2V0dGluZ3MgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mT3JnYW5pemF0aW9uU2V0dGluZ3ModmFsdWUpIHtcblx0XHRpZiAoIShcIm9yZ1wiIGluIHZhbHVlKSB8fCB2YWx1ZVtcIm9yZ1wiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJzZXR0aW5nc1wiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInNldHRpbmdzXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBPcmdhbml6YXRpb25TZXR0aW5nc0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gT3JnYW5pemF0aW9uU2V0dGluZ3NGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBPcmdhbml6YXRpb25TZXR0aW5nc0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcIm9yZ1wiOiAoMCwgT3JnYW5pemF0aW9uXzEuT3JnYW5pemF0aW9uRnJvbUpTT04pKGpzb25bXCJvcmdcIl0pLFxuXHRcdFx0XCJzZXR0aW5nc1wiOiBqc29uW1wic2V0dGluZ3NcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIE9yZ2FuaXphdGlvblNldHRpbmdzVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gT3JnYW5pemF0aW9uU2V0dGluZ3NUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gT3JnYW5pemF0aW9uU2V0dGluZ3NUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJvcmdcIjogKDAsIE9yZ2FuaXphdGlvbl8xLk9yZ2FuaXphdGlvblRvSlNPTikodmFsdWVbXCJvcmdcIl0pLFxuXHRcdFx0XCJzZXR0aW5nc1wiOiB2YWx1ZVtcInNldHRpbmdzXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU3RhdHNpZ0V4cGVyaW1lbnQuanNcbnZhciByZXF1aXJlX1N0YXRzaWdFeHBlcmltZW50ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU3RhdHNpZ0V4cGVyaW1lbnQuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlN0YXRzaWdFeHBlcmltZW50ID0gaW5zdGFuY2VPZlN0YXRzaWdFeHBlcmltZW50O1xuXHRleHBvcnRzLlN0YXRzaWdFeHBlcmltZW50RnJvbUpTT04gPSBTdGF0c2lnRXhwZXJpbWVudEZyb21KU09OO1xuXHRleHBvcnRzLlN0YXRzaWdFeHBlcmltZW50RnJvbUpTT05UeXBlZCA9IFN0YXRzaWdFeHBlcmltZW50RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5TdGF0c2lnRXhwZXJpbWVudFRvSlNPTiA9IFN0YXRzaWdFeHBlcmltZW50VG9KU09OO1xuXHRleHBvcnRzLlN0YXRzaWdFeHBlcmltZW50VG9KU09OVHlwZWQgPSBTdGF0c2lnRXhwZXJpbWVudFRvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBTdGF0c2lnRXhwZXJpbWVudCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZTdGF0c2lnRXhwZXJpbWVudCh2YWx1ZSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFN0YXRzaWdFeHBlcmltZW50RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBTdGF0c2lnRXhwZXJpbWVudEZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFN0YXRzaWdFeHBlcmltZW50RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiZ3JvdXBcIjoganNvbltcImdyb3VwXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiZ3JvdXBcIl0sXG5cdFx0XHRcImdyb3VwX25hbWVcIjoganNvbltcImdyb3VwX25hbWVcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJncm91cF9uYW1lXCJdLFxuXHRcdFx0XCJuYW1lXCI6IGpzb25bXCJuYW1lXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wibmFtZVwiXSxcblx0XHRcdFwicnVsZV9pZFwiOiBqc29uW1wicnVsZV9pZFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInJ1bGVfaWRcIl0sXG5cdFx0XHRcInZhbHVlXCI6IGpzb25bXCJ2YWx1ZVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInZhbHVlXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBTdGF0c2lnRXhwZXJpbWVudFRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFN0YXRzaWdFeHBlcmltZW50VG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFN0YXRzaWdFeHBlcmltZW50VG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiZ3JvdXBcIjogdmFsdWVbXCJncm91cFwiXSxcblx0XHRcdFwiZ3JvdXBfbmFtZVwiOiB2YWx1ZVtcImdyb3VwX25hbWVcIl0sXG5cdFx0XHRcIm5hbWVcIjogdmFsdWVbXCJuYW1lXCJdLFxuXHRcdFx0XCJydWxlX2lkXCI6IHZhbHVlW1wicnVsZV9pZFwiXSxcblx0XHRcdFwidmFsdWVcIjogdmFsdWVbXCJ2YWx1ZVwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1N0YXRzaWdGZWF0dXJlR2F0ZS5qc1xudmFyIHJlcXVpcmVfU3RhdHNpZ0ZlYXR1cmVHYXRlID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU3RhdHNpZ0ZlYXR1cmVHYXRlLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZTdGF0c2lnRmVhdHVyZUdhdGUgPSBpbnN0YW5jZU9mU3RhdHNpZ0ZlYXR1cmVHYXRlO1xuXHRleHBvcnRzLlN0YXRzaWdGZWF0dXJlR2F0ZUZyb21KU09OID0gU3RhdHNpZ0ZlYXR1cmVHYXRlRnJvbUpTT047XG5cdGV4cG9ydHMuU3RhdHNpZ0ZlYXR1cmVHYXRlRnJvbUpTT05UeXBlZCA9IFN0YXRzaWdGZWF0dXJlR2F0ZUZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuU3RhdHNpZ0ZlYXR1cmVHYXRlVG9KU09OID0gU3RhdHNpZ0ZlYXR1cmVHYXRlVG9KU09OO1xuXHRleHBvcnRzLlN0YXRzaWdGZWF0dXJlR2F0ZVRvSlNPTlR5cGVkID0gU3RhdHNpZ0ZlYXR1cmVHYXRlVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFN0YXRzaWdGZWF0dXJlR2F0ZSBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZTdGF0c2lnRmVhdHVyZUdhdGUodmFsdWUpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBTdGF0c2lnRmVhdHVyZUdhdGVGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFN0YXRzaWdGZWF0dXJlR2F0ZUZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFN0YXRzaWdGZWF0dXJlR2F0ZUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImdyb3VwX25hbWVcIjoganNvbltcImdyb3VwX25hbWVcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJncm91cF9uYW1lXCJdLFxuXHRcdFx0XCJuYW1lXCI6IGpzb25bXCJuYW1lXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wibmFtZVwiXSxcblx0XHRcdFwicnVsZV9pZFwiOiBqc29uW1wicnVsZV9pZFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInJ1bGVfaWRcIl0sXG5cdFx0XHRcInZhbHVlXCI6IGpzb25bXCJ2YWx1ZVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInZhbHVlXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBTdGF0c2lnRmVhdHVyZUdhdGVUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBTdGF0c2lnRmVhdHVyZUdhdGVUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gU3RhdHNpZ0ZlYXR1cmVHYXRlVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiZ3JvdXBfbmFtZVwiOiB2YWx1ZVtcImdyb3VwX25hbWVcIl0sXG5cdFx0XHRcIm5hbWVcIjogdmFsdWVbXCJuYW1lXCJdLFxuXHRcdFx0XCJydWxlX2lkXCI6IHZhbHVlW1wicnVsZV9pZFwiXSxcblx0XHRcdFwidmFsdWVcIjogdmFsdWVbXCJ2YWx1ZVwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL09yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHMuanNcbnZhciByZXF1aXJlX09yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Pcmdhbml6YXRpb25Db25maWdSZXN1bHRzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZPcmdhbml6YXRpb25Db25maWdSZXN1bHRzID0gaW5zdGFuY2VPZk9yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHM7XG5cdGV4cG9ydHMuT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0c0Zyb21KU09OID0gT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0c0Zyb21KU09OO1xuXHRleHBvcnRzLk9yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHNGcm9tSlNPTlR5cGVkID0gT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0c0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0c1RvSlNPTiA9IE9yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHNUb0pTT047XG5cdGV4cG9ydHMuT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0c1RvSlNPTlR5cGVkID0gT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0c1RvSlNPTlR5cGVkO1xuXHRjb25zdCBPcmdhbml6YXRpb25Db25maWdfMSA9IHJlcXVpcmVfT3JnYW5pemF0aW9uQ29uZmlnKCk7XG5cdGNvbnN0IE9yZ2FuaXphdGlvblNldHRpbmdzXzEgPSByZXF1aXJlX09yZ2FuaXphdGlvblNldHRpbmdzKCk7XG5cdGNvbnN0IFN0YXRzaWdFeHBlcmltZW50XzEgPSByZXF1aXJlX1N0YXRzaWdFeHBlcmltZW50KCk7XG5cdGNvbnN0IFN0YXRzaWdGZWF0dXJlR2F0ZV8xID0gcmVxdWlyZV9TdGF0c2lnRmVhdHVyZUdhdGUoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0cyBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZPcmdhbml6YXRpb25Db25maWdSZXN1bHRzKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0c0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0c0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIE9yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHNGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb25maWdzXCI6IGpzb25bXCJjb25maWdzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiY29uZmlnc1wiXS5tYXAoT3JnYW5pemF0aW9uQ29uZmlnXzEuT3JnYW5pemF0aW9uQ29uZmlnRnJvbUpTT04pLFxuXHRcdFx0XCJleHBlcmltZW50c1wiOiBqc29uW1wiZXhwZXJpbWVudHNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJleHBlcmltZW50c1wiXS5tYXAoU3RhdHNpZ0V4cGVyaW1lbnRfMS5TdGF0c2lnRXhwZXJpbWVudEZyb21KU09OKSxcblx0XHRcdFwiZ2F0ZXNcIjoganNvbltcImdhdGVzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiZ2F0ZXNcIl0ubWFwKFN0YXRzaWdGZWF0dXJlR2F0ZV8xLlN0YXRzaWdGZWF0dXJlR2F0ZUZyb21KU09OKSxcblx0XHRcdFwib3JnXCI6IGpzb25bXCJvcmdcIl0gPT0gbnVsbCA/IHZvaWQgMCA6ICgwLCBPcmdhbml6YXRpb25TZXR0aW5nc18xLk9yZ2FuaXphdGlvblNldHRpbmdzRnJvbUpTT04pKGpzb25bXCJvcmdcIl0pXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBPcmdhbml6YXRpb25Db25maWdSZXN1bHRzVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0c1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBPcmdhbml6YXRpb25Db25maWdSZXN1bHRzVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29uZmlnc1wiOiB2YWx1ZVtcImNvbmZpZ3NcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IHZhbHVlW1wiY29uZmlnc1wiXS5tYXAoT3JnYW5pemF0aW9uQ29uZmlnXzEuT3JnYW5pemF0aW9uQ29uZmlnVG9KU09OKSxcblx0XHRcdFwiZXhwZXJpbWVudHNcIjogdmFsdWVbXCJleHBlcmltZW50c1wiXSA9PSBudWxsID8gdm9pZCAwIDogdmFsdWVbXCJleHBlcmltZW50c1wiXS5tYXAoU3RhdHNpZ0V4cGVyaW1lbnRfMS5TdGF0c2lnRXhwZXJpbWVudFRvSlNPTiksXG5cdFx0XHRcImdhdGVzXCI6IHZhbHVlW1wiZ2F0ZXNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IHZhbHVlW1wiZ2F0ZXNcIl0ubWFwKFN0YXRzaWdGZWF0dXJlR2F0ZV8xLlN0YXRzaWdGZWF0dXJlR2F0ZVRvSlNPTiksXG5cdFx0XHRcIm9yZ1wiOiAoMCwgT3JnYW5pemF0aW9uU2V0dGluZ3NfMS5Pcmdhbml6YXRpb25TZXR0aW5nc1RvSlNPTikodmFsdWVbXCJvcmdcIl0pXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUHJvZHVjdFJldHJpZXZhbFJlcXVlc3QuanNcbnZhciByZXF1aXJlX1Byb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUHJvZHVjdFJldHJpZXZhbFJlcXVlc3QuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlByb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0ID0gaW5zdGFuY2VPZlByb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0O1xuXHRleHBvcnRzLlByb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0RnJvbUpTT04gPSBQcm9kdWN0UmV0cmlldmFsUmVxdWVzdEZyb21KU09OO1xuXHRleHBvcnRzLlByb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0RnJvbUpTT05UeXBlZCA9IFByb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5Qcm9kdWN0UmV0cmlldmFsUmVxdWVzdFRvSlNPTiA9IFByb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0VG9KU09OO1xuXHRleHBvcnRzLlByb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0VG9KU09OVHlwZWQgPSBQcm9kdWN0UmV0cmlldmFsUmVxdWVzdFRvSlNPTlR5cGVkO1xuXHRjb25zdCBDb250ZXh0XzEkMiA9IHJlcXVpcmVfQ29udGV4dCgpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBQcm9kdWN0UmV0cmlldmFsUmVxdWVzdCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZQcm9kdWN0UmV0cmlldmFsUmVxdWVzdCh2YWx1ZSkge1xuXHRcdGlmICghKFwiY29udGV4dFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNvbnRleHRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwicHJvZHVjdF9pZHNcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJwcm9kdWN0X2lkc1wiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gUHJvZHVjdFJldHJpZXZhbFJlcXVlc3RGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFByb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUHJvZHVjdFJldHJpZXZhbFJlcXVlc3RGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb250ZXh0XCI6ICgwLCBDb250ZXh0XzEkMi5Db250ZXh0RnJvbUpTT04pKGpzb25bXCJjb250ZXh0XCJdKSxcblx0XHRcdFwicHJvZHVjdF9pZHNcIjoganNvbltcInByb2R1Y3RfaWRzXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBQcm9kdWN0UmV0cmlldmFsUmVxdWVzdFRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFByb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0VG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFByb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0VG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29udGV4dFwiOiAoMCwgQ29udGV4dF8xJDIuQ29udGV4dFRvSlNPTikodmFsdWVbXCJjb250ZXh0XCJdKSxcblx0XHRcdFwicHJvZHVjdF9pZHNcIjogdmFsdWVbXCJwcm9kdWN0X2lkc1wiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1Jlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXMuanNcbnZhciByZXF1aXJlX1Jlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9SZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzID0gaW5zdGFuY2VPZlJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXM7XG5cdGV4cG9ydHMuUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlc0Zyb21KU09OID0gUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlc0Zyb21KU09OO1xuXHRleHBvcnRzLlJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkID0gUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlc0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlc1RvSlNPTiA9IFJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXNUb0pTT047XG5cdGV4cG9ydHMuUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlc1RvSlNPTlR5cGVkID0gUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlc1RvSlNPTlR5cGVkO1xuXHRjb25zdCBMYWJlbFZhbHVlXzEkMSA9IHJlcXVpcmVfTGFiZWxWYWx1ZSgpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXModmFsdWUpIHtcblx0XHRpZiAoIShcImlkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwidGl0bGVcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJ0aXRsZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJ1cmxcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJ1cmxcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXNGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiYXZlcmFnZV9yYXRpbmdcIjoganNvbltcImF2ZXJhZ2VfcmF0aW5nXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiYXZlcmFnZV9yYXRpbmdcIl0sXG5cdFx0XHRcImNvbG9yc1wiOiBqc29uW1wiY29sb3JzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiY29sb3JzXCJdLFxuXHRcdFx0XCJkZXNjcmlwdGlvblwiOiBqc29uW1wiZGVzY3JpcHRpb25cIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJkZXNjcmlwdGlvblwiXSxcblx0XHRcdFwiZmlsdGVyc1wiOiBqc29uW1wiZmlsdGVyc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImZpbHRlcnNcIl0sXG5cdFx0XHRcImlkXCI6IGpzb25bXCJpZFwiXSxcblx0XHRcdFwiaW1hZ2VfdXJsXCI6IGpzb25bXCJpbWFnZV91cmxcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJpbWFnZV91cmxcIl0sXG5cdFx0XHRcImltYWdlX3VybHNcIjoganNvbltcImltYWdlX3VybHNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJpbWFnZV91cmxzXCJdLFxuXHRcdFx0XCJpc19mb3JfZ3JpZFwiOiBqc29uW1wiaXNfZm9yX2dyaWRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJpc19mb3JfZ3JpZFwiXSxcblx0XHRcdFwibWV0YWRhdGFcIjoganNvbltcIm1ldGFkYXRhXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wibWV0YWRhdGFcIl0ubWFwKExhYmVsVmFsdWVfMSQxLkxhYmVsVmFsdWVGcm9tSlNPTiksXG5cdFx0XHRcIm51bWJlcl9yZXZpZXdzXCI6IGpzb25bXCJudW1iZXJfcmV2aWV3c1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm51bWJlcl9yZXZpZXdzXCJdLFxuXHRcdFx0XCJvcmlnaW5hbF9wcmljZVwiOiBqc29uW1wib3JpZ2luYWxfcHJpY2VcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJvcmlnaW5hbF9wcmljZVwiXSxcblx0XHRcdFwic2FsZV9wcmljZVwiOiBqc29uW1wic2FsZV9wcmljZVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInNhbGVfcHJpY2VcIl0sXG5cdFx0XHRcInNpemVzXCI6IGpzb25bXCJzaXplc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInNpemVzXCJdLFxuXHRcdFx0XCJ0aXRsZVwiOiBqc29uW1widGl0bGVcIl0sXG5cdFx0XHRcInVybFwiOiBqc29uW1widXJsXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlc1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiYXZlcmFnZV9yYXRpbmdcIjogdmFsdWVbXCJhdmVyYWdlX3JhdGluZ1wiXSxcblx0XHRcdFwiY29sb3JzXCI6IHZhbHVlW1wiY29sb3JzXCJdLFxuXHRcdFx0XCJkZXNjcmlwdGlvblwiOiB2YWx1ZVtcImRlc2NyaXB0aW9uXCJdLFxuXHRcdFx0XCJmaWx0ZXJzXCI6IHZhbHVlW1wiZmlsdGVyc1wiXSxcblx0XHRcdFwiaWRcIjogdmFsdWVbXCJpZFwiXSxcblx0XHRcdFwiaW1hZ2VfdXJsXCI6IHZhbHVlW1wiaW1hZ2VfdXJsXCJdLFxuXHRcdFx0XCJpbWFnZV91cmxzXCI6IHZhbHVlW1wiaW1hZ2VfdXJsc1wiXSxcblx0XHRcdFwiaXNfZm9yX2dyaWRcIjogdmFsdWVbXCJpc19mb3JfZ3JpZFwiXSxcblx0XHRcdFwibWV0YWRhdGFcIjogdmFsdWVbXCJtZXRhZGF0YVwiXSA9PSBudWxsID8gdm9pZCAwIDogdmFsdWVbXCJtZXRhZGF0YVwiXS5tYXAoTGFiZWxWYWx1ZV8xJDEuTGFiZWxWYWx1ZVRvSlNPTiksXG5cdFx0XHRcIm51bWJlcl9yZXZpZXdzXCI6IHZhbHVlW1wibnVtYmVyX3Jldmlld3NcIl0sXG5cdFx0XHRcIm9yaWdpbmFsX3ByaWNlXCI6IHZhbHVlW1wib3JpZ2luYWxfcHJpY2VcIl0sXG5cdFx0XHRcInNhbGVfcHJpY2VcIjogdmFsdWVbXCJzYWxlX3ByaWNlXCJdLFxuXHRcdFx0XCJzaXplc1wiOiB2YWx1ZVtcInNpemVzXCJdLFxuXHRcdFx0XCJ0aXRsZVwiOiB2YWx1ZVtcInRpdGxlXCJdLFxuXHRcdFx0XCJ1cmxcIjogdmFsdWVbXCJ1cmxcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Qcm9kdWN0UmV0cmlldmFsUmVzcG9uc2UuanNcbnZhciByZXF1aXJlX1Byb2R1Y3RSZXRyaWV2YWxSZXNwb25zZSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1Byb2R1Y3RSZXRyaWV2YWxSZXNwb25zZS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mUHJvZHVjdFJldHJpZXZhbFJlc3BvbnNlID0gaW5zdGFuY2VPZlByb2R1Y3RSZXRyaWV2YWxSZXNwb25zZTtcblx0ZXhwb3J0cy5Qcm9kdWN0UmV0cmlldmFsUmVzcG9uc2VGcm9tSlNPTiA9IFByb2R1Y3RSZXRyaWV2YWxSZXNwb25zZUZyb21KU09OO1xuXHRleHBvcnRzLlByb2R1Y3RSZXRyaWV2YWxSZXNwb25zZUZyb21KU09OVHlwZWQgPSBQcm9kdWN0UmV0cmlldmFsUmVzcG9uc2VGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlByb2R1Y3RSZXRyaWV2YWxSZXNwb25zZVRvSlNPTiA9IFByb2R1Y3RSZXRyaWV2YWxSZXNwb25zZVRvSlNPTjtcblx0ZXhwb3J0cy5Qcm9kdWN0UmV0cmlldmFsUmVzcG9uc2VUb0pTT05UeXBlZCA9IFByb2R1Y3RSZXRyaWV2YWxSZXNwb25zZVRvSlNPTlR5cGVkO1xuXHRjb25zdCBSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzXzEgPSByZXF1aXJlX1Jlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXMoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgUHJvZHVjdFJldHJpZXZhbFJlc3BvbnNlIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlByb2R1Y3RSZXRyaWV2YWxSZXNwb25zZSh2YWx1ZSkge1xuXHRcdGlmICghKFwicHJvZHVjdHNcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJwcm9kdWN0c1wiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gUHJvZHVjdFJldHJpZXZhbFJlc3BvbnNlRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBQcm9kdWN0UmV0cmlldmFsUmVzcG9uc2VGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBQcm9kdWN0UmV0cmlldmFsUmVzcG9uc2VGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4geyBcInByb2R1Y3RzXCI6IGpzb25bXCJwcm9kdWN0c1wiXS5tYXAoUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlc18xLlJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXNGcm9tSlNPTikgfTtcblx0fVxuXHRmdW5jdGlvbiBQcm9kdWN0UmV0cmlldmFsUmVzcG9uc2VUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBQcm9kdWN0UmV0cmlldmFsUmVzcG9uc2VUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUHJvZHVjdFJldHJpZXZhbFJlc3BvbnNlVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHsgXCJwcm9kdWN0c1wiOiB2YWx1ZVtcInByb2R1Y3RzXCJdLm1hcChSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzXzEuUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlc1RvSlNPTikgfTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlcy5qc1xudmFyIHJlcXVpcmVfUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1Byb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXMuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXMgPSBpbnN0YW5jZU9mUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlcztcblx0ZXhwb3J0cy5Qcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzRnJvbUpTT04gPSBQcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzRnJvbUpTT047XG5cdGV4cG9ydHMuUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OVHlwZWQgPSBQcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5Qcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzVG9KU09OID0gUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTjtcblx0ZXhwb3J0cy5Qcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzVG9KU09OVHlwZWQgPSBQcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXMgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlcyh2YWx1ZSkge1xuXHRcdGlmICghKFwiZmlsdGVyX25hbWVcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJmaWx0ZXJfbmFtZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4geyBcImZpbHRlcl9uYW1lXCI6IGpzb25bXCJmaWx0ZXJfbmFtZVwiXSB9O1xuXHR9XG5cdGZ1bmN0aW9uIFByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBQcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4geyBcImZpbHRlcl9uYW1lXCI6IHZhbHVlW1wiZmlsdGVyX25hbWVcIl0gfTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU2VhcmNoUmVzcG9uc2VQcm9kdWN0LmpzXG52YXIgcmVxdWlyZV9TZWFyY2hSZXNwb25zZVByb2R1Y3QgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TZWFyY2hSZXNwb25zZVByb2R1Y3QuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlNlYXJjaFJlc3BvbnNlUHJvZHVjdCA9IGluc3RhbmNlT2ZTZWFyY2hSZXNwb25zZVByb2R1Y3Q7XG5cdGV4cG9ydHMuU2VhcmNoUmVzcG9uc2VQcm9kdWN0RnJvbUpTT04gPSBTZWFyY2hSZXNwb25zZVByb2R1Y3RGcm9tSlNPTjtcblx0ZXhwb3J0cy5TZWFyY2hSZXNwb25zZVByb2R1Y3RGcm9tSlNPTlR5cGVkID0gU2VhcmNoUmVzcG9uc2VQcm9kdWN0RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5TZWFyY2hSZXNwb25zZVByb2R1Y3RUb0pTT04gPSBTZWFyY2hSZXNwb25zZVByb2R1Y3RUb0pTT047XG5cdGV4cG9ydHMuU2VhcmNoUmVzcG9uc2VQcm9kdWN0VG9KU09OVHlwZWQgPSBTZWFyY2hSZXNwb25zZVByb2R1Y3RUb0pTT05UeXBlZDtcblx0Y29uc3QgTGFiZWxWYWx1ZV8xID0gcmVxdWlyZV9MYWJlbFZhbHVlKCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFNlYXJjaFJlc3BvbnNlUHJvZHVjdCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZTZWFyY2hSZXNwb25zZVByb2R1Y3QodmFsdWUpIHtcblx0XHRpZiAoIShcImlkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwidGl0bGVcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJ0aXRsZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJ1cmxcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJ1cmxcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFNlYXJjaFJlc3BvbnNlUHJvZHVjdEZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU2VhcmNoUmVzcG9uc2VQcm9kdWN0RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gU2VhcmNoUmVzcG9uc2VQcm9kdWN0RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiYXZlcmFnZV9yYXRpbmdcIjoganNvbltcImF2ZXJhZ2VfcmF0aW5nXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiYXZlcmFnZV9yYXRpbmdcIl0sXG5cdFx0XHRcImNvbG9yc1wiOiBqc29uW1wiY29sb3JzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiY29sb3JzXCJdLFxuXHRcdFx0XCJkZXNjcmlwdGlvblwiOiBqc29uW1wiZGVzY3JpcHRpb25cIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJkZXNjcmlwdGlvblwiXSxcblx0XHRcdFwiZmlsdGVyc1wiOiBqc29uW1wiZmlsdGVyc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImZpbHRlcnNcIl0sXG5cdFx0XHRcImlkXCI6IGpzb25bXCJpZFwiXSxcblx0XHRcdFwiaW1hZ2VfdXJsXCI6IGpzb25bXCJpbWFnZV91cmxcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJpbWFnZV91cmxcIl0sXG5cdFx0XHRcImltYWdlX3VybHNcIjoganNvbltcImltYWdlX3VybHNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJpbWFnZV91cmxzXCJdLFxuXHRcdFx0XCJpc19mb3JfZ3JpZFwiOiBqc29uW1wiaXNfZm9yX2dyaWRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJpc19mb3JfZ3JpZFwiXSxcblx0XHRcdFwibWV0YWRhdGFcIjoganNvbltcIm1ldGFkYXRhXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wibWV0YWRhdGFcIl0ubWFwKExhYmVsVmFsdWVfMS5MYWJlbFZhbHVlRnJvbUpTT04pLFxuXHRcdFx0XCJudW1iZXJfcmV2aWV3c1wiOiBqc29uW1wibnVtYmVyX3Jldmlld3NcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJudW1iZXJfcmV2aWV3c1wiXSxcblx0XHRcdFwib3JpZ2luYWxfcHJpY2VcIjoganNvbltcIm9yaWdpbmFsX3ByaWNlXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wib3JpZ2luYWxfcHJpY2VcIl0sXG5cdFx0XHRcInNhbGVfcHJpY2VcIjoganNvbltcInNhbGVfcHJpY2VcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJzYWxlX3ByaWNlXCJdLFxuXHRcdFx0XCJzaXplc1wiOiBqc29uW1wic2l6ZXNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJzaXplc1wiXSxcblx0XHRcdFwidGl0bGVcIjoganNvbltcInRpdGxlXCJdLFxuXHRcdFx0XCJ1cmxcIjoganNvbltcInVybFwiXSxcblx0XHRcdFwicmVzcG9uc2VfaWRcIjoganNvbltcInJlc3BvbnNlX2lkXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wicmVzcG9uc2VfaWRcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFNlYXJjaFJlc3BvbnNlUHJvZHVjdFRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFNlYXJjaFJlc3BvbnNlUHJvZHVjdFRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBTZWFyY2hSZXNwb25zZVByb2R1Y3RUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJhdmVyYWdlX3JhdGluZ1wiOiB2YWx1ZVtcImF2ZXJhZ2VfcmF0aW5nXCJdLFxuXHRcdFx0XCJjb2xvcnNcIjogdmFsdWVbXCJjb2xvcnNcIl0sXG5cdFx0XHRcImRlc2NyaXB0aW9uXCI6IHZhbHVlW1wiZGVzY3JpcHRpb25cIl0sXG5cdFx0XHRcImZpbHRlcnNcIjogdmFsdWVbXCJmaWx0ZXJzXCJdLFxuXHRcdFx0XCJpZFwiOiB2YWx1ZVtcImlkXCJdLFxuXHRcdFx0XCJpbWFnZV91cmxcIjogdmFsdWVbXCJpbWFnZV91cmxcIl0sXG5cdFx0XHRcImltYWdlX3VybHNcIjogdmFsdWVbXCJpbWFnZV91cmxzXCJdLFxuXHRcdFx0XCJpc19mb3JfZ3JpZFwiOiB2YWx1ZVtcImlzX2Zvcl9ncmlkXCJdLFxuXHRcdFx0XCJtZXRhZGF0YVwiOiB2YWx1ZVtcIm1ldGFkYXRhXCJdID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZVtcIm1ldGFkYXRhXCJdLm1hcChMYWJlbFZhbHVlXzEuTGFiZWxWYWx1ZVRvSlNPTiksXG5cdFx0XHRcIm51bWJlcl9yZXZpZXdzXCI6IHZhbHVlW1wibnVtYmVyX3Jldmlld3NcIl0sXG5cdFx0XHRcIm9yaWdpbmFsX3ByaWNlXCI6IHZhbHVlW1wib3JpZ2luYWxfcHJpY2VcIl0sXG5cdFx0XHRcInNhbGVfcHJpY2VcIjogdmFsdWVbXCJzYWxlX3ByaWNlXCJdLFxuXHRcdFx0XCJzaXplc1wiOiB2YWx1ZVtcInNpemVzXCJdLFxuXHRcdFx0XCJ0aXRsZVwiOiB2YWx1ZVtcInRpdGxlXCJdLFxuXHRcdFx0XCJ1cmxcIjogdmFsdWVbXCJ1cmxcIl0sXG5cdFx0XHRcInJlc3BvbnNlX2lkXCI6IHZhbHVlW1wicmVzcG9uc2VfaWRcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Qcm9kdWN0U2VhcmNoUmVzcG9uc2UuanNcbnZhciByZXF1aXJlX1Byb2R1Y3RTZWFyY2hSZXNwb25zZSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1Byb2R1Y3RTZWFyY2hSZXNwb25zZS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mUHJvZHVjdFNlYXJjaFJlc3BvbnNlID0gaW5zdGFuY2VPZlByb2R1Y3RTZWFyY2hSZXNwb25zZTtcblx0ZXhwb3J0cy5Qcm9kdWN0U2VhcmNoUmVzcG9uc2VGcm9tSlNPTiA9IFByb2R1Y3RTZWFyY2hSZXNwb25zZUZyb21KU09OO1xuXHRleHBvcnRzLlByb2R1Y3RTZWFyY2hSZXNwb25zZUZyb21KU09OVHlwZWQgPSBQcm9kdWN0U2VhcmNoUmVzcG9uc2VGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlByb2R1Y3RTZWFyY2hSZXNwb25zZVRvSlNPTiA9IFByb2R1Y3RTZWFyY2hSZXNwb25zZVRvSlNPTjtcblx0ZXhwb3J0cy5Qcm9kdWN0U2VhcmNoUmVzcG9uc2VUb0pTT05UeXBlZCA9IFByb2R1Y3RTZWFyY2hSZXNwb25zZVRvSlNPTlR5cGVkO1xuXHRjb25zdCBTZWFyY2hSZXNwb25zZVByb2R1Y3RfMSA9IHJlcXVpcmVfU2VhcmNoUmVzcG9uc2VQcm9kdWN0KCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFByb2R1Y3RTZWFyY2hSZXNwb25zZSBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZQcm9kdWN0U2VhcmNoUmVzcG9uc2UodmFsdWUpIHtcblx0XHRpZiAoIShcImZpbHRlcnNcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJmaWx0ZXJzXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInByb2R1Y3RzXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wicHJvZHVjdHNcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFByb2R1Y3RTZWFyY2hSZXNwb25zZUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUHJvZHVjdFNlYXJjaFJlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUHJvZHVjdFNlYXJjaFJlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiZmlsdGVyc1wiOiBqc29uW1wiZmlsdGVyc1wiXSxcblx0XHRcdFwicHJvZHVjdHNcIjoganNvbltcInByb2R1Y3RzXCJdLm1hcChTZWFyY2hSZXNwb25zZVByb2R1Y3RfMS5TZWFyY2hSZXNwb25zZVByb2R1Y3RGcm9tSlNPTiksXG5cdFx0XHRcInNlYXJjaF9yZXNwb25zZV9pZFwiOiBqc29uW1wic2VhcmNoX3Jlc3BvbnNlX2lkXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wic2VhcmNoX3Jlc3BvbnNlX2lkXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBQcm9kdWN0U2VhcmNoUmVzcG9uc2VUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBQcm9kdWN0U2VhcmNoUmVzcG9uc2VUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUHJvZHVjdFNlYXJjaFJlc3BvbnNlVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiZmlsdGVyc1wiOiB2YWx1ZVtcImZpbHRlcnNcIl0sXG5cdFx0XHRcInByb2R1Y3RzXCI6IHZhbHVlW1wicHJvZHVjdHNcIl0ubWFwKFNlYXJjaFJlc3BvbnNlUHJvZHVjdF8xLlNlYXJjaFJlc3BvbnNlUHJvZHVjdFRvSlNPTiksXG5cdFx0XHRcInNlYXJjaF9yZXNwb25zZV9pZFwiOiB2YWx1ZVtcInNlYXJjaF9yZXNwb25zZV9pZFwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1Byb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXMuanNcbnZhciByZXF1aXJlX1Byb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Qcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZQcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzID0gaW5zdGFuY2VPZlByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXM7XG5cdGV4cG9ydHMuUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OID0gUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OO1xuXHRleHBvcnRzLlByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkID0gUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTiA9IFByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT047XG5cdGV4cG9ydHMuUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTlR5cGVkID0gUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBQcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXModmFsdWUpIHtcblx0XHRpZiAoIShcImdlbmVyYXRlZF9xdWVyeVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImdlbmVyYXRlZF9xdWVyeVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJwcm9kdWN0X2NvdW50XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wicHJvZHVjdF9jb3VudFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJnZW5lcmF0ZWRfcXVlcnlcIjoganNvbltcImdlbmVyYXRlZF9xdWVyeVwiXSxcblx0XHRcdFwicHJvZHVjdF9jb3VudFwiOiBqc29uW1wicHJvZHVjdF9jb3VudFwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImdlbmVyYXRlZF9xdWVyeVwiOiB2YWx1ZVtcImdlbmVyYXRlZF9xdWVyeVwiXSxcblx0XHRcdFwicHJvZHVjdF9jb3VudFwiOiB2YWx1ZVtcInByb2R1Y3RfY291bnRcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9SZXBvcnRDb250ZW50LmpzXG52YXIgcmVxdWlyZV9SZXBvcnRDb250ZW50ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUmVwb3J0Q29udGVudC5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mUmVwb3J0Q29udGVudCA9IGluc3RhbmNlT2ZSZXBvcnRDb250ZW50O1xuXHRleHBvcnRzLlJlcG9ydENvbnRlbnRGcm9tSlNPTiA9IFJlcG9ydENvbnRlbnRGcm9tSlNPTjtcblx0ZXhwb3J0cy5SZXBvcnRDb250ZW50RnJvbUpTT05UeXBlZCA9IFJlcG9ydENvbnRlbnRGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlJlcG9ydENvbnRlbnRUb0pTT04gPSBSZXBvcnRDb250ZW50VG9KU09OO1xuXHRleHBvcnRzLlJlcG9ydENvbnRlbnRUb0pTT05UeXBlZCA9IFJlcG9ydENvbnRlbnRUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgUmVwb3J0Q29udGVudCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZSZXBvcnRDb250ZW50KHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJpZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImlkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBSZXBvcnRDb250ZW50RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBSZXBvcnRDb250ZW50RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUmVwb3J0Q29udGVudEZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvbnRlbnRcIjoganNvbltcImNvbnRlbnRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJjb250ZW50XCJdLFxuXHRcdFx0XCJpZFwiOiBqc29uW1wiaWRcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFJlcG9ydENvbnRlbnRUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBSZXBvcnRDb250ZW50VG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFJlcG9ydENvbnRlbnRUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb250ZW50XCI6IHZhbHVlW1wiY29udGVudFwiXSxcblx0XHRcdFwiaWRcIjogdmFsdWVbXCJpZFwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1R1cm5JbmZvUHJldlVzZXJFdmVudC5qc1xudmFyIHJlcXVpcmVfVHVybkluZm9QcmV2VXNlckV2ZW50ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVHVybkluZm9QcmV2VXNlckV2ZW50LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZUdXJuSW5mb1ByZXZVc2VyRXZlbnQgPSBpbnN0YW5jZU9mVHVybkluZm9QcmV2VXNlckV2ZW50O1xuXHRleHBvcnRzLlR1cm5JbmZvUHJldlVzZXJFdmVudEZyb21KU09OID0gVHVybkluZm9QcmV2VXNlckV2ZW50RnJvbUpTT047XG5cdGV4cG9ydHMuVHVybkluZm9QcmV2VXNlckV2ZW50RnJvbUpTT05UeXBlZCA9IFR1cm5JbmZvUHJldlVzZXJFdmVudEZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuVHVybkluZm9QcmV2VXNlckV2ZW50VG9KU09OID0gVHVybkluZm9QcmV2VXNlckV2ZW50VG9KU09OO1xuXHRleHBvcnRzLlR1cm5JbmZvUHJldlVzZXJFdmVudFRvSlNPTlR5cGVkID0gVHVybkluZm9QcmV2VXNlckV2ZW50VG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFR1cm5JbmZvUHJldlVzZXJFdmVudCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZUdXJuSW5mb1ByZXZVc2VyRXZlbnQodmFsdWUpIHtcblx0XHRpZiAoIShcImNhdGVnb3J5XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY2F0ZWdvcnlcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJpZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gVHVybkluZm9QcmV2VXNlckV2ZW50RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBUdXJuSW5mb1ByZXZVc2VyRXZlbnRGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBUdXJuSW5mb1ByZXZVc2VyRXZlbnRGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjYXRlZ29yeVwiOiBqc29uW1wiY2F0ZWdvcnlcIl0sXG5cdFx0XHRcImlkXCI6IGpzb25bXCJpZFwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gVHVybkluZm9QcmV2VXNlckV2ZW50VG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVHVybkluZm9QcmV2VXNlckV2ZW50VG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFR1cm5JbmZvUHJldlVzZXJFdmVudFRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNhdGVnb3J5XCI6IHZhbHVlW1wiY2F0ZWdvcnlcIl0sXG5cdFx0XHRcImlkXCI6IHZhbHVlW1wiaWRcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9UdXJuSW5mby5qc1xudmFyIHJlcXVpcmVfVHVybkluZm8gPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9UdXJuSW5mby5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mVHVybkluZm8gPSBpbnN0YW5jZU9mVHVybkluZm87XG5cdGV4cG9ydHMuVHVybkluZm9Gcm9tSlNPTiA9IFR1cm5JbmZvRnJvbUpTT047XG5cdGV4cG9ydHMuVHVybkluZm9Gcm9tSlNPTlR5cGVkID0gVHVybkluZm9Gcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlR1cm5JbmZvVG9KU09OID0gVHVybkluZm9Ub0pTT047XG5cdGV4cG9ydHMuVHVybkluZm9Ub0pTT05UeXBlZCA9IFR1cm5JbmZvVG9KU09OVHlwZWQ7XG5cdGNvbnN0IFJlcG9ydENvbnRlbnRfMSA9IHJlcXVpcmVfUmVwb3J0Q29udGVudCgpO1xuXHRjb25zdCBUdXJuSW5mb1ByZXZVc2VyRXZlbnRfMSA9IHJlcXVpcmVfVHVybkluZm9QcmV2VXNlckV2ZW50KCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFR1cm5JbmZvIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlR1cm5JbmZvKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gVHVybkluZm9Gcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFR1cm5JbmZvRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVHVybkluZm9Gcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJtZXNzYWdlX2NvcnJlY3Rpb25cIjoganNvbltcIm1lc3NhZ2VfY29ycmVjdGlvblwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm1lc3NhZ2VfY29ycmVjdGlvblwiXSxcblx0XHRcdFwibWVzc2FnZXNcIjoganNvbltcIm1lc3NhZ2VzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wibWVzc2FnZXNcIl0ubWFwKFJlcG9ydENvbnRlbnRfMS5SZXBvcnRDb250ZW50RnJvbUpTT04pLFxuXHRcdFx0XCJwcmV2X3VzZXJfZXZlbnRcIjoganNvbltcInByZXZfdXNlcl9ldmVudFwiXSA9PSBudWxsID8gdm9pZCAwIDogKDAsIFR1cm5JbmZvUHJldlVzZXJFdmVudF8xLlR1cm5JbmZvUHJldlVzZXJFdmVudEZyb21KU09OKShqc29uW1wicHJldl91c2VyX2V2ZW50XCJdKSxcblx0XHRcdFwic3VnZ2VzdGlvbnNcIjoganNvbltcInN1Z2dlc3Rpb25zXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wic3VnZ2VzdGlvbnNcIl0ubWFwKFJlcG9ydENvbnRlbnRfMS5SZXBvcnRDb250ZW50RnJvbUpTT04pLFxuXHRcdFx0XCJzdWdnZXN0aW9uc19jb3JyZWN0aW9uXCI6IGpzb25bXCJzdWdnZXN0aW9uc19jb3JyZWN0aW9uXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wic3VnZ2VzdGlvbnNfY29ycmVjdGlvblwiXSxcblx0XHRcdFwidHVybl9pZHhcIjoganNvbltcInR1cm5faWR4XCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1widHVybl9pZHhcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFR1cm5JbmZvVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVHVybkluZm9Ub0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVHVybkluZm9Ub0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJtZXNzYWdlX2NvcnJlY3Rpb25cIjogdmFsdWVbXCJtZXNzYWdlX2NvcnJlY3Rpb25cIl0sXG5cdFx0XHRcIm1lc3NhZ2VzXCI6IHZhbHVlW1wibWVzc2FnZXNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IHZhbHVlW1wibWVzc2FnZXNcIl0ubWFwKFJlcG9ydENvbnRlbnRfMS5SZXBvcnRDb250ZW50VG9KU09OKSxcblx0XHRcdFwicHJldl91c2VyX2V2ZW50XCI6ICgwLCBUdXJuSW5mb1ByZXZVc2VyRXZlbnRfMS5UdXJuSW5mb1ByZXZVc2VyRXZlbnRUb0pTT04pKHZhbHVlW1wicHJldl91c2VyX2V2ZW50XCJdKSxcblx0XHRcdFwic3VnZ2VzdGlvbnNcIjogdmFsdWVbXCJzdWdnZXN0aW9uc1wiXSA9PSBudWxsID8gdm9pZCAwIDogdmFsdWVbXCJzdWdnZXN0aW9uc1wiXS5tYXAoUmVwb3J0Q29udGVudF8xLlJlcG9ydENvbnRlbnRUb0pTT04pLFxuXHRcdFx0XCJzdWdnZXN0aW9uc19jb3JyZWN0aW9uXCI6IHZhbHVlW1wic3VnZ2VzdGlvbnNfY29ycmVjdGlvblwiXSxcblx0XHRcdFwidHVybl9pZHhcIjogdmFsdWVbXCJ0dXJuX2lkeFwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1JlcG9ydFNlc3Npb25SZXF1ZXN0LmpzXG52YXIgcmVxdWlyZV9SZXBvcnRTZXNzaW9uUmVxdWVzdCA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1JlcG9ydFNlc3Npb25SZXF1ZXN0LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLlJlcG9ydFNlc3Npb25SZXF1ZXN0UmVwb3J0VHlwZUVudW0gPSBleHBvcnRzLlJlcG9ydFNlc3Npb25SZXF1ZXN0UmVwb3J0UHJpb3JpdHlFbnVtID0gdm9pZCAwO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZSZXBvcnRTZXNzaW9uUmVxdWVzdCA9IGluc3RhbmNlT2ZSZXBvcnRTZXNzaW9uUmVxdWVzdDtcblx0ZXhwb3J0cy5SZXBvcnRTZXNzaW9uUmVxdWVzdEZyb21KU09OID0gUmVwb3J0U2Vzc2lvblJlcXVlc3RGcm9tSlNPTjtcblx0ZXhwb3J0cy5SZXBvcnRTZXNzaW9uUmVxdWVzdEZyb21KU09OVHlwZWQgPSBSZXBvcnRTZXNzaW9uUmVxdWVzdEZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuUmVwb3J0U2Vzc2lvblJlcXVlc3RUb0pTT04gPSBSZXBvcnRTZXNzaW9uUmVxdWVzdFRvSlNPTjtcblx0ZXhwb3J0cy5SZXBvcnRTZXNzaW9uUmVxdWVzdFRvSlNPTlR5cGVkID0gUmVwb3J0U2Vzc2lvblJlcXVlc3RUb0pTT05UeXBlZDtcblx0Y29uc3QgVHVybkluZm9fMSA9IHJlcXVpcmVfVHVybkluZm8oKTtcblx0LyoqXG5cdCogQGV4cG9ydFxuXHQqIEBlbnVtIHtzdHJpbmd9XG5cdCovXG5cdHZhciBSZXBvcnRTZXNzaW9uUmVxdWVzdFJlcG9ydFByaW9yaXR5RW51bTtcblx0KGZ1bmN0aW9uKFJlcG9ydFNlc3Npb25SZXF1ZXN0UmVwb3J0UHJpb3JpdHlFbnVtJDEpIHtcblx0XHRSZXBvcnRTZXNzaW9uUmVxdWVzdFJlcG9ydFByaW9yaXR5RW51bSQxW1wiUDBcIl0gPSBcInAwXCI7XG5cdFx0UmVwb3J0U2Vzc2lvblJlcXVlc3RSZXBvcnRQcmlvcml0eUVudW0kMVtcIlAxXCJdID0gXCJwMVwiO1xuXHRcdFJlcG9ydFNlc3Npb25SZXF1ZXN0UmVwb3J0UHJpb3JpdHlFbnVtJDFbXCJQMlwiXSA9IFwicDJcIjtcblx0XHRSZXBvcnRTZXNzaW9uUmVxdWVzdFJlcG9ydFByaW9yaXR5RW51bSQxW1wiUDNcIl0gPSBcInAzXCI7XG5cdFx0UmVwb3J0U2Vzc2lvblJlcXVlc3RSZXBvcnRQcmlvcml0eUVudW0kMVtcIk5vUHJpb3JpdHlcIl0gPSBcIm5vIHByaW9yaXR5XCI7XG5cdH0pKFJlcG9ydFNlc3Npb25SZXF1ZXN0UmVwb3J0UHJpb3JpdHlFbnVtIHx8IChleHBvcnRzLlJlcG9ydFNlc3Npb25SZXF1ZXN0UmVwb3J0UHJpb3JpdHlFbnVtID0gUmVwb3J0U2Vzc2lvblJlcXVlc3RSZXBvcnRQcmlvcml0eUVudW0gPSB7fSkpO1xuXHQvKipcblx0KiBAZXhwb3J0XG5cdCogQGVudW0ge3N0cmluZ31cblx0Ki9cblx0dmFyIFJlcG9ydFNlc3Npb25SZXF1ZXN0UmVwb3J0VHlwZUVudW07XG5cdChmdW5jdGlvbihSZXBvcnRTZXNzaW9uUmVxdWVzdFJlcG9ydFR5cGVFbnVtJDEpIHtcblx0XHRSZXBvcnRTZXNzaW9uUmVxdWVzdFJlcG9ydFR5cGVFbnVtJDFbXCJNZXNzYWdlXCJdID0gXCJtZXNzYWdlXCI7XG5cdFx0UmVwb3J0U2Vzc2lvblJlcXVlc3RSZXBvcnRUeXBlRW51bSQxW1wiU3VnZ2VzdGlvblwiXSA9IFwic3VnZ2VzdGlvblwiO1xuXHRcdFJlcG9ydFNlc3Npb25SZXF1ZXN0UmVwb3J0VHlwZUVudW0kMVtcIlNlc3Npb25cIl0gPSBcInNlc3Npb25cIjtcblx0XHRSZXBvcnRTZXNzaW9uUmVxdWVzdFJlcG9ydFR5cGVFbnVtJDFbXCJUdXJuXCJdID0gXCJ0dXJuXCI7XG5cdH0pKFJlcG9ydFNlc3Npb25SZXF1ZXN0UmVwb3J0VHlwZUVudW0gfHwgKGV4cG9ydHMuUmVwb3J0U2Vzc2lvblJlcXVlc3RSZXBvcnRUeXBlRW51bSA9IFJlcG9ydFNlc3Npb25SZXF1ZXN0UmVwb3J0VHlwZUVudW0gPSB7fSkpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBSZXBvcnRTZXNzaW9uUmVxdWVzdCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZSZXBvcnRTZXNzaW9uUmVxdWVzdCh2YWx1ZSkge1xuXHRcdGlmICghKFwidXNlcl9pZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInVzZXJfaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFJlcG9ydFNlc3Npb25SZXF1ZXN0RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBSZXBvcnRTZXNzaW9uUmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFJlcG9ydFNlc3Npb25SZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29ycmVjdF9zZXNzaW9uXCI6IGpzb25bXCJjb3JyZWN0X3Nlc3Npb25cIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJjb3JyZWN0X3Nlc3Npb25cIl0sXG5cdFx0XHRcImNvcnJlY3RlZFwiOiBqc29uW1wiY29ycmVjdGVkXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiY29ycmVjdGVkXCJdLFxuXHRcdFx0XCJvcmdfc2hvcnRfbmFtZVwiOiBqc29uW1wib3JnX3Nob3J0X25hbWVcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJvcmdfc2hvcnRfbmFtZVwiXSxcblx0XHRcdFwicmVhc29uXCI6IGpzb25bXCJyZWFzb25cIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJyZWFzb25cIl0sXG5cdFx0XHRcInJlcG9ydF9wcmlvcml0eVwiOiBqc29uW1wicmVwb3J0X3ByaW9yaXR5XCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wicmVwb3J0X3ByaW9yaXR5XCJdLFxuXHRcdFx0XCJyZXBvcnRfdHlwZVwiOiBqc29uW1wicmVwb3J0X3R5cGVcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJyZXBvcnRfdHlwZVwiXSxcblx0XHRcdFwicmVwb3J0ZWRfYnlcIjoganNvbltcInJlcG9ydGVkX2J5XCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wicmVwb3J0ZWRfYnlcIl0sXG5cdFx0XHRcInR1cm5faW5mb1wiOiBqc29uW1widHVybl9pbmZvXCJdID09IG51bGwgPyB2b2lkIDAgOiAoMCwgVHVybkluZm9fMS5UdXJuSW5mb0Zyb21KU09OKShqc29uW1widHVybl9pbmZvXCJdKSxcblx0XHRcdFwidXNlcl9pZFwiOiBqc29uW1widXNlcl9pZFwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gUmVwb3J0U2Vzc2lvblJlcXVlc3RUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBSZXBvcnRTZXNzaW9uUmVxdWVzdFRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBSZXBvcnRTZXNzaW9uUmVxdWVzdFRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvcnJlY3Rfc2Vzc2lvblwiOiB2YWx1ZVtcImNvcnJlY3Rfc2Vzc2lvblwiXSxcblx0XHRcdFwiY29ycmVjdGVkXCI6IHZhbHVlW1wiY29ycmVjdGVkXCJdLFxuXHRcdFx0XCJvcmdfc2hvcnRfbmFtZVwiOiB2YWx1ZVtcIm9yZ19zaG9ydF9uYW1lXCJdLFxuXHRcdFx0XCJyZWFzb25cIjogdmFsdWVbXCJyZWFzb25cIl0sXG5cdFx0XHRcInJlcG9ydF9wcmlvcml0eVwiOiB2YWx1ZVtcInJlcG9ydF9wcmlvcml0eVwiXSxcblx0XHRcdFwicmVwb3J0X3R5cGVcIjogdmFsdWVbXCJyZXBvcnRfdHlwZVwiXSxcblx0XHRcdFwicmVwb3J0ZWRfYnlcIjogdmFsdWVbXCJyZXBvcnRlZF9ieVwiXSxcblx0XHRcdFwidHVybl9pbmZvXCI6ICgwLCBUdXJuSW5mb18xLlR1cm5JbmZvVG9KU09OKSh2YWx1ZVtcInR1cm5faW5mb1wiXSksXG5cdFx0XHRcInVzZXJfaWRcIjogdmFsdWVbXCJ1c2VyX2lkXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUmVzcG9uc2VDYXRlZ29yeS5qc1xudmFyIHJlcXVpcmVfUmVzcG9uc2VDYXRlZ29yeSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1Jlc3BvbnNlQ2F0ZWdvcnkuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuUmVzcG9uc2VDYXRlZ29yeSA9IHZvaWQgMDtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mUmVzcG9uc2VDYXRlZ29yeSA9IGluc3RhbmNlT2ZSZXNwb25zZUNhdGVnb3J5O1xuXHRleHBvcnRzLlJlc3BvbnNlQ2F0ZWdvcnlGcm9tSlNPTiA9IFJlc3BvbnNlQ2F0ZWdvcnlGcm9tSlNPTjtcblx0ZXhwb3J0cy5SZXNwb25zZUNhdGVnb3J5RnJvbUpTT05UeXBlZCA9IFJlc3BvbnNlQ2F0ZWdvcnlGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlJlc3BvbnNlQ2F0ZWdvcnlUb0pTT04gPSBSZXNwb25zZUNhdGVnb3J5VG9KU09OO1xuXHRleHBvcnRzLlJlc3BvbnNlQ2F0ZWdvcnlUb0pTT05UeXBlZCA9IFJlc3BvbnNlQ2F0ZWdvcnlUb0pTT05UeXBlZDtcblx0LyoqXG5cdCpcblx0KiBAZXhwb3J0XG5cdCogQGVudW0ge3N0cmluZ31cblx0Ki9cblx0dmFyIFJlc3BvbnNlQ2F0ZWdvcnk7XG5cdChmdW5jdGlvbihSZXNwb25zZUNhdGVnb3J5JDEpIHtcblx0XHRSZXNwb25zZUNhdGVnb3J5JDFbXCJUZXh0XCJdID0gXCJ0ZXh0XCI7XG5cdFx0UmVzcG9uc2VDYXRlZ29yeSQxW1wiUHJvZHVjdFwiXSA9IFwicHJvZHVjdFwiO1xuXHRcdFJlc3BvbnNlQ2F0ZWdvcnkkMVtcIlJldmlld1wiXSA9IFwicmV2aWV3XCI7XG5cdFx0UmVzcG9uc2VDYXRlZ29yeSQxW1wiTm9uZVwiXSA9IFwibm9uZVwiO1xuXHRcdFJlc3BvbnNlQ2F0ZWdvcnkkMVtcIlNlcGFyYXRvclwiXSA9IFwic2VwYXJhdG9yXCI7XG5cdFx0UmVzcG9uc2VDYXRlZ29yeSQxW1wiUGFnZVwiXSA9IFwicGFnZVwiO1xuXHRcdFJlc3BvbnNlQ2F0ZWdvcnkkMVtcIkZvcm1cIl0gPSBcImZvcm1cIjtcblx0XHRSZXNwb25zZUNhdGVnb3J5JDFbXCJQcm9kdWN0U2VhcmNoXCJdID0gXCJwcm9kdWN0X3NlYXJjaFwiO1xuXHRcdFJlc3BvbnNlQ2F0ZWdvcnkkMVtcIk9yZGVyXCJdID0gXCJvcmRlclwiO1xuXHRcdFJlc3BvbnNlQ2F0ZWdvcnkkMVtcIlByb2R1Y3RTZWFyY2hGaWx0ZXJcIl0gPSBcInByb2R1Y3Rfc2VhcmNoX2ZpbHRlclwiO1xuXHR9KShSZXNwb25zZUNhdGVnb3J5IHx8IChleHBvcnRzLlJlc3BvbnNlQ2F0ZWdvcnkgPSBSZXNwb25zZUNhdGVnb3J5ID0ge30pKTtcblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlJlc3BvbnNlQ2F0ZWdvcnkodmFsdWUpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBSZXNwb25zZUNhdGVnb3J5KSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFJlc3BvbnNlQ2F0ZWdvcnksIGtleSkpIHtcblx0XHRcdGlmIChSZXNwb25zZUNhdGVnb3J5W2tleV0gPT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGZ1bmN0aW9uIFJlc3BvbnNlQ2F0ZWdvcnlGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFJlc3BvbnNlQ2F0ZWdvcnlGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBSZXNwb25zZUNhdGVnb3J5RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0cmV0dXJuIGpzb247XG5cdH1cblx0ZnVuY3Rpb24gUmVzcG9uc2VDYXRlZ29yeVRvSlNPTih2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRmdW5jdGlvbiBSZXNwb25zZUNhdGVnb3J5VG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1Jlc3BvbnNlLmpzXG52YXIgcmVxdWlyZV9SZXNwb25zZSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1Jlc3BvbnNlLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZSZXNwb25zZSA9IGluc3RhbmNlT2ZSZXNwb25zZTtcblx0ZXhwb3J0cy5SZXNwb25zZUZyb21KU09OID0gUmVzcG9uc2VGcm9tSlNPTjtcblx0ZXhwb3J0cy5SZXNwb25zZUZyb21KU09OVHlwZWQgPSBSZXNwb25zZUZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuUmVzcG9uc2VUb0pTT04gPSBSZXNwb25zZVRvSlNPTjtcblx0ZXhwb3J0cy5SZXNwb25zZVRvSlNPTlR5cGVkID0gUmVzcG9uc2VUb0pTT05UeXBlZDtcblx0Y29uc3QgUmVzcG9uc2VDYXRlZ29yeV8xID0gcmVxdWlyZV9SZXNwb25zZUNhdGVnb3J5KCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFJlc3BvbnNlIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlJlc3BvbnNlKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJhdHRyaWJ1dGVzXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiYXR0cmlidXRlc1wiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJjYXRlZ29yeVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNhdGVnb3J5XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImNyZWF0ZWRfYXRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJjcmVhdGVkX2F0XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImlkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFJlc3BvbnNlRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBSZXNwb25zZUZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFJlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiYXR0cmlidXRlc1wiOiBqc29uW1wiYXR0cmlidXRlc1wiXSxcblx0XHRcdFwiY2F0ZWdvcnlcIjogKDAsIFJlc3BvbnNlQ2F0ZWdvcnlfMS5SZXNwb25zZUNhdGVnb3J5RnJvbUpTT04pKGpzb25bXCJjYXRlZ29yeVwiXSksXG5cdFx0XHRcImNyZWF0ZWRfYXRcIjoganNvbltcImNyZWF0ZWRfYXRcIl0sXG5cdFx0XHRcImlkXCI6IGpzb25bXCJpZFwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gUmVzcG9uc2VUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBSZXNwb25zZVRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBSZXNwb25zZVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImF0dHJpYnV0ZXNcIjogdmFsdWVbXCJhdHRyaWJ1dGVzXCJdLFxuXHRcdFx0XCJjYXRlZ29yeVwiOiAoMCwgUmVzcG9uc2VDYXRlZ29yeV8xLlJlc3BvbnNlQ2F0ZWdvcnlUb0pTT04pKHZhbHVlW1wiY2F0ZWdvcnlcIl0pLFxuXHRcdFx0XCJjcmVhdGVkX2F0XCI6IHZhbHVlW1wiY3JlYXRlZF9hdFwiXSxcblx0XHRcdFwiaWRcIjogdmFsdWVbXCJpZFwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1NlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2UuanNcbnZhciByZXF1aXJlX1NlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2UgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TZWFyY2hTdWdnZXN0aW9uc1Jlc3BvbnNlLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZTZWFyY2hTdWdnZXN0aW9uc1Jlc3BvbnNlID0gaW5zdGFuY2VPZlNlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2U7XG5cdGV4cG9ydHMuU2VhcmNoU3VnZ2VzdGlvbnNSZXNwb25zZUZyb21KU09OID0gU2VhcmNoU3VnZ2VzdGlvbnNSZXNwb25zZUZyb21KU09OO1xuXHRleHBvcnRzLlNlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2VGcm9tSlNPTlR5cGVkID0gU2VhcmNoU3VnZ2VzdGlvbnNSZXNwb25zZUZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuU2VhcmNoU3VnZ2VzdGlvbnNSZXNwb25zZVRvSlNPTiA9IFNlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2VUb0pTT047XG5cdGV4cG9ydHMuU2VhcmNoU3VnZ2VzdGlvbnNSZXNwb25zZVRvSlNPTlR5cGVkID0gU2VhcmNoU3VnZ2VzdGlvbnNSZXNwb25zZVRvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBTZWFyY2hTdWdnZXN0aW9uc1Jlc3BvbnNlIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlNlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2UodmFsdWUpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBTZWFyY2hTdWdnZXN0aW9uc1Jlc3BvbnNlRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBTZWFyY2hTdWdnZXN0aW9uc1Jlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gU2VhcmNoU3VnZ2VzdGlvbnNSZXNwb25zZUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcInNlYXJjaF90ZXJtc1wiOiBqc29uW1wic2VhcmNoX3Rlcm1zXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wic2VhcmNoX3Rlcm1zXCJdLFxuXHRcdFx0XCJzdWdnZXN0ZWRfc2VhcmNoZXNcIjoganNvbltcInN1Z2dlc3RlZF9zZWFyY2hlc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInN1Z2dlc3RlZF9zZWFyY2hlc1wiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gU2VhcmNoU3VnZ2VzdGlvbnNSZXNwb25zZVRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFNlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2VUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gU2VhcmNoU3VnZ2VzdGlvbnNSZXNwb25zZVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcInNlYXJjaF90ZXJtc1wiOiB2YWx1ZVtcInNlYXJjaF90ZXJtc1wiXSxcblx0XHRcdFwic3VnZ2VzdGVkX3NlYXJjaGVzXCI6IHZhbHVlW1wic3VnZ2VzdGVkX3NlYXJjaGVzXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU2VuZE1lc3NhZ2VSZXF1ZXN0LmpzXG52YXIgcmVxdWlyZV9TZW5kTWVzc2FnZVJlcXVlc3QgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TZW5kTWVzc2FnZVJlcXVlc3QuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlNlbmRNZXNzYWdlUmVxdWVzdCA9IGluc3RhbmNlT2ZTZW5kTWVzc2FnZVJlcXVlc3Q7XG5cdGV4cG9ydHMuU2VuZE1lc3NhZ2VSZXF1ZXN0RnJvbUpTT04gPSBTZW5kTWVzc2FnZVJlcXVlc3RGcm9tSlNPTjtcblx0ZXhwb3J0cy5TZW5kTWVzc2FnZVJlcXVlc3RGcm9tSlNPTlR5cGVkID0gU2VuZE1lc3NhZ2VSZXF1ZXN0RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5TZW5kTWVzc2FnZVJlcXVlc3RUb0pTT04gPSBTZW5kTWVzc2FnZVJlcXVlc3RUb0pTT047XG5cdGV4cG9ydHMuU2VuZE1lc3NhZ2VSZXF1ZXN0VG9KU09OVHlwZWQgPSBTZW5kTWVzc2FnZVJlcXVlc3RUb0pTT05UeXBlZDtcblx0Y29uc3QgQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJfMSA9IHJlcXVpcmVfQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIoKTtcblx0Y29uc3QgQXR0YWNobWVudFJlcXVlc3RfMSA9IHJlcXVpcmVfQXR0YWNobWVudFJlcXVlc3QoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgU2VuZE1lc3NhZ2VSZXF1ZXN0IGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlNlbmRNZXNzYWdlUmVxdWVzdCh2YWx1ZSkge1xuXHRcdGlmICghKFwiY29udmVyc2F0aW9uX2lkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY29udmVyc2F0aW9uX2lkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImN1c3RvbWVyX2lkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY3VzdG9tZXJfaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwibWVzc2FnZVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcIm1lc3NhZ2VcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFNlbmRNZXNzYWdlUmVxdWVzdEZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU2VuZE1lc3NhZ2VSZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gU2VuZE1lc3NhZ2VSZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiYXR0YWNobWVudHNcIjoganNvbltcImF0dGFjaG1lbnRzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiYXR0YWNobWVudHNcIl0ubWFwKEF0dGFjaG1lbnRSZXF1ZXN0XzEuQXR0YWNobWVudFJlcXVlc3RGcm9tSlNPTiksXG5cdFx0XHRcImNvbnZlcnNhdGlvbl9pZFwiOiBqc29uW1wiY29udmVyc2F0aW9uX2lkXCJdLFxuXHRcdFx0XCJjdXN0b21lcl9pZFwiOiBqc29uW1wiY3VzdG9tZXJfaWRcIl0sXG5cdFx0XHRcImN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXJcIjoganNvbltcImN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXJcIl0gPT0gbnVsbCA/IHZvaWQgMCA6ICgwLCBDdXN0b21lclNlcnZpY2VQcm92aWRlcl8xLkN1c3RvbWVyU2VydmljZVByb3ZpZGVyRnJvbUpTT04pKGpzb25bXCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCJdKSxcblx0XHRcdFwibWVzc2FnZVwiOiBqc29uW1wibWVzc2FnZVwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gU2VuZE1lc3NhZ2VSZXF1ZXN0VG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU2VuZE1lc3NhZ2VSZXF1ZXN0VG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFNlbmRNZXNzYWdlUmVxdWVzdFRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImF0dGFjaG1lbnRzXCI6IHZhbHVlW1wiYXR0YWNobWVudHNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IHZhbHVlW1wiYXR0YWNobWVudHNcIl0ubWFwKEF0dGFjaG1lbnRSZXF1ZXN0XzEuQXR0YWNobWVudFJlcXVlc3RUb0pTT04pLFxuXHRcdFx0XCJjb252ZXJzYXRpb25faWRcIjogdmFsdWVbXCJjb252ZXJzYXRpb25faWRcIl0sXG5cdFx0XHRcImN1c3RvbWVyX2lkXCI6IHZhbHVlW1wiY3VzdG9tZXJfaWRcIl0sXG5cdFx0XHRcImN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXJcIjogKDAsIEN1c3RvbWVyU2VydmljZVByb3ZpZGVyXzEuQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJUb0pTT04pKHZhbHVlW1wiY3VzdG9tZXJfc2VydmljZV9wcm92aWRlclwiXSksXG5cdFx0XHRcIm1lc3NhZ2VcIjogdmFsdWVbXCJtZXNzYWdlXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU2VuZE1lc3NhZ2VSZXNwb25zZS5qc1xudmFyIHJlcXVpcmVfU2VuZE1lc3NhZ2VSZXNwb25zZSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1NlbmRNZXNzYWdlUmVzcG9uc2UuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlNlbmRNZXNzYWdlUmVzcG9uc2UgPSBpbnN0YW5jZU9mU2VuZE1lc3NhZ2VSZXNwb25zZTtcblx0ZXhwb3J0cy5TZW5kTWVzc2FnZVJlc3BvbnNlRnJvbUpTT04gPSBTZW5kTWVzc2FnZVJlc3BvbnNlRnJvbUpTT047XG5cdGV4cG9ydHMuU2VuZE1lc3NhZ2VSZXNwb25zZUZyb21KU09OVHlwZWQgPSBTZW5kTWVzc2FnZVJlc3BvbnNlRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5TZW5kTWVzc2FnZVJlc3BvbnNlVG9KU09OID0gU2VuZE1lc3NhZ2VSZXNwb25zZVRvSlNPTjtcblx0ZXhwb3J0cy5TZW5kTWVzc2FnZVJlc3BvbnNlVG9KU09OVHlwZWQgPSBTZW5kTWVzc2FnZVJlc3BvbnNlVG9KU09OVHlwZWQ7XG5cdGNvbnN0IEN1c3RTZXJ2aWNlTWVzc2FnZV8xID0gcmVxdWlyZV9DdXN0U2VydmljZU1lc3NhZ2UoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgU2VuZE1lc3NhZ2VSZXNwb25zZSBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZTZW5kTWVzc2FnZVJlc3BvbnNlKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJtZXNzYWdlXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wibWVzc2FnZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gU2VuZE1lc3NhZ2VSZXNwb25zZUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU2VuZE1lc3NhZ2VSZXNwb25zZUZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFNlbmRNZXNzYWdlUmVzcG9uc2VGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4geyBcIm1lc3NhZ2VcIjogKDAsIEN1c3RTZXJ2aWNlTWVzc2FnZV8xLkN1c3RTZXJ2aWNlTWVzc2FnZUZyb21KU09OKShqc29uW1wibWVzc2FnZVwiXSkgfTtcblx0fVxuXHRmdW5jdGlvbiBTZW5kTWVzc2FnZVJlc3BvbnNlVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU2VuZE1lc3NhZ2VSZXNwb25zZVRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBTZW5kTWVzc2FnZVJlc3BvbnNlVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHsgXCJtZXNzYWdlXCI6ICgwLCBDdXN0U2VydmljZU1lc3NhZ2VfMS5DdXN0U2VydmljZU1lc3NhZ2VUb0pTT04pKHZhbHVlW1wibWVzc2FnZVwiXSkgfTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU3VnZ2VzdGlvbkNhdGVnb3J5LmpzXG52YXIgcmVxdWlyZV9TdWdnZXN0aW9uQ2F0ZWdvcnkgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TdWdnZXN0aW9uQ2F0ZWdvcnkuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuU3VnZ2VzdGlvbkNhdGVnb3J5ID0gdm9pZCAwO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZTdWdnZXN0aW9uQ2F0ZWdvcnkgPSBpbnN0YW5jZU9mU3VnZ2VzdGlvbkNhdGVnb3J5O1xuXHRleHBvcnRzLlN1Z2dlc3Rpb25DYXRlZ29yeUZyb21KU09OID0gU3VnZ2VzdGlvbkNhdGVnb3J5RnJvbUpTT047XG5cdGV4cG9ydHMuU3VnZ2VzdGlvbkNhdGVnb3J5RnJvbUpTT05UeXBlZCA9IFN1Z2dlc3Rpb25DYXRlZ29yeUZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuU3VnZ2VzdGlvbkNhdGVnb3J5VG9KU09OID0gU3VnZ2VzdGlvbkNhdGVnb3J5VG9KU09OO1xuXHRleHBvcnRzLlN1Z2dlc3Rpb25DYXRlZ29yeVRvSlNPTlR5cGVkID0gU3VnZ2VzdGlvbkNhdGVnb3J5VG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqXG5cdCogQGV4cG9ydFxuXHQqIEBlbnVtIHtzdHJpbmd9XG5cdCovXG5cdHZhciBTdWdnZXN0aW9uQ2F0ZWdvcnk7XG5cdChmdW5jdGlvbihTdWdnZXN0aW9uQ2F0ZWdvcnkkMSkge1xuXHRcdFN1Z2dlc3Rpb25DYXRlZ29yeSQxW1wiTm9Db250ZXh0XCJdID0gXCJub19jb250ZXh0XCI7XG5cdFx0U3VnZ2VzdGlvbkNhdGVnb3J5JDFbXCJQcm9kdWN0QmFzZWRcIl0gPSBcInByb2R1Y3RfYmFzZWRcIjtcblx0XHRTdWdnZXN0aW9uQ2F0ZWdvcnkkMVtcIlJldmlld0Jhc2VkXCJdID0gXCJyZXZpZXdfYmFzZWRcIjtcblx0fSkoU3VnZ2VzdGlvbkNhdGVnb3J5IHx8IChleHBvcnRzLlN1Z2dlc3Rpb25DYXRlZ29yeSA9IFN1Z2dlc3Rpb25DYXRlZ29yeSA9IHt9KSk7XG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZTdWdnZXN0aW9uQ2F0ZWdvcnkodmFsdWUpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBTdWdnZXN0aW9uQ2F0ZWdvcnkpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoU3VnZ2VzdGlvbkNhdGVnb3J5LCBrZXkpKSB7XG5cdFx0XHRpZiAoU3VnZ2VzdGlvbkNhdGVnb3J5W2tleV0gPT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGZ1bmN0aW9uIFN1Z2dlc3Rpb25DYXRlZ29yeUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU3VnZ2VzdGlvbkNhdGVnb3J5RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gU3VnZ2VzdGlvbkNhdGVnb3J5RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0cmV0dXJuIGpzb247XG5cdH1cblx0ZnVuY3Rpb24gU3VnZ2VzdGlvbkNhdGVnb3J5VG9KU09OKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdGZ1bmN0aW9uIFN1Z2dlc3Rpb25DYXRlZ29yeVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TdWdnZXN0aW9uLmpzXG52YXIgcmVxdWlyZV9TdWdnZXN0aW9uID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU3VnZ2VzdGlvbi5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mU3VnZ2VzdGlvbiA9IGluc3RhbmNlT2ZTdWdnZXN0aW9uO1xuXHRleHBvcnRzLlN1Z2dlc3Rpb25Gcm9tSlNPTiA9IFN1Z2dlc3Rpb25Gcm9tSlNPTjtcblx0ZXhwb3J0cy5TdWdnZXN0aW9uRnJvbUpTT05UeXBlZCA9IFN1Z2dlc3Rpb25Gcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlN1Z2dlc3Rpb25Ub0pTT04gPSBTdWdnZXN0aW9uVG9KU09OO1xuXHRleHBvcnRzLlN1Z2dlc3Rpb25Ub0pTT05UeXBlZCA9IFN1Z2dlc3Rpb25Ub0pTT05UeXBlZDtcblx0Y29uc3QgU3VnZ2VzdGlvbkNhdGVnb3J5XzEgPSByZXF1aXJlX1N1Z2dlc3Rpb25DYXRlZ29yeSgpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBTdWdnZXN0aW9uIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlN1Z2dlc3Rpb24odmFsdWUpIHtcblx0XHRpZiAoIShcImNhdGVnb3J5XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY2F0ZWdvcnlcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiY29udGVudFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNvbnRlbnRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiY3JlYXRlZF9hdFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNyZWF0ZWRfYXRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJpZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gU3VnZ2VzdGlvbkZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU3VnZ2VzdGlvbkZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFN1Z2dlc3Rpb25Gcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjYXRlZ29yeVwiOiAoMCwgU3VnZ2VzdGlvbkNhdGVnb3J5XzEuU3VnZ2VzdGlvbkNhdGVnb3J5RnJvbUpTT04pKGpzb25bXCJjYXRlZ29yeVwiXSksXG5cdFx0XHRcImNvbnRlbnRcIjoganNvbltcImNvbnRlbnRcIl0sXG5cdFx0XHRcImNyZWF0ZWRfYXRcIjoganNvbltcImNyZWF0ZWRfYXRcIl0sXG5cdFx0XHRcImlkXCI6IGpzb25bXCJpZFwiXSxcblx0XHRcdFwiaXNfYW5zd2VyXCI6IGpzb25bXCJpc19hbnN3ZXJcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJpc19hbnN3ZXJcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFN1Z2dlc3Rpb25Ub0pTT04oanNvbikge1xuXHRcdHJldHVybiBTdWdnZXN0aW9uVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFN1Z2dlc3Rpb25Ub0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjYXRlZ29yeVwiOiAoMCwgU3VnZ2VzdGlvbkNhdGVnb3J5XzEuU3VnZ2VzdGlvbkNhdGVnb3J5VG9KU09OKSh2YWx1ZVtcImNhdGVnb3J5XCJdKSxcblx0XHRcdFwiY29udGVudFwiOiB2YWx1ZVtcImNvbnRlbnRcIl0sXG5cdFx0XHRcImNyZWF0ZWRfYXRcIjogdmFsdWVbXCJjcmVhdGVkX2F0XCJdLFxuXHRcdFx0XCJpZFwiOiB2YWx1ZVtcImlkXCJdLFxuXHRcdFx0XCJpc19hbnN3ZXJcIjogdmFsdWVbXCJpc19hbnN3ZXJcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeS5qc1xudmFyIHJlcXVpcmVfU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnkgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5TdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeSA9IHZvaWQgMDtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnkgPSBpbnN0YW5jZU9mU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnk7XG5cdGV4cG9ydHMuU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnlGcm9tSlNPTiA9IFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5RnJvbUpTT047XG5cdGV4cG9ydHMuU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnlGcm9tSlNPTlR5cGVkID0gU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnlGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5VG9KU09OID0gU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnlUb0pTT047XG5cdGV4cG9ydHMuU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnlUb0pTT05UeXBlZCA9IFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5VG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqXG5cdCogQGV4cG9ydFxuXHQqIEBlbnVtIHtzdHJpbmd9XG5cdCovXG5cdHZhciBTdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeTtcblx0KGZ1bmN0aW9uKFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5JDEpIHtcblx0XHRTdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeSQxW1wiUHJvZHVjdFwiXSA9IFwicHJvZHVjdFwiO1xuXHRcdFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5JDFbXCJTaGFwZXdlYXJcIl0gPSBcInNoYXBld2VhclwiO1xuXHRcdFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5JDFbXCJOb25TaGFwZXdlYXJcIl0gPSBcIm5vbi1zaGFwZXdlYXJcIjtcblx0fSkoU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnkgfHwgKGV4cG9ydHMuU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnkgPSBTdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeSA9IHt9KSk7XG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZTdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeSh2YWx1ZSkge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5KSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5LCBrZXkpKSB7XG5cdFx0XHRpZiAoU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnlba2V5XSA9PT0gdmFsdWUpIHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0ZnVuY3Rpb24gU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnlGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnlGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRyZXR1cm4ganNvbjtcblx0fVxuXHRmdW5jdGlvbiBTdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeVRvSlNPTih2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRmdW5jdGlvbiBTdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TdXBwb3J0ZWRFdmVudFJlcXVlc3QuanNcbnZhciByZXF1aXJlX1N1cHBvcnRlZEV2ZW50UmVxdWVzdCA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1N1cHBvcnRlZEV2ZW50UmVxdWVzdC5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mU3VwcG9ydGVkRXZlbnRSZXF1ZXN0ID0gaW5zdGFuY2VPZlN1cHBvcnRlZEV2ZW50UmVxdWVzdDtcblx0ZXhwb3J0cy5TdXBwb3J0ZWRFdmVudFJlcXVlc3RGcm9tSlNPTiA9IFN1cHBvcnRlZEV2ZW50UmVxdWVzdEZyb21KU09OO1xuXHRleHBvcnRzLlN1cHBvcnRlZEV2ZW50UmVxdWVzdEZyb21KU09OVHlwZWQgPSBTdXBwb3J0ZWRFdmVudFJlcXVlc3RGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlN1cHBvcnRlZEV2ZW50UmVxdWVzdFRvSlNPTiA9IFN1cHBvcnRlZEV2ZW50UmVxdWVzdFRvSlNPTjtcblx0ZXhwb3J0cy5TdXBwb3J0ZWRFdmVudFJlcXVlc3RUb0pTT05UeXBlZCA9IFN1cHBvcnRlZEV2ZW50UmVxdWVzdFRvSlNPTlR5cGVkO1xuXHRjb25zdCBDb250ZXh0XzEkMSA9IHJlcXVpcmVfQ29udGV4dCgpO1xuXHRjb25zdCBVc2VyRXZlbnRfMSQyID0gcmVxdWlyZV9Vc2VyRXZlbnQoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgU3VwcG9ydGVkRXZlbnRSZXF1ZXN0IGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlN1cHBvcnRlZEV2ZW50UmVxdWVzdCh2YWx1ZSkge1xuXHRcdGlmICghKFwiY29udGV4dFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNvbnRleHRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJpZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJ1c2VyX2V2ZW50XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1widXNlcl9ldmVudFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gU3VwcG9ydGVkRXZlbnRSZXF1ZXN0RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBTdXBwb3J0ZWRFdmVudFJlcXVlc3RGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBTdXBwb3J0ZWRFdmVudFJlcXVlc3RGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb250ZXh0XCI6ICgwLCBDb250ZXh0XzEkMS5Db250ZXh0RnJvbUpTT04pKGpzb25bXCJjb250ZXh0XCJdKSxcblx0XHRcdFwiaWRcIjoganNvbltcImlkXCJdLFxuXHRcdFx0XCJ1c2VyX2V2ZW50XCI6ICgwLCBVc2VyRXZlbnRfMSQyLlVzZXJFdmVudEZyb21KU09OKShqc29uW1widXNlcl9ldmVudFwiXSlcblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFN1cHBvcnRlZEV2ZW50UmVxdWVzdFRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFN1cHBvcnRlZEV2ZW50UmVxdWVzdFRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBTdXBwb3J0ZWRFdmVudFJlcXVlc3RUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb250ZXh0XCI6ICgwLCBDb250ZXh0XzEkMS5Db250ZXh0VG9KU09OKSh2YWx1ZVtcImNvbnRleHRcIl0pLFxuXHRcdFx0XCJpZFwiOiB2YWx1ZVtcImlkXCJdLFxuXHRcdFx0XCJ1c2VyX2V2ZW50XCI6ICgwLCBVc2VyRXZlbnRfMSQyLlVzZXJFdmVudFRvSlNPTikodmFsdWVbXCJ1c2VyX2V2ZW50XCJdKVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1N1cHBvcnRlZEV2ZW50UmVzcG9uc2UuanNcbnZhciByZXF1aXJlX1N1cHBvcnRlZEV2ZW50UmVzcG9uc2UgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TdXBwb3J0ZWRFdmVudFJlc3BvbnNlLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZTdXBwb3J0ZWRFdmVudFJlc3BvbnNlID0gaW5zdGFuY2VPZlN1cHBvcnRlZEV2ZW50UmVzcG9uc2U7XG5cdGV4cG9ydHMuU3VwcG9ydGVkRXZlbnRSZXNwb25zZUZyb21KU09OID0gU3VwcG9ydGVkRXZlbnRSZXNwb25zZUZyb21KU09OO1xuXHRleHBvcnRzLlN1cHBvcnRlZEV2ZW50UmVzcG9uc2VGcm9tSlNPTlR5cGVkID0gU3VwcG9ydGVkRXZlbnRSZXNwb25zZUZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuU3VwcG9ydGVkRXZlbnRSZXNwb25zZVRvSlNPTiA9IFN1cHBvcnRlZEV2ZW50UmVzcG9uc2VUb0pTT047XG5cdGV4cG9ydHMuU3VwcG9ydGVkRXZlbnRSZXNwb25zZVRvSlNPTlR5cGVkID0gU3VwcG9ydGVkRXZlbnRSZXNwb25zZVRvSlNPTlR5cGVkO1xuXHRjb25zdCBTdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeV8xID0gcmVxdWlyZV9TdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeSgpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBTdXBwb3J0ZWRFdmVudFJlc3BvbnNlIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlN1cHBvcnRlZEV2ZW50UmVzcG9uc2UodmFsdWUpIHtcblx0XHRpZiAoIShcImNyZWF0ZWRfYXRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJjcmVhdGVkX2F0XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImlkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwicmVhZHlcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJyZWFkeVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJzdXBwb3J0ZWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJzdXBwb3J0ZWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFN1cHBvcnRlZEV2ZW50UmVzcG9uc2VGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFN1cHBvcnRlZEV2ZW50UmVzcG9uc2VGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBTdXBwb3J0ZWRFdmVudFJlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY2F0ZWdvcnlcIjoganNvbltcImNhdGVnb3J5XCJdID09IG51bGwgPyB2b2lkIDAgOiAoMCwgU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnlfMS5TdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeUZyb21KU09OKShqc29uW1wiY2F0ZWdvcnlcIl0pLFxuXHRcdFx0XCJjb2xsZWN0aW9uc1wiOiBqc29uW1wiY29sbGVjdGlvbnNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJjb2xsZWN0aW9uc1wiXSxcblx0XHRcdFwiY3JlYXRlZF9hdFwiOiBqc29uW1wiY3JlYXRlZF9hdFwiXSxcblx0XHRcdFwiaWRcIjoganNvbltcImlkXCJdLFxuXHRcdFx0XCJtZXJjaGFudF90YWdzXCI6IGpzb25bXCJtZXJjaGFudF90YWdzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wibWVyY2hhbnRfdGFnc1wiXSxcblx0XHRcdFwibnVtX29mX3Jldmlld3NcIjoganNvbltcIm51bV9vZl9yZXZpZXdzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wibnVtX29mX3Jldmlld3NcIl0sXG5cdFx0XHRcInJlYWR5XCI6IGpzb25bXCJyZWFkeVwiXSxcblx0XHRcdFwic3VwcG9ydGVkXCI6IGpzb25bXCJzdXBwb3J0ZWRcIl0sXG5cdFx0XHRcInRvcF9jYXRlZ29yeVwiOiBqc29uW1widG9wX2NhdGVnb3J5XCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1widG9wX2NhdGVnb3J5XCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBTdXBwb3J0ZWRFdmVudFJlc3BvbnNlVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU3VwcG9ydGVkRXZlbnRSZXNwb25zZVRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBTdXBwb3J0ZWRFdmVudFJlc3BvbnNlVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY2F0ZWdvcnlcIjogKDAsIFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5XzEuU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnlUb0pTT04pKHZhbHVlW1wiY2F0ZWdvcnlcIl0pLFxuXHRcdFx0XCJjb2xsZWN0aW9uc1wiOiB2YWx1ZVtcImNvbGxlY3Rpb25zXCJdLFxuXHRcdFx0XCJjcmVhdGVkX2F0XCI6IHZhbHVlW1wiY3JlYXRlZF9hdFwiXSxcblx0XHRcdFwiaWRcIjogdmFsdWVbXCJpZFwiXSxcblx0XHRcdFwibWVyY2hhbnRfdGFnc1wiOiB2YWx1ZVtcIm1lcmNoYW50X3RhZ3NcIl0sXG5cdFx0XHRcIm51bV9vZl9yZXZpZXdzXCI6IHZhbHVlW1wibnVtX29mX3Jldmlld3NcIl0sXG5cdFx0XHRcInJlYWR5XCI6IHZhbHVlW1wicmVhZHlcIl0sXG5cdFx0XHRcInN1cHBvcnRlZFwiOiB2YWx1ZVtcInN1cHBvcnRlZFwiXSxcblx0XHRcdFwidG9wX2NhdGVnb3J5XCI6IHZhbHVlW1widG9wX2NhdGVnb3J5XCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZy5qc1xudmFyIHJlcXVpcmVfVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1VybFJlc29sdmluZ0dlbmVyaWNDb25maWcuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlVybFJlc29sdmluZ0dlbmVyaWNDb25maWcgPSBpbnN0YW5jZU9mVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZztcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnRnJvbUpTT04gPSBVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnRnJvbUpTT047XG5cdGV4cG9ydHMuVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZ0Zyb21KU09OVHlwZWQgPSBVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnVG9KU09OID0gVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZ1RvSlNPTjtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnVG9KU09OVHlwZWQgPSBVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFVybFJlc29sdmluZ0dlbmVyaWNDb25maWcgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZyh2YWx1ZSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ0dlbmVyaWNDb25maWdGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFVybFJlc29sdmluZ0dlbmVyaWNDb25maWdGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHsgXCJkZXRhaWxzXCI6IGpzb25bXCJkZXRhaWxzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiZGV0YWlsc1wiXSB9O1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ0dlbmVyaWNDb25maWdUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ0dlbmVyaWNDb25maWdUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4geyBcImRldGFpbHNcIjogdmFsdWVbXCJkZXRhaWxzXCJdIH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1VybFJlc29sdmluZ1BEUENvbmZpZy5qc1xudmFyIHJlcXVpcmVfVXJsUmVzb2x2aW5nUERQQ29uZmlnID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVXJsUmVzb2x2aW5nUERQQ29uZmlnLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZVcmxSZXNvbHZpbmdQRFBDb25maWcgPSBpbnN0YW5jZU9mVXJsUmVzb2x2aW5nUERQQ29uZmlnO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1BEUENvbmZpZ0Zyb21KU09OID0gVXJsUmVzb2x2aW5nUERQQ29uZmlnRnJvbUpTT047XG5cdGV4cG9ydHMuVXJsUmVzb2x2aW5nUERQQ29uZmlnRnJvbUpTT05UeXBlZCA9IFVybFJlc29sdmluZ1BEUENvbmZpZ0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuVXJsUmVzb2x2aW5nUERQQ29uZmlnVG9KU09OID0gVXJsUmVzb2x2aW5nUERQQ29uZmlnVG9KU09OO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1BEUENvbmZpZ1RvSlNPTlR5cGVkID0gVXJsUmVzb2x2aW5nUERQQ29uZmlnVG9KU09OVHlwZWQ7XG5cdGNvbnN0IFBEUEF0dHJpYnV0ZXNfMSA9IHJlcXVpcmVfUERQQXR0cmlidXRlcygpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBVcmxSZXNvbHZpbmdQRFBDb25maWcgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mVXJsUmVzb2x2aW5nUERQQ29uZmlnKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJwZHBfYXR0cmlidXRlc1wiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInBkcF9hdHRyaWJ1dGVzXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdQRFBDb25maWdGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFVybFJlc29sdmluZ1BEUENvbmZpZ0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ1BEUENvbmZpZ0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvbGxlY3Rpb25zXCI6IGpzb25bXCJjb2xsZWN0aW9uc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImNvbGxlY3Rpb25zXCJdLFxuXHRcdFx0XCJtZXJjaGFudF90YWdzXCI6IGpzb25bXCJtZXJjaGFudF90YWdzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wibWVyY2hhbnRfdGFnc1wiXSxcblx0XHRcdFwibnVtYmVyX29mX3Jldmlld3NcIjoganNvbltcIm51bWJlcl9vZl9yZXZpZXdzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wibnVtYmVyX29mX3Jldmlld3NcIl0sXG5cdFx0XHRcInBkcF9hdHRyaWJ1dGVzXCI6ICgwLCBQRFBBdHRyaWJ1dGVzXzEuUERQQXR0cmlidXRlc0Zyb21KU09OKShqc29uW1wicGRwX2F0dHJpYnV0ZXNcIl0pXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdQRFBDb25maWdUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBVcmxSZXNvbHZpbmdQRFBDb25maWdUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVXJsUmVzb2x2aW5nUERQQ29uZmlnVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29sbGVjdGlvbnNcIjogdmFsdWVbXCJjb2xsZWN0aW9uc1wiXSxcblx0XHRcdFwibWVyY2hhbnRfdGFnc1wiOiB2YWx1ZVtcIm1lcmNoYW50X3RhZ3NcIl0sXG5cdFx0XHRcIm51bWJlcl9vZl9yZXZpZXdzXCI6IHZhbHVlW1wibnVtYmVyX29mX3Jldmlld3NcIl0sXG5cdFx0XHRcInBkcF9hdHRyaWJ1dGVzXCI6ICgwLCBQRFBBdHRyaWJ1dGVzXzEuUERQQXR0cmlidXRlc1RvSlNPTikodmFsdWVbXCJwZHBfYXR0cmlidXRlc1wiXSlcblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9VcmxSZXNvbHZpbmdQTFBDb25maWcuanNcbnZhciByZXF1aXJlX1VybFJlc29sdmluZ1BMUENvbmZpZyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1VybFJlc29sdmluZ1BMUENvbmZpZy5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mVXJsUmVzb2x2aW5nUExQQ29uZmlnID0gaW5zdGFuY2VPZlVybFJlc29sdmluZ1BMUENvbmZpZztcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdQTFBDb25maWdGcm9tSlNPTiA9IFVybFJlc29sdmluZ1BMUENvbmZpZ0Zyb21KU09OO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1BMUENvbmZpZ0Zyb21KU09OVHlwZWQgPSBVcmxSZXNvbHZpbmdQTFBDb25maWdGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1BMUENvbmZpZ1RvSlNPTiA9IFVybFJlc29sdmluZ1BMUENvbmZpZ1RvSlNPTjtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdQTFBDb25maWdUb0pTT05UeXBlZCA9IFVybFJlc29sdmluZ1BMUENvbmZpZ1RvSlNPTlR5cGVkO1xuXHRjb25zdCBQTFBBdHRyaWJ1dGVzXzEgPSByZXF1aXJlX1BMUEF0dHJpYnV0ZXMoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgVXJsUmVzb2x2aW5nUExQQ29uZmlnIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlVybFJlc29sdmluZ1BMUENvbmZpZyh2YWx1ZSkge1xuXHRcdGlmICghKFwicGxwX2F0dHJpYnV0ZXNcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJwbHBfYXR0cmlidXRlc1wiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gVXJsUmVzb2x2aW5nUExQQ29uZmlnRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBVcmxSZXNvbHZpbmdQTFBDb25maWdGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdQTFBDb25maWdGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJwbHBfYXR0cmlidXRlc1wiOiAoMCwgUExQQXR0cmlidXRlc18xLlBMUEF0dHJpYnV0ZXNGcm9tSlNPTikoanNvbltcInBscF9hdHRyaWJ1dGVzXCJdKSxcblx0XHRcdFwidG9wX2NhdGVnb3J5XCI6IGpzb25bXCJ0b3BfY2F0ZWdvcnlcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJ0b3BfY2F0ZWdvcnlcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ1BMUENvbmZpZ1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFVybFJlc29sdmluZ1BMUENvbmZpZ1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdQTFBDb25maWdUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJwbHBfYXR0cmlidXRlc1wiOiAoMCwgUExQQXR0cmlidXRlc18xLlBMUEF0dHJpYnV0ZXNUb0pTT04pKHZhbHVlW1wicGxwX2F0dHJpYnV0ZXNcIl0pLFxuXHRcdFx0XCJ0b3BfY2F0ZWdvcnlcIjogdmFsdWVbXCJ0b3BfY2F0ZWdvcnlcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9VcmxSZXNvbHZpbmdSZXF1ZXN0LmpzXG52YXIgcmVxdWlyZV9VcmxSZXNvbHZpbmdSZXF1ZXN0ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVXJsUmVzb2x2aW5nUmVxdWVzdC5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mVXJsUmVzb2x2aW5nUmVxdWVzdCA9IGluc3RhbmNlT2ZVcmxSZXNvbHZpbmdSZXF1ZXN0O1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1JlcXVlc3RGcm9tSlNPTiA9IFVybFJlc29sdmluZ1JlcXVlc3RGcm9tSlNPTjtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdSZXF1ZXN0RnJvbUpTT05UeXBlZCA9IFVybFJlc29sdmluZ1JlcXVlc3RGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1JlcXVlc3RUb0pTT04gPSBVcmxSZXNvbHZpbmdSZXF1ZXN0VG9KU09OO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1JlcXVlc3RUb0pTT05UeXBlZCA9IFVybFJlc29sdmluZ1JlcXVlc3RUb0pTT05UeXBlZDtcblx0Y29uc3QgQ29udGV4dF8xID0gcmVxdWlyZV9Db250ZXh0KCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFVybFJlc29sdmluZ1JlcXVlc3QgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mVXJsUmVzb2x2aW5nUmVxdWVzdCh2YWx1ZSkge1xuXHRcdGlmICghKFwiY29udGV4dFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNvbnRleHRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiZmVhdHVyZV9nYXRlc1wiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImZlYXR1cmVfZ2F0ZXNcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwidXJsXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1widXJsXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdSZXF1ZXN0RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBVcmxSZXNvbHZpbmdSZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVXJsUmVzb2x2aW5nUmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvbnRleHRcIjogKDAsIENvbnRleHRfMS5Db250ZXh0RnJvbUpTT04pKGpzb25bXCJjb250ZXh0XCJdKSxcblx0XHRcdFwiZmVhdHVyZV9nYXRlc1wiOiBqc29uW1wiZmVhdHVyZV9nYXRlc1wiXSxcblx0XHRcdFwidXJsXCI6IGpzb25bXCJ1cmxcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ1JlcXVlc3RUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBVcmxSZXNvbHZpbmdSZXF1ZXN0VG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ1JlcXVlc3RUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb250ZXh0XCI6ICgwLCBDb250ZXh0XzEuQ29udGV4dFRvSlNPTikodmFsdWVbXCJjb250ZXh0XCJdKSxcblx0XHRcdFwiZmVhdHVyZV9nYXRlc1wiOiB2YWx1ZVtcImZlYXR1cmVfZ2F0ZXNcIl0sXG5cdFx0XHRcInVybFwiOiB2YWx1ZVtcInVybFwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1VybFJlc29sdmluZ1Jlc3BvbnNlU3BlY2lmaWNEZXRhaWxzLmpzXG52YXIgcmVxdWlyZV9VcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlscyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1VybFJlc29sdmluZ1Jlc3BvbnNlU3BlY2lmaWNEZXRhaWxzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1Jlc3BvbnNlU3BlY2lmaWNEZXRhaWxzRnJvbUpTT04gPSBVcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc0Zyb21KU09OO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1Jlc3BvbnNlU3BlY2lmaWNEZXRhaWxzRnJvbUpTT05UeXBlZCA9IFVybFJlc29sdmluZ1Jlc3BvbnNlU3BlY2lmaWNEZXRhaWxzRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc1RvSlNPTiA9IFVybFJlc29sdmluZ1Jlc3BvbnNlU3BlY2lmaWNEZXRhaWxzVG9KU09OO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1Jlc3BvbnNlU3BlY2lmaWNEZXRhaWxzVG9KU09OVHlwZWQgPSBVcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc1RvSlNPTlR5cGVkO1xuXHRjb25zdCBVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnXzEgPSByZXF1aXJlX1VybFJlc29sdmluZ0dlbmVyaWNDb25maWcoKTtcblx0Y29uc3QgVXJsUmVzb2x2aW5nUERQQ29uZmlnXzEgPSByZXF1aXJlX1VybFJlc29sdmluZ1BEUENvbmZpZygpO1xuXHRjb25zdCBVcmxSZXNvbHZpbmdQTFBDb25maWdfMSA9IHJlcXVpcmVfVXJsUmVzb2x2aW5nUExQQ29uZmlnKCk7XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ1Jlc3BvbnNlU3BlY2lmaWNEZXRhaWxzRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBVcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ1Jlc3BvbnNlU3BlY2lmaWNEZXRhaWxzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0aWYgKCgwLCBVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnXzEuaW5zdGFuY2VPZlVybFJlc29sdmluZ0dlbmVyaWNDb25maWcpKGpzb24pKSByZXR1cm4gKDAsIFVybFJlc29sdmluZ0dlbmVyaWNDb25maWdfMS5VcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnRnJvbUpTT05UeXBlZCkoanNvbiwgdHJ1ZSk7XG5cdFx0aWYgKCgwLCBVcmxSZXNvbHZpbmdQRFBDb25maWdfMS5pbnN0YW5jZU9mVXJsUmVzb2x2aW5nUERQQ29uZmlnKShqc29uKSkgcmV0dXJuICgwLCBVcmxSZXNvbHZpbmdQRFBDb25maWdfMS5VcmxSZXNvbHZpbmdQRFBDb25maWdGcm9tSlNPTlR5cGVkKShqc29uLCB0cnVlKTtcblx0XHRpZiAoKDAsIFVybFJlc29sdmluZ1BMUENvbmZpZ18xLmluc3RhbmNlT2ZVcmxSZXNvbHZpbmdQTFBDb25maWcpKGpzb24pKSByZXR1cm4gKDAsIFVybFJlc29sdmluZ1BMUENvbmZpZ18xLlVybFJlc29sdmluZ1BMUENvbmZpZ0Zyb21KU09OVHlwZWQpKGpzb24sIHRydWUpO1xuXHRcdHJldHVybiB7fTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFVybFJlc29sdmluZ1Jlc3BvbnNlU3BlY2lmaWNEZXRhaWxzVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ1Jlc3BvbnNlU3BlY2lmaWNEZXRhaWxzVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0aWYgKCgwLCBVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnXzEuaW5zdGFuY2VPZlVybFJlc29sdmluZ0dlbmVyaWNDb25maWcpKHZhbHVlKSkgcmV0dXJuICgwLCBVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnXzEuVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZ1RvSlNPTikodmFsdWUpO1xuXHRcdGlmICgoMCwgVXJsUmVzb2x2aW5nUERQQ29uZmlnXzEuaW5zdGFuY2VPZlVybFJlc29sdmluZ1BEUENvbmZpZykodmFsdWUpKSByZXR1cm4gKDAsIFVybFJlc29sdmluZ1BEUENvbmZpZ18xLlVybFJlc29sdmluZ1BEUENvbmZpZ1RvSlNPTikodmFsdWUpO1xuXHRcdGlmICgoMCwgVXJsUmVzb2x2aW5nUExQQ29uZmlnXzEuaW5zdGFuY2VPZlVybFJlc29sdmluZ1BMUENvbmZpZykodmFsdWUpKSByZXR1cm4gKDAsIFVybFJlc29sdmluZ1BMUENvbmZpZ18xLlVybFJlc29sdmluZ1BMUENvbmZpZ1RvSlNPTikodmFsdWUpO1xuXHRcdHJldHVybiB7fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVXJsUmVzb2x2aW5nVHlwZS5qc1xudmFyIHJlcXVpcmVfVXJsUmVzb2x2aW5nVHlwZSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1VybFJlc29sdmluZ1R5cGUuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuVXJsUmVzb2x2aW5nVHlwZSA9IHZvaWQgMDtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mVXJsUmVzb2x2aW5nVHlwZSA9IGluc3RhbmNlT2ZVcmxSZXNvbHZpbmdUeXBlO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1R5cGVGcm9tSlNPTiA9IFVybFJlc29sdmluZ1R5cGVGcm9tSlNPTjtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdUeXBlRnJvbUpTT05UeXBlZCA9IFVybFJlc29sdmluZ1R5cGVGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1R5cGVUb0pTT04gPSBVcmxSZXNvbHZpbmdUeXBlVG9KU09OO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1R5cGVUb0pTT05UeXBlZCA9IFVybFJlc29sdmluZ1R5cGVUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogVHlwZSBvZiBwYWdlIHZhcmlhbnRcblx0KiBAZXhwb3J0XG5cdCogQGVudW0ge3N0cmluZ31cblx0Ki9cblx0dmFyIFVybFJlc29sdmluZ1R5cGU7XG5cdChmdW5jdGlvbihVcmxSZXNvbHZpbmdUeXBlJDEpIHtcblx0XHRVcmxSZXNvbHZpbmdUeXBlJDFbXCJQZHBcIl0gPSBcInBkcFwiO1xuXHRcdFVybFJlc29sdmluZ1R5cGUkMVtcIlBscFwiXSA9IFwicGxwXCI7XG5cdFx0VXJsUmVzb2x2aW5nVHlwZSQxW1wiU2VhcmNoXCJdID0gXCJzZWFyY2hcIjtcblx0XHRVcmxSZXNvbHZpbmdUeXBlJDFbXCJPdGhlclwiXSA9IFwib3RoZXJcIjtcblx0XHRVcmxSZXNvbHZpbmdUeXBlJDFbXCJIb21lcGFnZVwiXSA9IFwiaG9tZXBhZ2VcIjtcblx0XHRVcmxSZXNvbHZpbmdUeXBlJDFbXCJQYWdlXCJdID0gXCJwYWdlXCI7XG5cdFx0VXJsUmVzb2x2aW5nVHlwZSQxW1wiVW5zdXBwb3J0ZWRcIl0gPSBcInVuc3VwcG9ydGVkXCI7XG5cdH0pKFVybFJlc29sdmluZ1R5cGUgfHwgKGV4cG9ydHMuVXJsUmVzb2x2aW5nVHlwZSA9IFVybFJlc29sdmluZ1R5cGUgPSB7fSkpO1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mVXJsUmVzb2x2aW5nVHlwZSh2YWx1ZSkge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIFVybFJlc29sdmluZ1R5cGUpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXJsUmVzb2x2aW5nVHlwZSwga2V5KSkge1xuXHRcdFx0aWYgKFVybFJlc29sdmluZ1R5cGVba2V5XSA9PT0gdmFsdWUpIHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0ZnVuY3Rpb24gVXJsUmVzb2x2aW5nVHlwZUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVXJsUmVzb2x2aW5nVHlwZUZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ1R5cGVGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRyZXR1cm4ganNvbjtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdUeXBlVG9KU09OKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ1R5cGVUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVXJsUmVzb2x2aW5nUmVzcG9uc2UuanNcbnZhciByZXF1aXJlX1VybFJlc29sdmluZ1Jlc3BvbnNlID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVXJsUmVzb2x2aW5nUmVzcG9uc2UuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlVybFJlc29sdmluZ1Jlc3BvbnNlID0gaW5zdGFuY2VPZlVybFJlc29sdmluZ1Jlc3BvbnNlO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1Jlc3BvbnNlRnJvbUpTT04gPSBVcmxSZXNvbHZpbmdSZXNwb25zZUZyb21KU09OO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1Jlc3BvbnNlRnJvbUpTT05UeXBlZCA9IFVybFJlc29sdmluZ1Jlc3BvbnNlRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdSZXNwb25zZVRvSlNPTiA9IFVybFJlc29sdmluZ1Jlc3BvbnNlVG9KU09OO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1Jlc3BvbnNlVG9KU09OVHlwZWQgPSBVcmxSZXNvbHZpbmdSZXNwb25zZVRvSlNPTlR5cGVkO1xuXHRjb25zdCBVcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc18xID0gcmVxdWlyZV9VcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlscygpO1xuXHRjb25zdCBVcmxSZXNvbHZpbmdUeXBlXzEgPSByZXF1aXJlX1VybFJlc29sdmluZ1R5cGUoKTtcblx0Y29uc3QgVXNlckV2ZW50XzEkMSA9IHJlcXVpcmVfVXNlckV2ZW50KCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFVybFJlc29sdmluZ1Jlc3BvbnNlIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlVybFJlc29sdmluZ1Jlc3BvbnNlKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJyZWFkeVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInJlYWR5XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInNwZWNpZmljX2RldGFpbHNcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJzcGVjaWZpY19kZXRhaWxzXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInZhcmlhbnRfdHlwZVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInZhcmlhbnRfdHlwZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gVXJsUmVzb2x2aW5nUmVzcG9uc2VGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFVybFJlc29sdmluZ1Jlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVXJsUmVzb2x2aW5nUmVzcG9uc2VGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJwYWdlX3ZhcmlhbnRcIjoganNvbltcInBhZ2VfdmFyaWFudFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInBhZ2VfdmFyaWFudFwiXSxcblx0XHRcdFwicmVhZHlcIjoganNvbltcInJlYWR5XCJdLFxuXHRcdFx0XCJzcGVjaWZpY19kZXRhaWxzXCI6ICgwLCBVcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc18xLlVybFJlc29sdmluZ1Jlc3BvbnNlU3BlY2lmaWNEZXRhaWxzRnJvbUpTT04pKGpzb25bXCJzcGVjaWZpY19kZXRhaWxzXCJdKSxcblx0XHRcdFwidXNlcl9ldmVudFwiOiBqc29uW1widXNlcl9ldmVudFwiXSA9PSBudWxsID8gdm9pZCAwIDogKDAsIFVzZXJFdmVudF8xJDEuVXNlckV2ZW50RnJvbUpTT04pKGpzb25bXCJ1c2VyX2V2ZW50XCJdKSxcblx0XHRcdFwidmFyaWFudF90eXBlXCI6ICgwLCBVcmxSZXNvbHZpbmdUeXBlXzEuVXJsUmVzb2x2aW5nVHlwZUZyb21KU09OKShqc29uW1widmFyaWFudF90eXBlXCJdKVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gVXJsUmVzb2x2aW5nUmVzcG9uc2VUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBVcmxSZXNvbHZpbmdSZXNwb25zZVRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdSZXNwb25zZVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcInBhZ2VfdmFyaWFudFwiOiB2YWx1ZVtcInBhZ2VfdmFyaWFudFwiXSxcblx0XHRcdFwicmVhZHlcIjogdmFsdWVbXCJyZWFkeVwiXSxcblx0XHRcdFwic3BlY2lmaWNfZGV0YWlsc1wiOiAoMCwgVXJsUmVzb2x2aW5nUmVzcG9uc2VTcGVjaWZpY0RldGFpbHNfMS5VcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc1RvSlNPTikodmFsdWVbXCJzcGVjaWZpY19kZXRhaWxzXCJdKSxcblx0XHRcdFwidXNlcl9ldmVudFwiOiAoMCwgVXNlckV2ZW50XzEkMS5Vc2VyRXZlbnRUb0pTT04pKHZhbHVlW1widXNlcl9ldmVudFwiXSksXG5cdFx0XHRcInZhcmlhbnRfdHlwZVwiOiAoMCwgVXJsUmVzb2x2aW5nVHlwZV8xLlVybFJlc29sdmluZ1R5cGVUb0pTT04pKHZhbHVlW1widmFyaWFudF90eXBlXCJdKVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1YxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2UuanNcbnZhciByZXF1aXJlX1YxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2UgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9WMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZWMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlID0gaW5zdGFuY2VPZlYxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2U7XG5cdGV4cG9ydHMuVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZUZyb21KU09OID0gVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZUZyb21KU09OO1xuXHRleHBvcnRzLlYxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2VGcm9tSlNPTlR5cGVkID0gVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZUZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZVRvSlNPTiA9IFYxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2VUb0pTT047XG5cdGV4cG9ydHMuVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZVRvSlNPTlR5cGVkID0gVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZVRvSlNPTlR5cGVkO1xuXHRjb25zdCBTdWdnZXN0aW9uXzEgPSByZXF1aXJlX1N1Z2dlc3Rpb24oKTtcblx0Y29uc3QgVXNlckV2ZW50XzEgPSByZXF1aXJlX1VzZXJFdmVudCgpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBWMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlYxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2UodmFsdWUpIHtcblx0XHRpZiAoIShcInJlc3BvbnNlc1wiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInJlc3BvbnNlc1wiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJzdWdnZXN0aW9uc1wiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInN1Z2dlc3Rpb25zXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInVzZXJfZXZlbnRzXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1widXNlcl9ldmVudHNcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFYxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2VGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFYxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2VGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBWMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwicmVzcG9uc2VzXCI6IGpzb25bXCJyZXNwb25zZXNcIl0sXG5cdFx0XHRcInN1Z2dlc3Rpb25zXCI6IGpzb25bXCJzdWdnZXN0aW9uc1wiXS5tYXAoU3VnZ2VzdGlvbl8xLlN1Z2dlc3Rpb25Gcm9tSlNPTiksXG5cdFx0XHRcInVzZXJfZXZlbnRzXCI6IGpzb25bXCJ1c2VyX2V2ZW50c1wiXS5tYXAoVXNlckV2ZW50XzEuVXNlckV2ZW50RnJvbUpTT04pXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBWMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZVRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBWMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwicmVzcG9uc2VzXCI6IHZhbHVlW1wicmVzcG9uc2VzXCJdLFxuXHRcdFx0XCJzdWdnZXN0aW9uc1wiOiB2YWx1ZVtcInN1Z2dlc3Rpb25zXCJdLm1hcChTdWdnZXN0aW9uXzEuU3VnZ2VzdGlvblRvSlNPTiksXG5cdFx0XHRcInVzZXJfZXZlbnRzXCI6IHZhbHVlW1widXNlcl9ldmVudHNcIl0ubWFwKFVzZXJFdmVudF8xLlVzZXJFdmVudFRvSlNPTilcblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9WMVNlYXJjaEV4cGxhaW5HZXQyMDBSZXNwb25zZS5qc1xudmFyIHJlcXVpcmVfVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2UgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9WMVNlYXJjaEV4cGxhaW5HZXQyMDBSZXNwb25zZS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2UgPSBpbnN0YW5jZU9mVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2U7XG5cdGV4cG9ydHMuVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2VGcm9tSlNPTiA9IFYxU2VhcmNoRXhwbGFpbkdldDIwMFJlc3BvbnNlRnJvbUpTT047XG5cdGV4cG9ydHMuVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2VGcm9tSlNPTlR5cGVkID0gVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2VGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlYxU2VhcmNoRXhwbGFpbkdldDIwMFJlc3BvbnNlVG9KU09OID0gVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2VUb0pTT047XG5cdGV4cG9ydHMuVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2VUb0pTT05UeXBlZCA9IFYxU2VhcmNoRXhwbGFpbkdldDIwMFJlc3BvbnNlVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFYxU2VhcmNoRXhwbGFpbkdldDIwMFJlc3BvbnNlIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlYxU2VhcmNoRXhwbGFpbkdldDIwMFJlc3BvbnNlKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJjaGF0X2lkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY2hhdF9pZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJleHBsYW5hdGlvblwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImV4cGxhbmF0aW9uXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInByb2R1Y3RfaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJwcm9kdWN0X2lkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBWMVNlYXJjaEV4cGxhaW5HZXQyMDBSZXNwb25zZUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2VGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBWMVNlYXJjaEV4cGxhaW5HZXQyMDBSZXNwb25zZUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNoYXRfaWRcIjoganNvbltcImNoYXRfaWRcIl0sXG5cdFx0XHRcImV4cGxhbmF0aW9uXCI6IGpzb25bXCJleHBsYW5hdGlvblwiXSxcblx0XHRcdFwicHJvZHVjdF9pZFwiOiBqc29uW1wicHJvZHVjdF9pZFwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2VUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBWMVNlYXJjaEV4cGxhaW5HZXQyMDBSZXNwb25zZVRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBWMVNlYXJjaEV4cGxhaW5HZXQyMDBSZXNwb25zZVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNoYXRfaWRcIjogdmFsdWVbXCJjaGF0X2lkXCJdLFxuXHRcdFx0XCJleHBsYW5hdGlvblwiOiB2YWx1ZVtcImV4cGxhbmF0aW9uXCJdLFxuXHRcdFx0XCJwcm9kdWN0X2lkXCI6IHZhbHVlW1wicHJvZHVjdF9pZFwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL2luZGV4LmpzXG52YXIgcmVxdWlyZV9tb2RlbHMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9pbmRleC5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0dmFyIF9fY3JlYXRlQmluZGluZyQyID0gZXhwb3J0cyAmJiBleHBvcnRzLl9fY3JlYXRlQmluZGluZyB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuXHRcdGlmIChrMiA9PT0gdm9pZCAwKSBrMiA9IGs7XG5cdFx0dmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuXHRcdGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSBkZXNjID0ge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtW2tdO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcblx0fSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcblx0XHRpZiAoazIgPT09IHZvaWQgMCkgazIgPSBrO1xuXHRcdG9bazJdID0gbVtrXTtcblx0fSkpO1xuXHR2YXIgX19leHBvcnRTdGFyJDIgPSBleHBvcnRzICYmIGV4cG9ydHMuX19leHBvcnRTdGFyIHx8IGZ1bmN0aW9uKG0sIGV4cG9ydHMkMSkge1xuXHRcdGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cyQxLCBwKSkgX19jcmVhdGVCaW5kaW5nJDIoZXhwb3J0cyQxLCBtLCBwKTtcblx0fTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0FkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlcXVlc3QoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2UoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfQWRkVG9DYXJ0QXR0cmlidXRlcygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9BbmFseXRpY3NJZGVudGlmeVJlcXVlc3QoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfQW5hbHl0aWNzVHJhY2tFdmVudFJlcXVlc3QoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfQXR0YWNobWVudFJlcXVlc3QoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfQXV0b0Zvcm0oKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfQ29udGV4dCgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9Db252ZXJzYXRpb25TdGF0dXMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdCgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9DcmVhdGVDb252ZXJzYXRpb25SZXNwb25zZSgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9DdXN0U2VydmljZUF0dGFjaG1lbnQoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfQ3VzdFNlcnZpY2VDb252ZXJzYXRpb24oKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25NZXNzYWdlcygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9DdXN0U2VydmljZUN1c3RvbWVyKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0N1c3RTZXJ2aWNlTWVzc2FnZSgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9DdXN0b21lclNlcnZpY2VQcm92aWRlcigpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9Gb3JtUmVzcG9uc2VBdHRyaWJ1dGVzKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0Zvcm1SZXNwb25zZUF0dHJpYnV0ZXNGb3JtQ2F0ZWdvcnkoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfRm9ybVR5cGUoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0dlbmVyYXRpb25QYXJhbXMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0lzQnVzaW5lc3NIb3Vyc1JlcXVlc3QoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2UoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfTGFiZWxWYWx1ZSgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9NYW51YWxGb3JtKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX05leHRNZXNzYWdlUmVxdWVzdCgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9PcmRlckl0ZW1JbmZvKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX09yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX09yZ2FuaXphdGlvbigpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9Pcmdhbml6YXRpb25Db25maWcoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0cygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9Pcmdhbml6YXRpb25TZXR0aW5ncygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9QRFBBdHRyaWJ1dGVzKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1BMUEF0dHJpYnV0ZUNhdGVnb3J5KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1BMUEF0dHJpYnV0ZXMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfUExQQXR0cmlidXRlc0F0dHJpYnV0ZXMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfUExQSWRBdHRyaWJ1dGVzKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1BMUFVybEF0dHJpYnV0ZXMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfUGFnZVZpc2l0QXR0cmlidXRlcygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9QYWdlVmlzaXRDYXRlZ29yeSgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9Qcm9kdWN0UmV0cmlldmFsUmVxdWVzdCgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9Qcm9kdWN0UmV0cmlldmFsUmVzcG9uc2UoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlcygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9Qcm9kdWN0U2VhcmNoUmVzcG9uc2UoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlcygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9RdWVyeVR5cGVkQXR0cmlidXRlcygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9SZXBvcnRDb250ZW50KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1JlcG9ydFNlc3Npb25SZXF1ZXN0KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1Jlc3BvbnNlKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1Jlc3BvbnNlQ2F0ZWdvcnkoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlcygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9TZWFyY2hBdHRyaWJ1dGVzKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1NlYXJjaFJlc3BvbnNlUHJvZHVjdCgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9TZWFyY2hTdWdnZXN0aW9uc1Jlc3BvbnNlKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1NlbmRNZXNzYWdlUmVxdWVzdCgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9TZW5kTWVzc2FnZVJlc3BvbnNlKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1N0YXRzaWdFeHBlcmltZW50KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1N0YXRzaWdGZWF0dXJlR2F0ZSgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9TdWdnZXN0aW9uKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1N1Z2dlc3Rpb25DYXRlZ29yeSgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9TdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnkoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfU3VwcG9ydGVkRXZlbnRSZXF1ZXN0KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1N1cHBvcnRlZEV2ZW50UmVzcG9uc2UoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfVHVybkluZm8oKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfVHVybkluZm9QcmV2VXNlckV2ZW50KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1VybFJlc29sdmluZ0dlbmVyaWNDb25maWcoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfVXJsUmVzb2x2aW5nUERQQ29uZmlnKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1VybFJlc29sdmluZ1BMUENvbmZpZygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9VcmxSZXNvbHZpbmdSZXF1ZXN0KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1VybFJlc29sdmluZ1Jlc3BvbnNlKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1VybFJlc29sdmluZ1Jlc3BvbnNlU3BlY2lmaWNEZXRhaWxzKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1VybFJlc29sdmluZ1R5cGUoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfVXNlckV2ZW50KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1VzZXJFdmVudEF0dHJpYnV0ZXMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfVXNlckV2ZW50Q2F0ZWdvcnkoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZSgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9WMVNlYXJjaEV4cGxhaW5HZXQyMDBSZXNwb25zZSgpLCBleHBvcnRzKTtcbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvYXBpcy9DdXN0b21lclNlcnZpY2VBcGkuanNcbnZhciByZXF1aXJlX0N1c3RvbWVyU2VydmljZUFwaSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvYXBpcy9DdXN0b21lclNlcnZpY2VBcGkuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHR2YXIgX19hd2FpdGVyJDQgPSBleHBvcnRzICYmIGV4cG9ydHMuX19hd2FpdGVyIHx8IGZ1bmN0aW9uKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuXHRcdGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbihyZXNvbHZlKSB7XG5cdFx0XHRcdHJlc29sdmUodmFsdWUpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0c3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmdW5jdGlvbiBzdGVwKHJlc3VsdCkge1xuXHRcdFx0XHRyZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTtcblx0XHRcdH1cblx0XHRcdHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcblx0XHR9KTtcblx0fTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLkN1c3RvbWVyU2VydmljZUFwaSA9IHZvaWQgMDtcblx0Y29uc3QgcnVudGltZSQ0ID0gcmVxdWlyZV9ydW50aW1lKCk7XG5cdGNvbnN0IGluZGV4XzEkNCA9IHJlcXVpcmVfbW9kZWxzKCk7XG5cdC8qKlxuXHQqXG5cdCovXG5cdHZhciBDdXN0b21lclNlcnZpY2VBcGkgPSBjbGFzcyBleHRlbmRzIHJ1bnRpbWUkNC5CYXNlQVBJIHtcblx0XHQvKipcblx0XHQqIEFkZCBhIG5vdGUgdG8gdGhlIGxhdGVzdCBjb252ZXJzYXRpb24gZm9yIGEgY3VzdG9tZXJcblx0XHQqL1xuXHRcdHYxQ3VzdHNlcnZpY2VBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25Qb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDQodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRjb25zdCBoZWFkZXJQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGhlYWRlclBhcmFtZXRlcnNbXCJDb250ZW50LVR5cGVcIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcblx0XHRcdFx0aWYgKHRoaXMuY29uZmlndXJhdGlvbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW4pIHtcblx0XHRcdFx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbjtcblx0XHRcdFx0XHRjb25zdCB0b2tlblN0cmluZyA9IHlpZWxkIHRva2VuKFwiYmVhcmVyXCIsIFtdKTtcblx0XHRcdFx0XHRpZiAodG9rZW5TdHJpbmcpIGhlYWRlclBhcmFtZXRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEJlYXJlciAke3Rva2VuU3RyaW5nfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSB5aWVsZCB0aGlzLnJlcXVlc3Qoe1xuXHRcdFx0XHRcdHBhdGg6IGAvdjEvY3VzdHNlcnZpY2UvYWRkX25vdGVfdG9fbGF0ZXN0X2NvbnZlcnNhdGlvbmAsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIlBPU1RcIixcblx0XHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiBxdWVyeVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0Ym9keTogKDAsIGluZGV4XzEkNC5BZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0VG9KU09OKShyZXF1ZXN0UGFyYW1ldGVyc1tcIkFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlcXVlc3RcIl0pXG5cdFx0XHRcdH0sIGluaXRPdmVycmlkZXMpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IHJ1bnRpbWUkNC5KU09OQXBpUmVzcG9uc2UocmVzcG9uc2UsIChqc29uVmFsdWUpID0+ICgwLCBpbmRleF8xJDQuQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2VGcm9tSlNPTikoanNvblZhbHVlKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBBZGQgYSBub3RlIHRvIHRoZSBsYXRlc3QgY29udmVyc2F0aW9uIGZvciBhIGN1c3RvbWVyXG5cdFx0Ki9cblx0XHR2MUN1c3RzZXJ2aWNlQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUG9zdCgpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkNCh0aGlzLCBhcmd1bWVudHMsIHZvaWQgMCwgZnVuY3Rpb24qIChyZXF1ZXN0UGFyYW1ldGVycyA9IHt9LCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy52MUN1c3RzZXJ2aWNlQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUG9zdFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykpLnZhbHVlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBDcmVhdGUgYSBuZXcgY29udmVyc2F0aW9uIGZvciBhIGN1c3RvbWVyXG5cdFx0Ki9cblx0XHR2MUN1c3RzZXJ2aWNlQ3JlYXRlQ29udmVyc2F0aW9uUG9zdFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQ0KHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRoZWFkZXJQYXJhbWV0ZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL2N1c3RzZXJ2aWNlL2NyZWF0ZV9jb252ZXJzYXRpb25gLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJQT1NUXCIsXG5cdFx0XHRcdFx0aGVhZGVyczogaGVhZGVyUGFyYW1ldGVycyxcblx0XHRcdFx0XHRxdWVyeTogcXVlcnlQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGJvZHk6ICgwLCBpbmRleF8xJDQuQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdFRvSlNPTikocmVxdWVzdFBhcmFtZXRlcnNbXCJDcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0XCJdKVxuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDQuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlLCAoanNvblZhbHVlKSA9PiAoMCwgaW5kZXhfMSQ0LkNyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlRnJvbUpTT04pKGpzb25WYWx1ZSkpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogQ3JlYXRlIGEgbmV3IGNvbnZlcnNhdGlvbiBmb3IgYSBjdXN0b21lclxuXHRcdCovXG5cdFx0djFDdXN0c2VydmljZUNyZWF0ZUNvbnZlcnNhdGlvblBvc3QoKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDQodGhpcywgYXJndW1lbnRzLCB2b2lkIDAsIGZ1bmN0aW9uKiAocmVxdWVzdFBhcmFtZXRlcnMgPSB7fSwgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMudjFDdXN0c2VydmljZUNyZWF0ZUNvbnZlcnNhdGlvblBvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogR2V0IG1lc3NhZ2VzIGZyb20gYSBjb252ZXJzYXRpb25cblx0XHQqL1xuXHRcdHYxQ3VzdHNlcnZpY2VHZXRDb252ZXJzYXRpb25NZXNzYWdlc1Bvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkNCh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0Y29uc3QgcXVlcnlQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGNvbnN0IGhlYWRlclBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aGVhZGVyUGFyYW1ldGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xuXHRcdFx0XHRpZiAodGhpcy5jb25maWd1cmF0aW9uICYmIHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbikge1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuO1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuU3RyaW5nID0geWllbGQgdG9rZW4oXCJiZWFyZXJcIiwgW10pO1xuXHRcdFx0XHRcdGlmICh0b2tlblN0cmluZykgaGVhZGVyUGFyYW1ldGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQmVhcmVyICR7dG9rZW5TdHJpbmd9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdCh7XG5cdFx0XHRcdFx0cGF0aDogYC92MS9jdXN0c2VydmljZS9nZXRfY29udmVyc2F0aW9uX21lc3NhZ2VzYCxcblx0XHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IGhlYWRlclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0cXVlcnk6IHF1ZXJ5UGFyYW1ldGVycyxcblx0XHRcdFx0XHRib2R5OiAoMCwgaW5kZXhfMSQ0LkdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdFRvSlNPTikocmVxdWVzdFBhcmFtZXRlcnNbXCJHZXRDb252ZXJzYXRpb25NZXNzYWdlc1JlcXVlc3RcIl0pXG5cdFx0XHRcdH0sIGluaXRPdmVycmlkZXMpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IHJ1bnRpbWUkNC5KU09OQXBpUmVzcG9uc2UocmVzcG9uc2UsIChqc29uVmFsdWUpID0+ICgwLCBpbmRleF8xJDQuQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25NZXNzYWdlc0Zyb21KU09OKShqc29uVmFsdWUpKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIEdldCBtZXNzYWdlcyBmcm9tIGEgY29udmVyc2F0aW9uXG5cdFx0Ki9cblx0XHR2MUN1c3RzZXJ2aWNlR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNQb3N0KCkge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQ0KHRoaXMsIGFyZ3VtZW50cywgdm9pZCAwLCBmdW5jdGlvbiogKHJlcXVlc3RQYXJhbWV0ZXJzID0ge30sIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdFx0cmV0dXJuIHlpZWxkICh5aWVsZCB0aGlzLnYxQ3VzdHNlcnZpY2VHZXRDb252ZXJzYXRpb25NZXNzYWdlc1Bvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogQ2hlY2sgaWYgaXQgaXMgY3VycmVudGx5IGJ1c2luZXNzIGhvdXJzXG5cdFx0Ki9cblx0XHR2MUN1c3RzZXJ2aWNlSXNCdXNpbmVzc0hvdXJzUG9zdFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQ0KHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRoZWFkZXJQYXJhbWV0ZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL2N1c3RzZXJ2aWNlL2lzX2J1c2luZXNzX2hvdXJzYCxcblx0XHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IGhlYWRlclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0cXVlcnk6IHF1ZXJ5UGFyYW1ldGVycyxcblx0XHRcdFx0XHRib2R5OiAoMCwgaW5kZXhfMSQ0LklzQnVzaW5lc3NIb3Vyc1JlcXVlc3RUb0pTT04pKHJlcXVlc3RQYXJhbWV0ZXJzW1wiSXNCdXNpbmVzc0hvdXJzUmVxdWVzdFwiXSlcblx0XHRcdFx0fSwgaW5pdE92ZXJyaWRlcyk7XG5cdFx0XHRcdHJldHVybiBuZXcgcnVudGltZSQ0LkpTT05BcGlSZXNwb25zZShyZXNwb25zZSwgKGpzb25WYWx1ZSkgPT4gKDAsIGluZGV4XzEkNC5Jc0J1c2luZXNzSG91cnNSZXNwb25zZUZyb21KU09OKShqc29uVmFsdWUpKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIENoZWNrIGlmIGl0IGlzIGN1cnJlbnRseSBidXNpbmVzcyBob3Vyc1xuXHRcdCovXG5cdFx0djFDdXN0c2VydmljZUlzQnVzaW5lc3NIb3Vyc1Bvc3QoKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDQodGhpcywgYXJndW1lbnRzLCB2b2lkIDAsIGZ1bmN0aW9uKiAocmVxdWVzdFBhcmFtZXRlcnMgPSB7fSwgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMudjFDdXN0c2VydmljZUlzQnVzaW5lc3NIb3Vyc1Bvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogU2VuZCBhIG1lc3NhZ2UgaW4gYW4gZXhpc3RpbmcgY29udmVyc2F0aW9uXG5cdFx0Ki9cblx0XHR2MUN1c3RzZXJ2aWNlU2VuZE1lc3NhZ2VQb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDQodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRjb25zdCBoZWFkZXJQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGhlYWRlclBhcmFtZXRlcnNbXCJDb250ZW50LVR5cGVcIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcblx0XHRcdFx0aWYgKHRoaXMuY29uZmlndXJhdGlvbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW4pIHtcblx0XHRcdFx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbjtcblx0XHRcdFx0XHRjb25zdCB0b2tlblN0cmluZyA9IHlpZWxkIHRva2VuKFwiYmVhcmVyXCIsIFtdKTtcblx0XHRcdFx0XHRpZiAodG9rZW5TdHJpbmcpIGhlYWRlclBhcmFtZXRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEJlYXJlciAke3Rva2VuU3RyaW5nfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSB5aWVsZCB0aGlzLnJlcXVlc3Qoe1xuXHRcdFx0XHRcdHBhdGg6IGAvdjEvY3VzdHNlcnZpY2Uvc2VuZF9tZXNzYWdlYCxcblx0XHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IGhlYWRlclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0cXVlcnk6IHF1ZXJ5UGFyYW1ldGVycyxcblx0XHRcdFx0XHRib2R5OiAoMCwgaW5kZXhfMSQ0LlNlbmRNZXNzYWdlUmVxdWVzdFRvSlNPTikocmVxdWVzdFBhcmFtZXRlcnNbXCJTZW5kTWVzc2FnZVJlcXVlc3RcIl0pXG5cdFx0XHRcdH0sIGluaXRPdmVycmlkZXMpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IHJ1bnRpbWUkNC5KU09OQXBpUmVzcG9uc2UocmVzcG9uc2UsIChqc29uVmFsdWUpID0+ICgwLCBpbmRleF8xJDQuU2VuZE1lc3NhZ2VSZXNwb25zZUZyb21KU09OKShqc29uVmFsdWUpKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIFNlbmQgYSBtZXNzYWdlIGluIGFuIGV4aXN0aW5nIGNvbnZlcnNhdGlvblxuXHRcdCovXG5cdFx0djFDdXN0c2VydmljZVNlbmRNZXNzYWdlUG9zdCgpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkNCh0aGlzLCBhcmd1bWVudHMsIHZvaWQgMCwgZnVuY3Rpb24qIChyZXF1ZXN0UGFyYW1ldGVycyA9IHt9LCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy52MUN1c3RzZXJ2aWNlU2VuZE1lc3NhZ2VQb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblx0ZXhwb3J0cy5DdXN0b21lclNlcnZpY2VBcGkgPSBDdXN0b21lclNlcnZpY2VBcGk7XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L2FwaXMvRGVmYXVsdEFwaS5qc1xudmFyIHJlcXVpcmVfRGVmYXVsdEFwaSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvYXBpcy9EZWZhdWx0QXBpLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0dmFyIF9fYXdhaXRlciQzID0gZXhwb3J0cyAmJiBleHBvcnRzLl9fYXdhaXRlciB8fCBmdW5jdGlvbih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcblx0XHRmdW5jdGlvbiBhZG9wdCh2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24ocmVzb2x2ZSkge1xuXHRcdFx0XHRyZXNvbHZlKHZhbHVlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdFx0ZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0c3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZnVuY3Rpb24gc3RlcChyZXN1bHQpIHtcblx0XHRcdFx0cmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7XG5cdFx0XHR9XG5cdFx0XHRzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG5cdFx0fSk7XG5cdH07XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5WMU9yZ0NvbmZpZ0dldFNvdXJjZUVudW0gPSBleHBvcnRzLkRlZmF1bHRBcGkgPSB2b2lkIDA7XG5cdGNvbnN0IHJ1bnRpbWUkMyA9IHJlcXVpcmVfcnVudGltZSgpO1xuXHRjb25zdCBpbmRleF8xJDMgPSByZXF1aXJlX21vZGVscygpO1xuXHQvKipcblx0KlxuXHQqL1xuXHR2YXIgRGVmYXVsdEFwaSA9IGNsYXNzIGV4dGVuZHMgcnVudGltZSQzLkJhc2VBUEkge1xuXHRcdC8qKlxuXHRcdCogRXhlY3V0ZSBhIEdyYXBoUUwgcXVlcnlcblx0XHQqL1xuXHRcdGdyYXBocWxQbGF5Z3JvdW5kUmF3KGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMyh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSB5aWVsZCB0aGlzLnJlcXVlc3Qoe1xuXHRcdFx0XHRcdHBhdGg6IGAvdjEvZ3JhcGhxbGAsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IHt9LFxuXHRcdFx0XHRcdHF1ZXJ5OiB7fVxuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDMuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIEV4ZWN1dGUgYSBHcmFwaFFMIHF1ZXJ5XG5cdFx0Ki9cblx0XHRncmFwaHFsUGxheWdyb3VuZChpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy5ncmFwaHFsUGxheWdyb3VuZFJhdyhpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIEV4ZWN1dGUgYSBHcmFwaFFMIHF1ZXJ5XG5cdFx0Ki9cblx0XHRncmFwaHFsU2VydmVyUmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRjb25zdCBoZWFkZXJQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGhlYWRlclBhcmFtZXRlcnNbXCJDb250ZW50LVR5cGVcIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcblx0XHRcdFx0aWYgKHRoaXMuY29uZmlndXJhdGlvbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW4pIHtcblx0XHRcdFx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbjtcblx0XHRcdFx0XHRjb25zdCB0b2tlblN0cmluZyA9IHlpZWxkIHRva2VuKFwiYmVhcmVyXCIsIFtdKTtcblx0XHRcdFx0XHRpZiAodG9rZW5TdHJpbmcpIGhlYWRlclBhcmFtZXRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEJlYXJlciAke3Rva2VuU3RyaW5nfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSB5aWVsZCB0aGlzLnJlcXVlc3Qoe1xuXHRcdFx0XHRcdHBhdGg6IGAvdjEvZ3JhcGhxbGAsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIlBPU1RcIixcblx0XHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiBxdWVyeVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0Ym9keTogcmVxdWVzdFBhcmFtZXRlcnNbXCJib2R5XCJdXG5cdFx0XHRcdH0sIGluaXRPdmVycmlkZXMpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IHJ1bnRpbWUkMy5KU09OQXBpUmVzcG9uc2UocmVzcG9uc2UpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogRXhlY3V0ZSBhIEdyYXBoUUwgcXVlcnlcblx0XHQqL1xuXHRcdGdyYXBocWxTZXJ2ZXIoKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgYXJndW1lbnRzLCB2b2lkIDAsIGZ1bmN0aW9uKiAocmVxdWVzdFBhcmFtZXRlcnMgPSB7fSwgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMuZ3JhcGhxbFNlcnZlclJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykpLnZhbHVlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBIZWFsdGggY2hlY2tcblx0XHQqL1xuXHRcdGhlYWx0aEV4R2V0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJkZWVwXCJdICE9IG51bGwpIHF1ZXJ5UGFyYW1ldGVyc1tcImRlZXBcIl0gPSByZXF1ZXN0UGFyYW1ldGVyc1tcImRlZXBcIl07XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcImxpbWl0X29yZ19zaG9ydF9uYW1lc1wiXSAhPSBudWxsKSBxdWVyeVBhcmFtZXRlcnNbXCJsaW1pdF9vcmdfc2hvcnRfbmFtZXNcIl0gPSByZXF1ZXN0UGFyYW1ldGVyc1tcImxpbWl0X29yZ19zaG9ydF9uYW1lc1wiXTtcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzW1wibGltaXRfcHJvZHVjdHNcIl0gIT0gbnVsbCkgcXVlcnlQYXJhbWV0ZXJzW1wibGltaXRfcHJvZHVjdHNcIl0gPSByZXF1ZXN0UGFyYW1ldGVyc1tcImxpbWl0X3Byb2R1Y3RzXCJdO1xuXHRcdFx0XHRjb25zdCBoZWFkZXJQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL2hlYWx0aGV4YCxcblx0XHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsXG5cdFx0XHRcdFx0aGVhZGVyczogaGVhZGVyUGFyYW1ldGVycyxcblx0XHRcdFx0XHRxdWVyeTogcXVlcnlQYXJhbWV0ZXJzXG5cdFx0XHRcdH0sIGluaXRPdmVycmlkZXMpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IHJ1bnRpbWUkMy5KU09OQXBpUmVzcG9uc2UocmVzcG9uc2UpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogSGVhbHRoIGNoZWNrXG5cdFx0Ki9cblx0XHRoZWFsdGhFeEdldCgpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMyh0aGlzLCBhcmd1bWVudHMsIHZvaWQgMCwgZnVuY3Rpb24qIChyZXF1ZXN0UGFyYW1ldGVycyA9IHt9LCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy5oZWFsdGhFeEdldFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykpLnZhbHVlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBIZWFsdGggY2hlY2tcblx0XHQqL1xuXHRcdGhlYWx0aEdldFJhdyhpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL2hlYWx0aGAsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IHt9LFxuXHRcdFx0XHRcdHF1ZXJ5OiB7fVxuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDMuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIEhlYWx0aCBjaGVja1xuXHRcdCovXG5cdFx0aGVhbHRoR2V0KGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMyh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0cmV0dXJuIHlpZWxkICh5aWVsZCB0aGlzLmhlYWx0aEdldFJhdyhpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIEdldCB0aGUgb3JnYW5pemF0aW9ucyBjb25maWdcblx0XHQqL1xuXHRcdHYxQW5hbHl0aWNzSWRlbnRpZnlQb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRjb25zdCBoZWFkZXJQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGhlYWRlclBhcmFtZXRlcnNbXCJDb250ZW50LVR5cGVcIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcblx0XHRcdFx0aWYgKHRoaXMuY29uZmlndXJhdGlvbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW4pIHtcblx0XHRcdFx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbjtcblx0XHRcdFx0XHRjb25zdCB0b2tlblN0cmluZyA9IHlpZWxkIHRva2VuKFwiYmVhcmVyXCIsIFtdKTtcblx0XHRcdFx0XHRpZiAodG9rZW5TdHJpbmcpIGhlYWRlclBhcmFtZXRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEJlYXJlciAke3Rva2VuU3RyaW5nfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSB5aWVsZCB0aGlzLnJlcXVlc3Qoe1xuXHRcdFx0XHRcdHBhdGg6IGAvdjEvYW5hbHl0aWNzL2lkZW50aWZ5YCxcblx0XHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IGhlYWRlclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0cXVlcnk6IHF1ZXJ5UGFyYW1ldGVycyxcblx0XHRcdFx0XHRib2R5OiAoMCwgaW5kZXhfMSQzLkFuYWx5dGljc0lkZW50aWZ5UmVxdWVzdFRvSlNPTikocmVxdWVzdFBhcmFtZXRlcnNbXCJBbmFseXRpY3NJZGVudGlmeVJlcXVlc3RcIl0pXG5cdFx0XHRcdH0sIGluaXRPdmVycmlkZXMpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IHJ1bnRpbWUkMy5KU09OQXBpUmVzcG9uc2UocmVzcG9uc2UpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogR2V0IHRoZSBvcmdhbml6YXRpb25zIGNvbmZpZ1xuXHRcdCovXG5cdFx0djFBbmFseXRpY3NJZGVudGlmeVBvc3QoKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgYXJndW1lbnRzLCB2b2lkIDAsIGZ1bmN0aW9uKiAocmVxdWVzdFBhcmFtZXRlcnMgPSB7fSwgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMudjFBbmFseXRpY3NJZGVudGlmeVBvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogR2V0IHRoZSBvcmdhbml6YXRpb25zIGNvbmZpZ1xuXHRcdCovXG5cdFx0djFBbmFseXRpY3NUcmFja0V2ZW50UG9zdFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRoZWFkZXJQYXJhbWV0ZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL2FuYWx5dGljcy90cmFja19ldmVudGAsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIlBPU1RcIixcblx0XHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiBxdWVyeVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0Ym9keTogKDAsIGluZGV4XzEkMy5BbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdFRvSlNPTikocmVxdWVzdFBhcmFtZXRlcnNbXCJBbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdFwiXSlcblx0XHRcdFx0fSwgaW5pdE92ZXJyaWRlcyk7XG5cdFx0XHRcdHJldHVybiBuZXcgcnVudGltZSQzLkpTT05BcGlSZXNwb25zZShyZXNwb25zZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBHZXQgdGhlIG9yZ2FuaXphdGlvbnMgY29uZmlnXG5cdFx0Ki9cblx0XHR2MUFuYWx5dGljc1RyYWNrRXZlbnRQb3N0KCkge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIGFyZ3VtZW50cywgdm9pZCAwLCBmdW5jdGlvbiogKHJlcXVlc3RQYXJhbWV0ZXJzID0ge30sIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdFx0cmV0dXJuIHlpZWxkICh5aWVsZCB0aGlzLnYxQW5hbHl0aWNzVHJhY2tFdmVudFBvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogUmVwb3J0IHRoZSBzZXNzaW9uIGFzIGJlaW5nIGEgcHJvYmxlbVxuXHRcdCogUmVwb3J0IFNlc3Npb25cblx0XHQqL1xuXHRcdHYxQ2hhdHNSZXBvcnRTZXNzaW9uSWRQb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRjb25zdCBoZWFkZXJQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGhlYWRlclBhcmFtZXRlcnNbXCJDb250ZW50LVR5cGVcIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcblx0XHRcdFx0aWYgKHRoaXMuY29uZmlndXJhdGlvbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW4pIHtcblx0XHRcdFx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbjtcblx0XHRcdFx0XHRjb25zdCB0b2tlblN0cmluZyA9IHlpZWxkIHRva2VuKFwiYmVhcmVyXCIsIFtdKTtcblx0XHRcdFx0XHRpZiAodG9rZW5TdHJpbmcpIGhlYWRlclBhcmFtZXRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEJlYXJlciAke3Rva2VuU3RyaW5nfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSB5aWVsZCB0aGlzLnJlcXVlc3Qoe1xuXHRcdFx0XHRcdHBhdGg6IGAvdjEvY2hhdHMvcmVwb3J0YCxcblx0XHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IGhlYWRlclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0cXVlcnk6IHF1ZXJ5UGFyYW1ldGVycyxcblx0XHRcdFx0XHRib2R5OiAoMCwgaW5kZXhfMSQzLlJlcG9ydFNlc3Npb25SZXF1ZXN0VG9KU09OKShyZXF1ZXN0UGFyYW1ldGVyc1tcIlJlcG9ydFNlc3Npb25SZXF1ZXN0XCJdKVxuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDMuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIFJlcG9ydCB0aGUgc2Vzc2lvbiBhcyBiZWluZyBhIHByb2JsZW1cblx0XHQqIFJlcG9ydCBTZXNzaW9uXG5cdFx0Ki9cblx0XHR2MUNoYXRzUmVwb3J0U2Vzc2lvbklkUG9zdCgpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMyh0aGlzLCBhcmd1bWVudHMsIHZvaWQgMCwgZnVuY3Rpb24qIChyZXF1ZXN0UGFyYW1ldGVycyA9IHt9LCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy52MUNoYXRzUmVwb3J0U2Vzc2lvbklkUG9zdFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykpLnZhbHVlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBQb3N0IGEgdXNlciBldmVudFxuXHRcdCovXG5cdFx0djFFdmVudFBvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMyh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0Y29uc3QgcXVlcnlQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGNvbnN0IGhlYWRlclBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aGVhZGVyUGFyYW1ldGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xuXHRcdFx0XHRpZiAodGhpcy5jb25maWd1cmF0aW9uICYmIHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbikge1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuO1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuU3RyaW5nID0geWllbGQgdG9rZW4oXCJiZWFyZXJcIiwgW10pO1xuXHRcdFx0XHRcdGlmICh0b2tlblN0cmluZykgaGVhZGVyUGFyYW1ldGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQmVhcmVyICR7dG9rZW5TdHJpbmd9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdCh7XG5cdFx0XHRcdFx0cGF0aDogYC92MS9ldmVudGAsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIlBPU1RcIixcblx0XHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiBxdWVyeVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0Ym9keTogKDAsIGluZGV4XzEkMy5Vc2VyRXZlbnRUb0pTT04pKHJlcXVlc3RQYXJhbWV0ZXJzW1wiVXNlckV2ZW50XCJdKVxuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDMuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIFBvc3QgYSB1c2VyIGV2ZW50XG5cdFx0Ki9cblx0XHR2MUV2ZW50UG9zdCgpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMyh0aGlzLCBhcmd1bWVudHMsIHZvaWQgMCwgZnVuY3Rpb24qIChyZXF1ZXN0UGFyYW1ldGVycyA9IHt9LCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy52MUV2ZW50UG9zdFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykpLnZhbHVlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBHZXQgbWVzc2FnZXMgZm9yIGFuIGFjdGl2ZSBjaGF0IHNlc3Npb24uXG5cdFx0Ki9cblx0XHR2MUdldFNlc3Npb25NZXNzYWdlc1JhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJvcmdfaWRcIl0gPT0gbnVsbCkgdGhyb3cgbmV3IHJ1bnRpbWUkMy5SZXF1aXJlZEVycm9yKFwib3JnX2lkXCIsIFwiUmVxdWlyZWQgcGFyYW1ldGVyIFxcXCJvcmdfaWRcXFwiIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgdjFHZXRTZXNzaW9uTWVzc2FnZXMoKS5cIik7XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcInVzZXJfaWRcIl0gPT0gbnVsbCkgdGhyb3cgbmV3IHJ1bnRpbWUkMy5SZXF1aXJlZEVycm9yKFwidXNlcl9pZFwiLCBcIlJlcXVpcmVkIHBhcmFtZXRlciBcXFwidXNlcl9pZFxcXCIgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyB2MUdldFNlc3Npb25NZXNzYWdlcygpLlwiKTtcblx0XHRcdFx0Y29uc3QgcXVlcnlQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcIm9yZ19pZFwiXSAhPSBudWxsKSBxdWVyeVBhcmFtZXRlcnNbXCJvcmdfaWRcIl0gPSByZXF1ZXN0UGFyYW1ldGVyc1tcIm9yZ19pZFwiXTtcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzW1wiY2hhdF9pZFwiXSAhPSBudWxsKSBxdWVyeVBhcmFtZXRlcnNbXCJjaGF0X2lkXCJdID0gcmVxdWVzdFBhcmFtZXRlcnNbXCJjaGF0X2lkXCJdO1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJ1c2VyX2lkXCJdICE9IG51bGwpIHF1ZXJ5UGFyYW1ldGVyc1tcInVzZXJfaWRcIl0gPSByZXF1ZXN0UGFyYW1ldGVyc1tcInVzZXJfaWRcIl07XG5cdFx0XHRcdGNvbnN0IGhlYWRlclBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aWYgKHRoaXMuY29uZmlndXJhdGlvbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW4pIHtcblx0XHRcdFx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbjtcblx0XHRcdFx0XHRjb25zdCB0b2tlblN0cmluZyA9IHlpZWxkIHRva2VuKFwiYmVhcmVyXCIsIFtdKTtcblx0XHRcdFx0XHRpZiAodG9rZW5TdHJpbmcpIGhlYWRlclBhcmFtZXRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEJlYXJlciAke3Rva2VuU3RyaW5nfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSB5aWVsZCB0aGlzLnJlcXVlc3Qoe1xuXHRcdFx0XHRcdHBhdGg6IGAvdjEvc2Vzc2lvbi9tZXNzYWdlc2AsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IGhlYWRlclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0cXVlcnk6IHF1ZXJ5UGFyYW1ldGVyc1xuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDMuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlLCAoanNvblZhbHVlKSA9PiAoMCwgaW5kZXhfMSQzLlYxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2VGcm9tSlNPTikoanNvblZhbHVlKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBHZXQgbWVzc2FnZXMgZm9yIGFuIGFjdGl2ZSBjaGF0IHNlc3Npb24uXG5cdFx0Ki9cblx0XHR2MUdldFNlc3Npb25NZXNzYWdlcyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMudjFHZXRTZXNzaW9uTWVzc2FnZXNSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogR2V0IHRoZSBvcmdhbml6YXRpb25zIGNvbmZpZ1xuXHRcdCovXG5cdFx0djFPcmdDb25maWdHZXRSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMyh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0Y29uc3QgcXVlcnlQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcIm5hbWVzcGFjZVwiXSAhPSBudWxsKSBxdWVyeVBhcmFtZXRlcnNbXCJuYW1lc3BhY2VcIl0gPSByZXF1ZXN0UGFyYW1ldGVyc1tcIm5hbWVzcGFjZVwiXTtcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzW1wic291cmNlXCJdICE9IG51bGwpIHF1ZXJ5UGFyYW1ldGVyc1tcInNvdXJjZVwiXSA9IHJlcXVlc3RQYXJhbWV0ZXJzW1wic291cmNlXCJdO1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJ1c2VyX2lkXCJdICE9IG51bGwpIHF1ZXJ5UGFyYW1ldGVyc1tcInVzZXJfaWRcIl0gPSByZXF1ZXN0UGFyYW1ldGVyc1tcInVzZXJfaWRcIl07XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcImluY2x1ZGVfZXhwZXJpbWVudHNcIl0gIT0gbnVsbCkgcXVlcnlQYXJhbWV0ZXJzW1wiaW5jbHVkZV9leHBlcmltZW50c1wiXSA9IHJlcXVlc3RQYXJhbWV0ZXJzW1wiaW5jbHVkZV9leHBlcmltZW50c1wiXTtcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzW1wiaW5jbHVkZV9mZWF0dXJlX2dhdGVzXCJdICE9IG51bGwpIHF1ZXJ5UGFyYW1ldGVyc1tcImluY2x1ZGVfZmVhdHVyZV9nYXRlc1wiXSA9IHJlcXVlc3RQYXJhbWV0ZXJzW1wiaW5jbHVkZV9mZWF0dXJlX2dhdGVzXCJdO1xuXHRcdFx0XHRjb25zdCBoZWFkZXJQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL29yZy9jb25maWdgLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcblx0XHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiBxdWVyeVBhcmFtZXRlcnNcblx0XHRcdFx0fSwgaW5pdE92ZXJyaWRlcyk7XG5cdFx0XHRcdHJldHVybiBuZXcgcnVudGltZSQzLkpTT05BcGlSZXNwb25zZShyZXNwb25zZSwgKGpzb25WYWx1ZSkgPT4gKDAsIGluZGV4XzEkMy5Pcmdhbml6YXRpb25Db25maWdSZXN1bHRzRnJvbUpTT04pKGpzb25WYWx1ZSkpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogR2V0IHRoZSBvcmdhbml6YXRpb25zIGNvbmZpZ1xuXHRcdCovXG5cdFx0djFPcmdDb25maWdHZXQoKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgYXJndW1lbnRzLCB2b2lkIDAsIGZ1bmN0aW9uKiAocmVxdWVzdFBhcmFtZXRlcnMgPSB7fSwgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMudjFPcmdDb25maWdHZXRSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogR2V0IHRoZSBvcmdhbml6YXRpb24gYW5kIGl0cyBzZXR0aW5ncyBnaXZlbiBhbiBBUEkga2V5XG5cdFx0Ki9cblx0XHR2MU9yZ0dldFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJrZXlcIl0gPT0gbnVsbCkgdGhyb3cgbmV3IHJ1bnRpbWUkMy5SZXF1aXJlZEVycm9yKFwia2V5XCIsIFwiUmVxdWlyZWQgcGFyYW1ldGVyIFxcXCJrZXlcXFwiIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgdjFPcmdHZXQoKS5cIik7XG5cdFx0XHRcdGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJrZXlcIl0gIT0gbnVsbCkgcXVlcnlQYXJhbWV0ZXJzW1wia2V5XCJdID0gcmVxdWVzdFBhcmFtZXRlcnNbXCJrZXlcIl07XG5cdFx0XHRcdGNvbnN0IGhlYWRlclBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aWYgKHRoaXMuY29uZmlndXJhdGlvbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW4pIHtcblx0XHRcdFx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbjtcblx0XHRcdFx0XHRjb25zdCB0b2tlblN0cmluZyA9IHlpZWxkIHRva2VuKFwiYmVhcmVyXCIsIFtdKTtcblx0XHRcdFx0XHRpZiAodG9rZW5TdHJpbmcpIGhlYWRlclBhcmFtZXRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEJlYXJlciAke3Rva2VuU3RyaW5nfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSB5aWVsZCB0aGlzLnJlcXVlc3Qoe1xuXHRcdFx0XHRcdHBhdGg6IGAvdjEvb3JnYCxcblx0XHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsXG5cdFx0XHRcdFx0aGVhZGVyczogaGVhZGVyUGFyYW1ldGVycyxcblx0XHRcdFx0XHRxdWVyeTogcXVlcnlQYXJhbWV0ZXJzXG5cdFx0XHRcdH0sIGluaXRPdmVycmlkZXMpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IHJ1bnRpbWUkMy5KU09OQXBpUmVzcG9uc2UocmVzcG9uc2UsIChqc29uVmFsdWUpID0+ICgwLCBpbmRleF8xJDMuT3JnYW5pemF0aW9uU2V0dGluZ3NGcm9tSlNPTikoanNvblZhbHVlKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBHZXQgdGhlIG9yZ2FuaXphdGlvbiBhbmQgaXRzIHNldHRpbmdzIGdpdmVuIGFuIEFQSSBrZXlcblx0XHQqL1xuXHRcdHYxT3JnR2V0KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy52MU9yZ0dldFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykpLnZhbHVlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBFeHBsYWluIHdoeSBhIHByb2R1Y3Qgd2FzIHJlY29tbWVuZGVkLlxuXHRcdCovXG5cdFx0djFTZWFyY2hFeHBsYWluR2V0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcIm9yZ19pZFwiXSA9PSBudWxsKSB0aHJvdyBuZXcgcnVudGltZSQzLlJlcXVpcmVkRXJyb3IoXCJvcmdfaWRcIiwgXCJSZXF1aXJlZCBwYXJhbWV0ZXIgXFxcIm9yZ19pZFxcXCIgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyB2MVNlYXJjaEV4cGxhaW5HZXQoKS5cIik7XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcImNoYXRfaWRcIl0gPT0gbnVsbCkgdGhyb3cgbmV3IHJ1bnRpbWUkMy5SZXF1aXJlZEVycm9yKFwiY2hhdF9pZFwiLCBcIlJlcXVpcmVkIHBhcmFtZXRlciBcXFwiY2hhdF9pZFxcXCIgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyB2MVNlYXJjaEV4cGxhaW5HZXQoKS5cIik7XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcInByb2R1Y3RfaWRcIl0gPT0gbnVsbCkgdGhyb3cgbmV3IHJ1bnRpbWUkMy5SZXF1aXJlZEVycm9yKFwicHJvZHVjdF9pZFwiLCBcIlJlcXVpcmVkIHBhcmFtZXRlciBcXFwicHJvZHVjdF9pZFxcXCIgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyB2MVNlYXJjaEV4cGxhaW5HZXQoKS5cIik7XG5cdFx0XHRcdGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJvcmdfaWRcIl0gIT0gbnVsbCkgcXVlcnlQYXJhbWV0ZXJzW1wib3JnX2lkXCJdID0gcmVxdWVzdFBhcmFtZXRlcnNbXCJvcmdfaWRcIl07XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcImNoYXRfaWRcIl0gIT0gbnVsbCkgcXVlcnlQYXJhbWV0ZXJzW1wiY2hhdF9pZFwiXSA9IHJlcXVlc3RQYXJhbWV0ZXJzW1wiY2hhdF9pZFwiXTtcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzW1wicHJvZHVjdF9pZFwiXSAhPSBudWxsKSBxdWVyeVBhcmFtZXRlcnNbXCJwcm9kdWN0X2lkXCJdID0gcmVxdWVzdFBhcmFtZXRlcnNbXCJwcm9kdWN0X2lkXCJdO1xuXHRcdFx0XHRjb25zdCBoZWFkZXJQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL3NlYXJjaC9leHBsYWluYCxcblx0XHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsXG5cdFx0XHRcdFx0aGVhZGVyczogaGVhZGVyUGFyYW1ldGVycyxcblx0XHRcdFx0XHRxdWVyeTogcXVlcnlQYXJhbWV0ZXJzXG5cdFx0XHRcdH0sIGluaXRPdmVycmlkZXMpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IHJ1bnRpbWUkMy5KU09OQXBpUmVzcG9uc2UocmVzcG9uc2UsIChqc29uVmFsdWUpID0+ICgwLCBpbmRleF8xJDMuVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2VGcm9tSlNPTikoanNvblZhbHVlKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBFeHBsYWluIHdoeSBhIHByb2R1Y3Qgd2FzIHJlY29tbWVuZGVkLlxuXHRcdCovXG5cdFx0djFTZWFyY2hFeHBsYWluR2V0KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy52MVNlYXJjaEV4cGxhaW5HZXRSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xuXHRleHBvcnRzLkRlZmF1bHRBcGkgPSBEZWZhdWx0QXBpO1xuXHQvKipcblx0KiBAZXhwb3J0XG5cdCogQGVudW0ge3N0cmluZ31cblx0Ki9cblx0dmFyIFYxT3JnQ29uZmlnR2V0U291cmNlRW51bTtcblx0KGZ1bmN0aW9uKFYxT3JnQ29uZmlnR2V0U291cmNlRW51bSQxKSB7XG5cdFx0VjFPcmdDb25maWdHZXRTb3VyY2VFbnVtJDFbXCJGb3JrXCJdID0gXCJmb3JrXCI7XG5cdFx0VjFPcmdDb25maWdHZXRTb3VyY2VFbnVtJDFbXCJQbGF5Z3JvdW5kXCJdID0gXCJwbGF5Z3JvdW5kXCI7XG5cdFx0VjFPcmdDb25maWdHZXRTb3VyY2VFbnVtJDFbXCJBcHBcIl0gPSBcImFwcFwiO1xuXHRcdFYxT3JnQ29uZmlnR2V0U291cmNlRW51bSQxW1wiVGVzdFwiXSA9IFwidGVzdFwiO1xuXHR9KShWMU9yZ0NvbmZpZ0dldFNvdXJjZUVudW0gfHwgKGV4cG9ydHMuVjFPcmdDb25maWdHZXRTb3VyY2VFbnVtID0gVjFPcmdDb25maWdHZXRTb3VyY2VFbnVtID0ge30pKTtcbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvYXBpcy9JbmZlcmVuY2VBcGkuanNcbnZhciByZXF1aXJlX0luZmVyZW5jZUFwaSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvYXBpcy9JbmZlcmVuY2VBcGkuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHR2YXIgX19hd2FpdGVyJDIgPSBleHBvcnRzICYmIGV4cG9ydHMuX19hd2FpdGVyIHx8IGZ1bmN0aW9uKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuXHRcdGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbihyZXNvbHZlKSB7XG5cdFx0XHRcdHJlc29sdmUodmFsdWUpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0c3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmdW5jdGlvbiBzdGVwKHJlc3VsdCkge1xuXHRcdFx0XHRyZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTtcblx0XHRcdH1cblx0XHRcdHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcblx0XHR9KTtcblx0fTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLkluZmVyZW5jZUFwaSA9IHZvaWQgMDtcblx0Y29uc3QgcnVudGltZSQyID0gcmVxdWlyZV9ydW50aW1lKCk7XG5cdGNvbnN0IGluZGV4XzEkMiA9IHJlcXVpcmVfbW9kZWxzKCk7XG5cdC8qKlxuXHQqXG5cdCovXG5cdHZhciBJbmZlcmVuY2VBcGkgPSBjbGFzcyBleHRlbmRzIHJ1bnRpbWUkMi5CYXNlQVBJIHtcblx0XHQvKipcblx0XHQqIFJlc3BvbnNlIGZvciBhIHVzZXIgaW50ZXJhY3Rpb25cblx0XHQqL1xuXHRcdHYxTmV4dFJlc3BvbnNlc1Bvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0Y29uc3QgcXVlcnlQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGNvbnN0IGhlYWRlclBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aGVhZGVyUGFyYW1ldGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xuXHRcdFx0XHRpZiAodGhpcy5jb25maWd1cmF0aW9uICYmIHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbikge1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuO1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuU3RyaW5nID0geWllbGQgdG9rZW4oXCJiZWFyZXJcIiwgW10pO1xuXHRcdFx0XHRcdGlmICh0b2tlblN0cmluZykgaGVhZGVyUGFyYW1ldGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQmVhcmVyICR7dG9rZW5TdHJpbmd9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdCh7XG5cdFx0XHRcdFx0cGF0aDogYC92MS9uZXh0X3Jlc3BvbnNlc2AsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIlBPU1RcIixcblx0XHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiBxdWVyeVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0Ym9keTogKDAsIGluZGV4XzEkMi5OZXh0TWVzc2FnZVJlcXVlc3RUb0pTT04pKHJlcXVlc3RQYXJhbWV0ZXJzW1wiTmV4dE1lc3NhZ2VSZXF1ZXN0XCJdKVxuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDIuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlLCAoanNvblZhbHVlKSA9PiBqc29uVmFsdWUubWFwKGluZGV4XzEkMi5SZXNwb25zZUZyb21KU09OKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBSZXNwb25zZSBmb3IgYSB1c2VyIGludGVyYWN0aW9uXG5cdFx0Ki9cblx0XHR2MU5leHRSZXNwb25zZXNQb3N0KCkge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQyKHRoaXMsIGFyZ3VtZW50cywgdm9pZCAwLCBmdW5jdGlvbiogKHJlcXVlc3RQYXJhbWV0ZXJzID0ge30sIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdFx0cmV0dXJuIHlpZWxkICh5aWVsZCB0aGlzLnYxTmV4dFJlc3BvbnNlc1Bvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogU3VnZ2VzdGlvbnNcblx0XHQqL1xuXHRcdHYxTmV4dFN1Z2dlc3Rpb25zUG9zdFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRoZWFkZXJQYXJhbWV0ZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL25leHRfc3VnZ2VzdGlvbnNgLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJQT1NUXCIsXG5cdFx0XHRcdFx0aGVhZGVyczogaGVhZGVyUGFyYW1ldGVycyxcblx0XHRcdFx0XHRxdWVyeTogcXVlcnlQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGJvZHk6ICgwLCBpbmRleF8xJDIuTmV4dE1lc3NhZ2VSZXF1ZXN0VG9KU09OKShyZXF1ZXN0UGFyYW1ldGVyc1tcIk5leHRNZXNzYWdlUmVxdWVzdFwiXSlcblx0XHRcdFx0fSwgaW5pdE92ZXJyaWRlcyk7XG5cdFx0XHRcdHJldHVybiBuZXcgcnVudGltZSQyLkpTT05BcGlSZXNwb25zZShyZXNwb25zZSwgKGpzb25WYWx1ZSkgPT4ganNvblZhbHVlLm1hcChpbmRleF8xJDIuU3VnZ2VzdGlvbkZyb21KU09OKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBTdWdnZXN0aW9uc1xuXHRcdCovXG5cdFx0djFOZXh0U3VnZ2VzdGlvbnNQb3N0KCkge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQyKHRoaXMsIGFyZ3VtZW50cywgdm9pZCAwLCBmdW5jdGlvbiogKHJlcXVlc3RQYXJhbWV0ZXJzID0ge30sIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdFx0cmV0dXJuIHlpZWxkICh5aWVsZCB0aGlzLnYxTmV4dFN1Z2dlc3Rpb25zUG9zdFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykpLnZhbHVlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBDaGVjayB3aGV0aGVyIHRoZSBldmVudCBpcyBzdXBwb3J0ZWRcblx0XHQqL1xuXHRcdHYxU3VwcG9ydGVkRXZlbnRQb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRjb25zdCBoZWFkZXJQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGhlYWRlclBhcmFtZXRlcnNbXCJDb250ZW50LVR5cGVcIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcblx0XHRcdFx0aWYgKHRoaXMuY29uZmlndXJhdGlvbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW4pIHtcblx0XHRcdFx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbjtcblx0XHRcdFx0XHRjb25zdCB0b2tlblN0cmluZyA9IHlpZWxkIHRva2VuKFwiYmVhcmVyXCIsIFtdKTtcblx0XHRcdFx0XHRpZiAodG9rZW5TdHJpbmcpIGhlYWRlclBhcmFtZXRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEJlYXJlciAke3Rva2VuU3RyaW5nfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSB5aWVsZCB0aGlzLnJlcXVlc3Qoe1xuXHRcdFx0XHRcdHBhdGg6IGAvdjEvc3VwcG9ydGVkX2V2ZW50YCxcblx0XHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IGhlYWRlclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0cXVlcnk6IHF1ZXJ5UGFyYW1ldGVycyxcblx0XHRcdFx0XHRib2R5OiAoMCwgaW5kZXhfMSQyLlN1cHBvcnRlZEV2ZW50UmVxdWVzdFRvSlNPTikocmVxdWVzdFBhcmFtZXRlcnNbXCJTdXBwb3J0ZWRFdmVudFJlcXVlc3RcIl0pXG5cdFx0XHRcdH0sIGluaXRPdmVycmlkZXMpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IHJ1bnRpbWUkMi5KU09OQXBpUmVzcG9uc2UocmVzcG9uc2UsIChqc29uVmFsdWUpID0+ICgwLCBpbmRleF8xJDIuU3VwcG9ydGVkRXZlbnRSZXNwb25zZUZyb21KU09OKShqc29uVmFsdWUpKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIENoZWNrIHdoZXRoZXIgdGhlIGV2ZW50IGlzIHN1cHBvcnRlZFxuXHRcdCovXG5cdFx0djFTdXBwb3J0ZWRFdmVudFBvc3QoKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDIodGhpcywgYXJndW1lbnRzLCB2b2lkIDAsIGZ1bmN0aW9uKiAocmVxdWVzdFBhcmFtZXRlcnMgPSB7fSwgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMudjFTdXBwb3J0ZWRFdmVudFBvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogUmVzb2x2ZSBhIFVSTCB0byBhIHBhZ2UgdHlwZSBhbmQgZ2V0IGNvbmZpZ3VyYXRpb25cblx0XHQqL1xuXHRcdHYxVXJsUmVzb2x2aW5nUG9zdFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRoZWFkZXJQYXJhbWV0ZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL3VybF9yZXNvbHZpbmdgLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJQT1NUXCIsXG5cdFx0XHRcdFx0aGVhZGVyczogaGVhZGVyUGFyYW1ldGVycyxcblx0XHRcdFx0XHRxdWVyeTogcXVlcnlQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGJvZHk6ICgwLCBpbmRleF8xJDIuVXJsUmVzb2x2aW5nUmVxdWVzdFRvSlNPTikocmVxdWVzdFBhcmFtZXRlcnNbXCJVcmxSZXNvbHZpbmdSZXF1ZXN0XCJdKVxuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDIuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlLCAoanNvblZhbHVlKSA9PiAoMCwgaW5kZXhfMSQyLlVybFJlc29sdmluZ1Jlc3BvbnNlRnJvbUpTT04pKGpzb25WYWx1ZSkpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogUmVzb2x2ZSBhIFVSTCB0byBhIHBhZ2UgdHlwZSBhbmQgZ2V0IGNvbmZpZ3VyYXRpb25cblx0XHQqL1xuXHRcdHYxVXJsUmVzb2x2aW5nUG9zdCgpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMih0aGlzLCBhcmd1bWVudHMsIHZvaWQgMCwgZnVuY3Rpb24qIChyZXF1ZXN0UGFyYW1ldGVycyA9IHt9LCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy52MVVybFJlc29sdmluZ1Bvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xuXHRleHBvcnRzLkluZmVyZW5jZUFwaSA9IEluZmVyZW5jZUFwaTtcbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvYXBpcy9Qcm9kdWN0c0FwaS5qc1xudmFyIHJlcXVpcmVfUHJvZHVjdHNBcGkgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L2FwaXMvUHJvZHVjdHNBcGkuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHR2YXIgX19hd2FpdGVyJDEgPSBleHBvcnRzICYmIGV4cG9ydHMuX19hd2FpdGVyIHx8IGZ1bmN0aW9uKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuXHRcdGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbihyZXNvbHZlKSB7XG5cdFx0XHRcdHJlc29sdmUodmFsdWUpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0c3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmdW5jdGlvbiBzdGVwKHJlc3VsdCkge1xuXHRcdFx0XHRyZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTtcblx0XHRcdH1cblx0XHRcdHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcblx0XHR9KTtcblx0fTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLlByb2R1Y3RzQXBpID0gdm9pZCAwO1xuXHRjb25zdCBydW50aW1lJDEgPSByZXF1aXJlX3J1bnRpbWUoKTtcblx0Y29uc3QgaW5kZXhfMSQxID0gcmVxdWlyZV9tb2RlbHMoKTtcblx0LyoqXG5cdCpcblx0Ki9cblx0dmFyIFByb2R1Y3RzQXBpID0gY2xhc3MgZXh0ZW5kcyBydW50aW1lJDEuQmFzZUFQSSB7XG5cdFx0LyoqXG5cdFx0KiBSZXRyaWV2ZSBwcm9kdWN0c1xuXHRcdCovXG5cdFx0djFQcm9kdWN0c1JldHJpZXZlUG9zdFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQxKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRoZWFkZXJQYXJhbWV0ZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL3Byb2R1Y3RzL3JldHJpZXZlYCxcblx0XHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IGhlYWRlclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0cXVlcnk6IHF1ZXJ5UGFyYW1ldGVycyxcblx0XHRcdFx0XHRib2R5OiAoMCwgaW5kZXhfMSQxLlByb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0VG9KU09OKShyZXF1ZXN0UGFyYW1ldGVyc1tcIlByb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0XCJdKVxuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDEuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlLCAoanNvblZhbHVlKSA9PiAoMCwgaW5kZXhfMSQxLlByb2R1Y3RSZXRyaWV2YWxSZXNwb25zZUZyb21KU09OKShqc29uVmFsdWUpKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIFJldHJpZXZlIHByb2R1Y3RzXG5cdFx0Ki9cblx0XHR2MVByb2R1Y3RzUmV0cmlldmVQb3N0KCkge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQxKHRoaXMsIGFyZ3VtZW50cywgdm9pZCAwLCBmdW5jdGlvbiogKHJlcXVlc3RQYXJhbWV0ZXJzID0ge30sIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdFx0cmV0dXJuIHlpZWxkICh5aWVsZCB0aGlzLnYxUHJvZHVjdHNSZXRyaWV2ZVBvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xuXHRleHBvcnRzLlByb2R1Y3RzQXBpID0gUHJvZHVjdHNBcGk7XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L2FwaXMvU2VhcmNoQXBpLmpzXG52YXIgcmVxdWlyZV9TZWFyY2hBcGkgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L2FwaXMvU2VhcmNoQXBpLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0dmFyIF9fYXdhaXRlciA9IGV4cG9ydHMgJiYgZXhwb3J0cy5fX2F3YWl0ZXIgfHwgZnVuY3Rpb24odGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG5cdFx0ZnVuY3Rpb24gYWRvcHQodmFsdWUpIHtcblx0XHRcdHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uKHJlc29sdmUpIHtcblx0XHRcdFx0cmVzb2x2ZSh2YWx1ZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcblx0XHRcdGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7XG5cdFx0XHRcdHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpO1xuXHRcdFx0fVxuXHRcdFx0c3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuXHRcdH0pO1xuXHR9O1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuU2VhcmNoQXBpID0gdm9pZCAwO1xuXHRjb25zdCBydW50aW1lID0gcmVxdWlyZV9ydW50aW1lKCk7XG5cdGNvbnN0IGluZGV4XzEgPSByZXF1aXJlX21vZGVscygpO1xuXHQvKipcblx0KlxuXHQqL1xuXHR2YXIgU2VhcmNoQXBpID0gY2xhc3MgZXh0ZW5kcyBydW50aW1lLkJhc2VBUEkge1xuXHRcdC8qKlxuXHRcdCovXG5cdFx0djFTZWFyY2hRdWVyeUdldFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzW1wicXVlcnlcIl0gPT0gbnVsbCkgdGhyb3cgbmV3IHJ1bnRpbWUuUmVxdWlyZWRFcnJvcihcInF1ZXJ5XCIsIFwiUmVxdWlyZWQgcGFyYW1ldGVyIFxcXCJxdWVyeVxcXCIgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyB2MVNlYXJjaFF1ZXJ5R2V0KCkuXCIpO1xuXHRcdFx0XHRjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzW1wicXVlcnlcIl0gIT0gbnVsbCkgcXVlcnlQYXJhbWV0ZXJzW1wicXVlcnlcIl0gPSByZXF1ZXN0UGFyYW1ldGVyc1tcInF1ZXJ5XCJdO1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJsaW1pdFwiXSAhPSBudWxsKSBxdWVyeVBhcmFtZXRlcnNbXCJsaW1pdFwiXSA9IHJlcXVlc3RQYXJhbWV0ZXJzW1wibGltaXRcIl07XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcInVzZXJfaWRcIl0gIT0gbnVsbCkgcXVlcnlQYXJhbWV0ZXJzW1widXNlcl9pZFwiXSA9IHJlcXVlc3RQYXJhbWV0ZXJzW1widXNlcl9pZFwiXTtcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzW1wib3JnX2lkXCJdICE9IG51bGwpIHF1ZXJ5UGFyYW1ldGVyc1tcIm9yZ19pZFwiXSA9IHJlcXVlc3RQYXJhbWV0ZXJzW1wib3JnX2lkXCJdO1xuXHRcdFx0XHRjb25zdCBoZWFkZXJQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL3NlYXJjaC9xdWVyeWAsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IGhlYWRlclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0cXVlcnk6IHF1ZXJ5UGFyYW1ldGVyc1xuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lLkpTT05BcGlSZXNwb25zZShyZXNwb25zZSwgKGpzb25WYWx1ZSkgPT4gKDAsIGluZGV4XzEuUHJvZHVjdFNlYXJjaFJlc3BvbnNlRnJvbUpTT04pKGpzb25WYWx1ZSkpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCovXG5cdFx0djFTZWFyY2hRdWVyeUdldChyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0cmV0dXJuIHlpZWxkICh5aWVsZCB0aGlzLnYxU2VhcmNoUXVlcnlHZXRSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCovXG5cdFx0djFTZWFyY2hTdWdnZXN0aW9uc0dldFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0Y29uc3QgcXVlcnlQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcIm9yZ19pZFwiXSAhPSBudWxsKSBxdWVyeVBhcmFtZXRlcnNbXCJvcmdfaWRcIl0gPSByZXF1ZXN0UGFyYW1ldGVyc1tcIm9yZ19pZFwiXTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRpZiAodGhpcy5jb25maWd1cmF0aW9uICYmIHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbikge1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuO1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuU3RyaW5nID0geWllbGQgdG9rZW4oXCJiZWFyZXJcIiwgW10pO1xuXHRcdFx0XHRcdGlmICh0b2tlblN0cmluZykgaGVhZGVyUGFyYW1ldGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQmVhcmVyICR7dG9rZW5TdHJpbmd9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdCh7XG5cdFx0XHRcdFx0cGF0aDogYC92MS9zZWFyY2gvc3VnZ2VzdGlvbnNgLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcblx0XHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiBxdWVyeVBhcmFtZXRlcnNcblx0XHRcdFx0fSwgaW5pdE92ZXJyaWRlcyk7XG5cdFx0XHRcdHJldHVybiBuZXcgcnVudGltZS5KU09OQXBpUmVzcG9uc2UocmVzcG9uc2UsIChqc29uVmFsdWUpID0+ICgwLCBpbmRleF8xLlNlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2VGcm9tSlNPTikoanNvblZhbHVlKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0Ki9cblx0XHR2MVNlYXJjaFN1Z2dlc3Rpb25zR2V0KCkge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlcih0aGlzLCBhcmd1bWVudHMsIHZvaWQgMCwgZnVuY3Rpb24qIChyZXF1ZXN0UGFyYW1ldGVycyA9IHt9LCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy52MVNlYXJjaFN1Z2dlc3Rpb25zR2V0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblx0ZXhwb3J0cy5TZWFyY2hBcGkgPSBTZWFyY2hBcGk7XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L2FwaXMvaW5kZXguanNcbnZhciByZXF1aXJlX2FwaXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L2FwaXMvaW5kZXguanNcIjogKChleHBvcnRzKSA9PiB7XG5cdHZhciBfX2NyZWF0ZUJpbmRpbmckMSA9IGV4cG9ydHMgJiYgZXhwb3J0cy5fX2NyZWF0ZUJpbmRpbmcgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcblx0XHRpZiAoazIgPT09IHZvaWQgMCkgazIgPSBrO1xuXHRcdHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcblx0XHRpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkgZGVzYyA9IHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbVtrXTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG5cdH0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG5cdFx0aWYgKGsyID09PSB2b2lkIDApIGsyID0gaztcblx0XHRvW2syXSA9IG1ba107XG5cdH0pKTtcblx0dmFyIF9fZXhwb3J0U3RhciQxID0gZXhwb3J0cyAmJiBleHBvcnRzLl9fZXhwb3J0U3RhciB8fCBmdW5jdGlvbihtLCBleHBvcnRzJDEpIHtcblx0XHRmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMkMSwgcCkpIF9fY3JlYXRlQmluZGluZyQxKGV4cG9ydHMkMSwgbSwgcCk7XG5cdH07XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0X19leHBvcnRTdGFyJDEocmVxdWlyZV9DdXN0b21lclNlcnZpY2VBcGkoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQxKHJlcXVpcmVfRGVmYXVsdEFwaSgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDEocmVxdWlyZV9JbmZlcmVuY2VBcGkoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQxKHJlcXVpcmVfUHJvZHVjdHNBcGkoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQxKHJlcXVpcmVfU2VhcmNoQXBpKCksIGV4cG9ydHMpO1xufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9pbmRleC5qc1xudmFyIHJlcXVpcmVfZGlzdCA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvaW5kZXguanNcIjogKChleHBvcnRzKSA9PiB7XG5cdHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBleHBvcnRzICYmIGV4cG9ydHMuX19jcmVhdGVCaW5kaW5nIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG5cdFx0aWYgKGsyID09PSB2b2lkIDApIGsyID0gaztcblx0XHR2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG5cdFx0aWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIGRlc2MgPSB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1ba107XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xuXHR9KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuXHRcdGlmIChrMiA9PT0gdm9pZCAwKSBrMiA9IGs7XG5cdFx0b1trMl0gPSBtW2tdO1xuXHR9KSk7XG5cdHZhciBfX2V4cG9ydFN0YXIgPSBleHBvcnRzICYmIGV4cG9ydHMuX19leHBvcnRTdGFyIHx8IGZ1bmN0aW9uKG0sIGV4cG9ydHMkMSkge1xuXHRcdGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cyQxLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMkMSwgbSwgcCk7XG5cdH07XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0X19leHBvcnRTdGFyKHJlcXVpcmVfcnVudGltZSgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyKHJlcXVpcmVfYXBpcygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyKHJlcXVpcmVfbW9kZWxzKCksIGV4cG9ydHMpO1xufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9jb21tZXJjZS1hcGkvaW5kZXgudHNcbnZhciBpbXBvcnRfZGlzdCA9IC8qIEBfX1BVUkVfXyAqLyBfX3RvRVNNKHJlcXVpcmVfZGlzdCgpLCAxKTtcblxuLy8jZW5kcmVnaW9uXG52YXIgQXBpQ29udGV4dEVudkVudW0gPSBpbXBvcnRfZGlzdC5Db250ZXh0RW52RW51bTtcbnZhciBBcGlDb250ZXh0U291cmNlRW51bSA9IGltcG9ydF9kaXN0LkNvbnRleHRTb3VyY2VFbnVtO1xudmFyIEFwaUN1c3RTZXJ2aWNlQXR0YWNobWVudCA9IGltcG9ydF9kaXN0LkN1c3RTZXJ2aWNlQXR0YWNobWVudDtcbnZhciBBcGlGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5ID0gaW1wb3J0X2Rpc3QuRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeTtcbnZhciBBcGlGb3JtVHlwZSA9IGltcG9ydF9kaXN0LkZvcm1UeXBlO1xudmFyIEFwaUZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyA9IGltcG9ydF9kaXN0LkZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cztcbnZhciBBcGlHZW5lcmF0aW9uUGFyYW1zID0gaW1wb3J0X2Rpc3QuR2VuZXJhdGlvblBhcmFtcztcbnZhciBBcGlPcmdDb25maWdFeHBlcmltZW50ID0gaW1wb3J0X2Rpc3QuU3RhdHNpZ0V4cGVyaW1lbnQ7XG52YXIgQXBpT3JnQ29uZmlnRmVhdHVyZUdhdGUgPSBpbXBvcnRfZGlzdC5TdGF0c2lnRmVhdHVyZUdhdGU7XG52YXIgQXBpT3JnQ29uZmlnT3JnYW5pemF0aW9uU2V0dGluZ3MgPSBpbXBvcnRfZGlzdC5Pcmdhbml6YXRpb25TZXR0aW5ncztcbnZhciBBcGlQRFBBdHRyaWJ1dGVzID0gaW1wb3J0X2Rpc3QuUERQQXR0cmlidXRlcztcbnZhciBBcGlQTFBBdHRyaWJ1dGVzID0gaW1wb3J0X2Rpc3QuUExQQXR0cmlidXRlcztcbnZhciBBcGlQYWdlVmlzaXRDYXRlZ29yeSA9IGltcG9ydF9kaXN0LlBhZ2VWaXNpdENhdGVnb3J5O1xudmFyIEFwaVByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXMgPSBpbXBvcnRfZGlzdC5SZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzO1xudmFyIEFwaVByb2R1Y3RTZWFyY2hSZXNwb25zZSA9IGltcG9ydF9kaXN0LlByb2R1Y3RTZWFyY2hSZXNwb25zZTtcbnZhciBBcGlQcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzID0gaW1wb3J0X2Rpc3QuUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlcztcbnZhciBBcGlRdWVyeVR5cGVkQXR0cmlidXRlcyA9IGltcG9ydF9kaXN0LlF1ZXJ5VHlwZWRBdHRyaWJ1dGVzO1xudmFyIEFwaVJlc3BvbnNlQ2F0ZWdvcnkgPSBpbXBvcnRfZGlzdC5SZXNwb25zZUNhdGVnb3J5O1xudmFyIEFwaVNlYXJjaEF0dHJpYnV0ZXMgPSBpbXBvcnRfZGlzdC5TZWFyY2hBdHRyaWJ1dGVzO1xudmFyIEFwaVNlYXJjaFJlc3BvbnNlUHJvZHVjdCA9IGltcG9ydF9kaXN0LlNlYXJjaFJlc3BvbnNlUHJvZHVjdDtcbnZhciBBcGlTdWdnZXN0aW9uID0gaW1wb3J0X2Rpc3QuU3VnZ2VzdGlvbjtcbnZhciBBcGlTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXMgPSBpbXBvcnRfZGlzdC5TdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXM7XG52YXIgQXBpU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnkgPSBpbXBvcnRfZGlzdC5TdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeTtcbnZhciBBcGlTdXBwb3J0ZWRFdmVudFJlc3BvbnNlID0gaW1wb3J0X2Rpc3QuU3VwcG9ydGVkRXZlbnRSZXNwb25zZTtcbnZhciBBcGlVc2VyRXZlbnQgPSBpbXBvcnRfZGlzdC5Vc2VyRXZlbnQ7XG52YXIgQXBpVXNlckV2ZW50Q2F0ZWdvcnkgPSBpbXBvcnRfZGlzdC5Vc2VyRXZlbnRDYXRlZ29yeTtcbmV4cG9ydCB7IEFwaUNvbnRleHRFbnZFbnVtLCBBcGlDb250ZXh0U291cmNlRW51bSwgQXBpQ3VzdFNlcnZpY2VBdHRhY2htZW50LCBBcGlGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5LCBBcGlGb3JtVHlwZSwgQXBpRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzLCBBcGlHZW5lcmF0aW9uUGFyYW1zLCBBcGlPcmdDb25maWdFeHBlcmltZW50LCBBcGlPcmdDb25maWdGZWF0dXJlR2F0ZSwgQXBpT3JnQ29uZmlnT3JnYW5pemF0aW9uU2V0dGluZ3MsIEFwaVBEUEF0dHJpYnV0ZXMsIEFwaVBMUEF0dHJpYnV0ZXMsIEFwaVBhZ2VWaXNpdENhdGVnb3J5LCBBcGlQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzLCBBcGlQcm9kdWN0U2VhcmNoUmVzcG9uc2UsIEFwaVByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXMsIEFwaVF1ZXJ5VHlwZWRBdHRyaWJ1dGVzLCBBcGlSZXNwb25zZUNhdGVnb3J5LCBBcGlTZWFyY2hBdHRyaWJ1dGVzLCBBcGlTZWFyY2hSZXNwb25zZVByb2R1Y3QsIEFwaVN1Z2dlc3Rpb24sIEFwaVN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcywgQXBpU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnksIEFwaVN1cHBvcnRlZEV2ZW50UmVzcG9uc2UsIEFwaVVzZXJFdmVudCwgQXBpVXNlckV2ZW50Q2F0ZWdvcnksIENhdGVnb3J5RXh0cmFjdG9yVHlwZSwgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24sIENoYXRTZWFyY2hTb3J0T3ZlcnJpZGVzLCBDaGF0U3RhdGUsIENvbG9yTmFtZXMsIEN1c3RvbWVyU2VydmljZUludGVncmF0aW9uTW9kZSwgQ3VzdG9tZXJTZXJ2aWNlT3ZlcnJpZGVzLCBDdXN0b21lclNlcnZpY2VUeXBlLCBET01JbnNlcnRpb25UeXBlLCBGZWF0dXJlR2F0ZXMsIEdvb2dsZUFuYWx5dGljc0V2ZW50cywgR3JpZEluc2VydGlvblR5cGUsIExvY2FsU3RvcmFnZUtleXMsIE1lc3NhZ2VSb2xlLCBNZXNzYWdlVHlwZSwgT3JnU2hvcnROYW1lLCBQYWdlVmFyaWFudFRlc3RUeXBlLCBQYWdlVmlzaXRDYXRlZ29yeSwgUGVyZk1ldHJpY3NFdmVudHMsIFByb2R1Y3RFeHBlcmltZW50LCBQcm9kdWN0U29ydGluZywgU2VhcmNoUmVzdWx0c1N0YXRlLCBTcGlmZnlFdmVudCwgU3BpZmZ5RXZlbnROYW1lLCBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLCBTcGlmZnlXaWRnZXRzLCBTdWdnZXN0aW9uQmFyTG9jYXRpb25Gb3JNZXRyaWNzLCBWYXJpYW50VHlwZUVudW0sIFdpZGdldFR5cGUgfTsiXSwieF9nb29nbGVfaWdub3JlTGlzdCI6WzBdLCJtYXBwaW5ncyI6Ijs7QUFDQSxJQUFJLFdBQVcsT0FBTztBQUN0QixJQUFJLFlBQVksT0FBTztBQUN2QixJQUFJLG1CQUFtQixPQUFPO0FBQzlCLElBQUksb0JBQW9CLE9BQU87QUFDL0IsSUFBSSxlQUFlLE9BQU87QUFDMUIsSUFBSSxlQUFlLE9BQU8sVUFBVTtBQUNwQyxJQUFJLGNBQWMsSUFBSSxRQUFRLFdBQVc7QUFDeEMsUUFBTyxRQUFRLEdBQUcsR0FBRyxrQkFBa0IsR0FBRyxDQUFDLE1BQU0sTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsU0FBUyxJQUFJLEVBQUUsSUFBSTs7QUFFNUYsSUFBSSxlQUFlLElBQUksTUFBTSxRQUFRLFNBQVM7QUFDN0MsS0FBSSxRQUFRLE9BQU8sU0FBUyxZQUFZLE9BQU8sU0FBUyxXQUFZLE1BQUssSUFBSSxPQUFPLGtCQUFrQixLQUFLLEVBQUUsSUFBSSxHQUFHLElBQUksS0FBSyxRQUFRLEtBQUssSUFBSSxHQUFHLEtBQUs7QUFDckosUUFBTSxLQUFLO0FBQ1gsTUFBSSxDQUFDLGFBQWEsS0FBSyxJQUFJLElBQUksSUFBSSxRQUFRLE9BQVEsV0FBVSxJQUFJLEtBQUs7R0FDckUsT0FBTyxNQUFNLEtBQUssSUFBSSxLQUFLLE1BQU0sSUFBSTtHQUNyQyxZQUFZLEVBQUUsT0FBTyxpQkFBaUIsTUFBTSxJQUFJLEtBQUssS0FBSztHQUMxRCxDQUFDOztBQUVILFFBQU87O0FBRVIsSUFBSSxXQUFXLEtBQUssWUFBWSxZQUFZLFNBQVMsT0FBTyxPQUFPLFNBQVMs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