uswds-rails 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (168) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +17 -0
  3. data/.editorconfig +14 -0
  4. data/.gitignore +28 -0
  5. data/.rspec +3 -0
  6. data/.rubocop +3 -0
  7. data/.rubocop.yml +16 -0
  8. data/.ruby-version +1 -0
  9. data/.simplecov +13 -0
  10. data/.travis.yml +18 -0
  11. data/CONTRIBUTING.md +50 -0
  12. data/Gemfile +4 -0
  13. data/LICENSE.md +27 -0
  14. data/README.md +64 -0
  15. data/Rakefile +8 -0
  16. data/app/assets/stylesheets/uswds/components/_accordions.scss +150 -0
  17. data/app/assets/stylesheets/uswds/components/_alerts.scss +85 -0
  18. data/app/assets/stylesheets/uswds/components/_footer.scss +382 -0
  19. data/app/assets/stylesheets/uswds/components/_forms.scss +164 -0
  20. data/app/assets/stylesheets/uswds/components/_hero.scss +43 -0
  21. data/app/assets/stylesheets/uswds/components/_navigation.scss +446 -0
  22. data/app/assets/stylesheets/uswds/components/_search.scss +106 -0
  23. data/app/assets/stylesheets/uswds/core/_utilities.scss +232 -0
  24. data/app/assets/stylesheets/uswds/core/_variables.scss +112 -0
  25. data/app/assets/stylesheets/uswds/elements/_inputs.scss +346 -0
  26. data/app/assets/stylesheets/uswds/elements/_typography.scss +257 -0
  27. data/app/assets/stylesheets/uswds/uswds.scss +44 -0
  28. data/lib/uswds-rails.rb +1 -0
  29. data/lib/uswds/rails.rb +7 -0
  30. data/lib/uswds/rails/engine.rb +17 -0
  31. data/lib/uswds/rails/version.rb +6 -0
  32. data/uswds-rails.gemspec +36 -0
  33. data/vendor/assets/fonts/uswds/merriweather-bold-webfont.eot +0 -0
  34. data/vendor/assets/fonts/uswds/merriweather-bold-webfont.ttf +0 -0
  35. data/vendor/assets/fonts/uswds/merriweather-bold-webfont.woff +0 -0
  36. data/vendor/assets/fonts/uswds/merriweather-bold-webfont.woff2 +0 -0
  37. data/vendor/assets/fonts/uswds/merriweather-italic-webfont.eot +0 -0
  38. data/vendor/assets/fonts/uswds/merriweather-italic-webfont.ttf +0 -0
  39. data/vendor/assets/fonts/uswds/merriweather-italic-webfont.woff +0 -0
  40. data/vendor/assets/fonts/uswds/merriweather-italic-webfont.woff2 +0 -0
  41. data/vendor/assets/fonts/uswds/merriweather-light-webfont.eot +0 -0
  42. data/vendor/assets/fonts/uswds/merriweather-light-webfont.ttf +0 -0
  43. data/vendor/assets/fonts/uswds/merriweather-light-webfont.woff +0 -0
  44. data/vendor/assets/fonts/uswds/merriweather-light-webfont.woff2 +0 -0
  45. data/vendor/assets/fonts/uswds/merriweather-regular-webfont.eot +0 -0
  46. data/vendor/assets/fonts/uswds/merriweather-regular-webfont.ttf +0 -0
  47. data/vendor/assets/fonts/uswds/merriweather-regular-webfont.woff +0 -0
  48. data/vendor/assets/fonts/uswds/merriweather-regular-webfont.woff2 +0 -0
  49. data/vendor/assets/fonts/uswds/sourcesanspro-bold-webfont.eot +0 -0
  50. data/vendor/assets/fonts/uswds/sourcesanspro-bold-webfont.ttf +0 -0
  51. data/vendor/assets/fonts/uswds/sourcesanspro-bold-webfont.woff +0 -0
  52. data/vendor/assets/fonts/uswds/sourcesanspro-bold-webfont.woff2 +0 -0
  53. data/vendor/assets/fonts/uswds/sourcesanspro-italic-webfont.eot +0 -0
  54. data/vendor/assets/fonts/uswds/sourcesanspro-italic-webfont.ttf +0 -0
  55. data/vendor/assets/fonts/uswds/sourcesanspro-italic-webfont.woff +0 -0
  56. data/vendor/assets/fonts/uswds/sourcesanspro-italic-webfont.woff2 +0 -0
  57. data/vendor/assets/fonts/uswds/sourcesanspro-light-webfont.eot +0 -0
  58. data/vendor/assets/fonts/uswds/sourcesanspro-light-webfont.ttf +0 -0
  59. data/vendor/assets/fonts/uswds/sourcesanspro-light-webfont.woff +0 -0
  60. data/vendor/assets/fonts/uswds/sourcesanspro-light-webfont.woff2 +0 -0
  61. data/vendor/assets/fonts/uswds/sourcesanspro-regular-webfont.eot +0 -0
  62. data/vendor/assets/fonts/uswds/sourcesanspro-regular-webfont.ttf +0 -0
  63. data/vendor/assets/fonts/uswds/sourcesanspro-regular-webfont.woff +0 -0
  64. data/vendor/assets/fonts/uswds/sourcesanspro-regular-webfont.woff2 +0 -0
  65. data/vendor/assets/images/uswds/alerts/error.png +0 -0
  66. data/vendor/assets/images/uswds/alerts/error.svg +17 -0
  67. data/vendor/assets/images/uswds/alerts/info.png +0 -0
  68. data/vendor/assets/images/uswds/alerts/info.svg +18 -0
  69. data/vendor/assets/images/uswds/alerts/success.png +0 -0
  70. data/vendor/assets/images/uswds/alerts/success.svg +12 -0
  71. data/vendor/assets/images/uswds/alerts/warning.png +0 -0
  72. data/vendor/assets/images/uswds/alerts/warning.svg +16 -0
  73. data/vendor/assets/images/uswds/angle-arrow-down-hover.png +0 -0
  74. data/vendor/assets/images/uswds/angle-arrow-down-hover.svg +1 -0
  75. data/vendor/assets/images/uswds/angle-arrow-down-primary-hover.png +0 -0
  76. data/vendor/assets/images/uswds/angle-arrow-down-primary-hover.svg +1 -0
  77. data/vendor/assets/images/uswds/angle-arrow-down-primary.png +0 -0
  78. data/vendor/assets/images/uswds/angle-arrow-down-primary.svg +1 -0
  79. data/vendor/assets/images/uswds/angle-arrow-down.png +0 -0
  80. data/vendor/assets/images/uswds/angle-arrow-down.svg +1 -0
  81. data/vendor/assets/images/uswds/angle-arrow-up-primary-hover.png +0 -0
  82. data/vendor/assets/images/uswds/angle-arrow-up-primary-hover.svg +1 -0
  83. data/vendor/assets/images/uswds/angle-arrow-up-primary.png +0 -0
  84. data/vendor/assets/images/uswds/angle-arrow-up-primary.svg +1 -0
  85. data/vendor/assets/images/uswds/arrow-down.png +0 -0
  86. data/vendor/assets/images/uswds/arrow-down.svg +1 -0
  87. data/vendor/assets/images/uswds/arrow-right.png +0 -0
  88. data/vendor/assets/images/uswds/arrow-right.svg +1 -0
  89. data/vendor/assets/images/uswds/circle-124.png +0 -0
  90. data/vendor/assets/images/uswds/close.png +0 -0
  91. data/vendor/assets/images/uswds/close.svg +1 -0
  92. data/vendor/assets/images/uswds/correct8.png +0 -0
  93. data/vendor/assets/images/uswds/correct8.svg +1 -0
  94. data/vendor/assets/images/uswds/correct9.png +0 -0
  95. data/vendor/assets/images/uswds/correct9.svg +1 -0
  96. data/vendor/assets/images/uswds/external-link-alt-hover.png +0 -0
  97. data/vendor/assets/images/uswds/external-link-alt-hover.svg +1 -0
  98. data/vendor/assets/images/uswds/external-link-alt.png +0 -0
  99. data/vendor/assets/images/uswds/external-link-alt.svg +1 -0
  100. data/vendor/assets/images/uswds/external-link-hover.png +0 -0
  101. data/vendor/assets/images/uswds/external-link-hover.svg +1 -0
  102. data/vendor/assets/images/uswds/external-link.png +0 -0
  103. data/vendor/assets/images/uswds/external-link.svg +1 -0
  104. data/vendor/assets/images/uswds/favicons/favicon-114.png +0 -0
  105. data/vendor/assets/images/uswds/favicons/favicon-144.png +0 -0
  106. data/vendor/assets/images/uswds/favicons/favicon-16.png +0 -0
  107. data/vendor/assets/images/uswds/favicons/favicon-192.png +0 -0
  108. data/vendor/assets/images/uswds/favicons/favicon-40.png +0 -0
  109. data/vendor/assets/images/uswds/favicons/favicon-57.png +0 -0
  110. data/vendor/assets/images/uswds/favicons/favicon-72.png +0 -0
  111. data/vendor/assets/images/uswds/favicons/favicon.ico +0 -0
  112. data/vendor/assets/images/uswds/favicons/favicon.png +0 -0
  113. data/vendor/assets/images/uswds/hero.png +0 -0
  114. data/vendor/assets/images/uswds/icon-dot-gov.svg +1 -0
  115. data/vendor/assets/images/uswds/icon-https.svg +1 -0
  116. data/vendor/assets/images/uswds/logo-img.png +0 -0
  117. data/vendor/assets/images/uswds/minus-alt.png +0 -0
  118. data/vendor/assets/images/uswds/minus-alt.svg +1 -0
  119. data/vendor/assets/images/uswds/minus.png +0 -0
  120. data/vendor/assets/images/uswds/minus.svg +1 -0
  121. data/vendor/assets/images/uswds/plus-alt.png +0 -0
  122. data/vendor/assets/images/uswds/plus-alt.svg +1 -0
  123. data/vendor/assets/images/uswds/plus.png +0 -0
  124. data/vendor/assets/images/uswds/plus.svg +1 -0
  125. data/vendor/assets/images/uswds/search-alt.png +0 -0
  126. data/vendor/assets/images/uswds/search-alt.svg +1 -0
  127. data/vendor/assets/images/uswds/search.png +0 -0
  128. data/vendor/assets/images/uswds/search.svg +1 -0
  129. data/vendor/assets/images/uswds/social-icons/png/facebook25.png +0 -0
  130. data/vendor/assets/images/uswds/social-icons/png/rss25.png +0 -0
  131. data/vendor/assets/images/uswds/social-icons/png/twitter16.png +0 -0
  132. data/vendor/assets/images/uswds/social-icons/png/youtube15.png +0 -0
  133. data/vendor/assets/images/uswds/social-icons/svg/facebook25.svg +1 -0
  134. data/vendor/assets/images/uswds/social-icons/svg/rss25.svg +1 -0
  135. data/vendor/assets/images/uswds/social-icons/svg/twitter16.svg +1 -0
  136. data/vendor/assets/images/uswds/social-icons/svg/youtube15.svg +1 -0
  137. data/vendor/assets/images/uswds/us_flag_small.png +0 -0
  138. data/vendor/assets/javascripts/uswds/uswds.js +1739 -0
  139. data/vendor/assets/stylesheets/uswds/components/_accordions.scss +150 -0
  140. data/vendor/assets/stylesheets/uswds/components/_alerts.scss +85 -0
  141. data/vendor/assets/stylesheets/uswds/components/_banner.scss +204 -0
  142. data/vendor/assets/stylesheets/uswds/components/_footer.scss +382 -0
  143. data/vendor/assets/stylesheets/uswds/components/_forms.scss +164 -0
  144. data/vendor/assets/stylesheets/uswds/components/_graphic-list.scss +35 -0
  145. data/vendor/assets/stylesheets/uswds/components/_header.scss +221 -0
  146. data/vendor/assets/stylesheets/uswds/components/_hero.scss +43 -0
  147. data/vendor/assets/stylesheets/uswds/components/_layout.scss +36 -0
  148. data/vendor/assets/stylesheets/uswds/components/_media-block.scss +12 -0
  149. data/vendor/assets/stylesheets/uswds/components/_navigation.scss +446 -0
  150. data/vendor/assets/stylesheets/uswds/components/_search.scss +106 -0
  151. data/vendor/assets/stylesheets/uswds/components/_section.scss +37 -0
  152. data/vendor/assets/stylesheets/uswds/components/_sidenav.scss +8 -0
  153. data/vendor/assets/stylesheets/uswds/components/_skipnav.scss +19 -0
  154. data/vendor/assets/stylesheets/uswds/core/_base.scss +30 -0
  155. data/vendor/assets/stylesheets/uswds/core/_fonts.scss +65 -0
  156. data/vendor/assets/stylesheets/uswds/core/_grid.scss +154 -0
  157. data/vendor/assets/stylesheets/uswds/core/_utilities.scss +232 -0
  158. data/vendor/assets/stylesheets/uswds/core/_variables.scss +123 -0
  159. data/vendor/assets/stylesheets/uswds/elements/_buttons.scss +191 -0
  160. data/vendor/assets/stylesheets/uswds/elements/_embed.scss +26 -0
  161. data/vendor/assets/stylesheets/uswds/elements/_figure.scss +13 -0
  162. data/vendor/assets/stylesheets/uswds/elements/_inputs.scss +346 -0
  163. data/vendor/assets/stylesheets/uswds/elements/_labels.scss +20 -0
  164. data/vendor/assets/stylesheets/uswds/elements/_list.scss +32 -0
  165. data/vendor/assets/stylesheets/uswds/elements/_table.scss +47 -0
  166. data/vendor/assets/stylesheets/uswds/elements/_typography.scss +257 -0
  167. data/vendor/assets/stylesheets/uswds/uswds.scss +41 -0
  168. metadata +394 -0
@@ -0,0 +1,44 @@
1
+ /*! uswds 1.2.1 */
2
+
3
+ // Vendor -------------- //
4
+ @import 'bourbon';
5
+ @import 'neat';
6
+ @import 'normalize';
7
+ @include normalize;
8
+
9
+ $output-bourbon-deprecation-warnings: false;
10
+
11
+ // Core -------------- //
12
+ @import 'uswds/core/variables';
13
+ @import 'uswds/core/fonts';
14
+ @import 'uswds/core/base';
15
+ @import 'uswds/core/grid';
16
+ @import 'uswds/core/utilities';
17
+
18
+ // Elements -------------- //
19
+ // Styles basic HTML elements
20
+ @import 'uswds/elements/buttons';
21
+ @import 'uswds/elements/embed';
22
+ @import 'uswds/elements/figure';
23
+ @import 'uswds/elements/inputs';
24
+ @import 'uswds/elements/labels';
25
+ @import 'uswds/elements/list';
26
+ @import 'uswds/elements/table';
27
+ @import 'uswds/elements/typography';
28
+
29
+ // Components -------------- //
30
+ @import 'uswds/components/accordions';
31
+ @import 'uswds/components/alerts';
32
+ @import 'uswds/components/banner';
33
+ @import 'uswds/components/footer';
34
+ @import 'uswds/components/forms';
35
+ @import 'uswds/components/graphic-list';
36
+ @import 'uswds/components/header';
37
+ @import 'uswds/components/hero';
38
+ @import 'uswds/components/layout';
39
+ @import 'uswds/components/media-block';
40
+ @import 'uswds/components/navigation';
41
+ @import 'uswds/components/search';
42
+ @import 'uswds/components/section';
43
+ @import 'uswds/components/sidenav';
44
+ @import 'uswds/components/skipnav';
@@ -0,0 +1 @@
1
+ require 'uswds/rails' if defined?(::Rails)
@@ -0,0 +1,7 @@
1
+ require 'uswds/rails/engine'
2
+ require 'uswds/rails/version'
3
+
4
+ module Uswds
5
+ module Rails
6
+ end
7
+ end
@@ -0,0 +1,17 @@
1
+ require 'bourbon'
2
+ require 'neat'
3
+ require 'normalize-scss'
4
+
5
+ module Uswds
6
+ module Rails
7
+ class Engine < ::Rails::Engine
8
+ initializer 'uswds.assets' do |app|
9
+ %w[fonts images javascripts stylesheets].each do |path|
10
+ app.config.assets.paths << root.join('vendor', path).to_s
11
+ end
12
+
13
+ app.config.assets.precompile += [/uswds\/.+\.(eot|png|svg|ttf|woff|woff2)$/]
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,6 @@
1
+ module Uswds
2
+ module Rails
3
+ VERSION = '0.1.0'.freeze
4
+ USWDS_VERSION = '1.2.1'.freeze
5
+ end
6
+ end
@@ -0,0 +1,36 @@
1
+ # coding: utf-8
2
+
3
+ lib = File.expand_path('../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+
6
+ require 'uswds/rails/version'
7
+
8
+ Gem::Specification.new do |spec|
9
+ spec.required_ruby_version = '>= 2.2.7'
10
+
11
+ spec.name = 'uswds-rails'
12
+ spec.version = Uswds::Rails::VERSION
13
+ spec.authors = ['Jason Garber']
14
+ spec.email = ['jason@sixtwothree.org']
15
+
16
+ spec.summary = 'Integrate the U.S. Web Design Standards into a Ruby on Rails application.'
17
+ spec.description = spec.summary
18
+ spec.homepage = 'https://github.com/jgarber623/uswds-rails'
19
+ spec.license = 'MIT'
20
+
21
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
22
+ spec.require_paths = ['lib']
23
+
24
+ spec.add_development_dependency 'bundler', '~> 1.15', '>= 1.15.2'
25
+ spec.add_development_dependency 'rails', '~> 5.1', '>= 5.1.2'
26
+ spec.add_development_dependency 'rails-controller-testing', '~> 1.0', '>= 1.0.2'
27
+ spec.add_development_dependency 'rake', '~> 12.0'
28
+ spec.add_development_dependency 'rspec-rails', '~> 3.6'
29
+ spec.add_development_dependency 'rubocop', '~> 0.49.1'
30
+ spec.add_development_dependency 'sass-rails', '~> 5.0', '>= 5.0.6'
31
+ spec.add_development_dependency 'simplecov-console', '~> 0.4.2'
32
+
33
+ spec.add_runtime_dependency 'bourbon', '~> 4.3', '>= 4.3.4'
34
+ spec.add_runtime_dependency 'neat', '~> 1.8'
35
+ spec.add_runtime_dependency 'normalize-scss', '~> 7.0'
36
+ end
@@ -0,0 +1,17 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
+ width="216px" height="146px" viewBox="0 0 216 146" enable-background="new 0 0 216 146" xml:space="preserve">
6
+ <path d="M162.18,41.592c-5.595-9.586-13.185-17.176-22.771-22.771c-9.588-5.595-20.055-8.392-31.408-8.392
7
+ c-11.352,0-21.821,2.797-31.408,8.392c-9.587,5.594-17.177,13.184-22.772,22.771C48.225,51.179,45.428,61.649,45.428,73
8
+ c0,11.351,2.798,21.82,8.392,31.408c5.595,9.584,13.185,17.176,22.772,22.771c9.587,5.595,20.056,8.392,31.408,8.392
9
+ c11.352,0,21.822-2.797,31.408-8.392c9.586-5.594,17.176-13.185,22.771-22.771c5.594-9.588,8.391-20.058,8.391-31.408
10
+ C170.57,61.649,167.773,51.178,162.18,41.592z M118.43,112.025c0,0.761-0.246,1.398-0.734,1.914s-1.086,0.773-1.793,0.773H100.26
11
+ c-0.706,0-1.331-0.271-1.874-0.814c-0.543-0.543-0.814-1.168-0.814-1.873V96.546c0-0.706,0.271-1.331,0.814-1.874
12
+ c0.543-0.543,1.168-0.814,1.874-0.814h15.643c0.707,0,1.306,0.258,1.793,0.773c0.488,0.518,0.734,1.154,0.734,1.915V112.025z
13
+ M118.266,83.999c-0.055,0.543-0.339,1.019-0.854,1.426c-0.517,0.407-1.154,0.61-1.914,0.61h-15.073
14
+ c-0.761,0-1.413-0.203-1.956-0.61c-0.543-0.407-0.815-0.883-0.815-1.426l-1.385-50.595c0-0.653,0.271-1.141,0.814-1.467
15
+ c0.544-0.434,1.196-0.652,1.956-0.652h17.926c0.761,0,1.412,0.217,1.955,0.652c0.543,0.326,0.813,0.815,0.813,1.467L118.266,83.999z
16
+ "/>
17
+ </svg>
@@ -0,0 +1,18 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
+ width="216px" height="146px" viewBox="0 0 216 146" enable-background="new 0 0 216 146" xml:space="preserve">
6
+ <path d="M162.18,41.592c-5.595-9.586-13.185-17.176-22.771-22.771c-9.588-5.595-20.055-8.392-31.408-8.392
7
+ c-11.352,0-21.822,2.797-31.408,8.392c-9.587,5.594-17.177,13.184-22.772,22.771C48.225,51.179,45.428,61.649,45.428,73
8
+ c0,11.352,2.798,21.82,8.392,31.408c5.595,9.585,13.185,17.176,22.772,22.771c9.587,5.595,20.056,8.392,31.408,8.392
9
+ c11.352,0,21.822-2.797,31.408-8.392c9.586-5.594,17.176-13.185,22.771-22.771c5.594-9.587,8.391-20.057,8.391-31.408
10
+ C170.57,61.648,167.773,51.178,162.18,41.592z M97.572,26.071c0-0.761,0.244-1.385,0.733-1.874c0.489-0.488,1.114-0.733,1.874-0.733
11
+ h15.644c0.76,0,1.385,0.245,1.872,0.733c0.488,0.489,0.734,1.113,0.734,1.874v13.036c0,0.76-0.246,1.385-0.734,1.873
12
+ c-0.487,0.489-1.112,0.733-1.872,0.733h-15.644c-0.76,0-1.385-0.244-1.874-0.733c-0.489-0.488-0.733-1.113-0.733-1.873V26.071z
13
+ M128.857,112.107c0,0.76-0.246,1.385-0.733,1.872c-0.487,0.489-1.112,0.733-1.874,0.733h-36.5c-0.761,0-1.385-0.244-1.874-0.733
14
+ c-0.489-0.488-0.733-1.113-0.733-1.873V99.07c0-0.762,0.244-1.385,0.733-1.874c0.489-0.488,1.114-0.733,1.874-0.733h7.822V70.392
15
+ H89.75c-0.761,0-1.385-0.244-1.874-0.733c-0.489-0.488-0.733-1.113-0.733-1.874V54.75c0-0.761,0.244-1.385,0.733-1.874
16
+ c0.489-0.489,1.114-0.733,1.874-0.733h26.073c0.76,0,1.385,0.244,1.872,0.733c0.488,0.489,0.734,1.113,0.734,1.874v41.714h7.82
17
+ c0.761,0,1.386,0.245,1.874,0.733c0.487,0.488,0.733,1.113,0.733,1.874V112.107z"/>
18
+ </svg>
@@ -0,0 +1,12 @@
1
+ <svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
2
+ width="216px" height="216px" viewBox="0 0 216 216" xml:space="preserve">
3
+ <path d="M162.18,41.592c-5.595-9.586-13.185-17.176-22.771-22.771c-9.588-5.595-20.055-8.392-31.408-8.392
4
+ c-11.352,0-21.822,2.797-31.408,8.392c-9.587,5.594-17.177,13.184-22.772,22.771C48.225,51.179,45.428,61.649,45.428,73
5
+ c0,11.352,2.798,21.82,8.392,31.408c5.595,9.585,13.185,17.176,22.772,22.771c9.587,5.595,20.056,8.392,31.408,8.392
6
+ c11.352,0,21.822-2.797,31.408-8.392c9.586-5.594,17.176-13.185,22.771-22.771c5.594-9.587,8.391-20.057,8.391-31.408
7
+ C170.57,61.648,167.773,51.178,162.18,41.592z M148.572,63.468l-44.239,44.239c-1.032,1.032-2.281,1.549-3.748,1.549
8
+ c-1.412,0-2.634-0.517-3.666-1.549L67.425,78.215c-0.977-0.979-1.466-2.199-1.466-3.666c0-1.521,0.488-2.771,1.466-3.749
9
+ l7.414-7.332c1.033-1.032,2.254-1.548,3.667-1.548s2.635,0.516,3.667,1.548l18.413,18.413l33.241-33.16
10
+ c1.032-1.032,2.254-1.548,3.666-1.548c1.411,0,2.635,0.516,3.666,1.548l7.414,7.333c0.979,0.977,1.467,2.226,1.467,3.747
11
+ C150.04,61.268,149.552,62.49,148.572,63.468z"/>
12
+ </svg>
@@ -0,0 +1,16 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
+ width="216px" height="146px" viewBox="0 0 216 146" enable-background="new 0 0 216 146" xml:space="preserve">
6
+ <path d="M179.695,125.388L117.126,10.673c-0.924-1.684-2.2-3.015-3.832-3.992c-1.628-0.978-3.394-1.467-5.295-1.467
7
+ c-1.901,0-3.667,0.49-5.296,1.467s-2.906,2.308-3.829,3.992L36.303,125.388c-1.901,3.423-1.847,6.845,0.163,10.267
8
+ c0.924,1.574,2.187,2.824,3.789,3.746c1.603,0.924,3.327,1.387,5.174,1.387H170.57c1.849,0,3.572-0.463,5.175-1.387
9
+ c1.603-0.922,2.864-2.172,3.789-3.746C181.544,132.232,181.598,128.811,179.695,125.388z M118.43,117.24
10
+ c0,0.76-0.259,1.398-0.773,1.914c-0.516,0.516-1.127,0.773-1.834,0.773H100.18c-0.706,0-1.317-0.257-1.833-0.773
11
+ c-0.516-0.517-0.774-1.154-0.774-1.914v-15.48c0-0.76,0.258-1.397,0.774-1.914c0.516-0.516,1.126-0.773,1.833-0.773h15.642
12
+ c0.707,0,1.318,0.257,1.834,0.773c0.515,0.517,0.773,1.154,0.773,1.914V117.24z M118.268,86.77
13
+ c-0.056,0.543-0.341,0.991-0.856,1.344c-0.517,0.354-1.154,0.529-1.915,0.529h-15.073c-0.76,0-1.412-0.176-1.955-0.529
14
+ c-0.544-0.354-0.815-0.801-0.815-1.346l-1.385-37.231c0-0.761,0.272-1.331,0.815-1.711c0.706-0.597,1.358-0.896,1.956-0.896h17.924
15
+ c0.598,0,1.25,0.298,1.956,0.896c0.543,0.38,0.813,0.896,0.813,1.548L118.268,86.77z"/>
16
+ </svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 284.929 284.929"><path d="M282.082 76.51L267.808 62.24c-1.902-1.906-4.093-2.856-6.57-2.856-2.47 0-4.66.95-6.563 2.856L142.465 174.44 30.263 62.24c-1.903-1.905-4.093-2.855-6.567-2.855-2.475 0-4.665.95-6.567 2.856L2.856 76.516C.95 78.417 0 80.607 0 83.082c0 2.473.953 4.663 2.856 6.565L135.9 222.693c1.9 1.903 4.092 2.854 6.566 2.854s4.66-.95 6.562-2.854L282.082 89.647c1.902-1.903 2.847-4.093 2.847-6.565 0-2.475-.946-4.665-2.848-6.57z" fill="#ffffff"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 284.929 284.929"><path d="M282.082 76.51L267.808 62.24c-1.902-1.906-4.093-2.856-6.57-2.856-2.47 0-4.66.95-6.563 2.856L142.465 174.44 30.263 62.24c-1.903-1.905-4.093-2.855-6.567-2.855-2.475 0-4.665.95-6.567 2.856L2.856 76.516C.95 78.417 0 80.607 0 83.082c0 2.473.953 4.663 2.856 6.565L135.9 222.693c1.9 1.903 4.092 2.854 6.566 2.854s4.66-.95 6.562-2.854L282.082 89.647c1.902-1.903 2.847-4.093 2.847-6.565 0-2.475-.946-4.665-2.848-6.57z" fill="#205493"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 284.929 284.929"><path d="M282.082 76.51L267.808 62.24c-1.902-1.906-4.093-2.856-6.57-2.856-2.47 0-4.66.95-6.563 2.856L142.465 174.44 30.263 62.24c-1.903-1.905-4.093-2.855-6.567-2.855-2.475 0-4.665.95-6.567 2.856L2.856 76.516C.95 78.417 0 80.607 0 83.082c0 2.473.953 4.663 2.856 6.565L135.9 222.693c1.9 1.903 4.092 2.854 6.566 2.854s4.66-.95 6.562-2.854L282.082 89.647c1.902-1.903 2.847-4.093 2.847-6.565 0-2.475-.946-4.665-2.848-6.57z" fill="#0071bc"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 284.929 284.929"><path d="M282.082 76.51L267.808 62.24c-1.902-1.906-4.093-2.856-6.57-2.856-2.47 0-4.66.95-6.563 2.856L142.465 174.44 30.263 62.24c-1.903-1.905-4.093-2.855-6.567-2.855-2.475 0-4.665.95-6.567 2.856L2.856 76.516C.95 78.417 0 80.607 0 83.082c0 2.473.953 4.663 2.856 6.565L135.9 222.693c1.9 1.903 4.092 2.854 6.566 2.854s4.66-.95 6.562-2.854L282.082 89.647c1.902-1.903 2.847-4.093 2.847-6.565 0-2.475-.946-4.665-2.848-6.57z" fill="#5b616b"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 284.929 284.929"><path d="M282.082 195.285L149.028 62.24c-1.9-1.903-4.088-2.856-6.562-2.856s-4.665.953-6.567 2.856L2.855 195.285C.95 197.19 0 199.378 0 201.853c0 2.474.953 4.664 2.856 6.566l14.272 14.27c1.903 1.903 4.093 2.854 6.567 2.854s4.664-.95 6.567-2.854l112.204-112.202 112.208 112.21c1.902 1.902 4.093 2.847 6.563 2.847 2.478 0 4.668-.95 6.57-2.848l14.274-14.277c1.903-1.902 2.848-4.093 2.848-6.566 0-2.476-.944-4.666-2.846-6.57z" fill="#205493"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 284.929 284.929"><path d="M282.082 195.285L149.028 62.24c-1.9-1.903-4.088-2.856-6.562-2.856s-4.665.953-6.567 2.856L2.855 195.285C.95 197.19 0 199.378 0 201.853c0 2.474.953 4.664 2.856 6.566l14.272 14.27c1.903 1.903 4.093 2.854 6.567 2.854s4.664-.95 6.567-2.854l112.204-112.202 112.208 112.21c1.902 1.902 4.093 2.847 6.563 2.847 2.478 0 4.668-.95 6.57-2.848l14.274-14.277c1.903-1.902 2.848-4.093 2.848-6.566 0-2.476-.944-4.666-2.846-6.57z" fill="#0071bc"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 444.8 444.8"><path d="M248.1 352L434 165.9c7.2-6.9 10.8-15.4 10.8-25.7 0-10.3-3.6-18.8-10.8-25.7l-21.4-21.7c-7-7-15.6-10.6-25.7-10.6-9.9 0-18.6 3.5-26 10.6L222.4 231.5 83.7 92.8c-7-7-15.6-10.6-25.7-10.6-9.9 0-18.6 3.5-26 10.6l-21.4 21.7c-7 7-10.6 15.6-10.6 25.7s3.5 18.7 10.6 25.7L196.4 352c7.4 7 16.1 10.6 26 10.6 10.1 0 18.7-3.5 25.7-10.6z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="444.819" height="444.819" viewBox="0 0 444.819 444.819"><path d="M352.025 196.712L165.885 10.848C159.028 3.615 150.468 0 140.185 0s-18.84 3.62-25.696 10.848l-21.7 21.416c-7.045 7.043-10.567 15.604-10.567 25.692 0 9.897 3.52 18.56 10.566 25.98L231.544 222.41 92.785 361.168c-7.04 7.043-10.563 15.604-10.563 25.693 0 9.9 3.52 18.566 10.564 25.98l21.7 21.417c7.043 7.043 15.612 10.564 25.697 10.564 10.09 0 18.656-3.52 25.697-10.564L352.025 248.39c7.046-7.423 10.57-16.084 10.57-25.98.002-10.09-3.524-18.655-10.57-25.698z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 339.177 339.177"><path d="M247.244 169.59l83.938-83.938c5.332-5.327 7.994-11.798 7.994-19.414 0-7.614-2.67-14.084-7.994-19.414l-38.827-38.83c-5.33-5.33-11.8-7.994-19.41-7.994-7.618 0-14.086 2.665-19.418 7.993L169.59 91.93 85.65 7.994C80.326 2.665 73.855 0 66.238 0c-7.61 0-14.083 2.665-19.414 7.993l-38.83 38.83C2.668 52.15 0 58.624 0 66.24c0 7.616 2.664 14.084 7.994 19.414L91.93 169.59 7.995 253.528C2.667 258.858 0 265.328 0 272.945c0 7.61 2.664 14.082 7.994 19.41l38.83 38.828c5.33 5.332 11.803 7.994 19.414 7.994 7.616 0 14.084-2.67 19.414-7.994l83.94-83.938 83.943 83.938c5.328 5.332 11.793 7.994 19.417 7.994 7.61 0 14.082-2.67 19.41-7.994l38.82-38.828c5.333-5.324 7.995-11.8 7.995-19.41 0-7.618-2.662-14.086-7.994-19.417l-83.94-83.938z" fill="#5b616b"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 216 146"><path fill="#fff" d="M168.86 37.966l-11.08-11.08c-1.52-1.52-3.367-2.28-5.54-2.28-2.172 0-4.02.76-5.54 2.28L93.254 80.414 69.3 56.38c-1.52-1.522-3.367-2.282-5.54-2.282-2.172 0-4.02.76-5.54 2.28L47.14 67.46c-1.52 1.522-2.28 3.37-2.28 5.542 0 2.172.76 4.02 2.28 5.54l29.493 29.493 11.08 11.08c1.52 1.52 3.368 2.28 5.54 2.28 2.173 0 4.02-.76 5.54-2.28l11.082-11.08L168.86 49.05c1.52-1.52 2.283-3.37 2.283-5.54 0-2.174-.76-4.02-2.28-5.54z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 216 146"><path fill="#0071bc" d="M168.86 37.966l-11.08-11.08c-1.52-1.52-3.367-2.28-5.54-2.28-2.172 0-4.02.76-5.54 2.28L93.254 80.414 69.3 56.38c-1.52-1.522-3.367-2.282-5.54-2.282-2.172 0-4.02.76-5.54 2.28L47.14 67.46c-1.52 1.522-2.28 3.37-2.28 5.542 0 2.172.76 4.02 2.28 5.54l29.493 29.493 11.08 11.08c1.52 1.52 3.368 2.28 5.54 2.28 2.173 0 4.02-.76 5.54-2.28l11.082-11.08L168.86 49.05c1.52-1.52 2.283-3.37 2.283-5.54 0-2.174-.76-4.02-2.28-5.54z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="511.626" height="511.627" viewBox="0 0 511.626 511.627"><g fill="#ffffff"><path d="M392.857 292.354h-18.274c-2.67 0-4.86.855-6.563 2.573-1.718 1.708-2.573 3.897-2.573 6.563v91.36c0 12.564-4.47 23.316-13.415 32.263-8.945 8.945-19.7 13.414-32.264 13.414H82.224c-12.562 0-23.317-4.47-32.264-13.414-8.945-8.946-13.417-19.698-13.417-32.262V155.31c0-12.562 4.47-23.313 13.417-32.26 8.947-8.946 19.702-13.417 32.264-13.417h200.994c2.67 0 4.86-.86 6.57-2.57 1.71-1.713 2.566-3.9 2.566-6.567V82.22c0-2.66-.855-4.852-2.566-6.562-1.71-1.713-3.9-2.568-6.57-2.568H82.224c-22.648 0-42.016 8.042-58.102 24.125C8.042 113.297 0 132.665 0 155.313v237.542c0 22.647 8.042 42.018 24.123 58.095 16.086 16.084 35.454 24.13 58.102 24.13h237.543c22.647 0 42.017-8.046 58.1-24.13 16.086-16.077 24.128-35.447 24.128-58.095v-91.358c0-2.67-.856-4.86-2.574-6.57-1.713-1.718-3.903-2.573-6.565-2.573z"/><path d="M506.2 41.97c-3.618-3.616-7.906-5.423-12.85-5.423H347.17c-4.947 0-9.232 1.807-12.846 5.424-3.617 3.616-5.428 7.9-5.428 12.848s1.81 9.233 5.428 12.85l50.247 50.248-186.146 186.15c-1.906 1.904-2.856 4.094-2.856 6.564 0 2.48.953 4.668 2.856 6.57l32.548 32.545c1.903 1.903 4.093 2.852 6.567 2.852s4.664-.948 6.566-2.852l186.148-186.148 50.25 50.248c3.615 3.617 7.9 5.426 12.848 5.426s9.233-1.808 12.85-5.425c3.618-3.616 5.425-7.898 5.425-12.847V54.818c0-4.952-1.814-9.232-5.428-12.847z"/></g></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="511.626" height="511.627" viewBox="0 0 511.626 511.627"><g fill="#d6d7d9"><path d="M392.857 292.354h-18.274c-2.67 0-4.86.855-6.563 2.573-1.718 1.708-2.573 3.897-2.573 6.563v91.36c0 12.564-4.47 23.316-13.415 32.263-8.945 8.945-19.7 13.414-32.264 13.414H82.224c-12.562 0-23.317-4.47-32.264-13.414-8.945-8.946-13.417-19.698-13.417-32.262V155.31c0-12.562 4.47-23.313 13.417-32.26 8.947-8.946 19.702-13.417 32.264-13.417h200.994c2.67 0 4.86-.86 6.57-2.57 1.71-1.713 2.566-3.9 2.566-6.567V82.22c0-2.66-.855-4.852-2.566-6.562-1.71-1.713-3.9-2.568-6.57-2.568H82.224c-22.648 0-42.016 8.042-58.102 24.125C8.042 113.297 0 132.665 0 155.313v237.542c0 22.647 8.042 42.018 24.123 58.095 16.086 16.084 35.454 24.13 58.102 24.13h237.543c22.647 0 42.017-8.046 58.1-24.13 16.086-16.077 24.128-35.447 24.128-58.095v-91.358c0-2.67-.856-4.86-2.574-6.57-1.713-1.718-3.903-2.573-6.565-2.573z"/><path d="M506.2 41.97c-3.618-3.616-7.906-5.423-12.85-5.423H347.17c-4.947 0-9.232 1.807-12.846 5.424-3.617 3.616-5.428 7.9-5.428 12.848s1.81 9.233 5.428 12.85l50.247 50.248-186.146 186.15c-1.906 1.904-2.856 4.094-2.856 6.564 0 2.48.953 4.668 2.856 6.57l32.548 32.545c1.903 1.903 4.093 2.852 6.567 2.852s4.664-.948 6.566-2.852l186.148-186.148 50.25 50.248c3.615 3.617 7.9 5.426 12.848 5.426s9.233-1.808 12.85-5.425c3.618-3.616 5.425-7.898 5.425-12.847V54.818c0-4.952-1.814-9.232-5.428-12.847z"/></g></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="511.626" height="511.627" viewBox="0 0 511.626 511.627"><g fill="#205493"><path d="M392.857 292.354h-18.274c-2.67 0-4.86.855-6.563 2.573-1.718 1.708-2.573 3.897-2.573 6.563v91.36c0 12.564-4.47 23.316-13.415 32.263-8.945 8.945-19.7 13.414-32.264 13.414H82.224c-12.562 0-23.317-4.47-32.264-13.414-8.945-8.946-13.417-19.698-13.417-32.262V155.31c0-12.562 4.47-23.313 13.417-32.26 8.947-8.946 19.702-13.417 32.264-13.417h200.994c2.67 0 4.86-.86 6.57-2.57 1.71-1.713 2.566-3.9 2.566-6.567V82.22c0-2.66-.855-4.852-2.566-6.562-1.71-1.713-3.9-2.568-6.57-2.568H82.224c-22.648 0-42.016 8.042-58.102 24.125C8.042 113.297 0 132.665 0 155.313v237.542c0 22.647 8.042 42.018 24.123 58.095 16.086 16.084 35.454 24.13 58.102 24.13h237.543c22.647 0 42.017-8.046 58.1-24.13 16.086-16.077 24.128-35.447 24.128-58.095v-91.358c0-2.67-.856-4.86-2.574-6.57-1.713-1.718-3.903-2.573-6.565-2.573z"/><path d="M506.2 41.97c-3.618-3.616-7.906-5.423-12.85-5.423H347.17c-4.947 0-9.232 1.807-12.846 5.424-3.617 3.616-5.428 7.9-5.428 12.848s1.81 9.233 5.428 12.85l50.247 50.248-186.146 186.15c-1.906 1.904-2.856 4.094-2.856 6.564 0 2.48.953 4.668 2.856 6.57l32.548 32.545c1.903 1.903 4.093 2.852 6.567 2.852s4.664-.948 6.566-2.852l186.148-186.148 50.25 50.248c3.615 3.617 7.9 5.426 12.848 5.426s9.233-1.808 12.85-5.425c3.618-3.616 5.425-7.898 5.425-12.847V54.818c0-4.952-1.814-9.232-5.428-12.847z"/></g></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="511.626" height="511.627" viewBox="0 0 511.626 511.627"><g fill="#0071bc"><path d="M392.857 292.354h-18.274c-2.67 0-4.86.855-6.563 2.573-1.718 1.708-2.573 3.897-2.573 6.563v91.36c0 12.564-4.47 23.316-13.415 32.263-8.945 8.945-19.7 13.414-32.264 13.414H82.224c-12.562 0-23.317-4.47-32.264-13.414-8.945-8.946-13.417-19.698-13.417-32.262V155.31c0-12.562 4.47-23.313 13.417-32.26 8.947-8.946 19.702-13.417 32.264-13.417h200.994c2.67 0 4.86-.86 6.57-2.57 1.71-1.713 2.566-3.9 2.566-6.567V82.22c0-2.66-.855-4.852-2.566-6.562-1.71-1.713-3.9-2.568-6.57-2.568H82.224c-22.648 0-42.016 8.042-58.102 24.125C8.042 113.297 0 132.665 0 155.313v237.542c0 22.647 8.042 42.018 24.123 58.095 16.086 16.084 35.454 24.13 58.102 24.13h237.543c22.647 0 42.017-8.046 58.1-24.13 16.086-16.077 24.128-35.447 24.128-58.095v-91.358c0-2.67-.856-4.86-2.574-6.57-1.713-1.718-3.903-2.573-6.565-2.573z"/><path d="M506.2 41.97c-3.618-3.616-7.906-5.423-12.85-5.423H347.17c-4.947 0-9.232 1.807-12.846 5.424-3.617 3.616-5.428 7.9-5.428 12.848s1.81 9.233 5.428 12.85l50.247 50.248-186.146 186.15c-1.906 1.904-2.856 4.094-2.856 6.564 0 2.48.953 4.668 2.856 6.57l32.548 32.545c1.903 1.903 4.093 2.852 6.567 2.852s4.664-.948 6.566-2.852l186.148-186.148 50.25 50.248c3.615 3.617 7.9 5.426 12.848 5.426s9.233-1.808 12.85-5.425c3.618-3.616 5.425-7.898 5.425-12.847V54.818c0-4.952-1.814-9.232-5.428-12.847z"/></g></svg>
@@ -0,0 +1 @@
1
+ <svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 54 54"><defs><style>.cls-1{fill:#007faa;}.cls-2{fill:none;stroke:#046b99;stroke-miterlimit:10;}</style></defs><title>dot gov icon</title><path class="cls-1" d="M36.5,20.91v1.36H35.15a0.71,0.71,0,0,1-.73.68H18.23a0.71,0.71,0,0,1-.73-0.68H16.14V20.91l10.18-4.07Zm0,13.57v1.36H16.14V34.48a0.71,0.71,0,0,1,.73-0.68h18.9A0.71,0.71,0,0,1,36.5,34.48ZM21.57,23.62v8.14h1.36V23.62h2.71v8.14H27V23.62h2.71v8.14h1.36V23.62h2.71v8.14h0.63a0.71,0.71,0,0,1,.73.68v0.68H17.5V32.45a0.71,0.71,0,0,1,.73-0.68h0.63V23.62h2.71Z"/><circle class="cls-2" cx="27" cy="27.12" r="26"/></svg>
@@ -0,0 +1 @@
1
+ <svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 54 54"><defs><style>.cls-1{fill:#549500;}.cls-2{fill:none;stroke:#458600;stroke-miterlimit:10;}</style></defs><title>https icon</title><path class="cls-1" d="M34.72,34.84a1.29,1.29,0,0,1-1.29,1.29H20.57a1.29,1.29,0,0,1-1.29-1.29V27.12a1.29,1.29,0,0,1,1.29-1.29H21V23.26a6,6,0,0,1,12,0v2.57h0.43a1.29,1.29,0,0,1,1.29,1.29v7.72Zm-4.29-9V23.26a3.43,3.43,0,0,0-6.86,0v2.57h6.86Z"/><circle class="cls-2" cx="27" cy="27.12" r="26"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="401.991" height="401.991" viewBox="0 0 401.991 401.991"><path fill="#5B616B" d="M394 154.174c-5.33-5.33-11.806-7.995-19.417-7.995H27.406c-7.61 0-14.084 2.66-19.414 7.99C2.662 159.5 0 165.97 0 173.586v54.82c0 7.617 2.662 14.086 7.992 19.41 5.33 5.332 11.803 7.994 19.414 7.994h347.176c7.61 0 14.086-2.66 19.417-7.993 5.32-5.324 7.99-11.793 7.99-19.41v-54.82c0-7.615-2.66-14.087-7.99-19.413z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="401.991" height="401.991" viewBox="0 0 401.991 401.991"><path d="M394 154.174c-5.33-5.33-11.806-7.995-19.417-7.995H27.406c-7.61 0-14.084 2.66-19.414 7.99C2.662 159.5 0 165.97 0 173.586v54.82c0 7.617 2.662 14.086 7.992 19.41 5.33 5.332 11.803 7.994 19.414 7.994h347.176c7.61 0 14.086-2.66 19.417-7.993 5.32-5.324 7.99-11.793 7.99-19.41v-54.82c0-7.615-2.66-14.087-7.99-19.413z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="401.994" height="401.994" viewBox="0 0 401.994 401.994"><path fill="#5B616B" d="M394 154.175c-5.33-5.33-11.806-7.994-19.417-7.994H255.81V27.41c0-7.61-2.665-14.084-7.993-19.414C242.487 2.666 236.02 0 228.397 0h-54.81c-7.613 0-14.085 2.663-19.415 7.993-5.33 5.33-7.994 11.803-7.994 19.414v118.775H27.408c-7.612 0-14.085 2.664-19.415 7.994S0 165.973 0 173.59v54.818c0 7.618 2.662 14.086 7.992 19.41 5.33 5.333 11.803 7.995 19.414 7.995h118.77V374.59c0 7.61 2.665 14.09 7.995 19.417 5.33 5.325 11.806 7.987 19.418 7.987H228.4c7.618 0 14.087-2.662 19.418-7.987 5.332-5.33 7.994-11.806 7.994-19.417V255.813h118.77c7.618 0 14.09-2.662 19.417-7.994 5.325-5.33 7.99-11.797 7.99-19.415v-54.82c0-7.615-2.66-14.086-7.993-19.413z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="401.994" height="401.994" viewBox="0 0 401.994 401.994"><path d="M394 154.175c-5.33-5.33-11.806-7.994-19.417-7.994H255.81V27.41c0-7.61-2.665-14.084-7.993-19.414C242.487 2.666 236.02 0 228.397 0h-54.81c-7.613 0-14.085 2.663-19.415 7.993-5.33 5.33-7.994 11.803-7.994 19.414v118.775H27.408c-7.612 0-14.085 2.664-19.415 7.994S0 165.973 0 173.59v54.818c0 7.618 2.662 14.086 7.992 19.41 5.33 5.333 11.803 7.995 19.414 7.995h118.77V374.59c0 7.61 2.665 14.09 7.995 19.417 5.33 5.325 11.806 7.987 19.418 7.987H228.4c7.618 0 14.087-2.662 19.418-7.987 5.332-5.33 7.994-11.806 7.994-19.417V255.813h118.77c7.618 0 14.09-2.662 19.417-7.994 5.325-5.33 7.99-11.797 7.99-19.415v-54.82c0-7.615-2.66-14.086-7.993-19.413z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 216 146"><path fill="#5b616b" d="M172.77 123.025L144.825 95.08c6.735-9.722 10.104-20.56 10.104-32.508 0-7.767-1.51-15.195-4.527-22.283-3.014-7.09-7.088-13.2-12.22-18.336s-11.243-9.207-18.33-12.22c-7.09-3.016-14.52-4.523-22.286-4.523-7.768 0-15.196 1.508-22.284 4.523-7.09 3.014-13.2 7.088-18.332 12.22-5.132 5.134-9.206 11.245-12.22 18.333-3.015 7.088-4.522 14.515-4.522 22.282 0 7.766 1.507 15.192 4.522 22.282 3.014 7.088 7.088 13.197 12.22 18.33 5.134 5.134 11.245 9.207 18.333 12.222 7.09 3.015 14.516 4.522 22.283 4.522 11.95 0 22.786-3.37 32.51-10.105l27.943 27.863c1.955 2.064 4.397 3.096 7.332 3.096 2.824 0 5.27-1.03 7.332-3.096 2.064-2.063 3.096-4.508 3.096-7.332 0-2.877-1.002-5.322-3.013-7.33zm-49.413-34.668C116.214 95.5 107.62 99.07 97.57 99.07c-10.048 0-18.643-3.57-25.786-10.713C64.64 81.214 61.07 72.62 61.07 62.57c0-10.047 3.572-18.643 10.714-25.785C78.926 29.642 87.522 26.07 97.57 26.07c10.048 0 18.643 3.573 25.787 10.715 7.143 7.142 10.715 15.738 10.715 25.786 0 10.05-3.573 18.647-10.715 25.79z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 216 146"><path fill="#fff" d="M172.77 123.025L144.825 95.08c6.735-9.722 10.104-20.56 10.104-32.508 0-7.767-1.51-15.195-4.527-22.283-3.014-7.09-7.088-13.2-12.22-18.336s-11.243-9.207-18.33-12.22c-7.09-3.016-14.52-4.523-22.286-4.523-7.768 0-15.196 1.508-22.284 4.523-7.09 3.014-13.2 7.088-18.332 12.22-5.132 5.134-9.206 11.245-12.22 18.333-3.015 7.088-4.522 14.515-4.522 22.282 0 7.766 1.507 15.192 4.522 22.282 3.014 7.088 7.088 13.197 12.22 18.33 5.134 5.134 11.245 9.207 18.333 12.222 7.09 3.015 14.516 4.522 22.283 4.522 11.95 0 22.786-3.37 32.51-10.105l27.943 27.863c1.955 2.064 4.397 3.096 7.332 3.096 2.824 0 5.27-1.03 7.332-3.096 2.064-2.063 3.096-4.508 3.096-7.332 0-2.877-1.002-5.322-3.013-7.33zm-49.413-34.668C116.214 95.5 107.62 99.07 97.57 99.07c-10.048 0-18.643-3.57-25.786-10.713C64.64 81.214 61.07 72.62 61.07 62.57c0-10.047 3.572-18.643 10.714-25.785C78.926 29.642 87.522 26.07 97.57 26.07c10.048 0 18.643 3.573 25.787 10.715 7.143 7.142 10.715 15.738 10.715 25.786 0 10.05-3.573 18.647-10.715 25.79z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="216" height="146" viewBox="0 0 216 146"><path d="M118.348 49.86V38.293c0-1.737.08-3.082.243-4.032.165-.95.53-1.886 1.104-2.81.57-.923 1.494-1.56 2.77-1.914 1.277-.354 2.975-.53 5.094-.53h11.568V5.866H120.63c-10.702 0-18.387 2.54-23.058 7.617-4.67 5.08-7.006 12.56-7.006 22.446v13.93H76.714V73h13.85v67.134h27.784V73h18.494l2.444-23.14h-20.938z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="216" height="146" viewBox="0 0 216 146"><path d="M66.28 99.072c-4.347 0-8.04 1.52-11.082 4.562-3.04 3.042-4.562 6.735-4.562 11.08 0 4.347 1.52 8.04 4.562 11.08 3.042 3.042 6.736 4.563 11.08 4.563 4.346 0 8.04-1.52 11.08-4.562 3.042-3.042 4.563-6.734 4.563-11.08s-1.52-8.04-4.56-11.08c-3.04-3.042-6.733-4.563-11.08-4.563zm36.01-20.37c-6.138-6.19-13.172-11.12-21.102-14.786-7.93-3.667-16.24-5.853-24.93-6.56h-.408c-1.412 0-2.58.463-3.503 1.386-1.14.977-1.71 2.254-1.71 3.83V73.57c0 1.357.447 2.525 1.343 3.503.896.98 2.023 1.522 3.38 1.63 12.44 1.195 23.07 6.206 31.897 15.032 8.826 8.825 13.837 19.458 15.032 31.896.106 1.36.65 2.488 1.63 3.384.975.897 2.142 1.346 3.5 1.346h11c1.574 0 2.85-.57 3.83-1.71 1.03-1.09 1.492-2.393 1.385-3.914-.707-8.69-2.894-17-6.56-24.93-3.666-7.93-8.595-14.964-14.787-21.102z"/><path d="M155.573 84.04c-5.812-13.01-13.796-24.565-23.953-34.668-10.103-10.157-21.658-18.14-34.667-23.953-13.008-5.814-26.628-9.074-40.86-9.78h-.243c-1.412 0-2.607.49-3.585 1.467-1.086.976-1.63 2.226-1.63 3.747v11.65c0 1.358.477 2.54 1.427 3.544s2.104 1.534 3.462 1.59c11.678.706 22.772 3.477 33.282 8.31 10.51 4.835 19.635 11.12 27.375 18.86 7.74 7.74 14.03 16.866 18.86 27.376 4.837 10.512 7.58 21.604 8.23 33.282.057 1.357.586 2.512 1.59 3.462 1.006.95 2.215 1.427 3.627 1.427h11.65c1.52 0 2.768-.544 3.747-1.632 1.087-1.086 1.574-2.36 1.468-3.828-.704-14.232-3.964-27.852-9.776-40.86z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="216" height="146" viewBox="0 0 216 146"><path d="M172.2 33.24c-5.05 2.174-10.103 3.53-15.152 4.076 5.703-3.422 9.56-8.256 11.57-14.502-5.216 3.095-10.783 5.213-16.703 6.354-5.215-5.54-11.623-8.31-19.228-8.31-7.278 0-13.483 2.565-18.617 7.698-5.133 5.133-7.7 11.338-7.7 18.616 0 1.955.218 3.965.653 6.03-10.755-.544-20.844-3.246-30.268-8.107-9.424-4.862-17.422-11.34-23.994-19.432-2.39 4.073-3.582 8.5-3.582 13.28 0 4.508 1.06 8.69 3.178 12.547 2.118 3.856 4.97 6.98 8.555 9.37-4.237-.164-8.202-1.278-11.895-3.342v.326c0 6.355 1.996 11.935 5.988 16.743 3.992 4.808 9.03 7.835 15.113 9.084-2.28.6-4.59.9-6.925.9-1.52 0-3.177-.137-4.97-.407 1.685 5.27 4.78 9.6 9.29 12.995 4.507 3.396 9.613 5.146 15.316 5.256-9.56 7.495-20.45 11.243-32.67 11.243-2.336 0-4.454-.107-6.355-.325 12.22 7.876 25.69 11.813 40.41 11.813 9.344 0 18.116-1.48 26.316-4.44 8.203-2.96 15.21-6.924 21.02-11.895 5.812-4.97 10.823-10.686 15.032-17.15 4.21-6.463 7.345-13.21 9.41-20.245 2.064-7.035 3.096-14.08 3.096-21.143 0-1.52-.027-2.66-.082-3.422 5.163-3.746 9.563-8.282 13.2-13.604z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="216" height="146" viewBox="0 0 216 146"><path d="M166.254 75.443c-.705-3.205-2.268-5.893-4.684-8.065-2.418-2.172-5.202-3.45-8.353-3.83-9.993-1.085-25.065-1.628-45.218-1.628-20.155 0-35.2.543-45.14 1.63-3.204.38-6 1.656-8.39 3.828-2.39 2.173-3.967 4.86-4.728 8.065-1.412 6.302-2.118 15.807-2.118 28.517 0 12.927.706 22.433 2.118 28.517.707 3.203 2.27 5.893 4.686 8.064 2.416 2.176 5.2 3.425 8.35 3.75C72.776 145.43 87.85 146 108 146s35.225-.57 45.217-1.71c3.15-.327 5.92-1.576 8.31-3.75 2.392-2.17 3.967-4.86 4.727-8.063 1.412-6.302 2.12-15.807 2.12-28.517-.002-12.927-.71-22.433-2.12-28.517zm-84.162 8.23h-8.718v46.358h-8.147V83.677h-8.555v-7.66h25.42v7.66zm21.997 46.358h-7.254v-4.4c-2.933 3.317-5.704 4.97-8.31 4.97-2.5 0-4.075-1.002-4.726-3.01-.433-1.305-.65-3.288-.65-5.95V89.783h7.25v29.656c0 1.737.027 2.688.082 2.85.163 1.142.733 1.712 1.71 1.712 1.467 0 3.016-1.14 4.645-3.422V89.783h7.25v40.248zm27.7-12.055c0 3.965-.246 6.682-.73 8.15-.928 2.984-2.855 4.478-5.788 4.478-2.607 0-5.133-1.493-7.578-4.478v3.91h-7.25v-54.02h7.25v17.68c2.337-2.93 4.86-4.4 7.578-4.4 2.933 0 4.86 1.523 5.785 4.564.486 1.41.73 4.1.73 8.063v16.048zm27.536-6.68h-14.583v7.088c0 3.75 1.248 5.622 3.747 5.622 1.793 0 2.88-.977 3.26-2.934.108-.542.163-2.2.163-4.97h7.414v1.06c0 2.663-.055 4.237-.163 4.728-.162 1.465-.73 2.932-1.71 4.398-1.956 2.88-4.89 4.318-8.8 4.318-3.748 0-6.68-1.384-8.8-4.153-1.574-2.01-2.362-5.16-2.362-9.45v-14.1c0-4.29.76-7.44 2.28-9.45 2.12-2.77 5.025-4.154 8.72-4.154 3.64 0 6.52 1.384 8.635 4.154 1.468 2.01 2.2 5.16 2.2 9.45v8.392z"/><path d="M121.36 95.895c-1.25 0-2.47.6-3.665 1.793v24.522c1.195 1.194 2.416 1.792 3.666 1.792 2.12 0 3.18-1.818 3.18-5.46v-17.188c0-3.64-1.06-5.46-3.18-5.46zm27.05 0c-2.443 0-3.665 1.847-3.665 5.54v3.747h7.332v-3.748c0-3.694-1.223-5.54-3.666-5.54zM77.368 32.508v22.08h8.147v-22.08L95.372 0h-8.31l-5.54 21.428L75.74 0h-8.636c1.52 4.563 3.286 9.64 5.296 15.236 2.553 7.495 4.21 13.253 4.97 17.272zm28.922 22.65c3.747 0 6.625-1.385 8.635-4.155 1.52-2.01 2.28-5.215 2.28-9.614V27.13c0-4.344-.76-7.522-2.28-9.532-2.01-2.77-4.888-4.155-8.636-4.155-3.64 0-6.495 1.385-8.558 4.155-1.52 2.01-2.28 5.188-2.28 9.533v14.26c0 4.346.76 7.55 2.28 9.615 2.064 2.77 4.915 4.155 8.555 4.155zm-3.505-29.494c0-3.748 1.168-5.622 3.504-5.622s3.5 1.874 3.5 5.622v17.11c0 3.802-1.167 5.702-3.503 5.702s-3.505-1.9-3.505-5.703v-17.11zm25.908 29.494c2.717 0 5.515-1.684 8.393-5.052v4.48h7.414V13.933h-7.414v31.04c-1.63 2.337-3.177 3.504-4.645 3.504-.976 0-1.546-.597-1.71-1.792-.053-.11-.08-1.06-.08-2.852v-29.9h-7.414v32.1c0 2.77.218 4.807.652 6.11.707 2.01 2.31 3.016 4.807 3.016z"/></svg>
@@ -0,0 +1,1739 @@
1
+ (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
2
+ 'use strict';
3
+
4
+ /**
5
+ * Array#filter.
6
+ *
7
+ * @param {Array} arr
8
+ * @param {Function} fn
9
+ * @param {Object=} self
10
+ * @return {Array}
11
+ * @throw TypeError
12
+ */
13
+
14
+ module.exports = function (arr, fn, self) {
15
+ if (arr.filter) return arr.filter(fn, self);
16
+ if (void 0 === arr || null === arr) throw new TypeError();
17
+ if ('function' != typeof fn) throw new TypeError();
18
+ var ret = [];
19
+ for (var i = 0; i < arr.length; i++) {
20
+ if (!hasOwn.call(arr, i)) continue;
21
+ var val = arr[i];
22
+ if (fn.call(self, val, i, arr)) ret.push(val);
23
+ }
24
+ return ret;
25
+ };
26
+
27
+ var hasOwn = Object.prototype.hasOwnProperty;
28
+
29
+ },{}],2:[function(require,module,exports){
30
+ /**
31
+ * array-foreach
32
+ * Array#forEach ponyfill for older browsers
33
+ * (Ponyfill: A polyfill that doesn't overwrite the native method)
34
+ *
35
+ * https://github.com/twada/array-foreach
36
+ *
37
+ * Copyright (c) 2015-2016 Takuto Wada
38
+ * Licensed under the MIT license.
39
+ * https://github.com/twada/array-foreach/blob/master/MIT-LICENSE
40
+ */
41
+ 'use strict';
42
+
43
+ module.exports = function forEach(ary, callback, thisArg) {
44
+ if (ary.forEach) {
45
+ ary.forEach(callback, thisArg);
46
+ return;
47
+ }
48
+ for (var i = 0; i < ary.length; i += 1) {
49
+ callback.call(thisArg, ary[i], i, ary);
50
+ }
51
+ };
52
+
53
+ },{}],3:[function(require,module,exports){
54
+ "use strict";
55
+
56
+ /*
57
+ * classList.js: Cross-browser full element.classList implementation.
58
+ * 2014-07-23
59
+ *
60
+ * By Eli Grey, http://eligrey.com
61
+ * Public Domain.
62
+ * NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
63
+ */
64
+
65
+ /*global self, document, DOMException */
66
+
67
+ /*! @source http://purl.eligrey.com/github/classList.js/blob/master/classList.js*/
68
+
69
+ /* Copied from MDN:
70
+ * https://developer.mozilla.org/en-US/docs/Web/API/Element/classList
71
+ */
72
+
73
+ if ("document" in window.self) {
74
+
75
+ // Full polyfill for browsers with no classList support
76
+ // Including IE < Edge missing SVGElement.classList
77
+ if (!("classList" in document.createElement("_")) || document.createElementNS && !("classList" in document.createElementNS("http://www.w3.org/2000/svg", "g"))) {
78
+
79
+ (function (view) {
80
+
81
+ "use strict";
82
+
83
+ if (!('Element' in view)) return;
84
+
85
+ var classListProp = "classList",
86
+ protoProp = "prototype",
87
+ elemCtrProto = view.Element[protoProp],
88
+ objCtr = Object,
89
+ strTrim = String[protoProp].trim || function () {
90
+ return this.replace(/^\s+|\s+$/g, "");
91
+ },
92
+ arrIndexOf = Array[protoProp].indexOf || function (item) {
93
+ var i = 0,
94
+ len = this.length;
95
+ for (; i < len; i++) {
96
+ if (i in this && this[i] === item) {
97
+ return i;
98
+ }
99
+ }
100
+ return -1;
101
+ }
102
+ // Vendors: please allow content code to instantiate DOMExceptions
103
+ ,
104
+ DOMEx = function DOMEx(type, message) {
105
+ this.name = type;
106
+ this.code = DOMException[type];
107
+ this.message = message;
108
+ },
109
+ checkTokenAndGetIndex = function checkTokenAndGetIndex(classList, token) {
110
+ if (token === "") {
111
+ throw new DOMEx("SYNTAX_ERR", "An invalid or illegal string was specified");
112
+ }
113
+ if (/\s/.test(token)) {
114
+ throw new DOMEx("INVALID_CHARACTER_ERR", "String contains an invalid character");
115
+ }
116
+ return arrIndexOf.call(classList, token);
117
+ },
118
+ ClassList = function ClassList(elem) {
119
+ var trimmedClasses = strTrim.call(elem.getAttribute("class") || ""),
120
+ classes = trimmedClasses ? trimmedClasses.split(/\s+/) : [],
121
+ i = 0,
122
+ len = classes.length;
123
+ for (; i < len; i++) {
124
+ this.push(classes[i]);
125
+ }
126
+ this._updateClassName = function () {
127
+ elem.setAttribute("class", this.toString());
128
+ };
129
+ },
130
+ classListProto = ClassList[protoProp] = [],
131
+ classListGetter = function classListGetter() {
132
+ return new ClassList(this);
133
+ };
134
+ // Most DOMException implementations don't allow calling DOMException's toString()
135
+ // on non-DOMExceptions. Error's toString() is sufficient here.
136
+ DOMEx[protoProp] = Error[protoProp];
137
+ classListProto.item = function (i) {
138
+ return this[i] || null;
139
+ };
140
+ classListProto.contains = function (token) {
141
+ token += "";
142
+ return checkTokenAndGetIndex(this, token) !== -1;
143
+ };
144
+ classListProto.add = function () {
145
+ var tokens = arguments,
146
+ i = 0,
147
+ l = tokens.length,
148
+ token,
149
+ updated = false;
150
+ do {
151
+ token = tokens[i] + "";
152
+ if (checkTokenAndGetIndex(this, token) === -1) {
153
+ this.push(token);
154
+ updated = true;
155
+ }
156
+ } while (++i < l);
157
+
158
+ if (updated) {
159
+ this._updateClassName();
160
+ }
161
+ };
162
+ classListProto.remove = function () {
163
+ var tokens = arguments,
164
+ i = 0,
165
+ l = tokens.length,
166
+ token,
167
+ updated = false,
168
+ index;
169
+ do {
170
+ token = tokens[i] + "";
171
+ index = checkTokenAndGetIndex(this, token);
172
+ while (index !== -1) {
173
+ this.splice(index, 1);
174
+ updated = true;
175
+ index = checkTokenAndGetIndex(this, token);
176
+ }
177
+ } while (++i < l);
178
+
179
+ if (updated) {
180
+ this._updateClassName();
181
+ }
182
+ };
183
+ classListProto.toggle = function (token, force) {
184
+ token += "";
185
+
186
+ var result = this.contains(token),
187
+ method = result ? force !== true && "remove" : force !== false && "add";
188
+
189
+ if (method) {
190
+ this[method](token);
191
+ }
192
+
193
+ if (force === true || force === false) {
194
+ return force;
195
+ } else {
196
+ return !result;
197
+ }
198
+ };
199
+ classListProto.toString = function () {
200
+ return this.join(" ");
201
+ };
202
+
203
+ if (objCtr.defineProperty) {
204
+ var classListPropDesc = {
205
+ get: classListGetter,
206
+ enumerable: true,
207
+ configurable: true
208
+ };
209
+ try {
210
+ objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
211
+ } catch (ex) {
212
+ // IE 8 doesn't support enumerable:true
213
+ if (ex.number === -0x7FF5EC54) {
214
+ classListPropDesc.enumerable = false;
215
+ objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
216
+ }
217
+ }
218
+ } else if (objCtr[protoProp].__defineGetter__) {
219
+ elemCtrProto.__defineGetter__(classListProp, classListGetter);
220
+ }
221
+ })(window.self);
222
+ } else {
223
+ // There is full or partial native classList support, so just check if we need
224
+ // to normalize the add/remove and toggle APIs.
225
+
226
+ (function () {
227
+ "use strict";
228
+
229
+ var testElement = document.createElement("_");
230
+
231
+ testElement.classList.add("c1", "c2");
232
+
233
+ // Polyfill for IE 10/11 and Firefox <26, where classList.add and
234
+ // classList.remove exist but support only one argument at a time.
235
+ if (!testElement.classList.contains("c2")) {
236
+ var createMethod = function createMethod(method) {
237
+ var original = DOMTokenList.prototype[method];
238
+
239
+ DOMTokenList.prototype[method] = function (token) {
240
+ var i,
241
+ len = arguments.length;
242
+
243
+ for (i = 0; i < len; i++) {
244
+ token = arguments[i];
245
+ original.call(this, token);
246
+ }
247
+ };
248
+ };
249
+ createMethod('add');
250
+ createMethod('remove');
251
+ }
252
+
253
+ testElement.classList.toggle("c3", false);
254
+
255
+ // Polyfill for IE 10 and Firefox <24, where classList.toggle does not
256
+ // support the second argument.
257
+ if (testElement.classList.contains("c3")) {
258
+ var _toggle = DOMTokenList.prototype.toggle;
259
+
260
+ DOMTokenList.prototype.toggle = function (token, force) {
261
+ if (1 in arguments && !this.contains(token) === !force) {
262
+ return force;
263
+ } else {
264
+ return _toggle.call(this, token);
265
+ }
266
+ };
267
+ }
268
+
269
+ testElement = null;
270
+ })();
271
+ }
272
+ }
273
+
274
+ },{}],4:[function(require,module,exports){
275
+ 'use strict';
276
+
277
+ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
278
+
279
+ /*!
280
+ * domready (c) Dustin Diaz 2014 - License MIT
281
+ */
282
+ !function (name, definition) {
283
+
284
+ if (typeof module != 'undefined') module.exports = definition();else if (typeof define == 'function' && _typeof(define.amd) == 'object') define(definition);else this[name] = definition();
285
+ }('domready', function () {
286
+
287
+ var fns = [],
288
+ _listener,
289
+ doc = document,
290
+ hack = doc.documentElement.doScroll,
291
+ domContentLoaded = 'DOMContentLoaded',
292
+ loaded = (hack ? /^loaded|^c/ : /^loaded|^i|^c/).test(doc.readyState);
293
+
294
+ if (!loaded) doc.addEventListener(domContentLoaded, _listener = function listener() {
295
+ doc.removeEventListener(domContentLoaded, _listener);
296
+ loaded = 1;
297
+ while (_listener = fns.shift()) {
298
+ _listener();
299
+ }
300
+ });
301
+
302
+ return function (fn) {
303
+ loaded ? setTimeout(fn, 0) : fns.push(fn);
304
+ };
305
+ });
306
+
307
+ },{}],5:[function(require,module,exports){
308
+ 'use strict';
309
+
310
+ // <3 Modernizr
311
+ // https://raw.githubusercontent.com/Modernizr/Modernizr/master/feature-detects/dom/dataset.js
312
+
313
+ function useNative() {
314
+ var elem = document.createElement('div');
315
+ elem.setAttribute('data-a-b', 'c');
316
+
317
+ return Boolean(elem.dataset && elem.dataset.aB === 'c');
318
+ }
319
+
320
+ function nativeDataset(element) {
321
+ return element.dataset;
322
+ }
323
+
324
+ module.exports = useNative() ? nativeDataset : function (element) {
325
+ var map = {};
326
+ var attributes = element.attributes;
327
+
328
+ function getter() {
329
+ return this.value;
330
+ }
331
+
332
+ function setter(name, value) {
333
+ if (typeof value === 'undefined') {
334
+ this.removeAttribute(name);
335
+ } else {
336
+ this.setAttribute(name, value);
337
+ }
338
+ }
339
+
340
+ for (var i = 0, j = attributes.length; i < j; i++) {
341
+ var attribute = attributes[i];
342
+
343
+ if (attribute) {
344
+ var name = attribute.name;
345
+
346
+ if (name.indexOf('data-') === 0) {
347
+ var prop = name.slice(5).replace(/-./g, function (u) {
348
+ return u.charAt(1).toUpperCase();
349
+ });
350
+
351
+ var value = attribute.value;
352
+
353
+ Object.defineProperty(map, prop, {
354
+ enumerable: true,
355
+ get: getter.bind({ value: value || '' }),
356
+ set: setter.bind(element, name)
357
+ });
358
+ }
359
+ }
360
+ }
361
+
362
+ return map;
363
+ };
364
+
365
+ },{}],6:[function(require,module,exports){
366
+ 'use strict';
367
+
368
+ // element-closest | CC0-1.0 | github.com/jonathantneal/closest
369
+
370
+ (function (ElementProto) {
371
+ if (typeof ElementProto.matches !== 'function') {
372
+ ElementProto.matches = ElementProto.msMatchesSelector || ElementProto.mozMatchesSelector || ElementProto.webkitMatchesSelector || function matches(selector) {
373
+ var element = this;
374
+ var elements = (element.document || element.ownerDocument).querySelectorAll(selector);
375
+ var index = 0;
376
+
377
+ while (elements[index] && elements[index] !== element) {
378
+ ++index;
379
+ }
380
+
381
+ return Boolean(elements[index]);
382
+ };
383
+ }
384
+
385
+ if (typeof ElementProto.closest !== 'function') {
386
+ ElementProto.closest = function closest(selector) {
387
+ var element = this;
388
+
389
+ while (element && element.nodeType === 1) {
390
+ if (element.matches(selector)) {
391
+ return element;
392
+ }
393
+
394
+ element = element.parentNode;
395
+ }
396
+
397
+ return null;
398
+ };
399
+ }
400
+ })(window.Element.prototype);
401
+
402
+ },{}],7:[function(require,module,exports){
403
+ (function (global){
404
+ 'use strict';
405
+
406
+ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
407
+
408
+ /**
409
+ * lodash (Custom Build) <https://lodash.com/>
410
+ * Build: `lodash modularize exports="npm" -o ./`
411
+ * Copyright jQuery Foundation and other contributors <https://jquery.org/>
412
+ * Released under MIT license <https://lodash.com/license>
413
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
414
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
415
+ */
416
+
417
+ /** Used as the `TypeError` message for "Functions" methods. */
418
+ var FUNC_ERROR_TEXT = 'Expected a function';
419
+
420
+ /** Used as references for various `Number` constants. */
421
+ var NAN = 0 / 0;
422
+
423
+ /** `Object#toString` result references. */
424
+ var symbolTag = '[object Symbol]';
425
+
426
+ /** Used to match leading and trailing whitespace. */
427
+ var reTrim = /^\s+|\s+$/g;
428
+
429
+ /** Used to detect bad signed hexadecimal string values. */
430
+ var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
431
+
432
+ /** Used to detect binary string values. */
433
+ var reIsBinary = /^0b[01]+$/i;
434
+
435
+ /** Used to detect octal string values. */
436
+ var reIsOctal = /^0o[0-7]+$/i;
437
+
438
+ /** Built-in method references without a dependency on `root`. */
439
+ var freeParseInt = parseInt;
440
+
441
+ /** Detect free variable `global` from Node.js. */
442
+ var freeGlobal = (typeof global === 'undefined' ? 'undefined' : _typeof(global)) == 'object' && global && global.Object === Object && global;
443
+
444
+ /** Detect free variable `self`. */
445
+ var freeSelf = (typeof self === 'undefined' ? 'undefined' : _typeof(self)) == 'object' && self && self.Object === Object && self;
446
+
447
+ /** Used as a reference to the global object. */
448
+ var root = freeGlobal || freeSelf || Function('return this')();
449
+
450
+ /** Used for built-in method references. */
451
+ var objectProto = Object.prototype;
452
+
453
+ /**
454
+ * Used to resolve the
455
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
456
+ * of values.
457
+ */
458
+ var objectToString = objectProto.toString;
459
+
460
+ /* Built-in method references for those with the same name as other `lodash` methods. */
461
+ var nativeMax = Math.max,
462
+ nativeMin = Math.min;
463
+
464
+ /**
465
+ * Gets the timestamp of the number of milliseconds that have elapsed since
466
+ * the Unix epoch (1 January 1970 00:00:00 UTC).
467
+ *
468
+ * @static
469
+ * @memberOf _
470
+ * @since 2.4.0
471
+ * @category Date
472
+ * @returns {number} Returns the timestamp.
473
+ * @example
474
+ *
475
+ * _.defer(function(stamp) {
476
+ * console.log(_.now() - stamp);
477
+ * }, _.now());
478
+ * // => Logs the number of milliseconds it took for the deferred invocation.
479
+ */
480
+ var now = function now() {
481
+ return root.Date.now();
482
+ };
483
+
484
+ /**
485
+ * Creates a debounced function that delays invoking `func` until after `wait`
486
+ * milliseconds have elapsed since the last time the debounced function was
487
+ * invoked. The debounced function comes with a `cancel` method to cancel
488
+ * delayed `func` invocations and a `flush` method to immediately invoke them.
489
+ * Provide `options` to indicate whether `func` should be invoked on the
490
+ * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
491
+ * with the last arguments provided to the debounced function. Subsequent
492
+ * calls to the debounced function return the result of the last `func`
493
+ * invocation.
494
+ *
495
+ * **Note:** If `leading` and `trailing` options are `true`, `func` is
496
+ * invoked on the trailing edge of the timeout only if the debounced function
497
+ * is invoked more than once during the `wait` timeout.
498
+ *
499
+ * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
500
+ * until to the next tick, similar to `setTimeout` with a timeout of `0`.
501
+ *
502
+ * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
503
+ * for details over the differences between `_.debounce` and `_.throttle`.
504
+ *
505
+ * @static
506
+ * @memberOf _
507
+ * @since 0.1.0
508
+ * @category Function
509
+ * @param {Function} func The function to debounce.
510
+ * @param {number} [wait=0] The number of milliseconds to delay.
511
+ * @param {Object} [options={}] The options object.
512
+ * @param {boolean} [options.leading=false]
513
+ * Specify invoking on the leading edge of the timeout.
514
+ * @param {number} [options.maxWait]
515
+ * The maximum time `func` is allowed to be delayed before it's invoked.
516
+ * @param {boolean} [options.trailing=true]
517
+ * Specify invoking on the trailing edge of the timeout.
518
+ * @returns {Function} Returns the new debounced function.
519
+ * @example
520
+ *
521
+ * // Avoid costly calculations while the window size is in flux.
522
+ * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
523
+ *
524
+ * // Invoke `sendMail` when clicked, debouncing subsequent calls.
525
+ * jQuery(element).on('click', _.debounce(sendMail, 300, {
526
+ * 'leading': true,
527
+ * 'trailing': false
528
+ * }));
529
+ *
530
+ * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
531
+ * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
532
+ * var source = new EventSource('/stream');
533
+ * jQuery(source).on('message', debounced);
534
+ *
535
+ * // Cancel the trailing debounced invocation.
536
+ * jQuery(window).on('popstate', debounced.cancel);
537
+ */
538
+ function debounce(func, wait, options) {
539
+ var lastArgs,
540
+ lastThis,
541
+ maxWait,
542
+ result,
543
+ timerId,
544
+ lastCallTime,
545
+ lastInvokeTime = 0,
546
+ leading = false,
547
+ maxing = false,
548
+ trailing = true;
549
+
550
+ if (typeof func != 'function') {
551
+ throw new TypeError(FUNC_ERROR_TEXT);
552
+ }
553
+ wait = toNumber(wait) || 0;
554
+ if (isObject(options)) {
555
+ leading = !!options.leading;
556
+ maxing = 'maxWait' in options;
557
+ maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
558
+ trailing = 'trailing' in options ? !!options.trailing : trailing;
559
+ }
560
+
561
+ function invokeFunc(time) {
562
+ var args = lastArgs,
563
+ thisArg = lastThis;
564
+
565
+ lastArgs = lastThis = undefined;
566
+ lastInvokeTime = time;
567
+ result = func.apply(thisArg, args);
568
+ return result;
569
+ }
570
+
571
+ function leadingEdge(time) {
572
+ // Reset any `maxWait` timer.
573
+ lastInvokeTime = time;
574
+ // Start the timer for the trailing edge.
575
+ timerId = setTimeout(timerExpired, wait);
576
+ // Invoke the leading edge.
577
+ return leading ? invokeFunc(time) : result;
578
+ }
579
+
580
+ function remainingWait(time) {
581
+ var timeSinceLastCall = time - lastCallTime,
582
+ timeSinceLastInvoke = time - lastInvokeTime,
583
+ result = wait - timeSinceLastCall;
584
+
585
+ return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;
586
+ }
587
+
588
+ function shouldInvoke(time) {
589
+ var timeSinceLastCall = time - lastCallTime,
590
+ timeSinceLastInvoke = time - lastInvokeTime;
591
+
592
+ // Either this is the first call, activity has stopped and we're at the
593
+ // trailing edge, the system time has gone backwards and we're treating
594
+ // it as the trailing edge, or we've hit the `maxWait` limit.
595
+ return lastCallTime === undefined || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;
596
+ }
597
+
598
+ function timerExpired() {
599
+ var time = now();
600
+ if (shouldInvoke(time)) {
601
+ return trailingEdge(time);
602
+ }
603
+ // Restart the timer.
604
+ timerId = setTimeout(timerExpired, remainingWait(time));
605
+ }
606
+
607
+ function trailingEdge(time) {
608
+ timerId = undefined;
609
+
610
+ // Only invoke if we have `lastArgs` which means `func` has been
611
+ // debounced at least once.
612
+ if (trailing && lastArgs) {
613
+ return invokeFunc(time);
614
+ }
615
+ lastArgs = lastThis = undefined;
616
+ return result;
617
+ }
618
+
619
+ function cancel() {
620
+ if (timerId !== undefined) {
621
+ clearTimeout(timerId);
622
+ }
623
+ lastInvokeTime = 0;
624
+ lastArgs = lastCallTime = lastThis = timerId = undefined;
625
+ }
626
+
627
+ function flush() {
628
+ return timerId === undefined ? result : trailingEdge(now());
629
+ }
630
+
631
+ function debounced() {
632
+ var time = now(),
633
+ isInvoking = shouldInvoke(time);
634
+
635
+ lastArgs = arguments;
636
+ lastThis = this;
637
+ lastCallTime = time;
638
+
639
+ if (isInvoking) {
640
+ if (timerId === undefined) {
641
+ return leadingEdge(lastCallTime);
642
+ }
643
+ if (maxing) {
644
+ // Handle invocations in a tight loop.
645
+ timerId = setTimeout(timerExpired, wait);
646
+ return invokeFunc(lastCallTime);
647
+ }
648
+ }
649
+ if (timerId === undefined) {
650
+ timerId = setTimeout(timerExpired, wait);
651
+ }
652
+ return result;
653
+ }
654
+ debounced.cancel = cancel;
655
+ debounced.flush = flush;
656
+ return debounced;
657
+ }
658
+
659
+ /**
660
+ * Checks if `value` is the
661
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
662
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
663
+ *
664
+ * @static
665
+ * @memberOf _
666
+ * @since 0.1.0
667
+ * @category Lang
668
+ * @param {*} value The value to check.
669
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
670
+ * @example
671
+ *
672
+ * _.isObject({});
673
+ * // => true
674
+ *
675
+ * _.isObject([1, 2, 3]);
676
+ * // => true
677
+ *
678
+ * _.isObject(_.noop);
679
+ * // => true
680
+ *
681
+ * _.isObject(null);
682
+ * // => false
683
+ */
684
+ function isObject(value) {
685
+ var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);
686
+ return !!value && (type == 'object' || type == 'function');
687
+ }
688
+
689
+ /**
690
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
691
+ * and has a `typeof` result of "object".
692
+ *
693
+ * @static
694
+ * @memberOf _
695
+ * @since 4.0.0
696
+ * @category Lang
697
+ * @param {*} value The value to check.
698
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
699
+ * @example
700
+ *
701
+ * _.isObjectLike({});
702
+ * // => true
703
+ *
704
+ * _.isObjectLike([1, 2, 3]);
705
+ * // => true
706
+ *
707
+ * _.isObjectLike(_.noop);
708
+ * // => false
709
+ *
710
+ * _.isObjectLike(null);
711
+ * // => false
712
+ */
713
+ function isObjectLike(value) {
714
+ return !!value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) == 'object';
715
+ }
716
+
717
+ /**
718
+ * Checks if `value` is classified as a `Symbol` primitive or object.
719
+ *
720
+ * @static
721
+ * @memberOf _
722
+ * @since 4.0.0
723
+ * @category Lang
724
+ * @param {*} value The value to check.
725
+ * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
726
+ * @example
727
+ *
728
+ * _.isSymbol(Symbol.iterator);
729
+ * // => true
730
+ *
731
+ * _.isSymbol('abc');
732
+ * // => false
733
+ */
734
+ function isSymbol(value) {
735
+ return (typeof value === 'undefined' ? 'undefined' : _typeof(value)) == 'symbol' || isObjectLike(value) && objectToString.call(value) == symbolTag;
736
+ }
737
+
738
+ /**
739
+ * Converts `value` to a number.
740
+ *
741
+ * @static
742
+ * @memberOf _
743
+ * @since 4.0.0
744
+ * @category Lang
745
+ * @param {*} value The value to process.
746
+ * @returns {number} Returns the number.
747
+ * @example
748
+ *
749
+ * _.toNumber(3.2);
750
+ * // => 3.2
751
+ *
752
+ * _.toNumber(Number.MIN_VALUE);
753
+ * // => 5e-324
754
+ *
755
+ * _.toNumber(Infinity);
756
+ * // => Infinity
757
+ *
758
+ * _.toNumber('3.2');
759
+ * // => 3.2
760
+ */
761
+ function toNumber(value) {
762
+ if (typeof value == 'number') {
763
+ return value;
764
+ }
765
+ if (isSymbol(value)) {
766
+ return NAN;
767
+ }
768
+ if (isObject(value)) {
769
+ var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
770
+ value = isObject(other) ? other + '' : other;
771
+ }
772
+ if (typeof value != 'string') {
773
+ return value === 0 ? value : +value;
774
+ }
775
+ value = value.replace(reTrim, '');
776
+ var isBinary = reIsBinary.test(value);
777
+ return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;
778
+ }
779
+
780
+ module.exports = debounce;
781
+
782
+ }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
783
+
784
+ },{}],8:[function(require,module,exports){
785
+ /*
786
+ object-assign
787
+ (c) Sindre Sorhus
788
+ @license MIT
789
+ */
790
+
791
+ 'use strict';
792
+ /* eslint-disable no-unused-vars */
793
+
794
+ var getOwnPropertySymbols = Object.getOwnPropertySymbols;
795
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
796
+ var propIsEnumerable = Object.prototype.propertyIsEnumerable;
797
+
798
+ function toObject(val) {
799
+ if (val === null || val === undefined) {
800
+ throw new TypeError('Object.assign cannot be called with null or undefined');
801
+ }
802
+
803
+ return Object(val);
804
+ }
805
+
806
+ function shouldUseNative() {
807
+ try {
808
+ if (!Object.assign) {
809
+ return false;
810
+ }
811
+
812
+ // Detect buggy property enumeration order in older V8 versions.
813
+
814
+ // https://bugs.chromium.org/p/v8/issues/detail?id=4118
815
+ var test1 = new String('abc'); // eslint-disable-line no-new-wrappers
816
+ test1[5] = 'de';
817
+ if (Object.getOwnPropertyNames(test1)[0] === '5') {
818
+ return false;
819
+ }
820
+
821
+ // https://bugs.chromium.org/p/v8/issues/detail?id=3056
822
+ var test2 = {};
823
+ for (var i = 0; i < 10; i++) {
824
+ test2['_' + String.fromCharCode(i)] = i;
825
+ }
826
+ var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
827
+ return test2[n];
828
+ });
829
+ if (order2.join('') !== '0123456789') {
830
+ return false;
831
+ }
832
+
833
+ // https://bugs.chromium.org/p/v8/issues/detail?id=3056
834
+ var test3 = {};
835
+ 'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
836
+ test3[letter] = letter;
837
+ });
838
+ if (Object.keys(Object.assign({}, test3)).join('') !== 'abcdefghijklmnopqrst') {
839
+ return false;
840
+ }
841
+
842
+ return true;
843
+ } catch (err) {
844
+ // We don't expect any of the above to throw, but better to be safe.
845
+ return false;
846
+ }
847
+ }
848
+
849
+ module.exports = shouldUseNative() ? Object.assign : function (target, source) {
850
+ var from;
851
+ var to = toObject(target);
852
+ var symbols;
853
+
854
+ for (var s = 1; s < arguments.length; s++) {
855
+ from = Object(arguments[s]);
856
+
857
+ for (var key in from) {
858
+ if (hasOwnProperty.call(from, key)) {
859
+ to[key] = from[key];
860
+ }
861
+ }
862
+
863
+ if (getOwnPropertySymbols) {
864
+ symbols = getOwnPropertySymbols(from);
865
+ for (var i = 0; i < symbols.length; i++) {
866
+ if (propIsEnumerable.call(from, symbols[i])) {
867
+ to[symbols[i]] = from[symbols[i]];
868
+ }
869
+ }
870
+ }
871
+ }
872
+
873
+ return to;
874
+ };
875
+
876
+ },{}],9:[function(require,module,exports){
877
+ 'use strict';
878
+
879
+ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
880
+
881
+ var assign = require('object-assign');
882
+ var delegate = require('../delegate');
883
+ var delegateAll = require('../delegateAll');
884
+
885
+ var DELEGATE_PATTERN = /^(.+):delegate\((.+)\)$/;
886
+ var SPACE = ' ';
887
+
888
+ var getListeners = function getListeners(type, handler) {
889
+ var match = type.match(DELEGATE_PATTERN);
890
+ var selector;
891
+ if (match) {
892
+ type = match[1];
893
+ selector = match[2];
894
+ }
895
+
896
+ var options;
897
+ if ((typeof handler === 'undefined' ? 'undefined' : _typeof(handler)) === 'object') {
898
+ options = {
899
+ capture: popKey(handler, 'capture'),
900
+ passive: popKey(handler, 'passive')
901
+ };
902
+ }
903
+
904
+ var listener = {
905
+ selector: selector,
906
+ delegate: (typeof handler === 'undefined' ? 'undefined' : _typeof(handler)) === 'object' ? delegateAll(handler) : selector ? delegate(selector, handler) : handler,
907
+ options: options
908
+ };
909
+
910
+ if (type.indexOf(SPACE) > -1) {
911
+ return type.split(SPACE).map(function (_type) {
912
+ return assign({ type: _type }, listener);
913
+ });
914
+ } else {
915
+ listener.type = type;
916
+ return [listener];
917
+ }
918
+ };
919
+
920
+ var popKey = function popKey(obj, key) {
921
+ var value = obj[key];
922
+ delete obj[key];
923
+ return value;
924
+ };
925
+
926
+ module.exports = function behavior(events, props) {
927
+ var listeners = Object.keys(events).reduce(function (memo, type) {
928
+ var listeners = getListeners(type, events[type]);
929
+ return memo.concat(listeners);
930
+ }, []);
931
+
932
+ return assign({
933
+ add: function addBehavior(element) {
934
+ listeners.forEach(function (listener) {
935
+ element.addEventListener(listener.type, listener.delegate, listener.options);
936
+ });
937
+ },
938
+ remove: function removeBehavior(element) {
939
+ listeners.forEach(function (listener) {
940
+ element.removeEventListener(listener.type, listener.delegate, listener.options);
941
+ });
942
+ }
943
+ }, props);
944
+ };
945
+
946
+ },{"../delegate":11,"../delegateAll":12,"object-assign":8}],10:[function(require,module,exports){
947
+ "use strict";
948
+
949
+ module.exports = function compose(functions) {
950
+ return function (e) {
951
+ return functions.some(function (fn) {
952
+ return fn.call(this, e) === false;
953
+ }, this);
954
+ };
955
+ };
956
+
957
+ },{}],11:[function(require,module,exports){
958
+ 'use strict';
959
+
960
+ // polyfill Element.prototype.closest
961
+ require('element-closest');
962
+
963
+ module.exports = function delegate(selector, fn) {
964
+ return function delegation(event) {
965
+ var target = event.target.closest(selector);
966
+ if (target) {
967
+ return fn.call(target, event);
968
+ }
969
+ };
970
+ };
971
+
972
+ },{"element-closest":6}],12:[function(require,module,exports){
973
+ 'use strict';
974
+
975
+ var delegate = require('../delegate');
976
+ var compose = require('../compose');
977
+
978
+ var SPLAT = '*';
979
+
980
+ module.exports = function delegateAll(selectors) {
981
+ var keys = Object.keys(selectors);
982
+
983
+ // XXX optimization: if there is only one handler and it applies to
984
+ // all elements (the "*" CSS selector), then just return that
985
+ // handler
986
+ if (keys.length === 1 && keys[0] === SPLAT) {
987
+ return selectors[SPLAT];
988
+ }
989
+
990
+ var delegates = keys.reduce(function (memo, selector) {
991
+ memo.push(delegate(selector, selectors[selector]));
992
+ return memo;
993
+ }, []);
994
+ return compose(delegates);
995
+ };
996
+
997
+ },{"../compose":10,"../delegate":11}],13:[function(require,module,exports){
998
+ "use strict";
999
+
1000
+ module.exports = function ignore(element, fn) {
1001
+ return function ignorance(e) {
1002
+ if (element !== e.target && !element.contains(e.target)) {
1003
+ return fn.call(this, e);
1004
+ }
1005
+ };
1006
+ };
1007
+
1008
+ },{}],14:[function(require,module,exports){
1009
+ "use strict";
1010
+
1011
+ module.exports = function once(listener, options) {
1012
+ var wrapped = function wrappedOnce(e) {
1013
+ e.currentTarget.removeEventListener(e.type, wrapped, options);
1014
+ return listener.call(this, e);
1015
+ };
1016
+ return wrapped;
1017
+ };
1018
+
1019
+ },{}],15:[function(require,module,exports){
1020
+ 'use strict';
1021
+
1022
+ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
1023
+
1024
+ var RE_TRIM = /(^\s+)|(\s+$)/g;
1025
+ var RE_SPLIT = /\s+/;
1026
+
1027
+ var trim = String.prototype.trim ? function (str) {
1028
+ return str.trim();
1029
+ } : function (str) {
1030
+ return str.replace(RE_TRIM, '');
1031
+ };
1032
+
1033
+ var queryById = function queryById(id) {
1034
+ return this.querySelector('[id="' + id.replace(/"/g, '\\"') + '"]');
1035
+ };
1036
+
1037
+ module.exports = function resolveIds(ids, doc) {
1038
+ if (typeof ids !== 'string') {
1039
+ throw new Error('Expected a string but got ' + (typeof ids === 'undefined' ? 'undefined' : _typeof(ids)));
1040
+ }
1041
+
1042
+ if (!doc) {
1043
+ doc = window.document;
1044
+ }
1045
+
1046
+ var getElementById = doc.getElementById ? doc.getElementById.bind(doc) : queryById.bind(doc);
1047
+
1048
+ ids = trim(ids).split(RE_SPLIT);
1049
+
1050
+ // XXX we can short-circuit here because trimming and splitting a
1051
+ // string of just whitespace produces an array containing a single,
1052
+ // empty string
1053
+ if (ids.length === 1 && ids[0] === '') {
1054
+ return [];
1055
+ }
1056
+
1057
+ return ids.map(function (id) {
1058
+ var el = getElementById(id);
1059
+ if (!el) {
1060
+ throw new Error('no element with id: "' + id + '"');
1061
+ }
1062
+ return el;
1063
+ });
1064
+ };
1065
+
1066
+ },{}],16:[function(require,module,exports){
1067
+ 'use strict';
1068
+
1069
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
1070
+
1071
+ var behavior = require('../utils/behavior');
1072
+ var filter = require('array-filter');
1073
+ var forEach = require('array-foreach');
1074
+ var toggle = require('../utils/toggle');
1075
+
1076
+ var CLICK = require('../events').CLICK;
1077
+ var PREFIX = require('../config').prefix;
1078
+
1079
+ // XXX match .usa-accordion and .usa-accordion-bordered
1080
+ var ACCORDION = '.' + PREFIX + '-accordion, .' + PREFIX + '-accordion-bordered';
1081
+ var BUTTON = '.' + PREFIX + '-accordion-button[aria-controls]';
1082
+ var EXPANDED = 'aria-expanded';
1083
+ var MULTISELECTABLE = 'aria-multiselectable';
1084
+
1085
+ /**
1086
+ * Toggle a button's "pressed" state, optionally providing a target
1087
+ * state.
1088
+ *
1089
+ * @param {HTMLButtonElement} button
1090
+ * @param {boolean?} expanded If no state is provided, the current
1091
+ * state will be toggled (from false to true, and vice-versa).
1092
+ * @return {boolean} the resulting state
1093
+ */
1094
+ var toggleButton = function toggleButton(button, expanded) {
1095
+ var accordion = button.closest(ACCORDION);
1096
+ if (!accordion) {
1097
+ throw new Error(BUTTON + ' is missing outer ' + ACCORDION);
1098
+ }
1099
+
1100
+ expanded = toggle(button, expanded);
1101
+ // XXX multiselectable is opt-in, to preserve legacy behavior
1102
+ var multiselectable = accordion.getAttribute(MULTISELECTABLE) === 'true';
1103
+
1104
+ if (expanded && !multiselectable) {
1105
+ forEach(getAccordionButtons(accordion), function (other) {
1106
+ if (other !== button) {
1107
+ toggle(other, false);
1108
+ }
1109
+ });
1110
+ }
1111
+ };
1112
+
1113
+ /**
1114
+ * @param {HTMLButtonElement} button
1115
+ * @return {boolean} true
1116
+ */
1117
+ var showButton = function showButton(button) {
1118
+ return toggleButton(button, true);
1119
+ };
1120
+
1121
+ /**
1122
+ * @param {HTMLButtonElement} button
1123
+ * @return {boolean} false
1124
+ */
1125
+ var hideButton = function hideButton(button) {
1126
+ return toggleButton(button, false);
1127
+ };
1128
+
1129
+ /**
1130
+ * Get an Array of button elements belonging directly to the given
1131
+ * accordion element.
1132
+ * @param {HTMLElement} accordion
1133
+ * @return {array<HTMLButtonElement>}
1134
+ */
1135
+ var getAccordionButtons = function getAccordionButtons(accordion) {
1136
+ return filter(accordion.querySelectorAll(BUTTON), function (button) {
1137
+ return button.closest(ACCORDION) === accordion;
1138
+ });
1139
+ };
1140
+
1141
+ var accordion = behavior(_defineProperty({}, CLICK, _defineProperty({}, BUTTON, function (event) {
1142
+ event.preventDefault();
1143
+ return toggleButton(this);
1144
+ })), {
1145
+ init: function init(root) {
1146
+ forEach(root.querySelectorAll(BUTTON), function (button) {
1147
+ var expanded = button.getAttribute(EXPANDED) === 'true';
1148
+ toggleButton(button, expanded);
1149
+ });
1150
+ },
1151
+ ACCORDION: ACCORDION,
1152
+ BUTTON: BUTTON,
1153
+ show: showButton,
1154
+ hide: hideButton,
1155
+ toggle: toggleButton,
1156
+ getButtons: getAccordionButtons
1157
+ });
1158
+
1159
+ /**
1160
+ * TODO: for 2.0, remove everything below this comment and export the
1161
+ * behavior directly:
1162
+ *
1163
+ * module.exports = behavior({...});
1164
+ */
1165
+ var Accordion = function Accordion(root) {
1166
+ this.root = root;
1167
+ accordion.on(this.root);
1168
+ };
1169
+
1170
+ // copy all of the behavior methods and props to Accordion
1171
+ var assign = require('object-assign');
1172
+ assign(Accordion, accordion);
1173
+
1174
+ Accordion.prototype.show = showButton;
1175
+ Accordion.prototype.hide = hideButton;
1176
+
1177
+ Accordion.prototype.remove = function () {
1178
+ accordion.off(this.root);
1179
+ };
1180
+
1181
+ module.exports = Accordion;
1182
+
1183
+ },{"../config":24,"../events":25,"../utils/behavior":29,"../utils/toggle":33,"array-filter":1,"array-foreach":2,"object-assign":8}],17:[function(require,module,exports){
1184
+ 'use strict';
1185
+
1186
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
1187
+
1188
+ var behavior = require('../utils/behavior');
1189
+ var toggle = require('../utils/toggle');
1190
+
1191
+ var CLICK = require('../events').CLICK;
1192
+ var PREFIX = require('../config').prefix;
1193
+
1194
+ var HEADER = '.' + PREFIX + '-banner-header';
1195
+ var EXPANDED_CLASS = PREFIX + '-banner-header-expanded';
1196
+
1197
+ var toggleBanner = function toggleBanner(event) {
1198
+ event.preventDefault();
1199
+ this.closest(HEADER).classList.toggle(EXPANDED_CLASS);
1200
+ return false;
1201
+ };
1202
+
1203
+ module.exports = behavior(_defineProperty({}, CLICK, _defineProperty({}, HEADER + ' [aria-controls]', toggleBanner)));
1204
+
1205
+ },{"../config":24,"../events":25,"../utils/behavior":29,"../utils/toggle":33}],18:[function(require,module,exports){
1206
+ 'use strict';
1207
+
1208
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
1209
+
1210
+ var accordion = require('./accordion');
1211
+ var behavior = require('../utils/behavior');
1212
+ var debounce = require('lodash.debounce');
1213
+ var forEach = require('array-foreach');
1214
+ var select = require('../utils/select');
1215
+
1216
+ var CLICK = require('../events').CLICK;
1217
+ var PREFIX = require('../config').prefix;
1218
+
1219
+ var HIDDEN = 'hidden';
1220
+ var SCOPE = '.' + PREFIX + '-footer-big';
1221
+ var NAV = SCOPE + ' nav';
1222
+ var BUTTON = NAV + ' .' + PREFIX + '-footer-primary-link';
1223
+ var LIST = NAV + ' ul';
1224
+
1225
+ var HIDE_MAX_WIDTH = 600;
1226
+ var DEBOUNCE_RATE = 180;
1227
+
1228
+ var showPanel = function showPanel() {
1229
+ var list = this.closest(LIST);
1230
+ list.classList.remove(HIDDEN);
1231
+
1232
+ // NB: this *should* always succeed because the button
1233
+ // selector is scoped to ".{prefix}-footer-big nav"
1234
+ var lists = list.closest(NAV).querySelectorAll('ul');
1235
+
1236
+ forEach(lists, function (el) {
1237
+ if (el !== list) {
1238
+ el.classList.add(HIDDEN);
1239
+ }
1240
+ });
1241
+ };
1242
+
1243
+ var resize = debounce(function () {
1244
+ var hidden = window.innerWidth < HIDE_MAX_WIDTH;
1245
+ forEach(select(LIST), function (list) {
1246
+ list.classList.toggle(HIDDEN, hidden);
1247
+ });
1248
+ }, DEBOUNCE_RATE);
1249
+
1250
+ module.exports = behavior(_defineProperty({}, CLICK, _defineProperty({}, BUTTON, showPanel)), {
1251
+ // export for use elsewhere
1252
+ HIDE_MAX_WIDTH: HIDE_MAX_WIDTH,
1253
+ DEBOUNCE_RATE: DEBOUNCE_RATE,
1254
+
1255
+ init: function init(target) {
1256
+ resize();
1257
+ window.addEventListener('resize', resize);
1258
+ },
1259
+
1260
+ teardown: function teardown(target) {
1261
+ window.removeEventListener('resize', resize);
1262
+ }
1263
+ });
1264
+
1265
+ },{"../config":24,"../events":25,"../utils/behavior":29,"../utils/select":30,"./accordion":16,"array-foreach":2,"lodash.debounce":7}],19:[function(require,module,exports){
1266
+ 'use strict';
1267
+
1268
+ module.exports = {
1269
+ accordion: require('./accordion'),
1270
+ banner: require('./banner'),
1271
+ footer: require('./footer'),
1272
+ navigation: require('./navigation'),
1273
+ password: require('./password'),
1274
+ search: require('./search'),
1275
+ skipnav: require('./skipnav')
1276
+ };
1277
+
1278
+ },{"./accordion":16,"./banner":17,"./footer":18,"./navigation":20,"./password":21,"./search":22,"./skipnav":23}],20:[function(require,module,exports){
1279
+ 'use strict';
1280
+
1281
+ var _CLICK;
1282
+
1283
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
1284
+
1285
+ var behavior = require('../utils/behavior');
1286
+ var forEach = require('array-foreach');
1287
+ var select = require('../utils/select');
1288
+
1289
+ var CLICK = require('../events').CLICK;
1290
+ var PREFIX = require('../config').prefix;
1291
+
1292
+ var CONTEXT = 'header';
1293
+ var NAV = '.' + PREFIX + '-nav';
1294
+ var OPENERS = '.' + PREFIX + '-menu-btn';
1295
+ var CLOSE_BUTTON = '.' + PREFIX + '-nav-close';
1296
+ var OVERLAY = '.' + PREFIX + '-overlay';
1297
+ var CLOSERS = CLOSE_BUTTON + ', .' + PREFIX + '-overlay';
1298
+ var TOGGLES = [NAV, OVERLAY].join(', ');
1299
+
1300
+ var ACTIVE_CLASS = 'usa-mobile_nav-active';
1301
+ var VISIBLE_CLASS = 'is-visible';
1302
+
1303
+ var toggleNav = function toggleNav(active) {
1304
+ var body = document.body;
1305
+ if (typeof active !== 'boolean') {
1306
+ active = !body.classList.contains(ACTIVE_CLASS);
1307
+ }
1308
+ body.classList.toggle(ACTIVE_CLASS, active);
1309
+
1310
+ var context = this.closest(CONTEXT);
1311
+ forEach(select(TOGGLES), function (el) {
1312
+ el.classList.toggle(VISIBLE_CLASS);
1313
+ });
1314
+
1315
+ if (active && context) {
1316
+ var closeButton = context.querySelector(CLOSE_BUTTON);
1317
+ if (closeButton) {
1318
+ closeButton.focus();
1319
+ }
1320
+ }
1321
+ return active;
1322
+ };
1323
+
1324
+ var navigation = behavior(_defineProperty({}, CLICK, (_CLICK = {}, _defineProperty(_CLICK, OPENERS, toggleNav), _defineProperty(_CLICK, CLOSERS, toggleNav), _CLICK)));
1325
+
1326
+ /**
1327
+ * TODO for 2.0, remove this statement and export `navigation` directly:
1328
+ *
1329
+ * module.exports = behavior({...});
1330
+ */
1331
+ var assign = require('object-assign');
1332
+ module.exports = assign(function (el) {
1333
+ return navigation.on(el);
1334
+ }, navigation);
1335
+
1336
+ },{"../config":24,"../events":25,"../utils/behavior":29,"../utils/select":30,"array-foreach":2,"object-assign":8}],21:[function(require,module,exports){
1337
+ 'use strict';
1338
+
1339
+ var _behavior;
1340
+
1341
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
1342
+
1343
+ var behavior = require('../utils/behavior');
1344
+ var validate = require('../utils/validate-input');
1345
+ var toggleFormInput = require('../utils/toggle-form-input');
1346
+
1347
+ var CLICK = require('../events').CLICK;
1348
+ var PREFIX = require('../config').prefix;
1349
+
1350
+ var LINK = '.' + PREFIX + '-show_password, .' + PREFIX + '-show_multipassword';
1351
+
1352
+ var toggle = function toggle(event) {
1353
+ event.preventDefault();
1354
+ toggleFormInput(this);
1355
+ };
1356
+
1357
+ module.exports = behavior((_behavior = {}, _defineProperty(_behavior, CLICK, _defineProperty({}, LINK, toggle)), _defineProperty(_behavior, 'keyup change', {
1358
+ '.js-validate_password': validate
1359
+ }), _behavior));
1360
+
1361
+ },{"../config":24,"../events":25,"../utils/behavior":29,"../utils/toggle-form-input":32,"../utils/validate-input":34}],22:[function(require,module,exports){
1362
+ 'use strict';
1363
+
1364
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
1365
+
1366
+ var behavior = require('../utils/behavior');
1367
+ var forEach = require('array-foreach');
1368
+ var ignore = require('receptor/ignore');
1369
+ var select = require('../utils/select');
1370
+
1371
+ var CLICK = require('../events').CLICK;
1372
+ var PREFIX = require('../config').prefix;
1373
+
1374
+ var BUTTON = '.js-search-button';
1375
+ var FORM = '.js-search-form';
1376
+ var INPUT = '[type=search]';
1377
+ var CONTEXT = 'header'; // XXX
1378
+ var VISUALLY_HIDDEN = PREFIX + '-sr-only';
1379
+
1380
+ var lastButton = void 0;
1381
+
1382
+ var showSearch = function showSearch(event) {
1383
+ toggleSearch(this, true);
1384
+ lastButton = this;
1385
+ };
1386
+
1387
+ var hideSearch = function hideSearch(event) {
1388
+ toggleSearch(this, false);
1389
+ lastButton = undefined;
1390
+ };
1391
+
1392
+ var getForm = function getForm(button) {
1393
+ var context = button.closest(CONTEXT);
1394
+ return context ? context.querySelector(FORM) : document.querySelector(FORM);
1395
+ };
1396
+
1397
+ var toggleSearch = function toggleSearch(button, active) {
1398
+ var form = getForm(button);
1399
+ if (!form) {
1400
+ throw new Error('No ' + FORM + ' found for search toggle in ' + CONTEXT + '!');
1401
+ }
1402
+
1403
+ button.hidden = active;
1404
+ form.classList.toggle(VISUALLY_HIDDEN, !active);
1405
+
1406
+ if (active) {
1407
+ var input = form.querySelector(INPUT);
1408
+ if (input) {
1409
+ input.focus();
1410
+ }
1411
+ // when the user clicks _outside_ of the form w/ignore(): hide the
1412
+ // search, then remove the listener
1413
+ var listener = ignore(form, function (e) {
1414
+ if (lastButton) {
1415
+ hideSearch.call(lastButton);
1416
+ }
1417
+ document.body.removeEventListener(CLICK, listener);
1418
+ });
1419
+ document.body.addEventListener(CLICK, listener);
1420
+ }
1421
+ };
1422
+
1423
+ var search = behavior(_defineProperty({}, CLICK, _defineProperty({}, BUTTON, showSearch)), {
1424
+ init: function init(target) {
1425
+ forEach(select(BUTTON, target), function (button) {
1426
+ toggleSearch(button, false);
1427
+ });
1428
+ },
1429
+ teardown: function teardown(target) {
1430
+ // forget the last button clicked
1431
+ lastButton = undefined;
1432
+ }
1433
+ });
1434
+
1435
+ /**
1436
+ * TODO for 2.0, remove this statement and export `navigation` directly:
1437
+ *
1438
+ * module.exports = behavior({...});
1439
+ */
1440
+ var assign = require('object-assign');
1441
+ module.exports = assign(function (el) {
1442
+ return search.on(el);
1443
+ }, search);
1444
+
1445
+ },{"../config":24,"../events":25,"../utils/behavior":29,"../utils/select":30,"array-foreach":2,"object-assign":8,"receptor/ignore":13}],23:[function(require,module,exports){
1446
+ 'use strict';
1447
+
1448
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
1449
+
1450
+ var behavior = require('../utils/behavior');
1451
+ var once = require('receptor/once');
1452
+
1453
+ var CLICK = require('../events').CLICK;
1454
+ var PREFIX = require('../config').prefix;
1455
+ var LINK = '.' + PREFIX + '-skipnav[href^="#"]';
1456
+
1457
+ var setTabindex = function setTabindex(event) {
1458
+ // NB: we know because of the selector we're delegating to below that the
1459
+ // href already begins with '#'
1460
+ var id = this.getAttribute('href').slice(1);
1461
+ var target = document.getElementById(id);
1462
+ if (target) {
1463
+ target.setAttribute('tabindex', 0);
1464
+ target.addEventListener('blur', once(function (event) {
1465
+ target.setAttribute('tabindex', -1);
1466
+ }));
1467
+ } else {
1468
+ // throw an error?
1469
+ }
1470
+ };
1471
+
1472
+ module.exports = behavior(_defineProperty({}, CLICK, _defineProperty({}, LINK, setTabindex)));
1473
+
1474
+ },{"../config":24,"../events":25,"../utils/behavior":29,"receptor/once":14}],24:[function(require,module,exports){
1475
+ 'use strict';
1476
+
1477
+ module.exports = {
1478
+ prefix: 'usa'
1479
+ };
1480
+
1481
+ },{}],25:[function(require,module,exports){
1482
+ 'use strict';
1483
+
1484
+ module.exports = {
1485
+ CLICK: 'ontouchstart' in document.documentElement ? 'touchstart' : 'click'
1486
+ };
1487
+
1488
+ },{}],26:[function(require,module,exports){
1489
+ 'use strict';
1490
+
1491
+ var elproto = window.HTMLElement.prototype;
1492
+ var HIDDEN = 'hidden';
1493
+
1494
+ if (!(HIDDEN in elproto)) {
1495
+ Object.defineProperty(elproto, HIDDEN, {
1496
+ get: function get() {
1497
+ return this.hasAttribute(HIDDEN);
1498
+ },
1499
+ set: function set(value) {
1500
+ if (value) {
1501
+ this.setAttribute(HIDDEN, '');
1502
+ } else {
1503
+ this.removeAttribute(HIDDEN);
1504
+ }
1505
+ }
1506
+ });
1507
+ }
1508
+
1509
+ },{}],27:[function(require,module,exports){
1510
+ 'use strict';
1511
+ // polyfills HTMLElement.prototype.classList and DOMTokenList
1512
+
1513
+ require('classlist-polyfill');
1514
+ // polyfills HTMLElement.prototype.hidden
1515
+ require('./element-hidden');
1516
+
1517
+ },{"./element-hidden":26,"classlist-polyfill":3}],28:[function(require,module,exports){
1518
+ 'use strict';
1519
+
1520
+ var domready = require('domready');
1521
+
1522
+ /**
1523
+ * The 'polyfills' define key ECMAScript 5 methods that may be missing from
1524
+ * older browsers, so must be loaded first.
1525
+ */
1526
+ require('./polyfills');
1527
+
1528
+ var uswds = require('./config');
1529
+
1530
+ var components = require('./components');
1531
+ uswds.components = components;
1532
+
1533
+ domready(function () {
1534
+ var target = document.body;
1535
+ for (var name in components) {
1536
+ var behavior = components[name];
1537
+ behavior.on(target);
1538
+ }
1539
+ });
1540
+
1541
+ module.exports = uswds;
1542
+
1543
+ },{"./components":19,"./config":24,"./polyfills":27,"domready":4}],29:[function(require,module,exports){
1544
+ 'use strict';
1545
+
1546
+ var assign = require('object-assign');
1547
+ var forEach = require('array-foreach');
1548
+ var Behavior = require('receptor/behavior');
1549
+
1550
+ var sequence = function sequence() {
1551
+ var seq = [].slice.call(arguments);
1552
+ return function (target) {
1553
+ var _this = this;
1554
+
1555
+ if (!target) {
1556
+ target = document.body;
1557
+ }
1558
+ forEach(seq, function (method) {
1559
+ if (typeof _this[method] === 'function') {
1560
+ _this[method].call(_this, target);
1561
+ }
1562
+ });
1563
+ };
1564
+ };
1565
+
1566
+ /**
1567
+ * @name behavior
1568
+ * @param {object} events
1569
+ * @param {object?} props
1570
+ * @return {receptor.behavior}
1571
+ */
1572
+ module.exports = function (events, props) {
1573
+ return Behavior(events, assign({
1574
+ on: sequence('init', 'add'),
1575
+ off: sequence('teardown', 'remove')
1576
+ }, props));
1577
+ };
1578
+
1579
+ },{"array-foreach":2,"object-assign":8,"receptor/behavior":9}],30:[function(require,module,exports){
1580
+ 'use strict';
1581
+
1582
+ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
1583
+
1584
+ var isElement = function isElement(value) {
1585
+ return value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.nodeType === 1;
1586
+ };
1587
+
1588
+ /**
1589
+ * @name select
1590
+ * @desc selects elements from the DOM by class selector or ID selector.
1591
+ * @param {string} selector - The selector to traverse the DOM with.
1592
+ * @param {HTMLElement} context - The context to traverse the DOM in.
1593
+ * @return {Array.HTMLElement} - An array of DOM nodes or an empty array.
1594
+ */
1595
+ module.exports = function select(selector, context) {
1596
+
1597
+ if (typeof selector !== 'string') {
1598
+ return [];
1599
+ }
1600
+
1601
+ if (context === undefined || !isElement(context)) {
1602
+ context = window.document;
1603
+ }
1604
+
1605
+ var selection = context.querySelectorAll(selector);
1606
+ return Array.prototype.slice.call(selection);
1607
+ };
1608
+
1609
+ },{}],31:[function(require,module,exports){
1610
+ 'use strict';
1611
+
1612
+ /**
1613
+ * Flips given INPUT elements between masked (hiding the field value) and unmasked
1614
+ * @param {Array.HTMLElement} fields - An array of INPUT elements
1615
+ * @param {Boolean} mask - Whether the mask should be applied, hiding the field value
1616
+ */
1617
+ module.exports = function (field, mask) {
1618
+ field.setAttribute('autocapitalize', 'off');
1619
+ field.setAttribute('autocorrect', 'off');
1620
+ field.setAttribute('type', mask ? 'password' : 'text');
1621
+ };
1622
+
1623
+ },{}],32:[function(require,module,exports){
1624
+ 'use strict';
1625
+
1626
+ var forEach = require('array-foreach');
1627
+ var resolveIdRefs = require('resolve-id-refs');
1628
+ var select = require('./select');
1629
+ var toggleFieldMask = require('./toggle-field-mask');
1630
+
1631
+ var CONTROLS = 'aria-controls';
1632
+ var PRESSED = 'aria-pressed';
1633
+ var SHOW_ATTR = 'data-show-text';
1634
+ var HIDE_ATTR = 'data-hide-text';
1635
+
1636
+ /**
1637
+ * Replace the word "Show" (or "show") with "Hide" (or "hide") in a string.
1638
+ * @param {string} showText
1639
+ * @return {strong} hideText
1640
+ */
1641
+ var getHideText = function getHideText(showText) {
1642
+ return showText.replace(/\bShow\b/i, function (show) {
1643
+ return ('S' === show[0] ? 'H' : 'h') + 'ide';
1644
+ });
1645
+ };
1646
+
1647
+ /**
1648
+ * Component that decorates an HTML element with the ability to toggle the
1649
+ * masked state of an input field (like a password) when clicked.
1650
+ * The ids of the fields to be masked will be pulled directly from the button's
1651
+ * `aria-controls` attribute.
1652
+ *
1653
+ * @param {HTMLElement} el Parent element containing the fields to be masked
1654
+ * @return {boolean}
1655
+ */
1656
+ module.exports = function (el) {
1657
+ // this is the *target* state:
1658
+ // * if the element has the attr and it's !== "true", pressed is true
1659
+ // * otherwise, pressed is false
1660
+ var pressed = el.hasAttribute(PRESSED) && el.getAttribute(PRESSED) !== 'true';
1661
+
1662
+ var fields = resolveIdRefs(el.getAttribute(CONTROLS));
1663
+ forEach(fields, function (field) {
1664
+ return toggleFieldMask(field, pressed);
1665
+ });
1666
+
1667
+ if (!el.hasAttribute(SHOW_ATTR)) {
1668
+ el.setAttribute(SHOW_ATTR, el.textContent);
1669
+ }
1670
+
1671
+ var showText = el.getAttribute(SHOW_ATTR);
1672
+ var hideText = el.getAttribute(HIDE_ATTR) || getHideText(showText);
1673
+
1674
+ el.textContent = pressed ? showText : hideText;
1675
+ el.setAttribute(PRESSED, pressed);
1676
+ return pressed;
1677
+ };
1678
+
1679
+ },{"./select":30,"./toggle-field-mask":31,"array-foreach":2,"resolve-id-refs":15}],33:[function(require,module,exports){
1680
+ 'use strict';
1681
+
1682
+ var EXPANDED = 'aria-expanded';
1683
+ var CONTROLS = 'aria-controls';
1684
+ var HIDDEN = 'aria-hidden';
1685
+
1686
+ module.exports = function (button, expanded) {
1687
+
1688
+ if (typeof expanded !== 'boolean') {
1689
+ expanded = button.getAttribute(EXPANDED) === 'false';
1690
+ }
1691
+ button.setAttribute(EXPANDED, expanded);
1692
+
1693
+ var id = button.getAttribute(CONTROLS);
1694
+ var controls = document.getElementById(id);
1695
+ if (!controls) {
1696
+ throw new Error('No toggle target found with id: "' + id + '"');
1697
+ }
1698
+
1699
+ controls.setAttribute(HIDDEN, !expanded);
1700
+ return expanded;
1701
+ };
1702
+
1703
+ },{}],34:[function(require,module,exports){
1704
+ 'use strict';
1705
+
1706
+ var dataset = require('elem-dataset');
1707
+
1708
+ var PREFIX = require('../config').prefix;
1709
+ var CHECKED = 'aria-checked';
1710
+ var CHECKED_CLASS = PREFIX + '-checklist-checked';
1711
+
1712
+ module.exports = function validate(el) {
1713
+ var data = dataset(el);
1714
+ var id = data.validationElement;
1715
+ var checkList = id.charAt(0) === '#' ? document.querySelector(id) : document.getElementById(id);
1716
+
1717
+ if (!checkList) {
1718
+ throw new Error('No validation element found with id: "' + id + '"');
1719
+ }
1720
+
1721
+ for (var key in data) {
1722
+ if (key.startsWith('validate')) {
1723
+ var validatorName = key.substr('validate'.length).toLowerCase();
1724
+ var validatorPattern = new RegExp(data[key]);
1725
+ var validatorSelector = '[data-validator="' + validatorName + '"]';
1726
+ var validatorCheckbox = checkList.querySelector(validatorSelector);
1727
+ if (!validatorCheckbox) {
1728
+ throw new Error('No validator checkbox found for: "' + validatorName + '"');
1729
+ }
1730
+
1731
+ var checked = validatorPattern.test(el.value);
1732
+ validatorCheckbox.classList.toggle(CHECKED_CLASS, checked);
1733
+ validatorCheckbox.setAttribute(CHECKED, checked);
1734
+ }
1735
+ }
1736
+ };
1737
+
1738
+ },{"../config":24,"elem-dataset":5}]},{},[28])
1739
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvYXJyYXktZmlsdGVyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2FycmF5LWZvcmVhY2gvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2xhc3NsaXN0LXBvbHlmaWxsL3NyYy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kb21yZWFkeS9yZWFkeS5qcyIsIm5vZGVfbW9kdWxlcy9lbGVtLWRhdGFzZXQvZGlzdC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9lbGVtZW50LWNsb3Nlc3QvZWxlbWVudC1jbG9zZXN0LmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC5kZWJvdW5jZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3JlY2VwdG9yL2JlaGF2aW9yL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3JlY2VwdG9yL2NvbXBvc2UvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVjZXB0b3IvZGVsZWdhdGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVjZXB0b3IvZGVsZWdhdGVBbGwvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVjZXB0b3IvaWdub3JlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3JlY2VwdG9yL29uY2UvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVzb2x2ZS1pZC1yZWZzL2luZGV4LmpzIiwic3JjL2pzL2NvbXBvbmVudHMvYWNjb3JkaW9uLmpzIiwic3JjL2pzL2NvbXBvbmVudHMvYmFubmVyLmpzIiwic3JjL2pzL2NvbXBvbmVudHMvZm9vdGVyLmpzIiwic3JjL2pzL2NvbXBvbmVudHMvaW5kZXguanMiLCJzcmMvanMvY29tcG9uZW50cy9uYXZpZ2F0aW9uLmpzIiwic3JjL2pzL2NvbXBvbmVudHMvcGFzc3dvcmQuanMiLCJzcmMvanMvY29tcG9uZW50cy9zZWFyY2guanMiLCJzcmMvanMvY29tcG9uZW50cy9za2lwbmF2LmpzIiwic3JjL2pzL2NvbmZpZy5qcyIsInNyYy9qcy9ldmVudHMuanMiLCJzcmMvanMvcG9seWZpbGxzL2VsZW1lbnQtaGlkZGVuLmpzIiwic3JjL2pzL3BvbHlmaWxscy9pbmRleC5qcyIsInNyYy9qcy9zdGFydC5qcyIsInNyYy9qcy91dGlscy9iZWhhdmlvci5qcyIsInNyYy9qcy91dGlscy9zZWxlY3QuanMiLCJzcmMvanMvdXRpbHMvdG9nZ2xlLWZpZWxkLW1hc2suanMiLCJzcmMvanMvdXRpbHMvdG9nZ2xlLWZvcm0taW5wdXQuanMiLCJzcmMvanMvdXRpbHMvdG9nZ2xlLmpzIiwic3JjL2pzL3V0aWxzL3ZhbGlkYXRlLWlucHV0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7QUNDQTs7Ozs7Ozs7OztBQVVBLE9BQU8sT0FBUCxHQUFpQixVQUFVLEdBQVYsRUFBZSxFQUFmLEVBQW1CLElBQW5CLEVBQXlCO0FBQ3hDLE1BQUksSUFBSSxNQUFSLEVBQWdCLE9BQU8sSUFBSSxNQUFKLENBQVcsRUFBWCxFQUFlLElBQWYsQ0FBUDtBQUNoQixNQUFJLEtBQUssQ0FBTCxLQUFXLEdBQVgsSUFBa0IsU0FBUyxHQUEvQixFQUFvQyxNQUFNLElBQUksU0FBSixFQUFOO0FBQ3BDLE1BQUksY0FBYyxPQUFPLEVBQXpCLEVBQTZCLE1BQU0sSUFBSSxTQUFKLEVBQU47QUFDN0IsTUFBSSxNQUFNLEVBQVY7QUFDQSxPQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksSUFBSSxNQUF4QixFQUFnQyxHQUFoQyxFQUFxQztBQUNuQyxRQUFJLENBQUMsT0FBTyxJQUFQLENBQVksR0FBWixFQUFpQixDQUFqQixDQUFMLEVBQTBCO0FBQzFCLFFBQUksTUFBTSxJQUFJLENBQUosQ0FBVjtBQUNBLFFBQUksR0FBRyxJQUFILENBQVEsSUFBUixFQUFjLEdBQWQsRUFBbUIsQ0FBbkIsRUFBc0IsR0FBdEIsQ0FBSixFQUFnQyxJQUFJLElBQUosQ0FBUyxHQUFUO0FB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VUFBTSwwQ0FBd0MsYUFBeEMsT0FBTjtBQUNBLFVBQU0sb0JBQW9CLFVBQVUsYUFBVixDQUF3QixpQkFBeEIsQ0FBMUI7QUFDQSxVQUFJLENBQUMsaUJBQUwsRUFBd0I7QUFDdEIsY0FBTSxJQUFJLEtBQUosd0NBQ2lDLGFBRGpDLE9BQU47QUFHRDs7QUFFRCxVQUFNLFVBQVUsaUJBQWlCLElBQWpCLENBQXNCLEdBQUcsS0FBekIsQ0FBaEI7QUFDQSx3QkFBa0IsU0FBbEIsQ0FBNEIsTUFBNUIsQ0FBbUMsYUFBbkMsRUFBa0QsT0FBbEQ7QUFDQSx3QkFBa0IsWUFBbEIsQ0FBK0IsT0FBL0IsRUFBd0MsT0FBeEM7QUFDRDtBQUNGO0FBQ0YsQ0E5QkQiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiXG4vKipcbiAqIEFycmF5I2ZpbHRlci5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge09iamVjdD19IHNlbGZcbiAqIEByZXR1cm4ge0FycmF5fVxuICogQHRocm93IFR5cGVFcnJvclxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyciwgZm4sIHNlbGYpIHtcbiAgaWYgKGFyci5maWx0ZXIpIHJldHVybiBhcnIuZmlsdGVyKGZuLCBzZWxmKTtcbiAgaWYgKHZvaWQgMCA9PT0gYXJyIHx8IG51bGwgPT09IGFycikgdGhyb3cgbmV3IFR5cGVFcnJvcjtcbiAgaWYgKCdmdW5jdGlvbicgIT0gdHlwZW9mIGZuKSB0aHJvdyBuZXcgVHlwZUVycm9yO1xuICB2YXIgcmV0ID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKCFoYXNPd24uY2FsbChhcnIsIGkpKSBjb250aW51ZTtcbiAgICB2YXIgdmFsID0gYXJyW2ldO1xuICAgIGlmIChmbi5jYWxsKHNlbGYsIHZhbCwgaSwgYXJyKSkgcmV0LnB1c2godmFsKTtcbiAgfVxuICByZXR1cm4gcmV0O1xufTtcblxudmFyIGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG4iLCIvKipcbiAqIGFycmF5LWZvcmVhY2hcbiAqICAgQXJyYXkjZm9yRWFjaCBwb255ZmlsbCBmb3Igb2xkZXIgYnJvd3NlcnNcbiAqICAgKFBvbnlmaWxsOiBBIHBvbHlmaWxsIHRoYXQgZG9lc24ndCBvdmVyd3JpdGUgdGhlIG5hdGl2ZSBtZXRob2QpXG4gKiBcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS90d2FkYS9hcnJheS1mb3JlYWNoXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTYgVGFrdXRvIFdhZGFcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqICAgaHR0cHM6Ly9naXRodWIuY29tL3R3YWRhL2FycmF5LWZvcmVhY2gvYmxvYi9tYXN0ZXIvTUlULUxJQ0VOU0VcbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZvckVhY2ggKGFyeSwgY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICBpZiAoYXJ5LmZvckVhY2gpIHtcbiAgICAgICAgYXJ5LmZvckVhY2goY2FsbGJhY2ssIHRoaXNBcmcpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJ5Lmxlbmd0aDsgaSs9MSkge1xuICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIGFyeVtpXSwgaSwgYXJ5KTtcbiAgICB9XG59O1xuIiwiLypcbiAqIGNsYXNzTGlzdC5qczogQ3Jvc3MtYnJvd3NlciBmdWxsIGVsZW1lbnQuY2xhc3NMaXN0IGltcGxlbWVudGF0aW9uLlxuICogMjAxNC0wNy0yM1xuICpcbiAqIEJ5IEVsaSBHcmV5LCBodHRwOi8vZWxpZ3JleS5jb21cbiAqIFB1YmxpYyBEb21haW4uXG4gKiBOTyBXQVJSQU5UWSBFWFBSRVNTRUQgT1IgSU1QTElFRC4gVVNFIEFUIFlPVVIgT1dOIFJJU0suXG4gKi9cblxuLypnbG9iYWwgc2VsZiwgZG9jdW1lbnQsIERPTUV4Y2VwdGlvbiAqL1xuXG4vKiEgQHNvdXJjZSBodHRwOi8vcHVybC5lbGlncmV5LmNvbS9naXRodWIvY2xhc3NMaXN0LmpzL2Jsb2IvbWFzdGVyL2NsYXNzTGlzdC5qcyovXG5cbi8qIENvcGllZCBmcm9tIE1ETjpcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50L2NsYXNzTGlzdFxuICovXG5cbmlmIChcImRvY3VtZW50XCIgaW4gd2luZG93LnNlbGYpIHtcblxuICAvLyBGdWxsIHBvbHlmaWxsIGZvciBicm93c2VycyB3aXRoIG5vIGNsYXNzTGlzdCBzdXBwb3J0XG4gIC8vIEluY2x1ZGluZyBJRSA8IEVkZ2UgbWlzc2luZyBTVkdFbGVtZW50LmNsYXNzTGlzdFxuICBpZiAoIShcImNsYXNzTGlzdFwiIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJfXCIpKVxuICAgIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyAmJiAhKFwiY2xhc3NMaXN0XCIgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcImdcIikpKSB7XG5cbiAgKGZ1bmN0aW9uICh2aWV3KSB7XG5cbiAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgIGlmICghKCdFbGVtZW50JyBpbiB2aWV3KSkgcmV0dXJuO1xuXG4gICAgdmFyXG4gICAgICAgIGNsYXNzTGlzdFByb3AgPSBcImNsYXNzTGlzdFwiXG4gICAgICAsIHByb3RvUHJvcCA9IFwicHJvdG90eXBlXCJcbiAgICAgICwgZWxlbUN0clByb3RvID0gdmlldy5FbGVtZW50W3Byb3RvUHJvcF1cbiAgICAgICwgb2JqQ3RyID0gT2JqZWN0XG4gICAgICAsIHN0clRyaW0gPSBTdHJpbmdbcHJvdG9Qcm9wXS50cmltIHx8IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgXCJcIik7XG4gICAgICB9XG4gICAgICAsIGFyckluZGV4T2YgPSBBcnJheVtwcm90b1Byb3BdLmluZGV4T2YgfHwgZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgdmFyXG4gICAgICAgICAgICBpID0gMFxuICAgICAgICAgICwgbGVuID0gdGhpcy5sZW5ndGhcbiAgICAgICAgO1xuICAgICAgICBmb3IgKDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgaWYgKGkgaW4gdGhpcyAmJiB0aGlzW2ldID09PSBpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgLy8gVmVuZG9yczogcGxlYXNlIGFsbG93IGNvbnRlbnQgY29kZSB0byBpbnN0YW50aWF0ZSBET01FeGNlcHRpb25zXG4gICAgICAsIERPTUV4ID0gZnVuY3Rpb24gKHR5cGUsIG1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gdHlwZTtcbiAgICAgICAgdGhpcy5jb2RlID0gRE9NRXhjZXB0aW9uW3R5cGVdO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgfVxuICAgICAgLCBjaGVja1Rva2VuQW5kR2V0SW5kZXggPSBmdW5jdGlvbiAoY2xhc3NMaXN0LCB0b2tlbikge1xuICAgICAgICBpZiAodG9rZW4gPT09IFwiXCIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRE9NRXgoXG4gICAgICAgICAgICAgIFwiU1lOVEFYX0VSUlwiXG4gICAgICAgICAgICAsIFwiQW4gaW52YWxpZCBvciBpbGxlZ2FsIHN0cmluZyB3YXMgc3BlY2lmaWVkXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmICgvXFxzLy50ZXN0KHRva2VuKSkge1xuICAgICAgICAgIHRocm93IG5ldyBET01FeChcbiAgICAgICAgICAgICAgXCJJTlZBTElEX0NIQVJBQ1RFUl9FUlJcIlxuICAgICAgICAgICAgLCBcIlN0cmluZyBjb250YWlucyBhbiBpbnZhbGlkIGNoYXJhY3RlclwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJySW5kZXhPZi5jYWxsKGNsYXNzTGlzdCwgdG9rZW4pO1xuICAgICAgfVxuICAgICAgLCBDbGFzc0xpc3QgPSBmdW5jdGlvbiAoZWxlbSkge1xuICAgICAgICB2YXJcbiAgICAgICAgICAgIHRyaW1tZWRDbGFzc2VzID0gc3RyVHJpbS5jYWxsKGVsZW0uZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgfHwgXCJcIilcbiAgICAgICAgICAsIGNsYXNzZXMgPSB0cmltbWVkQ2xhc3NlcyA/IHRyaW1tZWRDbGFzc2VzLnNwbGl0KC9cXHMrLykgOiBbXVxuICAgICAgICAgICwgaSA9IDBcbiAgICAgICAgICAsIGxlbiA9IGNsYXNzZXMubGVuZ3RoXG4gICAgICAgIDtcbiAgICAgICAgZm9yICg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIHRoaXMucHVzaChjbGFzc2VzW2ldKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91cGRhdGVDbGFzc05hbWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCB0aGlzLnRvU3RyaW5nKCkpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgLCBjbGFzc0xpc3RQcm90byA9IENsYXNzTGlzdFtwcm90b1Byb3BdID0gW11cbiAgICAgICwgY2xhc3NMaXN0R2V0dGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IENsYXNzTGlzdCh0aGlzKTtcbiAgICAgIH1cbiAgICA7XG4gICAgLy8gTW9zdCBET01FeGNlcHRpb24gaW1wbGVtZW50YXRpb25zIGRvbid0IGFsbG93IGNhbGxpbmcgRE9NRXhjZXB0aW9uJ3MgdG9TdHJpbmcoKVxuICAgIC8vIG9uIG5vbi1ET01FeGNlcHRpb25zLiBFcnJvcidzIHRvU3RyaW5nKCkgaXMgc3VmZmljaWVudCBoZXJlLlxuICAgIERPTUV4W3Byb3RvUHJvcF0gPSBFcnJvcltwcm90b1Byb3BdO1xuICAgIGNsYXNzTGlzdFByb3RvLml0ZW0gPSBmdW5jdGlvbiAoaSkge1xuICAgICAgcmV0dXJuIHRoaXNbaV0gfHwgbnVsbDtcbiAgICB9O1xuICAgIGNsYXNzTGlzdFByb3RvLmNvbnRhaW5zID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICB0b2tlbiArPSBcIlwiO1xuICAgICAgcmV0dXJuIGNoZWNrVG9rZW5BbmRHZXRJbmRleCh0aGlzLCB0b2tlbikgIT09IC0xO1xuICAgIH07XG4gICAgY2xhc3NMaXN0UHJvdG8uYWRkID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyXG4gICAgICAgICAgdG9rZW5zID0gYXJndW1lbnRzXG4gICAgICAgICwgaSA9IDBcbiAgICAgICAgLCBsID0gdG9rZW5zLmxlbmd0aFxuICAgICAgICAsIHRva2VuXG4gICAgICAgICwgdXBkYXRlZCA9IGZhbHNlXG4gICAgICA7XG4gICAgICBkbyB7XG4gICAgICAgIHRva2VuID0gdG9rZW5zW2ldICsgXCJcIjtcbiAgICAgICAgaWYgKGNoZWNrVG9rZW5BbmRHZXRJbmRleCh0aGlzLCB0b2tlbikgPT09IC0xKSB7XG4gICAgICAgICAgdGhpcy5wdXNoKHRva2VuKTtcbiAgICAgICAgICB1cGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgd2hpbGUgKCsraSA8IGwpO1xuXG4gICAgICBpZiAodXBkYXRlZCkge1xuICAgICAgICB0aGlzLl91cGRhdGVDbGFzc05hbWUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNsYXNzTGlzdFByb3RvLnJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhclxuICAgICAgICAgIHRva2VucyA9IGFyZ3VtZW50c1xuICAgICAgICAsIGkgPSAwXG4gICAgICAgICwgbCA9IHRva2Vucy5sZW5ndGhcbiAgICAgICAgLCB0b2tlblxuICAgICAgICAsIHVwZGF0ZWQgPSBmYWxzZVxuICAgICAgICAsIGluZGV4XG4gICAgICA7XG4gICAgICBkbyB7XG4gICAgICAgIHRva2VuID0gdG9rZW5zW2ldICsgXCJcIjtcbiAgICAgICAgaW5kZXggPSBjaGVja1Rva2VuQW5kR2V0SW5kZXgodGhpcywgdG9rZW4pO1xuICAgICAgICB3aGlsZSAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgdGhpcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIHVwZGF0ZWQgPSB0cnVlO1xuICAgICAgICAgIGluZGV4ID0gY2hlY2tUb2tlbkFuZEdldEluZGV4KHRoaXMsIHRva2VuKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgd2hpbGUgKCsraSA8IGwpO1xuXG4gICAgICBpZiAodXBkYXRlZCkge1xuICAgICAgICB0aGlzLl91cGRhdGVDbGFzc05hbWUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNsYXNzTGlzdFByb3RvLnRvZ2dsZSA9IGZ1bmN0aW9uICh0b2tlbiwgZm9yY2UpIHtcbiAgICAgIHRva2VuICs9IFwiXCI7XG5cbiAgICAgIHZhclxuICAgICAgICAgIHJlc3VsdCA9IHRoaXMuY29udGFpbnModG9rZW4pXG4gICAgICAgICwgbWV0aG9kID0gcmVzdWx0ID9cbiAgICAgICAgICBmb3JjZSAhPT0gdHJ1ZSAmJiBcInJlbW92ZVwiXG4gICAgICAgIDpcbiAgICAgICAgICBmb3JjZSAhPT0gZmFsc2UgJiYgXCJhZGRcIlxuICAgICAgO1xuXG4gICAgICBpZiAobWV0aG9kKSB7XG4gICAgICAgIHRoaXNbbWV0aG9kXSh0b2tlbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JjZSA9PT0gdHJ1ZSB8fCBmb3JjZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIGZvcmNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICFyZXN1bHQ7XG4gICAgICB9XG4gICAgfTtcbiAgICBjbGFzc0xpc3RQcm90by50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLmpvaW4oXCIgXCIpO1xuICAgIH07XG5cbiAgICBpZiAob2JqQ3RyLmRlZmluZVByb3BlcnR5KSB7XG4gICAgICB2YXIgY2xhc3NMaXN0UHJvcERlc2MgPSB7XG4gICAgICAgICAgZ2V0OiBjbGFzc0xpc3RHZXR0ZXJcbiAgICAgICAgLCBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgICwgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgb2JqQ3RyLmRlZmluZVByb3BlcnR5KGVsZW1DdHJQcm90bywgY2xhc3NMaXN0UHJvcCwgY2xhc3NMaXN0UHJvcERlc2MpO1xuICAgICAgfSBjYXRjaCAoZXgpIHsgLy8gSUUgOCBkb2Vzbid0IHN1cHBvcnQgZW51bWVyYWJsZTp0cnVlXG4gICAgICAgIGlmIChleC5udW1iZXIgPT09IC0weDdGRjVFQzU0KSB7XG4gICAgICAgICAgY2xhc3NMaXN0UHJvcERlc2MuZW51bWVyYWJsZSA9IGZhbHNlO1xuICAgICAgICAgIG9iakN0ci5kZWZpbmVQcm9wZXJ0eShlbGVtQ3RyUHJvdG8sIGNsYXNzTGlzdFByb3AsIGNsYXNzTGlzdFByb3BEZXNjKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob2JqQ3RyW3Byb3RvUHJvcF0uX19kZWZpbmVHZXR0ZXJfXykge1xuICAgICAgZWxlbUN0clByb3RvLl9fZGVmaW5lR2V0dGVyX18oY2xhc3NMaXN0UHJvcCwgY2xhc3NMaXN0R2V0dGVyKTtcbiAgICB9XG5cbiAgICB9KHdpbmRvdy5zZWxmKSk7XG5cbiAgICB9IGVsc2Uge1xuICAgIC8vIFRoZXJlIGlzIGZ1bGwgb3IgcGFydGlhbCBuYXRpdmUgY2xhc3NMaXN0IHN1cHBvcnQsIHNvIGp1c3QgY2hlY2sgaWYgd2UgbmVlZFxuICAgIC8vIHRvIG5vcm1hbGl6ZSB0aGUgYWRkL3JlbW92ZSBhbmQgdG9nZ2xlIEFQSXMuXG5cbiAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAgIHZhciB0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJfXCIpO1xuXG4gICAgICB0ZXN0RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiYzFcIiwgXCJjMlwiKTtcblxuICAgICAgLy8gUG9seWZpbGwgZm9yIElFIDEwLzExIGFuZCBGaXJlZm94IDwyNiwgd2hlcmUgY2xhc3NMaXN0LmFkZCBhbmRcbiAgICAgIC8vIGNsYXNzTGlzdC5yZW1vdmUgZXhpc3QgYnV0IHN1cHBvcnQgb25seSBvbmUgYXJndW1lbnQgYXQgYSB0aW1lLlxuICAgICAgaWYgKCF0ZXN0RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJjMlwiKSkge1xuICAgICAgICB2YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICAgICAgdmFyIG9yaWdpbmFsID0gRE9NVG9rZW5MaXN0LnByb3RvdHlwZVttZXRob2RdO1xuXG4gICAgICAgICAgRE9NVG9rZW5MaXN0LnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odG9rZW4pIHtcbiAgICAgICAgICAgIHZhciBpLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgdG9rZW4gPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICAgIG9yaWdpbmFsLmNhbGwodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICAgIGNyZWF0ZU1ldGhvZCgnYWRkJyk7XG4gICAgICAgIGNyZWF0ZU1ldGhvZCgncmVtb3ZlJyk7XG4gICAgICB9XG5cbiAgICAgIHRlc3RFbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoXCJjM1wiLCBmYWxzZSk7XG5cbiAgICAgIC8vIFBvbHlmaWxsIGZvciBJRSAxMCBhbmQgRmlyZWZveCA8MjQsIHdoZXJlIGNsYXNzTGlzdC50b2dnbGUgZG9lcyBub3RcbiAgICAgIC8vIHN1cHBvcnQgdGhlIHNlY29uZCBhcmd1bWVudC5cbiAgICAgIGlmICh0ZXN0RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJjM1wiKSkge1xuICAgICAgICB2YXIgX3RvZ2dsZSA9IERPTVRva2VuTGlzdC5wcm90b3R5cGUudG9nZ2xlO1xuXG4gICAgICAgIERPTVRva2VuTGlzdC5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24odG9rZW4sIGZvcmNlKSB7XG4gICAgICAgICAgaWYgKDEgaW4gYXJndW1lbnRzICYmICF0aGlzLmNvbnRhaW5zKHRva2VuKSA9PT0gIWZvcmNlKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9yY2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBfdG9nZ2xlLmNhbGwodGhpcywgdG9rZW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgfVxuXG4gICAgICB0ZXN0RWxlbWVudCA9IG51bGw7XG4gICAgfSgpKTtcbiAgfVxufVxuIiwiLyohXG4gICogZG9tcmVhZHkgKGMpIER1c3RpbiBEaWF6IDIwMTQgLSBMaWNlbnNlIE1JVFxuICAqL1xuIWZ1bmN0aW9uIChuYW1lLCBkZWZpbml0aW9uKSB7XG5cbiAgaWYgKHR5cGVvZiBtb2R1bGUgIT0gJ3VuZGVmaW5lZCcpIG1vZHVsZS5leHBvcnRzID0gZGVmaW5pdGlvbigpXG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JykgZGVmaW5lKGRlZmluaXRpb24pXG4gIGVsc2UgdGhpc1tuYW1lXSA9IGRlZmluaXRpb24oKVxuXG59KCdkb21yZWFkeScsIGZ1bmN0aW9uICgpIHtcblxuICB2YXIgZm5zID0gW10sIGxpc3RlbmVyXG4gICAgLCBkb2MgPSBkb2N1bWVudFxuICAgICwgaGFjayA9IGRvYy5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGxcbiAgICAsIGRvbUNvbnRlbnRMb2FkZWQgPSAnRE9NQ29udGVudExvYWRlZCdcbiAgICAsIGxvYWRlZCA9IChoYWNrID8gL15sb2FkZWR8XmMvIDogL15sb2FkZWR8Xml8XmMvKS50ZXN0KGRvYy5yZWFkeVN0YXRlKVxuXG5cbiAgaWYgKCFsb2FkZWQpXG4gIGRvYy5hZGRFdmVudExpc3RlbmVyKGRvbUNvbnRlbnRMb2FkZWQsIGxpc3RlbmVyID0gZnVuY3Rpb24gKCkge1xuICAgIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKGRvbUNvbnRlbnRMb2FkZWQsIGxpc3RlbmVyKVxuICAgIGxvYWRlZCA9IDFcbiAgICB3aGlsZSAobGlzdGVuZXIgPSBmbnMuc2hpZnQoKSkgbGlzdGVuZXIoKVxuICB9KVxuXG4gIHJldHVybiBmdW5jdGlvbiAoZm4pIHtcbiAgICBsb2FkZWQgPyBzZXRUaW1lb3V0KGZuLCAwKSA6IGZucy5wdXNoKGZuKVxuICB9XG5cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vLyA8MyBNb2Rlcm5penJcbi8vIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9Nb2Rlcm5penIvTW9kZXJuaXpyL21hc3Rlci9mZWF0dXJlLWRldGVjdHMvZG9tL2RhdGFzZXQuanNcblxuZnVuY3Rpb24gdXNlTmF0aXZlKCkge1xuXHR2YXIgZWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXHRlbGVtLnNldEF0dHJpYnV0ZSgnZGF0YS1hLWInLCAnYycpO1xuXG5cdHJldHVybiBCb29sZWFuKGVsZW0uZGF0YXNldCAmJiBlbGVtLmRhdGFzZXQuYUIgPT09ICdjJyk7XG59XG5cbmZ1bmN0aW9uIG5hdGl2ZURhdGFzZXQoZWxlbWVudCkge1xuXHRyZXR1cm4gZWxlbWVudC5kYXRhc2V0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHVzZU5hdGl2ZSgpID8gbmF0aXZlRGF0YXNldCA6IGZ1bmN0aW9uIChlbGVtZW50KSB7XG5cdHZhciBtYXAgPSB7fTtcblx0dmFyIGF0dHJpYnV0ZXMgPSBlbGVtZW50LmF0dHJpYnV0ZXM7XG5cblx0ZnVuY3Rpb24gZ2V0dGVyKCkge1xuXHRcdHJldHVybiB0aGlzLnZhbHVlO1xuXHR9XG5cblx0ZnVuY3Rpb24gc2V0dGVyKG5hbWUsIHZhbHVlKSB7XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG5cdFx0fVxuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDAsIGogPSBhdHRyaWJ1dGVzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuXHRcdHZhciBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzW2ldO1xuXG5cdFx0aWYgKGF0dHJpYnV0ZSkge1xuXHRcdFx0dmFyIG5hbWUgPSBhdHRyaWJ1dGUubmFtZTtcblxuXHRcdFx0aWYgKG5hbWUuaW5kZXhPZignZGF0YS0nKSA9PT0gMCkge1xuXHRcdFx0XHR2YXIgcHJvcCA9IG5hbWUuc2xpY2UoNSkucmVwbGFjZSgvLS4vZywgZnVuY3Rpb24gKHUpIHtcblx0XHRcdFx0XHRyZXR1cm4gdS5jaGFyQXQoMSkudG9VcHBlckNhc2UoKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dmFyIHZhbHVlID0gYXR0cmlidXRlLnZhbHVlO1xuXG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtYXAsIHByb3AsIHtcblx0XHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdGdldDogZ2V0dGVyLmJpbmQoeyB2YWx1ZTogdmFsdWUgfHwgJycgfSksXG5cdFx0XHRcdFx0c2V0OiBzZXR0ZXIuYmluZChlbGVtZW50LCBuYW1lKVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbWFwO1xufTtcblxuIiwiLy8gZWxlbWVudC1jbG9zZXN0IHwgQ0MwLTEuMCB8IGdpdGh1Yi5jb20vam9uYXRoYW50bmVhbC9jbG9zZXN0XG5cbihmdW5jdGlvbiAoRWxlbWVudFByb3RvKSB7XG5cdGlmICh0eXBlb2YgRWxlbWVudFByb3RvLm1hdGNoZXMgIT09ICdmdW5jdGlvbicpIHtcblx0XHRFbGVtZW50UHJvdG8ubWF0Y2hlcyA9IEVsZW1lbnRQcm90by5tc01hdGNoZXNTZWxlY3RvciB8fCBFbGVtZW50UHJvdG8ubW96TWF0Y2hlc1NlbGVjdG9yIHx8IEVsZW1lbnRQcm90by53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHwgZnVuY3Rpb24gbWF0Y2hlcyhzZWxlY3Rvcikge1xuXHRcdFx0dmFyIGVsZW1lbnQgPSB0aGlzO1xuXHRcdFx0dmFyIGVsZW1lbnRzID0gKGVsZW1lbnQuZG9jdW1lbnQgfHwgZWxlbWVudC5vd25lckRvY3VtZW50KS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcblx0XHRcdHZhciBpbmRleCA9IDA7XG5cblx0XHRcdHdoaWxlIChlbGVtZW50c1tpbmRleF0gJiYgZWxlbWVudHNbaW5kZXhdICE9PSBlbGVtZW50KSB7XG5cdFx0XHRcdCsraW5kZXg7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBCb29sZWFuKGVsZW1lbnRzW2luZGV4XSk7XG5cdFx0fTtcblx0fVxuXG5cdGlmICh0eXBlb2YgRWxlbWVudFByb3RvLmNsb3Nlc3QgIT09ICdmdW5jdGlvbicpIHtcblx0XHRFbGVtZW50UHJvdG8uY2xvc2VzdCA9IGZ1bmN0aW9uIGNsb3Nlc3Qoc2VsZWN0b3IpIHtcblx0XHRcdHZhciBlbGVtZW50ID0gdGhpcztcblxuXHRcdFx0d2hpbGUgKGVsZW1lbnQgJiYgZWxlbWVudC5ub2RlVHlwZSA9PT0gMSkge1xuXHRcdFx0XHRpZiAoZWxlbWVudC5tYXRjaGVzKHNlbGVjdG9yKSkge1xuXHRcdFx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fTtcblx0fVxufSkod2luZG93LkVsZW1lbnQucHJvdG90eXBlKTtcbiIsIi8qKlxuICogbG9kYXNoIChDdXN0b20gQnVpbGQpIDxodHRwczovL2xvZGFzaC5jb20vPlxuICogQnVpbGQ6IGBsb2Rhc2ggbW9kdWxhcml6ZSBleHBvcnRzPVwibnBtXCIgLW8gLi9gXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyA8aHR0cHM6Ly9qcXVlcnkub3JnLz5cbiAqIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT5cbiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+XG4gKiBDb3B5cmlnaHQgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbiAqL1xuXG4vKiogVXNlZCBhcyB0aGUgYFR5cGVFcnJvcmAgbWVzc2FnZSBmb3IgXCJGdW5jdGlvbnNcIiBtZXRob2RzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTkFOID0gMCAvIDA7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZS4gKi9cbnZhciByZVRyaW0gPSAvXlxccyt8XFxzKyQvZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGJhZCBzaWduZWQgaGV4YWRlY2ltYWwgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzQmFkSGV4ID0gL15bLStdMHhbMC05YS1mXSskL2k7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBiaW5hcnkgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzQmluYXJ5ID0gL14wYlswMV0rJC9pO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb2N0YWwgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzT2N0YWwgPSAvXjBvWzAtN10rJC9pO1xuXG4vKiogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgd2l0aG91dCBhIGRlcGVuZGVuY3kgb24gYHJvb3RgLiAqL1xudmFyIGZyZWVQYXJzZUludCA9IHBhcnNlSW50O1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBvYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXgsXG4gICAgbmF0aXZlTWluID0gTWF0aC5taW47XG5cbi8qKlxuICogR2V0cyB0aGUgdGltZXN0YW1wIG9mIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRoYXQgaGF2ZSBlbGFwc2VkIHNpbmNlXG4gKiB0aGUgVW5peCBlcG9jaCAoMSBKYW51YXJ5IDE5NzAgMDA6MDA6MDAgVVRDKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgRGF0ZVxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgdGltZXN0YW1wLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmRlZmVyKGZ1bmN0aW9uKHN0YW1wKSB7XG4gKiAgIGNvbnNvbGUubG9nKF8ubm93KCkgLSBzdGFtcCk7XG4gKiB9LCBfLm5vdygpKTtcbiAqIC8vID0+IExvZ3MgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaXQgdG9vayBmb3IgdGhlIGRlZmVycmVkIGludm9jYXRpb24uXG4gKi9cbnZhciBub3cgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHJvb3QuRGF0ZS5ub3coKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRlYm91bmNlZCBmdW5jdGlvbiB0aGF0IGRlbGF5cyBpbnZva2luZyBgZnVuY2AgdW50aWwgYWZ0ZXIgYHdhaXRgXG4gKiBtaWxsaXNlY29uZHMgaGF2ZSBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhlIGRlYm91bmNlZCBmdW5jdGlvbiB3YXNcbiAqIGludm9rZWQuIFRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gY29tZXMgd2l0aCBhIGBjYW5jZWxgIG1ldGhvZCB0byBjYW5jZWxcbiAqIGRlbGF5ZWQgYGZ1bmNgIGludm9jYXRpb25zIGFuZCBhIGBmbHVzaGAgbWV0aG9kIHRvIGltbWVkaWF0ZWx5IGludm9rZSB0aGVtLlxuICogUHJvdmlkZSBgb3B0aW9uc2AgdG8gaW5kaWNhdGUgd2hldGhlciBgZnVuY2Agc2hvdWxkIGJlIGludm9rZWQgb24gdGhlXG4gKiBsZWFkaW5nIGFuZC9vciB0cmFpbGluZyBlZGdlIG9mIHRoZSBgd2FpdGAgdGltZW91dC4gVGhlIGBmdW5jYCBpcyBpbnZva2VkXG4gKiB3aXRoIHRoZSBsYXN0IGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uLiBTdWJzZXF1ZW50XG4gKiBjYWxscyB0byB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0IGBmdW5jYFxuICogaW52b2NhdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogSWYgYGxlYWRpbmdgIGFuZCBgdHJhaWxpbmdgIG9wdGlvbnMgYXJlIGB0cnVlYCwgYGZ1bmNgIGlzXG4gKiBpbnZva2VkIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0IG9ubHkgaWYgdGhlIGRlYm91bmNlZCBmdW5jdGlvblxuICogaXMgaW52b2tlZCBtb3JlIHRoYW4gb25jZSBkdXJpbmcgdGhlIGB3YWl0YCB0aW1lb3V0LlxuICpcbiAqIElmIGB3YWl0YCBpcyBgMGAgYW5kIGBsZWFkaW5nYCBpcyBgZmFsc2VgLCBgZnVuY2AgaW52b2NhdGlvbiBpcyBkZWZlcnJlZFxuICogdW50aWwgdG8gdGhlIG5leHQgdGljaywgc2ltaWxhciB0byBgc2V0VGltZW91dGAgd2l0aCBhIHRpbWVvdXQgb2YgYDBgLlxuICpcbiAqIFNlZSBbRGF2aWQgQ29yYmFjaG8ncyBhcnRpY2xlXShodHRwczovL2Nzcy10cmlja3MuY29tL2RlYm91bmNpbmctdGhyb3R0bGluZy1leHBsYWluZWQtZXhhbXBsZXMvKVxuICogZm9yIGRldGFpbHMgb3ZlciB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBgXy5kZWJvdW5jZWAgYW5kIGBfLnRocm90dGxlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlYm91bmNlLlxuICogQHBhcmFtIHtudW1iZXJ9IFt3YWl0PTBdIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGRlbGF5LlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxlYWRpbmc9ZmFsc2VdXG4gKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgbGVhZGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heFdhaXRdXG4gKiAgVGhlIG1heGltdW0gdGltZSBgZnVuY2AgaXMgYWxsb3dlZCB0byBiZSBkZWxheWVkIGJlZm9yZSBpdCdzIGludm9rZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnRyYWlsaW5nPXRydWVdXG4gKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGRlYm91bmNlZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogLy8gQXZvaWQgY29zdGx5IGNhbGN1bGF0aW9ucyB3aGlsZSB0aGUgd2luZG93IHNpemUgaXMgaW4gZmx1eC5cbiAqIGpRdWVyeSh3aW5kb3cpLm9uKCdyZXNpemUnLCBfLmRlYm91bmNlKGNhbGN1bGF0ZUxheW91dCwgMTUwKSk7XG4gKlxuICogLy8gSW52b2tlIGBzZW5kTWFpbGAgd2hlbiBjbGlja2VkLCBkZWJvdW5jaW5nIHN1YnNlcXVlbnQgY2FsbHMuXG4gKiBqUXVlcnkoZWxlbWVudCkub24oJ2NsaWNrJywgXy5kZWJvdW5jZShzZW5kTWFpbCwgMzAwLCB7XG4gKiAgICdsZWFkaW5nJzogdHJ1ZSxcbiAqICAgJ3RyYWlsaW5nJzogZmFsc2VcbiAqIH0pKTtcbiAqXG4gKiAvLyBFbnN1cmUgYGJhdGNoTG9nYCBpcyBpbnZva2VkIG9uY2UgYWZ0ZXIgMSBzZWNvbmQgb2YgZGVib3VuY2VkIGNhbGxzLlxuICogdmFyIGRlYm91bmNlZCA9IF8uZGVib3VuY2UoYmF0Y2hMb2csIDI1MCwgeyAnbWF4V2FpdCc6IDEwMDAgfSk7XG4gKiB2YXIgc291cmNlID0gbmV3IEV2ZW50U291cmNlKCcvc3RyZWFtJyk7XG4gKiBqUXVlcnkoc291cmNlKS5vbignbWVzc2FnZScsIGRlYm91bmNlZCk7XG4gKlxuICogLy8gQ2FuY2VsIHRoZSB0cmFpbGluZyBkZWJvdW5jZWQgaW52b2NhdGlvbi5cbiAqIGpRdWVyeSh3aW5kb3cpLm9uKCdwb3BzdGF0ZScsIGRlYm91bmNlZC5jYW5jZWwpO1xuICovXG5mdW5jdGlvbiBkZWJvdW5jZShmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gIHZhciBsYXN0QXJncyxcbiAgICAgIGxhc3RUaGlzLFxuICAgICAgbWF4V2FpdCxcbiAgICAgIHJlc3VsdCxcbiAgICAgIHRpbWVySWQsXG4gICAgICBsYXN0Q2FsbFRpbWUsXG4gICAgICBsYXN0SW52b2tlVGltZSA9IDAsXG4gICAgICBsZWFkaW5nID0gZmFsc2UsXG4gICAgICBtYXhpbmcgPSBmYWxzZSxcbiAgICAgIHRyYWlsaW5nID0gdHJ1ZTtcblxuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICB3YWl0ID0gdG9OdW1iZXIod2FpdCkgfHwgMDtcbiAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgbGVhZGluZyA9ICEhb3B0aW9ucy5sZWFkaW5nO1xuICAgIG1heGluZyA9ICdtYXhXYWl0JyBpbiBvcHRpb25zO1xuICAgIG1heFdhaXQgPSBtYXhpbmcgPyBuYXRpdmVNYXgodG9OdW1iZXIob3B0aW9ucy5tYXhXYWl0KSB8fCAwLCB3YWl0KSA6IG1heFdhaXQ7XG4gICAgdHJhaWxpbmcgPSAndHJhaWxpbmcnIGluIG9wdGlvbnMgPyAhIW9wdGlvbnMudHJhaWxpbmcgOiB0cmFpbGluZztcbiAgfVxuXG4gIGZ1bmN0aW9uIGludm9rZUZ1bmModGltZSkge1xuICAgIHZhciBhcmdzID0gbGFzdEFyZ3MsXG4gICAgICAgIHRoaXNBcmcgPSBsYXN0VGhpcztcblxuICAgIGxhc3RBcmdzID0gbGFzdFRoaXMgPSB1bmRlZmluZWQ7XG4gICAgbGFzdEludm9rZVRpbWUgPSB0aW1lO1xuICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxlYWRpbmdFZGdlKHRpbWUpIHtcbiAgICAvLyBSZXNldCBhbnkgYG1heFdhaXRgIHRpbWVyLlxuICAgIGxhc3RJbnZva2VUaW1lID0gdGltZTtcbiAgICAvLyBTdGFydCB0aGUgdGltZXIgZm9yIHRoZSB0cmFpbGluZyBlZGdlLlxuICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgd2FpdCk7XG4gICAgLy8gSW52b2tlIHRoZSBsZWFkaW5nIGVkZ2UuXG4gICAgcmV0dXJuIGxlYWRpbmcgPyBpbnZva2VGdW5jKHRpbWUpIDogcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gcmVtYWluaW5nV2FpdCh0aW1lKSB7XG4gICAgdmFyIHRpbWVTaW5jZUxhc3RDYWxsID0gdGltZSAtIGxhc3RDYWxsVGltZSxcbiAgICAgICAgdGltZVNpbmNlTGFzdEludm9rZSA9IHRpbWUgLSBsYXN0SW52b2tlVGltZSxcbiAgICAgICAgcmVzdWx0ID0gd2FpdCAtIHRpbWVTaW5jZUxhc3RDYWxsO1xuXG4gICAgcmV0dXJuIG1heGluZyA/IG5hdGl2ZU1pbihyZXN1bHQsIG1heFdhaXQgLSB0aW1lU2luY2VMYXN0SW52b2tlKSA6IHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNob3VsZEludm9rZSh0aW1lKSB7XG4gICAgdmFyIHRpbWVTaW5jZUxhc3RDYWxsID0gdGltZSAtIGxhc3RDYWxsVGltZSxcbiAgICAgICAgdGltZVNpbmNlTGFzdEludm9rZSA9IHRpbWUgLSBsYXN0SW52b2tlVGltZTtcblxuICAgIC8vIEVpdGhlciB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsLCBhY3Rpdml0eSBoYXMgc3RvcHBlZCBhbmQgd2UncmUgYXQgdGhlXG4gICAgLy8gdHJhaWxpbmcgZWRnZSwgdGhlIHN5c3RlbSB0aW1lIGhhcyBnb25lIGJhY2t3YXJkcyBhbmQgd2UncmUgdHJlYXRpbmdcbiAgICAvLyBpdCBhcyB0aGUgdHJhaWxpbmcgZWRnZSwgb3Igd2UndmUgaGl0IHRoZSBgbWF4V2FpdGAgbGltaXQuXG4gICAgcmV0dXJuIChsYXN0Q2FsbFRpbWUgPT09IHVuZGVmaW5lZCB8fCAodGltZVNpbmNlTGFzdENhbGwgPj0gd2FpdCkgfHxcbiAgICAgICh0aW1lU2luY2VMYXN0Q2FsbCA8IDApIHx8IChtYXhpbmcgJiYgdGltZVNpbmNlTGFzdEludm9rZSA+PSBtYXhXYWl0KSk7XG4gIH1cblxuICBmdW5jdGlvbiB0aW1lckV4cGlyZWQoKSB7XG4gICAgdmFyIHRpbWUgPSBub3coKTtcbiAgICBpZiAoc2hvdWxkSW52b2tlKHRpbWUpKSB7XG4gICAgICByZXR1cm4gdHJhaWxpbmdFZGdlKHRpbWUpO1xuICAgIH1cbiAgICAvLyBSZXN0YXJ0IHRoZSB0aW1lci5cbiAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHJlbWFpbmluZ1dhaXQodGltZSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhaWxpbmdFZGdlKHRpbWUpIHtcbiAgICB0aW1lcklkID0gdW5kZWZpbmVkO1xuXG4gICAgLy8gT25seSBpbnZva2UgaWYgd2UgaGF2ZSBgbGFzdEFyZ3NgIHdoaWNoIG1lYW5zIGBmdW5jYCBoYXMgYmVlblxuICAgIC8vIGRlYm91bmNlZCBhdCBsZWFzdCBvbmNlLlxuICAgIGlmICh0cmFpbGluZyAmJiBsYXN0QXJncykge1xuICAgICAgcmV0dXJuIGludm9rZUZ1bmModGltZSk7XG4gICAgfVxuICAgIGxhc3RBcmdzID0gbGFzdFRoaXMgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICBpZiAodGltZXJJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXJJZCk7XG4gICAgfVxuICAgIGxhc3RJbnZva2VUaW1lID0gMDtcbiAgICBsYXN0QXJncyA9IGxhc3RDYWxsVGltZSA9IGxhc3RUaGlzID0gdGltZXJJZCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIHJldHVybiB0aW1lcklkID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiB0cmFpbGluZ0VkZ2Uobm93KCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVib3VuY2VkKCkge1xuICAgIHZhciB0aW1lID0gbm93KCksXG4gICAgICAgIGlzSW52b2tpbmcgPSBzaG91bGRJbnZva2UodGltZSk7XG5cbiAgICBsYXN0QXJncyA9IGFyZ3VtZW50cztcbiAgICBsYXN0VGhpcyA9IHRoaXM7XG4gICAgbGFzdENhbGxUaW1lID0gdGltZTtcblxuICAgIGlmIChpc0ludm9raW5nKSB7XG4gICAgICBpZiAodGltZXJJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBsZWFkaW5nRWRnZShsYXN0Q2FsbFRpbWUpO1xuICAgICAgfVxuICAgICAgaWYgKG1heGluZykge1xuICAgICAgICAvLyBIYW5kbGUgaW52b2NhdGlvbnMgaW4gYSB0aWdodCBsb29wLlxuICAgICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgICAgICByZXR1cm4gaW52b2tlRnVuYyhsYXN0Q2FsbFRpbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGltZXJJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGRlYm91bmNlZC5jYW5jZWwgPSBjYW5jZWw7XG4gIGRlYm91bmNlZC5mbHVzaCA9IGZsdXNoO1xuICByZXR1cm4gZGVib3VuY2VkO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuICEhdmFsdWUgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzeW1ib2wsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIG9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpID09IHN5bWJvbFRhZyk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIG51bWJlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIG51bWJlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b051bWJlcigzLjIpO1xuICogLy8gPT4gMy4yXG4gKlxuICogXy50b051bWJlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDVlLTMyNFxuICpcbiAqIF8udG9OdW1iZXIoSW5maW5pdHkpO1xuICogLy8gPT4gSW5maW5pdHlcbiAqXG4gKiBfLnRvTnVtYmVyKCczLjInKTtcbiAqIC8vID0+IDMuMlxuICovXG5mdW5jdGlvbiB0b051bWJlcih2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gTkFOO1xuICB9XG4gIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICB2YXIgb3RoZXIgPSB0eXBlb2YgdmFsdWUudmFsdWVPZiA9PSAnZnVuY3Rpb24nID8gdmFsdWUudmFsdWVPZigpIDogdmFsdWU7XG4gICAgdmFsdWUgPSBpc09iamVjdChvdGhlcikgPyAob3RoZXIgKyAnJykgOiBvdGhlcjtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiArdmFsdWU7XG4gIH1cbiAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKHJlVHJpbSwgJycpO1xuICB2YXIgaXNCaW5hcnkgPSByZUlzQmluYXJ5LnRlc3QodmFsdWUpO1xuICByZXR1cm4gKGlzQmluYXJ5IHx8IHJlSXNPY3RhbC50ZXN0KHZhbHVlKSlcbiAgICA/IGZyZWVQYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgaXNCaW5hcnkgPyAyIDogOClcbiAgICA6IChyZUlzQmFkSGV4LnRlc3QodmFsdWUpID8gTkFOIDogK3ZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkZWJvdW5jZTtcbiIsIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCJjb25zdCBhc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5jb25zdCBkZWxlZ2F0ZSA9IHJlcXVpcmUoJy4uL2RlbGVnYXRlJyk7XG5jb25zdCBkZWxlZ2F0ZUFsbCA9IHJlcXVpcmUoJy4uL2RlbGVnYXRlQWxsJyk7XG5cbmNvbnN0IERFTEVHQVRFX1BBVFRFUk4gPSAvXiguKyk6ZGVsZWdhdGVcXCgoLispXFwpJC87XG5jb25zdCBTUEFDRSA9ICcgJztcblxuY29uc3QgZ2V0TGlzdGVuZXJzID0gZnVuY3Rpb24odHlwZSwgaGFuZGxlcikge1xuICB2YXIgbWF0Y2ggPSB0eXBlLm1hdGNoKERFTEVHQVRFX1BBVFRFUk4pO1xuICB2YXIgc2VsZWN0b3I7XG4gIGlmIChtYXRjaCkge1xuICAgIHR5cGUgPSBtYXRjaFsxXTtcbiAgICBzZWxlY3RvciA9IG1hdGNoWzJdO1xuICB9XG5cbiAgdmFyIG9wdGlvbnM7XG4gIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gJ29iamVjdCcpIHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgY2FwdHVyZTogcG9wS2V5KGhhbmRsZXIsICdjYXB0dXJlJyksXG4gICAgICBwYXNzaXZlOiBwb3BLZXkoaGFuZGxlciwgJ3Bhc3NpdmUnKVxuICAgIH07XG4gIH1cblxuICB2YXIgbGlzdGVuZXIgPSB7XG4gICAgc2VsZWN0b3I6IHNlbGVjdG9yLFxuICAgIGRlbGVnYXRlOiAodHlwZW9mIGhhbmRsZXIgPT09ICdvYmplY3QnKVxuICAgICAgPyBkZWxlZ2F0ZUFsbChoYW5kbGVyKVxuICAgICAgOiBzZWxlY3RvclxuICAgICAgICA/IGRlbGVnYXRlKHNlbGVjdG9yLCBoYW5kbGVyKVxuICAgICAgICA6IGhhbmRsZXIsXG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9O1xuXG4gIGlmICh0eXBlLmluZGV4T2YoU1BBQ0UpID4gLTEpIHtcbiAgICByZXR1cm4gdHlwZS5zcGxpdChTUEFDRSkubWFwKGZ1bmN0aW9uKF90eXBlKSB7XG4gICAgICByZXR1cm4gYXNzaWduKHt0eXBlOiBfdHlwZX0sIGxpc3RlbmVyKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBsaXN0ZW5lci50eXBlID0gdHlwZTtcbiAgICByZXR1cm4gW2xpc3RlbmVyXTtcbiAgfVxufTtcblxudmFyIHBvcEtleSA9IGZ1bmN0aW9uKG9iaiwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IG9ialtrZXldO1xuICBkZWxldGUgb2JqW2tleV07XG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmVoYXZpb3IoZXZlbnRzLCBwcm9wcykge1xuICBjb25zdCBsaXN0ZW5lcnMgPSBPYmplY3Qua2V5cyhldmVudHMpXG4gICAgLnJlZHVjZShmdW5jdGlvbihtZW1vLCB0eXBlKSB7XG4gICAgICB2YXIgbGlzdGVuZXJzID0gZ2V0TGlzdGVuZXJzKHR5cGUsIGV2ZW50c1t0eXBlXSk7XG4gICAgICByZXR1cm4gbWVtby5jb25jYXQobGlzdGVuZXJzKTtcbiAgICB9LCBbXSk7XG5cbiAgcmV0dXJuIGFzc2lnbih7XG4gICAgYWRkOiBmdW5jdGlvbiBhZGRCZWhhdmlvcihlbGVtZW50KSB7XG4gICAgICBsaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgbGlzdGVuZXIudHlwZSxcbiAgICAgICAgICBsaXN0ZW5lci5kZWxlZ2F0ZSxcbiAgICAgICAgICBsaXN0ZW5lci5vcHRpb25zXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlQmVoYXZpb3IoZWxlbWVudCkge1xuICAgICAgbGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgICAgIGxpc3RlbmVyLnR5cGUsXG4gICAgICAgICAgbGlzdGVuZXIuZGVsZWdhdGUsXG4gICAgICAgICAgbGlzdGVuZXIub3B0aW9uc1xuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCBwcm9wcyk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjb21wb3NlKGZ1bmN0aW9ucykge1xuICByZXR1cm4gZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiBmdW5jdGlvbnMuc29tZShmdW5jdGlvbihmbikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhpcywgZSkgPT09IGZhbHNlO1xuICAgIH0sIHRoaXMpO1xuICB9O1xufTtcbiIsIi8vIHBvbHlmaWxsIEVsZW1lbnQucHJvdG90eXBlLmNsb3Nlc3RcbnJlcXVpcmUoJ2VsZW1lbnQtY2xvc2VzdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlbGVnYXRlKHNlbGVjdG9yLCBmbikge1xuICByZXR1cm4gZnVuY3Rpb24gZGVsZWdhdGlvbihldmVudCkge1xuICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQuY2xvc2VzdChzZWxlY3Rvcik7XG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGFyZ2V0LCBldmVudCk7XG4gICAgfVxuICB9XG59O1xuIiwiY29uc3QgZGVsZWdhdGUgPSByZXF1aXJlKCcuLi9kZWxlZ2F0ZScpO1xuY29uc3QgY29tcG9zZSA9IHJlcXVpcmUoJy4uL2NvbXBvc2UnKTtcblxuY29uc3QgU1BMQVQgPSAnKic7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVsZWdhdGVBbGwoc2VsZWN0b3JzKSB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzZWxlY3RvcnMpXG5cbiAgLy8gWFhYIG9wdGltaXphdGlvbjogaWYgdGhlcmUgaXMgb25seSBvbmUgaGFuZGxlciBhbmQgaXQgYXBwbGllcyB0b1xuICAvLyBhbGwgZWxlbWVudHMgKHRoZSBcIipcIiBDU1Mgc2VsZWN0b3IpLCB0aGVuIGp1c3QgcmV0dXJuIHRoYXRcbiAgLy8gaGFuZGxlclxuICBpZiAoa2V5cy5sZW5ndGggPT09IDEgJiYga2V5c1swXSA9PT0gU1BMQVQpIHtcbiAgICByZXR1cm4gc2VsZWN0b3JzW1NQTEFUXTtcbiAgfVxuXG4gIGNvbnN0IGRlbGVnYXRlcyA9IGtleXMucmVkdWNlKGZ1bmN0aW9uKG1lbW8sIHNlbGVjdG9yKSB7XG4gICAgbWVtby5wdXNoKGRlbGVnYXRlKHNlbGVjdG9yLCBzZWxlY3RvcnNbc2VsZWN0b3JdKSk7XG4gICAgcmV0dXJuIG1lbW87XG4gIH0sIFtdKTtcbiAgcmV0dXJuIGNvbXBvc2UoZGVsZWdhdGVzKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlnbm9yZShlbGVtZW50LCBmbikge1xuICByZXR1cm4gZnVuY3Rpb24gaWdub3JhbmNlKGUpIHtcbiAgICBpZiAoZWxlbWVudCAhPT0gZS50YXJnZXQgJiYgIWVsZW1lbnQuY29udGFpbnMoZS50YXJnZXQpKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGlzLCBlKTtcbiAgICB9XG4gIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBvbmNlKGxpc3RlbmVyLCBvcHRpb25zKSB7XG4gIHZhciB3cmFwcGVkID0gZnVuY3Rpb24gd3JhcHBlZE9uY2UoZSkge1xuICAgIGUuY3VycmVudFRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKGUudHlwZSwgd3JhcHBlZCwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGxpc3RlbmVyLmNhbGwodGhpcywgZSk7XG4gIH07XG4gIHJldHVybiB3cmFwcGVkO1xufTtcblxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgUkVfVFJJTSA9IC8oXlxccyspfChcXHMrJCkvZztcbnZhciBSRV9TUExJVCA9IC9cXHMrLztcblxudmFyIHRyaW0gPSBTdHJpbmcucHJvdG90eXBlLnRyaW1cbiAgPyBmdW5jdGlvbihzdHIpIHsgcmV0dXJuIHN0ci50cmltKCk7IH1cbiAgOiBmdW5jdGlvbihzdHIpIHsgcmV0dXJuIHN0ci5yZXBsYWNlKFJFX1RSSU0sICcnKTsgfTtcblxudmFyIHF1ZXJ5QnlJZCA9IGZ1bmN0aW9uKGlkKSB7XG4gIHJldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ1tpZD1cIicgKyBpZC5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJykgKyAnXCJdJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlc29sdmVJZHMoaWRzLCBkb2MpIHtcbiAgaWYgKHR5cGVvZiBpZHMgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBhIHN0cmluZyBidXQgZ290ICcgKyAodHlwZW9mIGlkcykpO1xuICB9XG5cbiAgaWYgKCFkb2MpIHtcbiAgICBkb2MgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIH1cblxuICB2YXIgZ2V0RWxlbWVudEJ5SWQgPSBkb2MuZ2V0RWxlbWVudEJ5SWRcbiAgICA/IGRvYy5nZXRFbGVtZW50QnlJZC5iaW5kKGRvYylcbiAgICA6IHF1ZXJ5QnlJZC5iaW5kKGRvYyk7XG5cbiAgaWRzID0gdHJpbShpZHMpLnNwbGl0KFJFX1NQTElUKTtcblxuICAvLyBYWFggd2UgY2FuIHNob3J0LWNpcmN1aXQgaGVyZSBiZWNhdXNlIHRyaW1taW5nIGFuZCBzcGxpdHRpbmcgYVxuICAvLyBzdHJpbmcgb2YganVzdCB3aGl0ZXNwYWNlIHByb2R1Y2VzIGFuIGFycmF5IGNvbnRhaW5pbmcgYSBzaW5nbGUsXG4gIC8vIGVtcHR5IHN0cmluZ1xuICBpZiAoaWRzLmxlbmd0aCA9PT0gMSAmJiBpZHNbMF0gPT09ICcnKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcmV0dXJuIGlkc1xuICAgIC5tYXAoZnVuY3Rpb24oaWQpIHtcbiAgICAgIHZhciBlbCA9IGdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICAgIGlmICghZWwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyBlbGVtZW50IHdpdGggaWQ6IFwiJyArIGlkICsgJ1wiJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZWw7XG4gICAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuY29uc3QgYmVoYXZpb3IgPSByZXF1aXJlKCcuLi91dGlscy9iZWhhdmlvcicpO1xuY29uc3QgZmlsdGVyID0gcmVxdWlyZSgnYXJyYXktZmlsdGVyJyk7XG5jb25zdCBmb3JFYWNoID0gcmVxdWlyZSgnYXJyYXktZm9yZWFjaCcpO1xuY29uc3QgdG9nZ2xlID0gcmVxdWlyZSgnLi4vdXRpbHMvdG9nZ2xlJyk7XG5cbmNvbnN0IENMSUNLID0gcmVxdWlyZSgnLi4vZXZlbnRzJykuQ0xJQ0s7XG5jb25zdCBQUkVGSVggPSByZXF1aXJlKCcuLi9jb25maWcnKS5wcmVmaXg7XG5cbi8vIFhYWCBtYXRjaCAudXNhLWFjY29yZGlvbiBhbmQgLnVzYS1hY2NvcmRpb24tYm9yZGVyZWRcbmNvbnN0IEFDQ09SRElPTiA9IGAuJHtQUkVGSVh9LWFjY29yZGlvbiwgLiR7UFJFRklYfS1hY2NvcmRpb24tYm9yZGVyZWRgO1xuY29uc3QgQlVUVE9OID0gYC4ke1BSRUZJWH0tYWNjb3JkaW9uLWJ1dHRvblthcmlhLWNvbnRyb2xzXWA7XG5jb25zdCBFWFBBTkRFRCA9ICdhcmlhLWV4cGFuZGVkJztcbmNvbnN0IE1VTFRJU0VMRUNUQUJMRSA9ICdhcmlhLW11bHRpc2VsZWN0YWJsZSc7XG5cbi8qKlxuICogVG9nZ2xlIGEgYnV0dG9uJ3MgXCJwcmVzc2VkXCIgc3RhdGUsIG9wdGlvbmFsbHkgcHJvdmlkaW5nIGEgdGFyZ2V0XG4gKiBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0hUTUxCdXR0b25FbGVtZW50fSBidXR0b25cbiAqIEBwYXJhbSB7Ym9vbGVhbj99IGV4cGFuZGVkIElmIG5vIHN0YXRlIGlzIHByb3ZpZGVkLCB0aGUgY3VycmVudFxuICogc3RhdGUgd2lsbCBiZSB0b2dnbGVkIChmcm9tIGZhbHNlIHRvIHRydWUsIGFuZCB2aWNlLXZlcnNhKS5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRoZSByZXN1bHRpbmcgc3RhdGVcbiAqL1xuY29uc3QgdG9nZ2xlQnV0dG9uID0gKGJ1dHRvbiwgZXhwYW5kZWQpID0+IHtcbiAgdmFyIGFjY29yZGlvbiA9IGJ1dHRvbi5jbG9zZXN0KEFDQ09SRElPTik7XG4gIGlmICghYWNjb3JkaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke0JVVFRPTn0gaXMgbWlzc2luZyBvdXRlciAke0FDQ09SRElPTn1gKTtcbiAgfVxuXG4gIGV4cGFuZGVkID0gdG9nZ2xlKGJ1dHRvbiwgZXhwYW5kZWQpO1xuICAvLyBYWFggbXVsdGlzZWxlY3RhYmxlIGlzIG9wdC1pbiwgdG8gcHJlc2VydmUgbGVnYWN5IGJlaGF2aW9yXG4gIGNvbnN0IG11bHRpc2VsZWN0YWJsZSA9IGFjY29yZGlvbi5nZXRBdHRyaWJ1dGUoTVVMVElTRUxFQ1RBQkxFKSA9PT0gJ3RydWUnO1xuXG4gIGlmIChleHBhbmRlZCAmJiAhbXVsdGlzZWxlY3RhYmxlKSB7XG4gICAgZm9yRWFjaChnZXRBY2NvcmRpb25CdXR0b25zKGFjY29yZGlvbiksIG90aGVyID0+IHtcbiAgICAgIGlmIChvdGhlciAhPT0gYnV0dG9uKSB7XG4gICAgICAgIHRvZ2dsZShvdGhlciwgZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7SFRNTEJ1dHRvbkVsZW1lbnR9IGJ1dHRvblxuICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZVxuICovXG5jb25zdCBzaG93QnV0dG9uID0gYnV0dG9uID0+IHRvZ2dsZUJ1dHRvbihidXR0b24sIHRydWUpO1xuXG4vKipcbiAqIEBwYXJhbSB7SFRNTEJ1dHRvbkVsZW1lbnR9IGJ1dHRvblxuICogQHJldHVybiB7Ym9vbGVhbn0gZmFsc2VcbiAqL1xuY29uc3QgaGlkZUJ1dHRvbiA9IGJ1dHRvbiA9PiB0b2dnbGVCdXR0b24oYnV0dG9uLCBmYWxzZSk7XG5cbi8qKlxuICogR2V0IGFuIEFycmF5IG9mIGJ1dHRvbiBlbGVtZW50cyBiZWxvbmdpbmcgZGlyZWN0bHkgdG8gdGhlIGdpdmVuXG4gKiBhY2NvcmRpb24gZWxlbWVudC5cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGFjY29yZGlvblxuICogQHJldHVybiB7YXJyYXk8SFRNTEJ1dHRvbkVsZW1lbnQ+fVxuICovXG5jb25zdCBnZXRBY2NvcmRpb25CdXR0b25zID0gYWNjb3JkaW9uID0+IHtcbiAgcmV0dXJuIGZpbHRlcihhY2NvcmRpb24ucXVlcnlTZWxlY3RvckFsbChCVVRUT04pLCBidXR0b24gPT4ge1xuICAgIHJldHVybiBidXR0b24uY2xvc2VzdChBQ0NPUkRJT04pID09PSBhY2NvcmRpb247XG4gIH0pO1xufTtcblxuY29uc3QgYWNjb3JkaW9uID0gYmVoYXZpb3Ioe1xuICBbIENMSUNLIF06IHtcbiAgICBbIEJVVFRPTiBdOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gdG9nZ2xlQnV0dG9uKHRoaXMpO1xuICAgIH0sXG4gIH0sXG59LCB7XG4gIGluaXQ6IHJvb3QgPT4ge1xuICAgIGZvckVhY2gocm9vdC5xdWVyeVNlbGVjdG9yQWxsKEJVVFRPTiksIGJ1dHRvbiA9PiB7XG4gICAgICBjb25zdCBleHBhbmRlZCA9IGJ1dHRvbi5nZXRBdHRyaWJ1dGUoRVhQQU5ERUQpID09PSAndHJ1ZSc7XG4gICAgICB0b2dnbGVCdXR0b24oYnV0dG9uLCBleHBhbmRlZCk7XG4gICAgfSk7XG4gIH0sXG4gIEFDQ09SRElPTixcbiAgQlVUVE9OLFxuICBzaG93OiBzaG93QnV0dG9uLFxuICBoaWRlOiBoaWRlQnV0dG9uLFxuICB0b2dnbGU6IHRvZ2dsZUJ1dHRvbixcbiAgZ2V0QnV0dG9uczogZ2V0QWNjb3JkaW9uQnV0dG9ucyxcbn0pO1xuXG4vKipcbiAqIFRPRE86IGZvciAyLjAsIHJlbW92ZSBldmVyeXRoaW5nIGJlbG93IHRoaXMgY29tbWVudCBhbmQgZXhwb3J0IHRoZVxuICogYmVoYXZpb3IgZGlyZWN0bHk6XG4gKlxuICogbW9kdWxlLmV4cG9ydHMgPSBiZWhhdmlvcih7Li4ufSk7XG4gKi9cbmNvbnN0IEFjY29yZGlvbiA9IGZ1bmN0aW9uIChyb290KSB7XG4gIHRoaXMucm9vdCA9IHJvb3Q7XG4gIGFjY29yZGlvbi5vbih0aGlzLnJvb3QpO1xufTtcblxuLy8gY29weSBhbGwgb2YgdGhlIGJlaGF2aW9yIG1ldGhvZHMgYW5kIHByb3BzIHRvIEFjY29yZGlvblxuY29uc3QgYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuYXNzaWduKEFjY29yZGlvbiwgYWNjb3JkaW9uKTtcblxuQWNjb3JkaW9uLnByb3RvdHlwZS5zaG93ID0gc2hvd0J1dHRvbjtcbkFjY29yZGlvbi5wcm90b3R5cGUuaGlkZSA9IGhpZGVCdXR0b247XG5cbkFjY29yZGlvbi5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuICBhY2NvcmRpb24ub2ZmKHRoaXMucm9vdCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFjY29yZGlvbjtcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IGJlaGF2aW9yID0gcmVxdWlyZSgnLi4vdXRpbHMvYmVoYXZpb3InKTtcbmNvbnN0IHRvZ2dsZSA9IHJlcXVpcmUoJy4uL3V0aWxzL3RvZ2dsZScpO1xuXG5jb25zdCBDTElDSyA9IHJlcXVpcmUoJy4uL2V2ZW50cycpLkNMSUNLO1xuY29uc3QgUFJFRklYID0gcmVxdWlyZSgnLi4vY29uZmlnJykucHJlZml4O1xuXG5jb25zdCBIRUFERVIgPSBgLiR7UFJFRklYfS1iYW5uZXItaGVhZGVyYDtcbmNvbnN0IEVYUEFOREVEX0NMQVNTID0gYCR7UFJFRklYfS1iYW5uZXItaGVhZGVyLWV4cGFuZGVkYDtcblxuY29uc3QgdG9nZ2xlQmFubmVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIHRoaXMuY2xvc2VzdChIRUFERVIpLmNsYXNzTGlzdC50b2dnbGUoRVhQQU5ERURfQ0xBU1MpO1xuICByZXR1cm4gZmFsc2U7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJlaGF2aW9yKHtcbiAgWyBDTElDSyBdOiB7XG4gICAgWyBgJHtIRUFERVJ9IFthcmlhLWNvbnRyb2xzXWAgXTogdG9nZ2xlQmFubmVyLFxuICB9LFxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5jb25zdCBhY2NvcmRpb24gPSByZXF1aXJlKCcuL2FjY29yZGlvbicpO1xuY29uc3QgYmVoYXZpb3IgPSByZXF1aXJlKCcuLi91dGlscy9iZWhhdmlvcicpO1xuY29uc3QgZGVib3VuY2UgPSByZXF1aXJlKCdsb2Rhc2guZGVib3VuY2UnKTtcbmNvbnN0IGZvckVhY2ggPSByZXF1aXJlKCdhcnJheS1mb3JlYWNoJyk7XG5jb25zdCBzZWxlY3QgPSByZXF1aXJlKCcuLi91dGlscy9zZWxlY3QnKTtcblxuY29uc3QgQ0xJQ0sgPSByZXF1aXJlKCcuLi9ldmVudHMnKS5DTElDSztcbmNvbnN0IFBSRUZJWCA9IHJlcXVpcmUoJy4uL2NvbmZpZycpLnByZWZpeDtcblxuY29uc3QgSElEREVOID0gJ2hpZGRlbic7XG5jb25zdCBTQ09QRSA9IGAuJHtQUkVGSVh9LWZvb3Rlci1iaWdgO1xuY29uc3QgTkFWID0gYCR7U0NPUEV9IG5hdmA7XG5jb25zdCBCVVRUT04gPSBgJHtOQVZ9IC4ke1BSRUZJWH0tZm9vdGVyLXByaW1hcnktbGlua2A7XG5jb25zdCBMSVNUID0gYCR7TkFWfSB1bGA7XG5cbmNvbnN0IEhJREVfTUFYX1dJRFRIID0gNjAwO1xuY29uc3QgREVCT1VOQ0VfUkFURSA9IDE4MDtcblxuY29uc3Qgc2hvd1BhbmVsID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCBsaXN0ID0gdGhpcy5jbG9zZXN0KExJU1QpO1xuICBsaXN0LmNsYXNzTGlzdC5yZW1vdmUoSElEREVOKTtcblxuICAvLyBOQjogdGhpcyAqc2hvdWxkKiBhbHdheXMgc3VjY2VlZCBiZWNhdXNlIHRoZSBidXR0b25cbiAgLy8gc2VsZWN0b3IgaXMgc2NvcGVkIHRvIFwiLntwcmVmaXh9LWZvb3Rlci1iaWcgbmF2XCJcbiAgY29uc3QgbGlzdHMgPSBsaXN0LmNsb3Nlc3QoTkFWKVxuICAgIC5xdWVyeVNlbGVjdG9yQWxsKCd1bCcpO1xuXG4gIGZvckVhY2gobGlzdHMsIGVsID0+IHtcbiAgICBpZiAoZWwgIT09IGxpc3QpIHtcbiAgICAgIGVsLmNsYXNzTGlzdC5hZGQoSElEREVOKTtcbiAgICB9XG4gIH0pO1xufTtcblxuY29uc3QgcmVzaXplID0gZGVib3VuY2UoKCkgPT4ge1xuICBjb25zdCBoaWRkZW4gPSB3aW5kb3cuaW5uZXJXaWR0aCA8IEhJREVfTUFYX1dJRFRIO1xuICBmb3JFYWNoKHNlbGVjdChMSVNUKSwgbGlzdCA9PiB7XG4gICAgbGlzdC5jbGFzc0xpc3QudG9nZ2xlKEhJRERFTiwgaGlkZGVuKTtcbiAgfSk7XG59LCBERUJPVU5DRV9SQVRFKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiZWhhdmlvcih7XG4gIFsgQ0xJQ0sgXToge1xuICAgIFsgQlVUVE9OIF06IHNob3dQYW5lbCxcbiAgfSxcbn0sIHtcbiAgLy8gZXhwb3J0IGZvciB1c2UgZWxzZXdoZXJlXG4gIEhJREVfTUFYX1dJRFRILFxuICBERUJPVU5DRV9SQVRFLFxuXG4gIGluaXQ6IHRhcmdldCA9PiB7XG4gICAgcmVzaXplKCk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHJlc2l6ZSk7XG4gIH0sXG5cbiAgdGVhcmRvd246IHRhcmdldCA9PiB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHJlc2l6ZSk7XG4gIH0sXG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuICBhY2NvcmRpb246ICByZXF1aXJlKCcuL2FjY29yZGlvbicpLFxuICBiYW5uZXI6ICAgICByZXF1aXJlKCcuL2Jhbm5lcicpLFxuICBmb290ZXI6ICAgICByZXF1aXJlKCcuL2Zvb3RlcicpLFxuICBuYXZpZ2F0aW9uOiByZXF1aXJlKCcuL25hdmlnYXRpb24nKSxcbiAgcGFzc3dvcmQ6ICAgcmVxdWlyZSgnLi9wYXNzd29yZCcpLFxuICBzZWFyY2g6ICAgICByZXF1aXJlKCcuL3NlYXJjaCcpLFxuICBza2lwbmF2OiAgICByZXF1aXJlKCcuL3NraXBuYXYnKSxcbn07XG5cbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0IGJlaGF2aW9yID0gcmVxdWlyZSgnLi4vdXRpbHMvYmVoYXZpb3InKTtcbmNvbnN0IGZvckVhY2ggPSByZXF1aXJlKCdhcnJheS1mb3JlYWNoJyk7XG5jb25zdCBzZWxlY3QgPSByZXF1aXJlKCcuLi91dGlscy9zZWxlY3QnKTtcblxuY29uc3QgQ0xJQ0sgPSByZXF1aXJlKCcuLi9ldmVudHMnKS5DTElDSztcbmNvbnN0IFBSRUZJWCA9IHJlcXVpcmUoJy4uL2NvbmZpZycpLnByZWZpeDtcblxuY29uc3QgQ09OVEVYVCA9ICdoZWFkZXInO1xuY29uc3QgTkFWID0gYC4ke1BSRUZJWH0tbmF2YDtcbmNvbnN0IE9QRU5FUlMgPSBgLiR7UFJFRklYfS1tZW51LWJ0bmA7XG5jb25zdCBDTE9TRV9CVVRUT04gPSBgLiR7UFJFRklYfS1uYXYtY2xvc2VgO1xuY29uc3QgT1ZFUkxBWSA9IGAuJHtQUkVGSVh9LW92ZXJsYXlgO1xuY29uc3QgQ0xPU0VSUyA9IGAke0NMT1NFX0JVVFRPTn0sIC4ke1BSRUZJWH0tb3ZlcmxheWA7XG5jb25zdCBUT0dHTEVTID0gWyBOQVYsIE9WRVJMQVkgXS5qb2luKCcsICcpO1xuXG5jb25zdCBBQ1RJVkVfQ0xBU1MgPSAndXNhLW1vYmlsZV9uYXYtYWN0aXZlJztcbmNvbnN0IFZJU0lCTEVfQ0xBU1MgPSAnaXMtdmlzaWJsZSc7XG5cbmNvbnN0IHRvZ2dsZU5hdiA9IGZ1bmN0aW9uIChhY3RpdmUpIHtcbiAgY29uc3QgYm9keSA9IGRvY3VtZW50LmJvZHk7XG4gIGlmICh0eXBlb2YgYWN0aXZlICE9PSAnYm9vbGVhbicpIHtcbiAgICBhY3RpdmUgPSAhYm9keS5jbGFzc0xpc3QuY29udGFpbnMoQUNUSVZFX0NMQVNTKTtcbiAgfVxuICBib2R5LmNsYXNzTGlzdC50b2dnbGUoQUNUSVZFX0NMQVNTLCBhY3RpdmUpO1xuXG4gIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNsb3Nlc3QoQ09OVEVYVCk7XG4gIGZvckVhY2goc2VsZWN0KFRPR0dMRVMpLCBlbCA9PiB7XG4gICAgZWwuY2xhc3NMaXN0LnRvZ2dsZShWSVNJQkxFX0NMQVNTKTtcbiAgfSk7XG5cbiAgaWYgKGFjdGl2ZSAmJiBjb250ZXh0KSB7XG4gICAgY29uc3QgY2xvc2VCdXR0b24gPSBjb250ZXh0LnF1ZXJ5U2VsZWN0b3IoQ0xPU0VfQlVUVE9OKTtcbiAgICBpZiAoY2xvc2VCdXR0b24pIHtcbiAgICAgIGNsb3NlQnV0dG9uLmZvY3VzKCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBhY3RpdmU7XG59O1xuXG5jb25zdCBuYXZpZ2F0aW9uID0gYmVoYXZpb3Ioe1xuICBbIENMSUNLIF06IHtcbiAgICBbIE9QRU5FUlMgXTogdG9nZ2xlTmF2LFxuICAgIFsgQ0xPU0VSUyBdOiB0b2dnbGVOYXYsXG4gIH0sXG59KTtcblxuLyoqXG4gKiBUT0RPIGZvciAyLjAsIHJlbW92ZSB0aGlzIHN0YXRlbWVudCBhbmQgZXhwb3J0IGBuYXZpZ2F0aW9uYCBkaXJlY3RseTpcbiAqXG4gKiBtb2R1bGUuZXhwb3J0cyA9IGJlaGF2aW9yKHsuLi59KTtcbiAqL1xuY29uc3QgYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xubW9kdWxlLmV4cG9ydHMgPSBhc3NpZ24oXG4gIGVsID0+IG5hdmlnYXRpb24ub24oZWwpLFxuICBuYXZpZ2F0aW9uXG4pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuY29uc3QgYmVoYXZpb3IgPSByZXF1aXJlKCcuLi91dGlscy9iZWhhdmlvcicpO1xuY29uc3QgdmFsaWRhdGUgPSByZXF1aXJlKCcuLi91dGlscy92YWxpZGF0ZS1pbnB1dCcpO1xuY29uc3QgdG9nZ2xlRm9ybUlucHV0ID0gcmVxdWlyZSgnLi4vdXRpbHMvdG9nZ2xlLWZvcm0taW5wdXQnKTtcblxuY29uc3QgQ0xJQ0sgPSByZXF1aXJlKCcuLi9ldmVudHMnKS5DTElDSztcbmNvbnN0IFBSRUZJWCA9IHJlcXVpcmUoJy4uL2NvbmZpZycpLnByZWZpeDtcblxuY29uc3QgTElOSyA9IGAuJHtQUkVGSVh9LXNob3dfcGFzc3dvcmQsIC4ke1BSRUZJWH0tc2hvd19tdWx0aXBhc3N3b3JkYDtcblxuY29uc3QgdG9nZ2xlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIHRvZ2dsZUZvcm1JbnB1dCh0aGlzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYmVoYXZpb3Ioe1xuICBbIENMSUNLIF06IHtcbiAgICBbIExJTksgXTogdG9nZ2xlLFxuICB9LFxuICAna2V5dXAgY2hhbmdlJzoge1xuICAgICcuanMtdmFsaWRhdGVfcGFzc3dvcmQnOiB2YWxpZGF0ZSxcbiAgfSxcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuY29uc3QgYmVoYXZpb3IgPSByZXF1aXJlKCcuLi91dGlscy9iZWhhdmlvcicpO1xuY29uc3QgZm9yRWFjaCA9IHJlcXVpcmUoJ2FycmF5LWZvcmVhY2gnKTtcbmNvbnN0IGlnbm9yZSA9IHJlcXVpcmUoJ3JlY2VwdG9yL2lnbm9yZScpO1xuY29uc3Qgc2VsZWN0ID0gcmVxdWlyZSgnLi4vdXRpbHMvc2VsZWN0Jyk7XG5cbmNvbnN0IENMSUNLID0gcmVxdWlyZSgnLi4vZXZlbnRzJykuQ0xJQ0s7XG5jb25zdCBQUkVGSVggPSByZXF1aXJlKCcuLi9jb25maWcnKS5wcmVmaXg7XG5cbmNvbnN0IEJVVFRPTiA9ICcuanMtc2VhcmNoLWJ1dHRvbic7XG5jb25zdCBGT1JNID0gJy5qcy1zZWFyY2gtZm9ybSc7XG5jb25zdCBJTlBVVCA9ICdbdHlwZT1zZWFyY2hdJztcbmNvbnN0IENPTlRFWFQgPSAnaGVhZGVyJzsgLy8gWFhYXG5jb25zdCBWSVNVQUxMWV9ISURERU4gPSBgJHtQUkVGSVh9LXNyLW9ubHlgO1xuXG5sZXQgbGFzdEJ1dHRvbjtcblxuY29uc3Qgc2hvd1NlYXJjaCA9IGZ1bmN0aW9uIChldmVudCkge1xuICB0b2dnbGVTZWFyY2godGhpcywgdHJ1ZSk7XG4gIGxhc3RCdXR0b24gPSB0aGlzO1xufTtcblxuY29uc3QgaGlkZVNlYXJjaCA9IGZ1bmN0aW9uIChldmVudCkge1xuICB0b2dnbGVTZWFyY2godGhpcywgZmFsc2UpO1xuICBsYXN0QnV0dG9uID0gdW5kZWZpbmVkO1xufTtcblxuY29uc3QgZ2V0Rm9ybSA9IGJ1dHRvbiA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSBidXR0b24uY2xvc2VzdChDT05URVhUKTtcbiAgcmV0dXJuIGNvbnRleHRcbiAgICA/IGNvbnRleHQucXVlcnlTZWxlY3RvcihGT1JNKVxuICAgIDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcihGT1JNKTtcbn07XG5cbmNvbnN0IHRvZ2dsZVNlYXJjaCA9IChidXR0b24sIGFjdGl2ZSkgPT4ge1xuICBjb25zdCBmb3JtID0gZ2V0Rm9ybShidXR0b24pO1xuICBpZiAoIWZvcm0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vICR7Rk9STX0gZm91bmQgZm9yIHNlYXJjaCB0b2dnbGUgaW4gJHtDT05URVhUfSFgKTtcbiAgfVxuXG4gIGJ1dHRvbi5oaWRkZW4gPSBhY3RpdmU7XG4gIGZvcm0uY2xhc3NMaXN0LnRvZ2dsZShWSVNVQUxMWV9ISURERU4sICFhY3RpdmUpO1xuXG4gIGlmIChhY3RpdmUpIHtcbiAgICBjb25zdCBpbnB1dCA9IGZvcm0ucXVlcnlTZWxlY3RvcihJTlBVVCk7XG4gICAgaWYgKGlucHV0KSB7XG4gICAgICBpbnB1dC5mb2N1cygpO1xuICAgIH1cbiAgICAvLyB3aGVuIHRoZSB1c2VyIGNsaWNrcyBfb3V0c2lkZV8gb2YgdGhlIGZvcm0gdy9pZ25vcmUoKTogaGlkZSB0aGVcbiAgICAvLyBzZWFyY2gsIHRoZW4gcmVtb3ZlIHRoZSBsaXN0ZW5lclxuICAgIGNvbnN0IGxpc3RlbmVyID0gaWdub3JlKGZvcm0sIGUgPT4ge1xuICAgICAgaWYgKGxhc3RCdXR0b24pIHtcbiAgICAgICAgaGlkZVNlYXJjaC5jYWxsKGxhc3RCdXR0b24pO1xuICAgICAgfVxuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKENMSUNLLCBsaXN0ZW5lcik7XG4gICAgfSk7XG4gICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKENMSUNLLCBsaXN0ZW5lcik7XG4gIH1cbn07XG5cbmNvbnN0IHNlYXJjaCA9IGJlaGF2aW9yKHtcbiAgWyBDTElDSyBdOiB7XG4gICAgWyBCVVRUT04gXTogc2hvd1NlYXJjaCxcbiAgfSxcbn0sIHtcbiAgaW5pdDogKHRhcmdldCkgPT4ge1xuICAgIGZvckVhY2goc2VsZWN0KEJVVFRPTiwgdGFyZ2V0KSwgYnV0dG9uID0+IHtcbiAgICAgIHRvZ2dsZVNlYXJjaChidXR0b24sIGZhbHNlKTtcbiAgICB9KTtcbiAgfSxcbiAgdGVhcmRvd246ICh0YXJnZXQpID0+IHtcbiAgICAvLyBmb3JnZXQgdGhlIGxhc3QgYnV0dG9uIGNsaWNrZWRcbiAgICBsYXN0QnV0dG9uID0gdW5kZWZpbmVkO1xuICB9LFxufSk7XG5cbi8qKlxuICogVE9ETyBmb3IgMi4wLCByZW1vdmUgdGhpcyBzdGF0ZW1lbnQgYW5kIGV4cG9ydCBgbmF2aWdhdGlvbmAgZGlyZWN0bHk6XG4gKlxuICogbW9kdWxlLmV4cG9ydHMgPSBiZWhhdmlvcih7Li4ufSk7XG4gKi9cbmNvbnN0IGFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcbm1vZHVsZS5leHBvcnRzID0gYXNzaWduKFxuICBlbCA9PiBzZWFyY2gub24oZWwpLFxuICBzZWFyY2hcbik7XG4iLCIndXNlIHN0cmljdCc7XG5jb25zdCBiZWhhdmlvciA9IHJlcXVpcmUoJy4uL3V0aWxzL2JlaGF2aW9yJyk7XG5jb25zdCBvbmNlID0gcmVxdWlyZSgncmVjZXB0b3Ivb25jZScpO1xuXG5jb25zdCBDTElDSyA9IHJlcXVpcmUoJy4uL2V2ZW50cycpLkNMSUNLO1xuY29uc3QgUFJFRklYID0gcmVxdWlyZSgnLi4vY29uZmlnJykucHJlZml4O1xuY29uc3QgTElOSyA9IGAuJHtQUkVGSVh9LXNraXBuYXZbaHJlZl49XCIjXCJdYDtcblxuY29uc3Qgc2V0VGFiaW5kZXggPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgLy8gTkI6IHdlIGtub3cgYmVjYXVzZSBvZiB0aGUgc2VsZWN0b3Igd2UncmUgZGVsZWdhdGluZyB0byBiZWxvdyB0aGF0IHRoZVxuICAvLyBocmVmIGFscmVhZHkgYmVnaW5zIHdpdGggJyMnXG4gIGNvbnN0IGlkID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2hyZWYnKS5zbGljZSgxKTtcbiAgY29uc3QgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICBpZiAodGFyZ2V0KSB7XG4gICAgdGFyZ2V0LnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAwKTtcbiAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIG9uY2UoZXZlbnQgPT4ge1xuICAgICAgdGFyZ2V0LnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAtMSk7XG4gICAgfSkpO1xuICB9IGVsc2Uge1xuICAgIC8vIHRocm93IGFuIGVycm9yP1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJlaGF2aW9yKHtcbiAgWyBDTElDSyBdOiB7XG4gICAgWyBMSU5LIF06IHNldFRhYmluZGV4LFxuICB9LFxufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgcHJlZml4OiAndXNhJyxcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ0xJQ0s6ICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXG4gICAgPyAndG91Y2hzdGFydCdcbiAgICA6ICdjbGljaycsXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuY29uc3QgZWxwcm90byA9IHdpbmRvdy5IVE1MRWxlbWVudC5wcm90b3R5cGU7XG5jb25zdCBISURERU4gPSAnaGlkZGVuJztcblxuaWYgKCEoSElEREVOIGluIGVscHJvdG8pKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbHByb3RvLCBISURERU4sIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShISURERU4pO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZShISURERU4sICcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKEhJRERFTik7XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG4vLyBwb2x5ZmlsbHMgSFRNTEVsZW1lbnQucHJvdG90eXBlLmNsYXNzTGlzdCBhbmQgRE9NVG9rZW5MaXN0XG5yZXF1aXJlKCdjbGFzc2xpc3QtcG9seWZpbGwnKTtcbi8vIHBvbHlmaWxscyBIVE1MRWxlbWVudC5wcm90b3R5cGUuaGlkZGVuXG5yZXF1aXJlKCcuL2VsZW1lbnQtaGlkZGVuJyk7XG4iLCIndXNlIHN0cmljdCc7XG5jb25zdCBkb21yZWFkeSA9IHJlcXVpcmUoJ2RvbXJlYWR5Jyk7XG5cbi8qKlxuICogVGhlICdwb2x5ZmlsbHMnIGRlZmluZSBrZXkgRUNNQVNjcmlwdCA1IG1ldGhvZHMgdGhhdCBtYXkgYmUgbWlzc2luZyBmcm9tXG4gKiBvbGRlciBicm93c2Vycywgc28gbXVzdCBiZSBsb2FkZWQgZmlyc3QuXG4gKi9cbnJlcXVpcmUoJy4vcG9seWZpbGxzJyk7XG5cbmNvbnN0IHVzd2RzID0gcmVxdWlyZSgnLi9jb25maWcnKTtcblxuY29uc3QgY29tcG9uZW50cyA9IHJlcXVpcmUoJy4vY29tcG9uZW50cycpO1xudXN3ZHMuY29tcG9uZW50cyA9IGNvbXBvbmVudHM7XG5cbmRvbXJlYWR5KCgpID0+IHtcbiAgY29uc3QgdGFyZ2V0ID0gZG9jdW1lbnQuYm9keTtcbiAgZm9yIChsZXQgbmFtZSBpbiBjb21wb25lbnRzKSB7XG4gICAgY29uc3QgYmVoYXZpb3IgPSBjb21wb25lbnRzWyBuYW1lIF07XG4gICAgYmVoYXZpb3Iub24odGFyZ2V0KTtcbiAgfVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gdXN3ZHM7XG4iLCIndXNlIHN0cmljdCc7XG5jb25zdCBhc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5jb25zdCBmb3JFYWNoID0gcmVxdWlyZSgnYXJyYXktZm9yZWFjaCcpO1xuY29uc3QgQmVoYXZpb3IgPSByZXF1aXJlKCdyZWNlcHRvci9iZWhhdmlvcicpO1xuXG5jb25zdCBzZXF1ZW5jZSA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc2VxID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICB0YXJnZXQgPSBkb2N1bWVudC5ib2R5O1xuICAgIH1cbiAgICBmb3JFYWNoKHNlcSwgbWV0aG9kID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdGhpc1sgbWV0aG9kIF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpc1sgbWV0aG9kIF0uY2FsbCh0aGlzLCB0YXJnZXQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xufTtcblxuLyoqXG4gKiBAbmFtZSBiZWhhdmlvclxuICogQHBhcmFtIHtvYmplY3R9IGV2ZW50c1xuICogQHBhcmFtIHtvYmplY3Q/fSBwcm9wc1xuICogQHJldHVybiB7cmVjZXB0b3IuYmVoYXZpb3J9XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gKGV2ZW50cywgcHJvcHMpID0+IHtcbiAgcmV0dXJuIEJlaGF2aW9yKGV2ZW50cywgYXNzaWduKHtcbiAgICBvbjogICBzZXF1ZW5jZSgnaW5pdCcsICdhZGQnKSxcbiAgICBvZmY6ICBzZXF1ZW5jZSgndGVhcmRvd24nLCAncmVtb3ZlJyksXG4gIH0sIHByb3BzKSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBpc0VsZW1lbnQgPSB2YWx1ZSA9PiB7XG4gIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLm5vZGVUeXBlID09PSAxO1xufTtcblxuLyoqXG4gKiBAbmFtZSBzZWxlY3RcbiAqIEBkZXNjIHNlbGVjdHMgZWxlbWVudHMgZnJvbSB0aGUgRE9NIGJ5IGNsYXNzIHNlbGVjdG9yIG9yIElEIHNlbGVjdG9yLlxuICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gVGhlIHNlbGVjdG9yIHRvIHRyYXZlcnNlIHRoZSBET00gd2l0aC5cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRleHQgLSBUaGUgY29udGV4dCB0byB0cmF2ZXJzZSB0aGUgRE9NIGluLlxuICogQHJldHVybiB7QXJyYXkuSFRNTEVsZW1lbnR9IC0gQW4gYXJyYXkgb2YgRE9NIG5vZGVzIG9yIGFuIGVtcHR5IGFycmF5LlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNlbGVjdCAoc2VsZWN0b3IsIGNvbnRleHQpIHtcblxuICBpZiAodHlwZW9mIHNlbGVjdG9yICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQgfHwgIWlzRWxlbWVudChjb250ZXh0KSkge1xuICAgIGNvbnRleHQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIH1cblxuICBjb25zdCBzZWxlY3Rpb24gPSBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoc2VsZWN0aW9uKTtcbn07XG4iLCIvKipcbiAqIEZsaXBzIGdpdmVuIElOUFVUIGVsZW1lbnRzIGJldHdlZW4gbWFza2VkIChoaWRpbmcgdGhlIGZpZWxkIHZhbHVlKSBhbmQgdW5tYXNrZWRcbiAqIEBwYXJhbSB7QXJyYXkuSFRNTEVsZW1lbnR9IGZpZWxkcyAtIEFuIGFycmF5IG9mIElOUFVUIGVsZW1lbnRzXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG1hc2sgLSBXaGV0aGVyIHRoZSBtYXNrIHNob3VsZCBiZSBhcHBsaWVkLCBoaWRpbmcgdGhlIGZpZWxkIHZhbHVlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gKGZpZWxkLCBtYXNrKSA9PiB7XG4gIGZpZWxkLnNldEF0dHJpYnV0ZSgnYXV0b2NhcGl0YWxpemUnLCAnb2ZmJyk7XG4gIGZpZWxkLnNldEF0dHJpYnV0ZSgnYXV0b2NvcnJlY3QnLCAnb2ZmJyk7XG4gIGZpZWxkLnNldEF0dHJpYnV0ZSgndHlwZScsIG1hc2sgPyAncGFzc3dvcmQnIDogJ3RleHQnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5jb25zdCBmb3JFYWNoID0gcmVxdWlyZSgnYXJyYXktZm9yZWFjaCcpO1xuY29uc3QgcmVzb2x2ZUlkUmVmcyA9IHJlcXVpcmUoJ3Jlc29sdmUtaWQtcmVmcycpO1xuY29uc3Qgc2VsZWN0ID0gcmVxdWlyZSgnLi9zZWxlY3QnKTtcbmNvbnN0IHRvZ2dsZUZpZWxkTWFzayA9IHJlcXVpcmUoJy4vdG9nZ2xlLWZpZWxkLW1hc2snKTtcblxuY29uc3QgQ09OVFJPTFMgPSAnYXJpYS1jb250cm9scyc7XG5jb25zdCBQUkVTU0VEID0gJ2FyaWEtcHJlc3NlZCc7XG5jb25zdCBTSE9XX0FUVFIgPSAnZGF0YS1zaG93LXRleHQnO1xuY29uc3QgSElERV9BVFRSID0gJ2RhdGEtaGlkZS10ZXh0JztcblxuLyoqXG4gKiBSZXBsYWNlIHRoZSB3b3JkIFwiU2hvd1wiIChvciBcInNob3dcIikgd2l0aCBcIkhpZGVcIiAob3IgXCJoaWRlXCIpIGluIGEgc3RyaW5nLlxuICogQHBhcmFtIHtzdHJpbmd9IHNob3dUZXh0XG4gKiBAcmV0dXJuIHtzdHJvbmd9IGhpZGVUZXh0XG4gKi9cbmNvbnN0IGdldEhpZGVUZXh0ID0gc2hvd1RleHQgPT4ge1xuICByZXR1cm4gc2hvd1RleHQucmVwbGFjZSgvXFxiU2hvd1xcYi9pLCBzaG93ID0+IHtcbiAgICByZXR1cm4gKCdTJyA9PT0gc2hvd1sgMCBdID8gJ0gnIDogJ2gnKSArICdpZGUnO1xuICB9KTtcbn07XG5cbi8qKlxuICogQ29tcG9uZW50IHRoYXQgZGVjb3JhdGVzIGFuIEhUTUwgZWxlbWVudCB3aXRoIHRoZSBhYmlsaXR5IHRvIHRvZ2dsZSB0aGVcbiAqIG1hc2tlZCBzdGF0ZSBvZiBhbiBpbnB1dCBmaWVsZCAobGlrZSBhIHBhc3N3b3JkKSB3aGVuIGNsaWNrZWQuXG4gKiBUaGUgaWRzIG9mIHRoZSBmaWVsZHMgdG8gYmUgbWFza2VkIHdpbGwgYmUgcHVsbGVkIGRpcmVjdGx5IGZyb20gdGhlIGJ1dHRvbidzXG4gKiBgYXJpYS1jb250cm9sc2AgYXR0cmlidXRlLlxuICpcbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSBlbCAgICBQYXJlbnQgZWxlbWVudCBjb250YWluaW5nIHRoZSBmaWVsZHMgdG8gYmUgbWFza2VkXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGVsID0+IHtcbiAgLy8gdGhpcyBpcyB0aGUgKnRhcmdldCogc3RhdGU6XG4gIC8vICogaWYgdGhlIGVsZW1lbnQgaGFzIHRoZSBhdHRyIGFuZCBpdCdzICE9PSBcInRydWVcIiwgcHJlc3NlZCBpcyB0cnVlXG4gIC8vICogb3RoZXJ3aXNlLCBwcmVzc2VkIGlzIGZhbHNlXG4gIGNvbnN0IHByZXNzZWQgPSBlbC5oYXNBdHRyaWJ1dGUoUFJFU1NFRClcbiAgICAmJiBlbC5nZXRBdHRyaWJ1dGUoUFJFU1NFRCkgIT09ICd0cnVlJztcblxuICBjb25zdCBmaWVsZHMgPSByZXNvbHZlSWRSZWZzKGVsLmdldEF0dHJpYnV0ZShDT05UUk9MUykpO1xuICBmb3JFYWNoKGZpZWxkcywgZmllbGQgPT4gdG9nZ2xlRmllbGRNYXNrKGZpZWxkLCBwcmVzc2VkKSk7XG5cbiAgaWYgKCFlbC5oYXNBdHRyaWJ1dGUoU0hPV19BVFRSKSkge1xuICAgIGVsLnNldEF0dHJpYnV0ZShTSE9XX0FUVFIsIGVsLnRleHRDb250ZW50KTtcbiAgfVxuXG4gIGNvbnN0IHNob3dUZXh0ID0gZWwuZ2V0QXR0cmlidXRlKFNIT1dfQVRUUik7XG4gIGNvbnN0IGhpZGVUZXh0ID0gZWwuZ2V0QXR0cmlidXRlKEhJREVfQVRUUikgfHwgZ2V0SGlkZVRleHQoc2hvd1RleHQpO1xuXG4gIGVsLnRleHRDb250ZW50ID0gcHJlc3NlZCA/IHNob3dUZXh0IDogaGlkZVRleHQ7XG4gIGVsLnNldEF0dHJpYnV0ZShQUkVTU0VELCBwcmVzc2VkKTtcbiAgcmV0dXJuIHByZXNzZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuY29uc3QgRVhQQU5ERUQgPSAnYXJpYS1leHBhbmRlZCc7XG5jb25zdCBDT05UUk9MUyA9ICdhcmlhLWNvbnRyb2xzJztcbmNvbnN0IEhJRERFTiA9ICdhcmlhLWhpZGRlbic7XG5cbm1vZHVsZS5leHBvcnRzID0gKGJ1dHRvbiwgZXhwYW5kZWQpID0+IHtcblxuICBpZiAodHlwZW9mIGV4cGFuZGVkICE9PSAnYm9vbGVhbicpIHtcbiAgICBleHBhbmRlZCA9IGJ1dHRvbi5nZXRBdHRyaWJ1dGUoRVhQQU5ERUQpID09PSAnZmFsc2UnO1xuICB9XG4gIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoRVhQQU5ERUQsIGV4cGFuZGVkKTtcblxuICBjb25zdCBpZCA9IGJ1dHRvbi5nZXRBdHRyaWJ1dGUoQ09OVFJPTFMpO1xuICBjb25zdCBjb250cm9scyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKCFjb250cm9scykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdObyB0b2dnbGUgdGFyZ2V0IGZvdW5kIHdpdGggaWQ6IFwiJyArIGlkICsgJ1wiJ1xuICAgICk7XG4gIH1cblxuICBjb250cm9scy5zZXRBdHRyaWJ1dGUoSElEREVOLCAhZXhwYW5kZWQpO1xuICByZXR1cm4gZXhwYW5kZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuY29uc3QgZGF0YXNldCA9IHJlcXVpcmUoJ2VsZW0tZGF0YXNldCcpO1xuXG5jb25zdCBQUkVGSVggPSByZXF1aXJlKCcuLi9jb25maWcnKS5wcmVmaXg7XG5jb25zdCBDSEVDS0VEID0gJ2FyaWEtY2hlY2tlZCc7XG5jb25zdCBDSEVDS0VEX0NMQVNTID0gYCR7UFJFRklYfS1jaGVja2xpc3QtY2hlY2tlZGA7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdmFsaWRhdGUgKGVsKSB7XG4gIGNvbnN0IGRhdGEgPSBkYXRhc2V0KGVsKTtcbiAgY29uc3QgaWQgPSBkYXRhLnZhbGlkYXRpb25FbGVtZW50O1xuICBjb25zdCBjaGVja0xpc3QgPSBpZC5jaGFyQXQoMCkgPT09ICcjJ1xuICAgID8gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihpZClcbiAgICA6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcblxuICBpZiAoIWNoZWNrTGlzdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBObyB2YWxpZGF0aW9uIGVsZW1lbnQgZm91bmQgd2l0aCBpZDogXCIke2lkfVwiYFxuICAgICk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhKSB7XG4gICAgaWYgKGtleS5zdGFydHNXaXRoKCd2YWxpZGF0ZScpKSB7XG4gICAgICBjb25zdCB2YWxpZGF0b3JOYW1lID0ga2V5LnN1YnN0cigndmFsaWRhdGUnLmxlbmd0aCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IHZhbGlkYXRvclBhdHRlcm4gPSBuZXcgUmVnRXhwKGRhdGFbIGtleSBdKTtcbiAgICAgIGNvbnN0IHZhbGlkYXRvclNlbGVjdG9yID0gYFtkYXRhLXZhbGlkYXRvcj1cIiR7dmFsaWRhdG9yTmFtZX1cIl1gO1xuICAgICAgY29uc3QgdmFsaWRhdG9yQ2hlY2tib3ggPSBjaGVja0xpc3QucXVlcnlTZWxlY3Rvcih2YWxpZGF0b3JTZWxlY3Rvcik7XG4gICAgICBpZiAoIXZhbGlkYXRvckNoZWNrYm94KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgTm8gdmFsaWRhdG9yIGNoZWNrYm94IGZvdW5kIGZvcjogXCIke3ZhbGlkYXRvck5hbWV9XCJgXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNoZWNrZWQgPSB2YWxpZGF0b3JQYXR0ZXJuLnRlc3QoZWwudmFsdWUpO1xuICAgICAgdmFsaWRhdG9yQ2hlY2tib3guY2xhc3NMaXN0LnRvZ2dsZShDSEVDS0VEX0NMQVNTLCBjaGVja2VkKTtcbiAgICAgIHZhbGlkYXRvckNoZWNrYm94LnNldEF0dHJpYnV0ZShDSEVDS0VELCBjaGVja2VkKTtcbiAgICB9XG4gIH1cbn07XG4iXX0=