Talk given to full stack program cohort at Galvanize/Boulder on September 14, 2016 about a few reasons why Python is awesome.
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 

13281 řádky
486 KiB

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8" />
  5. <meta http-equiv="X-UA-Compatible" content="chrome=1" />
  6. <meta name="apple-mobile-web-app-capable" content="yes" />
  7. <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
  8. <title>talk slides</title>
  9. <script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js"></script>
  10. <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
  11. <!-- General and theme style sheets -->
  12. <link rel="stylesheet" href="http://cdn.jsdelivr.net/reveal.js/3.0.0/css/reveal.css">
  13. <link rel="stylesheet" href="http://cdn.jsdelivr.net/reveal.js/3.0.0/css/theme/simple.css" id="theme">
  14. <!-- If the query includes 'print-pdf', include the PDF print sheet -->
  15. <script>
  16. if( window.location.search.match( /print-pdf/gi ) ) {
  17. var link = document.createElement( 'link' );
  18. link.rel = 'stylesheet';
  19. link.type = 'text/css';
  20. link.href = 'http://cdn.jsdelivr.net/reveal.js/3.0.0/css/print/pdf.css';
  21. document.getElementsByTagName( 'head' )[0].appendChild( link );
  22. }
  23. </script>
  24. <!--[if lt IE 9]>
  25. <script src="http://cdn.jsdelivr.net/reveal.js/3.0.0/lib/js/html5shiv.js"></script>
  26. <![endif]-->
  27. <!-- Loading the mathjax macro -->
  28. <!-- Load mathjax -->
  29. <script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML"></script>
  30. <!-- MathJax configuration -->
  31. <script type="text/x-mathjax-config">
  32. MathJax.Hub.Config({
  33. tex2jax: {
  34. inlineMath: [ ['$','$'], ["\\(","\\)"] ],
  35. displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
  36. processEscapes: true,
  37. processEnvironments: true
  38. },
  39. // Center justify equations in code and markdown cells. Elsewhere
  40. // we use CSS to left justify single line equations in code cells.
  41. displayAlign: 'center',
  42. "HTML-CSS": {
  43. styles: {'.MathJax_Display': {"margin": 0}},
  44. linebreaks: { automatic: true }
  45. }
  46. });
  47. </script>
  48. <!-- End of mathjax configuration -->
  49. <!-- Get Font-awesome from cdn -->
  50. <link rel="stylesheet" href="//netdna.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.css">
  51. <style type="text/css">
  52. /*!
  53. *
  54. * Twitter Bootstrap
  55. *
  56. */
  57. /*!
  58. * Bootstrap v3.3.6 (http://getbootstrap.com)
  59. * Copyright 2011-2015 Twitter, Inc.
  60. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  61. */
  62. /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
  63. html {
  64. font-family: sans-serif;
  65. -ms-text-size-adjust: 100%;
  66. -webkit-text-size-adjust: 100%;
  67. }
  68. body {
  69. margin: 0;
  70. }
  71. article,
  72. aside,
  73. details,
  74. figcaption,
  75. figure,
  76. footer,
  77. header,
  78. hgroup,
  79. main,
  80. menu,
  81. nav,
  82. section,
  83. summary {
  84. display: block;
  85. }
  86. audio,
  87. canvas,
  88. progress,
  89. video {
  90. display: inline-block;
  91. vertical-align: baseline;
  92. }
  93. audio:not([controls]) {
  94. display: none;
  95. height: 0;
  96. }
  97. [hidden],
  98. template {
  99. display: none;
  100. }
  101. a {
  102. background-color: transparent;
  103. }
  104. a:active,
  105. a:hover {
  106. outline: 0;
  107. }
  108. abbr[title] {
  109. border-bottom: 1px dotted;
  110. }
  111. b,
  112. strong {
  113. font-weight: bold;
  114. }
  115. dfn {
  116. font-style: italic;
  117. }
  118. h1 {
  119. font-size: 2em;
  120. margin: 0.67em 0;
  121. }
  122. mark {
  123. background: #ff0;
  124. color: #000;
  125. }
  126. small {
  127. font-size: 80%;
  128. }
  129. sub,
  130. sup {
  131. font-size: 75%;
  132. line-height: 0;
  133. position: relative;
  134. vertical-align: baseline;
  135. }
  136. sup {
  137. top: -0.5em;
  138. }
  139. sub {
  140. bottom: -0.25em;
  141. }
  142. img {
  143. border: 0;
  144. }
  145. svg:not(:root) {
  146. overflow: hidden;
  147. }
  148. figure {
  149. margin: 1em 40px;
  150. }
  151. hr {
  152. box-sizing: content-box;
  153. height: 0;
  154. }
  155. pre {
  156. overflow: auto;
  157. }
  158. code,
  159. kbd,
  160. pre,
  161. samp {
  162. font-family: monospace, monospace;
  163. font-size: 1em;
  164. }
  165. button,
  166. input,
  167. optgroup,
  168. select,
  169. textarea {
  170. color: inherit;
  171. font: inherit;
  172. margin: 0;
  173. }
  174. button {
  175. overflow: visible;
  176. }
  177. button,
  178. select {
  179. text-transform: none;
  180. }
  181. button,
  182. html input[type="button"],
  183. input[type="reset"],
  184. input[type="submit"] {
  185. -webkit-appearance: button;
  186. cursor: pointer;
  187. }
  188. button[disabled],
  189. html input[disabled] {
  190. cursor: default;
  191. }
  192. button::-moz-focus-inner,
  193. input::-moz-focus-inner {
  194. border: 0;
  195. padding: 0;
  196. }
  197. input {
  198. line-height: normal;
  199. }
  200. input[type="checkbox"],
  201. input[type="radio"] {
  202. box-sizing: border-box;
  203. padding: 0;
  204. }
  205. input[type="number"]::-webkit-inner-spin-button,
  206. input[type="number"]::-webkit-outer-spin-button {
  207. height: auto;
  208. }
  209. input[type="search"] {
  210. -webkit-appearance: textfield;
  211. box-sizing: content-box;
  212. }
  213. input[type="search"]::-webkit-search-cancel-button,
  214. input[type="search"]::-webkit-search-decoration {
  215. -webkit-appearance: none;
  216. }
  217. fieldset {
  218. border: 1px solid #c0c0c0;
  219. margin: 0 2px;
  220. padding: 0.35em 0.625em 0.75em;
  221. }
  222. legend {
  223. border: 0;
  224. padding: 0;
  225. }
  226. textarea {
  227. overflow: auto;
  228. }
  229. optgroup {
  230. font-weight: bold;
  231. }
  232. table {
  233. border-collapse: collapse;
  234. border-spacing: 0;
  235. }
  236. td,
  237. th {
  238. padding: 0;
  239. }
  240. /*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
  241. @media print {
  242. *,
  243. *:before,
  244. *:after {
  245. background: transparent !important;
  246. color: #000 !important;
  247. box-shadow: none !important;
  248. text-shadow: none !important;
  249. }
  250. a,
  251. a:visited {
  252. text-decoration: underline;
  253. }
  254. a[href]:after {
  255. content: " (" attr(href) ")";
  256. }
  257. abbr[title]:after {
  258. content: " (" attr(title) ")";
  259. }
  260. a[href^="#"]:after,
  261. a[href^="javascript:"]:after {
  262. content: "";
  263. }
  264. pre,
  265. blockquote {
  266. border: 1px solid #999;
  267. page-break-inside: avoid;
  268. }
  269. thead {
  270. display: table-header-group;
  271. }
  272. tr,
  273. img {
  274. page-break-inside: avoid;
  275. }
  276. img {
  277. max-width: 100% !important;
  278. }
  279. p,
  280. h2,
  281. h3 {
  282. orphans: 3;
  283. widows: 3;
  284. }
  285. h2,
  286. h3 {
  287. page-break-after: avoid;
  288. }
  289. .navbar {
  290. display: none;
  291. }
  292. .btn > .caret,
  293. .dropup > .btn > .caret {
  294. border-top-color: #000 !important;
  295. }
  296. .label {
  297. border: 1px solid #000;
  298. }
  299. .table {
  300. border-collapse: collapse !important;
  301. }
  302. .table td,
  303. .table th {
  304. background-color: #fff !important;
  305. }
  306. .table-bordered th,
  307. .table-bordered td {
  308. border: 1px solid #ddd !important;
  309. }
  310. }
  311. @font-face {
  312. font-family: 'Glyphicons Halflings';
  313. src: url('../components/bootstrap/fonts/glyphicons-halflings-regular.eot');
  314. src: url('../components/bootstrap/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.woff') format('woff'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
  315. }
  316. .glyphicon {
  317. position: relative;
  318. top: 1px;
  319. display: inline-block;
  320. font-family: 'Glyphicons Halflings';
  321. font-style: normal;
  322. font-weight: normal;
  323. line-height: 1;
  324. -webkit-font-smoothing: antialiased;
  325. -moz-osx-font-smoothing: grayscale;
  326. }
  327. .glyphicon-asterisk:before {
  328. content: "\002a";
  329. }
  330. .glyphicon-plus:before {
  331. content: "\002b";
  332. }
  333. .glyphicon-euro:before,
  334. .glyphicon-eur:before {
  335. content: "\20ac";
  336. }
  337. .glyphicon-minus:before {
  338. content: "\2212";
  339. }
  340. .glyphicon-cloud:before {
  341. content: "\2601";
  342. }
  343. .glyphicon-envelope:before {
  344. content: "\2709";
  345. }
  346. .glyphicon-pencil:before {
  347. content: "\270f";
  348. }
  349. .glyphicon-glass:before {
  350. content: "\e001";
  351. }
  352. .glyphicon-music:before {
  353. content: "\e002";
  354. }
  355. .glyphicon-search:before {
  356. content: "\e003";
  357. }
  358. .glyphicon-heart:before {
  359. content: "\e005";
  360. }
  361. .glyphicon-star:before {
  362. content: "\e006";
  363. }
  364. .glyphicon-star-empty:before {
  365. content: "\e007";
  366. }
  367. .glyphicon-user:before {
  368. content: "\e008";
  369. }
  370. .glyphicon-film:before {
  371. content: "\e009";
  372. }
  373. .glyphicon-th-large:before {
  374. content: "\e010";
  375. }
  376. .glyphicon-th:before {
  377. content: "\e011";
  378. }
  379. .glyphicon-th-list:before {
  380. content: "\e012";
  381. }
  382. .glyphicon-ok:before {
  383. content: "\e013";
  384. }
  385. .glyphicon-remove:before {
  386. content: "\e014";
  387. }
  388. .glyphicon-zoom-in:before {
  389. content: "\e015";
  390. }
  391. .glyphicon-zoom-out:before {
  392. content: "\e016";
  393. }
  394. .glyphicon-off:before {
  395. content: "\e017";
  396. }
  397. .glyphicon-signal:before {
  398. content: "\e018";
  399. }
  400. .glyphicon-cog:before {
  401. content: "\e019";
  402. }
  403. .glyphicon-trash:before {
  404. content: "\e020";
  405. }
  406. .glyphicon-home:before {
  407. content: "\e021";
  408. }
  409. .glyphicon-file:before {
  410. content: "\e022";
  411. }
  412. .glyphicon-time:before {
  413. content: "\e023";
  414. }
  415. .glyphicon-road:before {
  416. content: "\e024";
  417. }
  418. .glyphicon-download-alt:before {
  419. content: "\e025";
  420. }
  421. .glyphicon-download:before {
  422. content: "\e026";
  423. }
  424. .glyphicon-upload:before {
  425. content: "\e027";
  426. }
  427. .glyphicon-inbox:before {
  428. content: "\e028";
  429. }
  430. .glyphicon-play-circle:before {
  431. content: "\e029";
  432. }
  433. .glyphicon-repeat:before {
  434. content: "\e030";
  435. }
  436. .glyphicon-refresh:before {
  437. content: "\e031";
  438. }
  439. .glyphicon-list-alt:before {
  440. content: "\e032";
  441. }
  442. .glyphicon-lock:before {
  443. content: "\e033";
  444. }
  445. .glyphicon-flag:before {
  446. content: "\e034";
  447. }
  448. .glyphicon-headphones:before {
  449. content: "\e035";
  450. }
  451. .glyphicon-volume-off:before {
  452. content: "\e036";
  453. }
  454. .glyphicon-volume-down:before {
  455. content: "\e037";
  456. }
  457. .glyphicon-volume-up:before {
  458. content: "\e038";
  459. }
  460. .glyphicon-qrcode:before {
  461. content: "\e039";
  462. }
  463. .glyphicon-barcode:before {
  464. content: "\e040";
  465. }
  466. .glyphicon-tag:before {
  467. content: "\e041";
  468. }
  469. .glyphicon-tags:before {
  470. content: "\e042";
  471. }
  472. .glyphicon-book:before {
  473. content: "\e043";
  474. }
  475. .glyphicon-bookmark:before {
  476. content: "\e044";
  477. }
  478. .glyphicon-print:before {
  479. content: "\e045";
  480. }
  481. .glyphicon-camera:before {
  482. content: "\e046";
  483. }
  484. .glyphicon-font:before {
  485. content: "\e047";
  486. }
  487. .glyphicon-bold:before {
  488. content: "\e048";
  489. }
  490. .glyphicon-italic:before {
  491. content: "\e049";
  492. }
  493. .glyphicon-text-height:before {
  494. content: "\e050";
  495. }
  496. .glyphicon-text-width:before {
  497. content: "\e051";
  498. }
  499. .glyphicon-align-left:before {
  500. content: "\e052";
  501. }
  502. .glyphicon-align-center:before {
  503. content: "\e053";
  504. }
  505. .glyphicon-align-right:before {
  506. content: "\e054";
  507. }
  508. .glyphicon-align-justify:before {
  509. content: "\e055";
  510. }
  511. .glyphicon-list:before {
  512. content: "\e056";
  513. }
  514. .glyphicon-indent-left:before {
  515. content: "\e057";
  516. }
  517. .glyphicon-indent-right:before {
  518. content: "\e058";
  519. }
  520. .glyphicon-facetime-video:before {
  521. content: "\e059";
  522. }
  523. .glyphicon-picture:before {
  524. content: "\e060";
  525. }
  526. .glyphicon-map-marker:before {
  527. content: "\e062";
  528. }
  529. .glyphicon-adjust:before {
  530. content: "\e063";
  531. }
  532. .glyphicon-tint:before {
  533. content: "\e064";
  534. }
  535. .glyphicon-edit:before {
  536. content: "\e065";
  537. }
  538. .glyphicon-share:before {
  539. content: "\e066";
  540. }
  541. .glyphicon-check:before {
  542. content: "\e067";
  543. }
  544. .glyphicon-move:before {
  545. content: "\e068";
  546. }
  547. .glyphicon-step-backward:before {
  548. content: "\e069";
  549. }
  550. .glyphicon-fast-backward:before {
  551. content: "\e070";
  552. }
  553. .glyphicon-backward:before {
  554. content: "\e071";
  555. }
  556. .glyphicon-play:before {
  557. content: "\e072";
  558. }
  559. .glyphicon-pause:before {
  560. content: "\e073";
  561. }
  562. .glyphicon-stop:before {
  563. content: "\e074";
  564. }
  565. .glyphicon-forward:before {
  566. content: "\e075";
  567. }
  568. .glyphicon-fast-forward:before {
  569. content: "\e076";
  570. }
  571. .glyphicon-step-forward:before {
  572. content: "\e077";
  573. }
  574. .glyphicon-eject:before {
  575. content: "\e078";
  576. }
  577. .glyphicon-chevron-left:before {
  578. content: "\e079";
  579. }
  580. .glyphicon-chevron-right:before {
  581. content: "\e080";
  582. }
  583. .glyphicon-plus-sign:before {
  584. content: "\e081";
  585. }
  586. .glyphicon-minus-sign:before {
  587. content: "\e082";
  588. }
  589. .glyphicon-remove-sign:before {
  590. content: "\e083";
  591. }
  592. .glyphicon-ok-sign:before {
  593. content: "\e084";
  594. }
  595. .glyphicon-question-sign:before {
  596. content: "\e085";
  597. }
  598. .glyphicon-info-sign:before {
  599. content: "\e086";
  600. }
  601. .glyphicon-screenshot:before {
  602. content: "\e087";
  603. }
  604. .glyphicon-remove-circle:before {
  605. content: "\e088";
  606. }
  607. .glyphicon-ok-circle:before {
  608. content: "\e089";
  609. }
  610. .glyphicon-ban-circle:before {
  611. content: "\e090";
  612. }
  613. .glyphicon-arrow-left:before {
  614. content: "\e091";
  615. }
  616. .glyphicon-arrow-right:before {
  617. content: "\e092";
  618. }
  619. .glyphicon-arrow-up:before {
  620. content: "\e093";
  621. }
  622. .glyphicon-arrow-down:before {
  623. content: "\e094";
  624. }
  625. .glyphicon-share-alt:before {
  626. content: "\e095";
  627. }
  628. .glyphicon-resize-full:before {
  629. content: "\e096";
  630. }
  631. .glyphicon-resize-small:before {
  632. content: "\e097";
  633. }
  634. .glyphicon-exclamation-sign:before {
  635. content: "\e101";
  636. }
  637. .glyphicon-gift:before {
  638. content: "\e102";
  639. }
  640. .glyphicon-leaf:before {
  641. content: "\e103";
  642. }
  643. .glyphicon-fire:before {
  644. content: "\e104";
  645. }
  646. .glyphicon-eye-open:before {
  647. content: "\e105";
  648. }
  649. .glyphicon-eye-close:before {
  650. content: "\e106";
  651. }
  652. .glyphicon-warning-sign:before {
  653. content: "\e107";
  654. }
  655. .glyphicon-plane:before {
  656. content: "\e108";
  657. }
  658. .glyphicon-calendar:before {
  659. content: "\e109";
  660. }
  661. .glyphicon-random:before {
  662. content: "\e110";
  663. }
  664. .glyphicon-comment:before {
  665. content: "\e111";
  666. }
  667. .glyphicon-magnet:before {
  668. content: "\e112";
  669. }
  670. .glyphicon-chevron-up:before {
  671. content: "\e113";
  672. }
  673. .glyphicon-chevron-down:before {
  674. content: "\e114";
  675. }
  676. .glyphicon-retweet:before {
  677. content: "\e115";
  678. }
  679. .glyphicon-shopping-cart:before {
  680. content: "\e116";
  681. }
  682. .glyphicon-folder-close:before {
  683. content: "\e117";
  684. }
  685. .glyphicon-folder-open:before {
  686. content: "\e118";
  687. }
  688. .glyphicon-resize-vertical:before {
  689. content: "\e119";
  690. }
  691. .glyphicon-resize-horizontal:before {
  692. content: "\e120";
  693. }
  694. .glyphicon-hdd:before {
  695. content: "\e121";
  696. }
  697. .glyphicon-bullhorn:before {
  698. content: "\e122";
  699. }
  700. .glyphicon-bell:before {
  701. content: "\e123";
  702. }
  703. .glyphicon-certificate:before {
  704. content: "\e124";
  705. }
  706. .glyphicon-thumbs-up:before {
  707. content: "\e125";
  708. }
  709. .glyphicon-thumbs-down:before {
  710. content: "\e126";
  711. }
  712. .glyphicon-hand-right:before {
  713. content: "\e127";
  714. }
  715. .glyphicon-hand-left:before {
  716. content: "\e128";
  717. }
  718. .glyphicon-hand-up:before {
  719. content: "\e129";
  720. }
  721. .glyphicon-hand-down:before {
  722. content: "\e130";
  723. }
  724. .glyphicon-circle-arrow-right:before {
  725. content: "\e131";
  726. }
  727. .glyphicon-circle-arrow-left:before {
  728. content: "\e132";
  729. }
  730. .glyphicon-circle-arrow-up:before {
  731. content: "\e133";
  732. }
  733. .glyphicon-circle-arrow-down:before {
  734. content: "\e134";
  735. }
  736. .glyphicon-globe:before {
  737. content: "\e135";
  738. }
  739. .glyphicon-wrench:before {
  740. content: "\e136";
  741. }
  742. .glyphicon-tasks:before {
  743. content: "\e137";
  744. }
  745. .glyphicon-filter:before {
  746. content: "\e138";
  747. }
  748. .glyphicon-briefcase:before {
  749. content: "\e139";
  750. }
  751. .glyphicon-fullscreen:before {
  752. content: "\e140";
  753. }
  754. .glyphicon-dashboard:before {
  755. content: "\e141";
  756. }
  757. .glyphicon-paperclip:before {
  758. content: "\e142";
  759. }
  760. .glyphicon-heart-empty:before {
  761. content: "\e143";
  762. }
  763. .glyphicon-link:before {
  764. content: "\e144";
  765. }
  766. .glyphicon-phone:before {
  767. content: "\e145";
  768. }
  769. .glyphicon-pushpin:before {
  770. content: "\e146";
  771. }
  772. .glyphicon-usd:before {
  773. content: "\e148";
  774. }
  775. .glyphicon-gbp:before {
  776. content: "\e149";
  777. }
  778. .glyphicon-sort:before {
  779. content: "\e150";
  780. }
  781. .glyphicon-sort-by-alphabet:before {
  782. content: "\e151";
  783. }
  784. .glyphicon-sort-by-alphabet-alt:before {
  785. content: "\e152";
  786. }
  787. .glyphicon-sort-by-order:before {
  788. content: "\e153";
  789. }
  790. .glyphicon-sort-by-order-alt:before {
  791. content: "\e154";
  792. }
  793. .glyphicon-sort-by-attributes:before {
  794. content: "\e155";
  795. }
  796. .glyphicon-sort-by-attributes-alt:before {
  797. content: "\e156";
  798. }
  799. .glyphicon-unchecked:before {
  800. content: "\e157";
  801. }
  802. .glyphicon-expand:before {
  803. content: "\e158";
  804. }
  805. .glyphicon-collapse-down:before {
  806. content: "\e159";
  807. }
  808. .glyphicon-collapse-up:before {
  809. content: "\e160";
  810. }
  811. .glyphicon-log-in:before {
  812. content: "\e161";
  813. }
  814. .glyphicon-flash:before {
  815. content: "\e162";
  816. }
  817. .glyphicon-log-out:before {
  818. content: "\e163";
  819. }
  820. .glyphicon-new-window:before {
  821. content: "\e164";
  822. }
  823. .glyphicon-record:before {
  824. content: "\e165";
  825. }
  826. .glyphicon-save:before {
  827. content: "\e166";
  828. }
  829. .glyphicon-open:before {
  830. content: "\e167";
  831. }
  832. .glyphicon-saved:before {
  833. content: "\e168";
  834. }
  835. .glyphicon-import:before {
  836. content: "\e169";
  837. }
  838. .glyphicon-export:before {
  839. content: "\e170";
  840. }
  841. .glyphicon-send:before {
  842. content: "\e171";
  843. }
  844. .glyphicon-floppy-disk:before {
  845. content: "\e172";
  846. }
  847. .glyphicon-floppy-saved:before {
  848. content: "\e173";
  849. }
  850. .glyphicon-floppy-remove:before {
  851. content: "\e174";
  852. }
  853. .glyphicon-floppy-save:before {
  854. content: "\e175";
  855. }
  856. .glyphicon-floppy-open:before {
  857. content: "\e176";
  858. }
  859. .glyphicon-credit-card:before {
  860. content: "\e177";
  861. }
  862. .glyphicon-transfer:before {
  863. content: "\e178";
  864. }
  865. .glyphicon-cutlery:before {
  866. content: "\e179";
  867. }
  868. .glyphicon-header:before {
  869. content: "\e180";
  870. }
  871. .glyphicon-compressed:before {
  872. content: "\e181";
  873. }
  874. .glyphicon-earphone:before {
  875. content: "\e182";
  876. }
  877. .glyphicon-phone-alt:before {
  878. content: "\e183";
  879. }
  880. .glyphicon-tower:before {
  881. content: "\e184";
  882. }
  883. .glyphicon-stats:before {
  884. content: "\e185";
  885. }
  886. .glyphicon-sd-video:before {
  887. content: "\e186";
  888. }
  889. .glyphicon-hd-video:before {
  890. content: "\e187";
  891. }
  892. .glyphicon-subtitles:before {
  893. content: "\e188";
  894. }
  895. .glyphicon-sound-stereo:before {
  896. content: "\e189";
  897. }
  898. .glyphicon-sound-dolby:before {
  899. content: "\e190";
  900. }
  901. .glyphicon-sound-5-1:before {
  902. content: "\e191";
  903. }
  904. .glyphicon-sound-6-1:before {
  905. content: "\e192";
  906. }
  907. .glyphicon-sound-7-1:before {
  908. content: "\e193";
  909. }
  910. .glyphicon-copyright-mark:before {
  911. content: "\e194";
  912. }
  913. .glyphicon-registration-mark:before {
  914. content: "\e195";
  915. }
  916. .glyphicon-cloud-download:before {
  917. content: "\e197";
  918. }
  919. .glyphicon-cloud-upload:before {
  920. content: "\e198";
  921. }
  922. .glyphicon-tree-conifer:before {
  923. content: "\e199";
  924. }
  925. .glyphicon-tree-deciduous:before {
  926. content: "\e200";
  927. }
  928. .glyphicon-cd:before {
  929. content: "\e201";
  930. }
  931. .glyphicon-save-file:before {
  932. content: "\e202";
  933. }
  934. .glyphicon-open-file:before {
  935. content: "\e203";
  936. }
  937. .glyphicon-level-up:before {
  938. content: "\e204";
  939. }
  940. .glyphicon-copy:before {
  941. content: "\e205";
  942. }
  943. .glyphicon-paste:before {
  944. content: "\e206";
  945. }
  946. .glyphicon-alert:before {
  947. content: "\e209";
  948. }
  949. .glyphicon-equalizer:before {
  950. content: "\e210";
  951. }
  952. .glyphicon-king:before {
  953. content: "\e211";
  954. }
  955. .glyphicon-queen:before {
  956. content: "\e212";
  957. }
  958. .glyphicon-pawn:before {
  959. content: "\e213";
  960. }
  961. .glyphicon-bishop:before {
  962. content: "\e214";
  963. }
  964. .glyphicon-knight:before {
  965. content: "\e215";
  966. }
  967. .glyphicon-baby-formula:before {
  968. content: "\e216";
  969. }
  970. .glyphicon-tent:before {
  971. content: "\26fa";
  972. }
  973. .glyphicon-blackboard:before {
  974. content: "\e218";
  975. }
  976. .glyphicon-bed:before {
  977. content: "\e219";
  978. }
  979. .glyphicon-apple:before {
  980. content: "\f8ff";
  981. }
  982. .glyphicon-erase:before {
  983. content: "\e221";
  984. }
  985. .glyphicon-hourglass:before {
  986. content: "\231b";
  987. }
  988. .glyphicon-lamp:before {
  989. content: "\e223";
  990. }
  991. .glyphicon-duplicate:before {
  992. content: "\e224";
  993. }
  994. .glyphicon-piggy-bank:before {
  995. content: "\e225";
  996. }
  997. .glyphicon-scissors:before {
  998. content: "\e226";
  999. }
  1000. .glyphicon-bitcoin:before {
  1001. content: "\e227";
  1002. }
  1003. .glyphicon-btc:before {
  1004. content: "\e227";
  1005. }
  1006. .glyphicon-xbt:before {
  1007. content: "\e227";
  1008. }
  1009. .glyphicon-yen:before {
  1010. content: "\00a5";
  1011. }
  1012. .glyphicon-jpy:before {
  1013. content: "\00a5";
  1014. }
  1015. .glyphicon-ruble:before {
  1016. content: "\20bd";
  1017. }
  1018. .glyphicon-rub:before {
  1019. content: "\20bd";
  1020. }
  1021. .glyphicon-scale:before {
  1022. content: "\e230";
  1023. }
  1024. .glyphicon-ice-lolly:before {
  1025. content: "\e231";
  1026. }
  1027. .glyphicon-ice-lolly-tasted:before {
  1028. content: "\e232";
  1029. }
  1030. .glyphicon-education:before {
  1031. content: "\e233";
  1032. }
  1033. .glyphicon-option-horizontal:before {
  1034. content: "\e234";
  1035. }
  1036. .glyphicon-option-vertical:before {
  1037. content: "\e235";
  1038. }
  1039. .glyphicon-menu-hamburger:before {
  1040. content: "\e236";
  1041. }
  1042. .glyphicon-modal-window:before {
  1043. content: "\e237";
  1044. }
  1045. .glyphicon-oil:before {
  1046. content: "\e238";
  1047. }
  1048. .glyphicon-grain:before {
  1049. content: "\e239";
  1050. }
  1051. .glyphicon-sunglasses:before {
  1052. content: "\e240";
  1053. }
  1054. .glyphicon-text-size:before {
  1055. content: "\e241";
  1056. }
  1057. .glyphicon-text-color:before {
  1058. content: "\e242";
  1059. }
  1060. .glyphicon-text-background:before {
  1061. content: "\e243";
  1062. }
  1063. .glyphicon-object-align-top:before {
  1064. content: "\e244";
  1065. }
  1066. .glyphicon-object-align-bottom:before {
  1067. content: "\e245";
  1068. }
  1069. .glyphicon-object-align-horizontal:before {
  1070. content: "\e246";
  1071. }
  1072. .glyphicon-object-align-left:before {
  1073. content: "\e247";
  1074. }
  1075. .glyphicon-object-align-vertical:before {
  1076. content: "\e248";
  1077. }
  1078. .glyphicon-object-align-right:before {
  1079. content: "\e249";
  1080. }
  1081. .glyphicon-triangle-right:before {
  1082. content: "\e250";
  1083. }
  1084. .glyphicon-triangle-left:before {
  1085. content: "\e251";
  1086. }
  1087. .glyphicon-triangle-bottom:before {
  1088. content: "\e252";
  1089. }
  1090. .glyphicon-triangle-top:before {
  1091. content: "\e253";
  1092. }
  1093. .glyphicon-console:before {
  1094. content: "\e254";
  1095. }
  1096. .glyphicon-superscript:before {
  1097. content: "\e255";
  1098. }
  1099. .glyphicon-subscript:before {
  1100. content: "\e256";
  1101. }
  1102. .glyphicon-menu-left:before {
  1103. content: "\e257";
  1104. }
  1105. .glyphicon-menu-right:before {
  1106. content: "\e258";
  1107. }
  1108. .glyphicon-menu-down:before {
  1109. content: "\e259";
  1110. }
  1111. .glyphicon-menu-up:before {
  1112. content: "\e260";
  1113. }
  1114. * {
  1115. -webkit-box-sizing: border-box;
  1116. -moz-box-sizing: border-box;
  1117. box-sizing: border-box;
  1118. }
  1119. *:before,
  1120. *:after {
  1121. -webkit-box-sizing: border-box;
  1122. -moz-box-sizing: border-box;
  1123. box-sizing: border-box;
  1124. }
  1125. html {
  1126. font-size: 10px;
  1127. -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
  1128. }
  1129. body {
  1130. font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  1131. font-size: 13px;
  1132. line-height: 1.42857143;
  1133. color: #000;
  1134. background-color: #fff;
  1135. }
  1136. input,
  1137. button,
  1138. select,
  1139. textarea {
  1140. font-family: inherit;
  1141. font-size: inherit;
  1142. line-height: inherit;
  1143. }
  1144. a {
  1145. color: #337ab7;
  1146. text-decoration: none;
  1147. }
  1148. a:hover,
  1149. a:focus {
  1150. color: #23527c;
  1151. text-decoration: underline;
  1152. }
  1153. a:focus {
  1154. outline: thin dotted;
  1155. outline: 5px auto -webkit-focus-ring-color;
  1156. outline-offset: -2px;
  1157. }
  1158. figure {
  1159. margin: 0;
  1160. }
  1161. img {
  1162. vertical-align: middle;
  1163. }
  1164. .img-responsive,
  1165. .thumbnail > img,
  1166. .thumbnail a > img,
  1167. .carousel-inner > .item > img,
  1168. .carousel-inner > .item > a > img {
  1169. display: block;
  1170. max-width: 100%;
  1171. height: auto;
  1172. }
  1173. .img-rounded {
  1174. border-radius: 3px;
  1175. }
  1176. .img-thumbnail {
  1177. padding: 4px;
  1178. line-height: 1.42857143;
  1179. background-color: #fff;
  1180. border: 1px solid #ddd;
  1181. border-radius: 2px;
  1182. -webkit-transition: all 0.2s ease-in-out;
  1183. -o-transition: all 0.2s ease-in-out;
  1184. transition: all 0.2s ease-in-out;
  1185. display: inline-block;
  1186. max-width: 100%;
  1187. height: auto;
  1188. }
  1189. .img-circle {
  1190. border-radius: 50%;
  1191. }
  1192. hr {
  1193. margin-top: 18px;
  1194. margin-bottom: 18px;
  1195. border: 0;
  1196. border-top: 1px solid #eeeeee;
  1197. }
  1198. .sr-only {
  1199. position: absolute;
  1200. width: 1px;
  1201. height: 1px;
  1202. margin: -1px;
  1203. padding: 0;
  1204. overflow: hidden;
  1205. clip: rect(0, 0, 0, 0);
  1206. border: 0;
  1207. }
  1208. .sr-only-focusable:active,
  1209. .sr-only-focusable:focus {
  1210. position: static;
  1211. width: auto;
  1212. height: auto;
  1213. margin: 0;
  1214. overflow: visible;
  1215. clip: auto;
  1216. }
  1217. [role="button"] {
  1218. cursor: pointer;
  1219. }
  1220. h1,
  1221. h2,
  1222. h3,
  1223. h4,
  1224. h5,
  1225. h6,
  1226. .h1,
  1227. .h2,
  1228. .h3,
  1229. .h4,
  1230. .h5,
  1231. .h6 {
  1232. font-family: inherit;
  1233. font-weight: 500;
  1234. line-height: 1.1;
  1235. color: inherit;
  1236. }
  1237. h1 small,
  1238. h2 small,
  1239. h3 small,
  1240. h4 small,
  1241. h5 small,
  1242. h6 small,
  1243. .h1 small,
  1244. .h2 small,
  1245. .h3 small,
  1246. .h4 small,
  1247. .h5 small,
  1248. .h6 small,
  1249. h1 .small,
  1250. h2 .small,
  1251. h3 .small,
  1252. h4 .small,
  1253. h5 .small,
  1254. h6 .small,
  1255. .h1 .small,
  1256. .h2 .small,
  1257. .h3 .small,
  1258. .h4 .small,
  1259. .h5 .small,
  1260. .h6 .small {
  1261. font-weight: normal;
  1262. line-height: 1;
  1263. color: #777777;
  1264. }
  1265. h1,
  1266. .h1,
  1267. h2,
  1268. .h2,
  1269. h3,
  1270. .h3 {
  1271. margin-top: 18px;
  1272. margin-bottom: 9px;
  1273. }
  1274. h1 small,
  1275. .h1 small,
  1276. h2 small,
  1277. .h2 small,
  1278. h3 small,
  1279. .h3 small,
  1280. h1 .small,
  1281. .h1 .small,
  1282. h2 .small,
  1283. .h2 .small,
  1284. h3 .small,
  1285. .h3 .small {
  1286. font-size: 65%;
  1287. }
  1288. h4,
  1289. .h4,
  1290. h5,
  1291. .h5,
  1292. h6,
  1293. .h6 {
  1294. margin-top: 9px;
  1295. margin-bottom: 9px;
  1296. }
  1297. h4 small,
  1298. .h4 small,
  1299. h5 small,
  1300. .h5 small,
  1301. h6 small,
  1302. .h6 small,
  1303. h4 .small,
  1304. .h4 .small,
  1305. h5 .small,
  1306. .h5 .small,
  1307. h6 .small,
  1308. .h6 .small {
  1309. font-size: 75%;
  1310. }
  1311. h1,
  1312. .h1 {
  1313. font-size: 33px;
  1314. }
  1315. h2,
  1316. .h2 {
  1317. font-size: 27px;
  1318. }
  1319. h3,
  1320. .h3 {
  1321. font-size: 23px;
  1322. }
  1323. h4,
  1324. .h4 {
  1325. font-size: 17px;
  1326. }
  1327. h5,
  1328. .h5 {
  1329. font-size: 13px;
  1330. }
  1331. h6,
  1332. .h6 {
  1333. font-size: 12px;
  1334. }
  1335. p {
  1336. margin: 0 0 9px;
  1337. }
  1338. .lead {
  1339. margin-bottom: 18px;
  1340. font-size: 14px;
  1341. font-weight: 300;
  1342. line-height: 1.4;
  1343. }
  1344. @media (min-width: 768px) {
  1345. .lead {
  1346. font-size: 19.5px;
  1347. }
  1348. }
  1349. small,
  1350. .small {
  1351. font-size: 92%;
  1352. }
  1353. mark,
  1354. .mark {
  1355. background-color: #fcf8e3;
  1356. padding: .2em;
  1357. }
  1358. .text-left {
  1359. text-align: left;
  1360. }
  1361. .text-right {
  1362. text-align: right;
  1363. }
  1364. .text-center {
  1365. text-align: center;
  1366. }
  1367. .text-justify {
  1368. text-align: justify;
  1369. }
  1370. .text-nowrap {
  1371. white-space: nowrap;
  1372. }
  1373. .text-lowercase {
  1374. text-transform: lowercase;
  1375. }
  1376. .text-uppercase {
  1377. text-transform: uppercase;
  1378. }
  1379. .text-capitalize {
  1380. text-transform: capitalize;
  1381. }
  1382. .text-muted {
  1383. color: #777777;
  1384. }
  1385. .text-primary {
  1386. color: #337ab7;
  1387. }
  1388. a.text-primary:hover,
  1389. a.text-primary:focus {
  1390. color: #286090;
  1391. }
  1392. .text-success {
  1393. color: #3c763d;
  1394. }
  1395. a.text-success:hover,
  1396. a.text-success:focus {
  1397. color: #2b542c;
  1398. }
  1399. .text-info {
  1400. color: #31708f;
  1401. }
  1402. a.text-info:hover,
  1403. a.text-info:focus {
  1404. color: #245269;
  1405. }
  1406. .text-warning {
  1407. color: #8a6d3b;
  1408. }
  1409. a.text-warning:hover,
  1410. a.text-warning:focus {
  1411. color: #66512c;
  1412. }
  1413. .text-danger {
  1414. color: #a94442;
  1415. }
  1416. a.text-danger:hover,
  1417. a.text-danger:focus {
  1418. color: #843534;
  1419. }
  1420. .bg-primary {
  1421. color: #fff;
  1422. background-color: #337ab7;
  1423. }
  1424. a.bg-primary:hover,
  1425. a.bg-primary:focus {
  1426. background-color: #286090;
  1427. }
  1428. .bg-success {
  1429. background-color: #dff0d8;
  1430. }
  1431. a.bg-success:hover,
  1432. a.bg-success:focus {
  1433. background-color: #c1e2b3;
  1434. }
  1435. .bg-info {
  1436. background-color: #d9edf7;
  1437. }
  1438. a.bg-info:hover,
  1439. a.bg-info:focus {
  1440. background-color: #afd9ee;
  1441. }
  1442. .bg-warning {
  1443. background-color: #fcf8e3;
  1444. }
  1445. a.bg-warning:hover,
  1446. a.bg-warning:focus {
  1447. background-color: #f7ecb5;
  1448. }
  1449. .bg-danger {
  1450. background-color: #f2dede;
  1451. }
  1452. a.bg-danger:hover,
  1453. a.bg-danger:focus {
  1454. background-color: #e4b9b9;
  1455. }
  1456. .page-header {
  1457. padding-bottom: 8px;
  1458. margin: 36px 0 18px;
  1459. border-bottom: 1px solid #eeeeee;
  1460. }
  1461. ul,
  1462. ol {
  1463. margin-top: 0;
  1464. margin-bottom: 9px;
  1465. }
  1466. ul ul,
  1467. ol ul,
  1468. ul ol,
  1469. ol ol {
  1470. margin-bottom: 0;
  1471. }
  1472. .list-unstyled {
  1473. padding-left: 0;
  1474. list-style: none;
  1475. }
  1476. .list-inline {
  1477. padding-left: 0;
  1478. list-style: none;
  1479. margin-left: -5px;
  1480. }
  1481. .list-inline > li {
  1482. display: inline-block;
  1483. padding-left: 5px;
  1484. padding-right: 5px;
  1485. }
  1486. dl {
  1487. margin-top: 0;
  1488. margin-bottom: 18px;
  1489. }
  1490. dt,
  1491. dd {
  1492. line-height: 1.42857143;
  1493. }
  1494. dt {
  1495. font-weight: bold;
  1496. }
  1497. dd {
  1498. margin-left: 0;
  1499. }
  1500. @media (min-width: 541px) {
  1501. .dl-horizontal dt {
  1502. float: left;
  1503. width: 160px;
  1504. clear: left;
  1505. text-align: right;
  1506. overflow: hidden;
  1507. text-overflow: ellipsis;
  1508. white-space: nowrap;
  1509. }
  1510. .dl-horizontal dd {
  1511. margin-left: 180px;
  1512. }
  1513. }
  1514. abbr[title],
  1515. abbr[data-original-title] {
  1516. cursor: help;
  1517. border-bottom: 1px dotted #777777;
  1518. }
  1519. .initialism {
  1520. font-size: 90%;
  1521. text-transform: uppercase;
  1522. }
  1523. blockquote {
  1524. padding: 9px 18px;
  1525. margin: 0 0 18px;
  1526. font-size: inherit;
  1527. border-left: 5px solid #eeeeee;
  1528. }
  1529. blockquote p:last-child,
  1530. blockquote ul:last-child,
  1531. blockquote ol:last-child {
  1532. margin-bottom: 0;
  1533. }
  1534. blockquote footer,
  1535. blockquote small,
  1536. blockquote .small {
  1537. display: block;
  1538. font-size: 80%;
  1539. line-height: 1.42857143;
  1540. color: #777777;
  1541. }
  1542. blockquote footer:before,
  1543. blockquote small:before,
  1544. blockquote .small:before {
  1545. content: '\2014 \00A0';
  1546. }
  1547. .blockquote-reverse,
  1548. blockquote.pull-right {
  1549. padding-right: 15px;
  1550. padding-left: 0;
  1551. border-right: 5px solid #eeeeee;
  1552. border-left: 0;
  1553. text-align: right;
  1554. }
  1555. .blockquote-reverse footer:before,
  1556. blockquote.pull-right footer:before,
  1557. .blockquote-reverse small:before,
  1558. blockquote.pull-right small:before,
  1559. .blockquote-reverse .small:before,
  1560. blockquote.pull-right .small:before {
  1561. content: '';
  1562. }
  1563. .blockquote-reverse footer:after,
  1564. blockquote.pull-right footer:after,
  1565. .blockquote-reverse small:after,
  1566. blockquote.pull-right small:after,
  1567. .blockquote-reverse .small:after,
  1568. blockquote.pull-right .small:after {
  1569. content: '\00A0 \2014';
  1570. }
  1571. address {
  1572. margin-bottom: 18px;
  1573. font-style: normal;
  1574. line-height: 1.42857143;
  1575. }
  1576. code,
  1577. kbd,
  1578. pre,
  1579. samp {
  1580. font-family: monospace;
  1581. }
  1582. code {
  1583. padding: 2px 4px;
  1584. font-size: 90%;
  1585. color: #c7254e;
  1586. background-color: #f9f2f4;
  1587. border-radius: 2px;
  1588. }
  1589. kbd {
  1590. padding: 2px 4px;
  1591. font-size: 90%;
  1592. color: #888;
  1593. background-color: transparent;
  1594. border-radius: 1px;
  1595. box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
  1596. }
  1597. kbd kbd {
  1598. padding: 0;
  1599. font-size: 100%;
  1600. font-weight: bold;
  1601. box-shadow: none;
  1602. }
  1603. pre {
  1604. display: block;
  1605. padding: 8.5px;
  1606. margin: 0 0 9px;
  1607. font-size: 12px;
  1608. line-height: 1.42857143;
  1609. word-break: break-all;
  1610. word-wrap: break-word;
  1611. color: #333333;
  1612. background-color: #f5f5f5;
  1613. border: 1px solid #ccc;
  1614. border-radius: 2px;
  1615. }
  1616. pre code {
  1617. padding: 0;
  1618. font-size: inherit;
  1619. color: inherit;
  1620. white-space: pre-wrap;
  1621. background-color: transparent;
  1622. border-radius: 0;
  1623. }
  1624. .pre-scrollable {
  1625. max-height: 340px;
  1626. overflow-y: scroll;
  1627. }
  1628. .container {
  1629. margin-right: auto;
  1630. margin-left: auto;
  1631. padding-left: 0px;
  1632. padding-right: 0px;
  1633. }
  1634. @media (min-width: 768px) {
  1635. .container {
  1636. width: 768px;
  1637. }
  1638. }
  1639. @media (min-width: 992px) {
  1640. .container {
  1641. width: 940px;
  1642. }
  1643. }
  1644. @media (min-width: 1200px) {
  1645. .container {
  1646. width: 1140px;
  1647. }
  1648. }
  1649. .container-fluid {
  1650. margin-right: auto;
  1651. margin-left: auto;
  1652. padding-left: 0px;
  1653. padding-right: 0px;
  1654. }
  1655. .row {
  1656. margin-left: 0px;
  1657. margin-right: 0px;
  1658. }
  1659. .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
  1660. position: relative;
  1661. min-height: 1px;
  1662. padding-left: 0px;
  1663. padding-right: 0px;
  1664. }
  1665. .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
  1666. float: left;
  1667. }
  1668. .col-xs-12 {
  1669. width: 100%;
  1670. }
  1671. .col-xs-11 {
  1672. width: 91.66666667%;
  1673. }
  1674. .col-xs-10 {
  1675. width: 83.33333333%;
  1676. }
  1677. .col-xs-9 {
  1678. width: 75%;
  1679. }
  1680. .col-xs-8 {
  1681. width: 66.66666667%;
  1682. }
  1683. .col-xs-7 {
  1684. width: 58.33333333%;
  1685. }
  1686. .col-xs-6 {
  1687. width: 50%;
  1688. }
  1689. .col-xs-5 {
  1690. width: 41.66666667%;
  1691. }
  1692. .col-xs-4 {
  1693. width: 33.33333333%;
  1694. }
  1695. .col-xs-3 {
  1696. width: 25%;
  1697. }
  1698. .col-xs-2 {
  1699. width: 16.66666667%;
  1700. }
  1701. .col-xs-1 {
  1702. width: 8.33333333%;
  1703. }
  1704. .col-xs-pull-12 {
  1705. right: 100%;
  1706. }
  1707. .col-xs-pull-11 {
  1708. right: 91.66666667%;
  1709. }
  1710. .col-xs-pull-10 {
  1711. right: 83.33333333%;
  1712. }
  1713. .col-xs-pull-9 {
  1714. right: 75%;
  1715. }
  1716. .col-xs-pull-8 {
  1717. right: 66.66666667%;
  1718. }
  1719. .col-xs-pull-7 {
  1720. right: 58.33333333%;
  1721. }
  1722. .col-xs-pull-6 {
  1723. right: 50%;
  1724. }
  1725. .col-xs-pull-5 {
  1726. right: 41.66666667%;
  1727. }
  1728. .col-xs-pull-4 {
  1729. right: 33.33333333%;
  1730. }
  1731. .col-xs-pull-3 {
  1732. right: 25%;
  1733. }
  1734. .col-xs-pull-2 {
  1735. right: 16.66666667%;
  1736. }
  1737. .col-xs-pull-1 {
  1738. right: 8.33333333%;
  1739. }
  1740. .col-xs-pull-0 {
  1741. right: auto;
  1742. }
  1743. .col-xs-push-12 {
  1744. left: 100%;
  1745. }
  1746. .col-xs-push-11 {
  1747. left: 91.66666667%;
  1748. }
  1749. .col-xs-push-10 {
  1750. left: 83.33333333%;
  1751. }
  1752. .col-xs-push-9 {
  1753. left: 75%;
  1754. }
  1755. .col-xs-push-8 {
  1756. left: 66.66666667%;
  1757. }
  1758. .col-xs-push-7 {
  1759. left: 58.33333333%;
  1760. }
  1761. .col-xs-push-6 {
  1762. left: 50%;
  1763. }
  1764. .col-xs-push-5 {
  1765. left: 41.66666667%;
  1766. }
  1767. .col-xs-push-4 {
  1768. left: 33.33333333%;
  1769. }
  1770. .col-xs-push-3 {
  1771. left: 25%;
  1772. }
  1773. .col-xs-push-2 {
  1774. left: 16.66666667%;
  1775. }
  1776. .col-xs-push-1 {
  1777. left: 8.33333333%;
  1778. }
  1779. .col-xs-push-0 {
  1780. left: auto;
  1781. }
  1782. .col-xs-offset-12 {
  1783. margin-left: 100%;
  1784. }
  1785. .col-xs-offset-11 {
  1786. margin-left: 91.66666667%;
  1787. }
  1788. .col-xs-offset-10 {
  1789. margin-left: 83.33333333%;
  1790. }
  1791. .col-xs-offset-9 {
  1792. margin-left: 75%;
  1793. }
  1794. .col-xs-offset-8 {
  1795. margin-left: 66.66666667%;
  1796. }
  1797. .col-xs-offset-7 {
  1798. margin-left: 58.33333333%;
  1799. }
  1800. .col-xs-offset-6 {
  1801. margin-left: 50%;
  1802. }
  1803. .col-xs-offset-5 {
  1804. margin-left: 41.66666667%;
  1805. }
  1806. .col-xs-offset-4 {
  1807. margin-left: 33.33333333%;
  1808. }
  1809. .col-xs-offset-3 {
  1810. margin-left: 25%;
  1811. }
  1812. .col-xs-offset-2 {
  1813. margin-left: 16.66666667%;
  1814. }
  1815. .col-xs-offset-1 {
  1816. margin-left: 8.33333333%;
  1817. }
  1818. .col-xs-offset-0 {
  1819. margin-left: 0%;
  1820. }
  1821. @media (min-width: 768px) {
  1822. .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
  1823. float: left;
  1824. }
  1825. .col-sm-12 {
  1826. width: 100%;
  1827. }
  1828. .col-sm-11 {
  1829. width: 91.66666667%;
  1830. }
  1831. .col-sm-10 {
  1832. width: 83.33333333%;
  1833. }
  1834. .col-sm-9 {
  1835. width: 75%;
  1836. }
  1837. .col-sm-8 {
  1838. width: 66.66666667%;
  1839. }
  1840. .col-sm-7 {
  1841. width: 58.33333333%;
  1842. }
  1843. .col-sm-6 {
  1844. width: 50%;
  1845. }
  1846. .col-sm-5 {
  1847. width: 41.66666667%;
  1848. }
  1849. .col-sm-4 {
  1850. width: 33.33333333%;
  1851. }
  1852. .col-sm-3 {
  1853. width: 25%;
  1854. }
  1855. .col-sm-2 {
  1856. width: 16.66666667%;
  1857. }
  1858. .col-sm-1 {
  1859. width: 8.33333333%;
  1860. }
  1861. .col-sm-pull-12 {
  1862. right: 100%;
  1863. }
  1864. .col-sm-pull-11 {
  1865. right: 91.66666667%;
  1866. }
  1867. .col-sm-pull-10 {
  1868. right: 83.33333333%;
  1869. }
  1870. .col-sm-pull-9 {
  1871. right: 75%;
  1872. }
  1873. .col-sm-pull-8 {
  1874. right: 66.66666667%;
  1875. }
  1876. .col-sm-pull-7 {
  1877. right: 58.33333333%;
  1878. }
  1879. .col-sm-pull-6 {
  1880. right: 50%;
  1881. }
  1882. .col-sm-pull-5 {
  1883. right: 41.66666667%;
  1884. }
  1885. .col-sm-pull-4 {
  1886. right: 33.33333333%;
  1887. }
  1888. .col-sm-pull-3 {
  1889. right: 25%;
  1890. }
  1891. .col-sm-pull-2 {
  1892. right: 16.66666667%;
  1893. }
  1894. .col-sm-pull-1 {
  1895. right: 8.33333333%;
  1896. }
  1897. .col-sm-pull-0 {
  1898. right: auto;
  1899. }
  1900. .col-sm-push-12 {
  1901. left: 100%;
  1902. }
  1903. .col-sm-push-11 {
  1904. left: 91.66666667%;
  1905. }
  1906. .col-sm-push-10 {
  1907. left: 83.33333333%;
  1908. }
  1909. .col-sm-push-9 {
  1910. left: 75%;
  1911. }
  1912. .col-sm-push-8 {
  1913. left: 66.66666667%;
  1914. }
  1915. .col-sm-push-7 {
  1916. left: 58.33333333%;
  1917. }
  1918. .col-sm-push-6 {
  1919. left: 50%;
  1920. }
  1921. .col-sm-push-5 {
  1922. left: 41.66666667%;
  1923. }
  1924. .col-sm-push-4 {
  1925. left: 33.33333333%;
  1926. }
  1927. .col-sm-push-3 {
  1928. left: 25%;
  1929. }
  1930. .col-sm-push-2 {
  1931. left: 16.66666667%;
  1932. }
  1933. .col-sm-push-1 {
  1934. left: 8.33333333%;
  1935. }
  1936. .col-sm-push-0 {
  1937. left: auto;
  1938. }
  1939. .col-sm-offset-12 {
  1940. margin-left: 100%;
  1941. }
  1942. .col-sm-offset-11 {
  1943. margin-left: 91.66666667%;
  1944. }
  1945. .col-sm-offset-10 {
  1946. margin-left: 83.33333333%;
  1947. }
  1948. .col-sm-offset-9 {
  1949. margin-left: 75%;
  1950. }
  1951. .col-sm-offset-8 {
  1952. margin-left: 66.66666667%;
  1953. }
  1954. .col-sm-offset-7 {
  1955. margin-left: 58.33333333%;
  1956. }
  1957. .col-sm-offset-6 {
  1958. margin-left: 50%;
  1959. }
  1960. .col-sm-offset-5 {
  1961. margin-left: 41.66666667%;
  1962. }
  1963. .col-sm-offset-4 {
  1964. margin-left: 33.33333333%;
  1965. }
  1966. .col-sm-offset-3 {
  1967. margin-left: 25%;
  1968. }
  1969. .col-sm-offset-2 {
  1970. margin-left: 16.66666667%;
  1971. }
  1972. .col-sm-offset-1 {
  1973. margin-left: 8.33333333%;
  1974. }
  1975. .col-sm-offset-0 {
  1976. margin-left: 0%;
  1977. }
  1978. }
  1979. @media (min-width: 992px) {
  1980. .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
  1981. float: left;
  1982. }
  1983. .col-md-12 {
  1984. width: 100%;
  1985. }
  1986. .col-md-11 {
  1987. width: 91.66666667%;
  1988. }
  1989. .col-md-10 {
  1990. width: 83.33333333%;
  1991. }
  1992. .col-md-9 {
  1993. width: 75%;
  1994. }
  1995. .col-md-8 {
  1996. width: 66.66666667%;
  1997. }
  1998. .col-md-7 {
  1999. width: 58.33333333%;
  2000. }
  2001. .col-md-6 {
  2002. width: 50%;
  2003. }
  2004. .col-md-5 {
  2005. width: 41.66666667%;
  2006. }
  2007. .col-md-4 {
  2008. width: 33.33333333%;
  2009. }
  2010. .col-md-3 {
  2011. width: 25%;
  2012. }
  2013. .col-md-2 {
  2014. width: 16.66666667%;
  2015. }
  2016. .col-md-1 {
  2017. width: 8.33333333%;
  2018. }
  2019. .col-md-pull-12 {
  2020. right: 100%;
  2021. }
  2022. .col-md-pull-11 {
  2023. right: 91.66666667%;
  2024. }
  2025. .col-md-pull-10 {
  2026. right: 83.33333333%;
  2027. }
  2028. .col-md-pull-9 {
  2029. right: 75%;
  2030. }
  2031. .col-md-pull-8 {
  2032. right: 66.66666667%;
  2033. }
  2034. .col-md-pull-7 {
  2035. right: 58.33333333%;
  2036. }
  2037. .col-md-pull-6 {
  2038. right: 50%;
  2039. }
  2040. .col-md-pull-5 {
  2041. right: 41.66666667%;
  2042. }
  2043. .col-md-pull-4 {
  2044. right: 33.33333333%;
  2045. }
  2046. .col-md-pull-3 {
  2047. right: 25%;
  2048. }
  2049. .col-md-pull-2 {
  2050. right: 16.66666667%;
  2051. }
  2052. .col-md-pull-1 {
  2053. right: 8.33333333%;
  2054. }
  2055. .col-md-pull-0 {
  2056. right: auto;
  2057. }
  2058. .col-md-push-12 {
  2059. left: 100%;
  2060. }
  2061. .col-md-push-11 {
  2062. left: 91.66666667%;
  2063. }
  2064. .col-md-push-10 {
  2065. left: 83.33333333%;
  2066. }
  2067. .col-md-push-9 {
  2068. left: 75%;
  2069. }
  2070. .col-md-push-8 {
  2071. left: 66.66666667%;
  2072. }
  2073. .col-md-push-7 {
  2074. left: 58.33333333%;
  2075. }
  2076. .col-md-push-6 {
  2077. left: 50%;
  2078. }
  2079. .col-md-push-5 {
  2080. left: 41.66666667%;
  2081. }
  2082. .col-md-push-4 {
  2083. left: 33.33333333%;
  2084. }
  2085. .col-md-push-3 {
  2086. left: 25%;
  2087. }
  2088. .col-md-push-2 {
  2089. left: 16.66666667%;
  2090. }
  2091. .col-md-push-1 {
  2092. left: 8.33333333%;
  2093. }
  2094. .col-md-push-0 {
  2095. left: auto;
  2096. }
  2097. .col-md-offset-12 {
  2098. margin-left: 100%;
  2099. }
  2100. .col-md-offset-11 {
  2101. margin-left: 91.66666667%;
  2102. }
  2103. .col-md-offset-10 {
  2104. margin-left: 83.33333333%;
  2105. }
  2106. .col-md-offset-9 {
  2107. margin-left: 75%;
  2108. }
  2109. .col-md-offset-8 {
  2110. margin-left: 66.66666667%;
  2111. }
  2112. .col-md-offset-7 {
  2113. margin-left: 58.33333333%;
  2114. }
  2115. .col-md-offset-6 {
  2116. margin-left: 50%;
  2117. }
  2118. .col-md-offset-5 {
  2119. margin-left: 41.66666667%;
  2120. }
  2121. .col-md-offset-4 {
  2122. margin-left: 33.33333333%;
  2123. }
  2124. .col-md-offset-3 {
  2125. margin-left: 25%;
  2126. }
  2127. .col-md-offset-2 {
  2128. margin-left: 16.66666667%;
  2129. }
  2130. .col-md-offset-1 {
  2131. margin-left: 8.33333333%;
  2132. }
  2133. .col-md-offset-0 {
  2134. margin-left: 0%;
  2135. }
  2136. }
  2137. @media (min-width: 1200px) {
  2138. .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
  2139. float: left;
  2140. }
  2141. .col-lg-12 {
  2142. width: 100%;
  2143. }
  2144. .col-lg-11 {
  2145. width: 91.66666667%;
  2146. }
  2147. .col-lg-10 {
  2148. width: 83.33333333%;
  2149. }
  2150. .col-lg-9 {
  2151. width: 75%;
  2152. }
  2153. .col-lg-8 {
  2154. width: 66.66666667%;
  2155. }
  2156. .col-lg-7 {
  2157. width: 58.33333333%;
  2158. }
  2159. .col-lg-6 {
  2160. width: 50%;
  2161. }
  2162. .col-lg-5 {
  2163. width: 41.66666667%;
  2164. }
  2165. .col-lg-4 {
  2166. width: 33.33333333%;
  2167. }
  2168. .col-lg-3 {
  2169. width: 25%;
  2170. }
  2171. .col-lg-2 {
  2172. width: 16.66666667%;
  2173. }
  2174. .col-lg-1 {
  2175. width: 8.33333333%;
  2176. }
  2177. .col-lg-pull-12 {
  2178. right: 100%;
  2179. }
  2180. .col-lg-pull-11 {
  2181. right: 91.66666667%;
  2182. }
  2183. .col-lg-pull-10 {
  2184. right: 83.33333333%;
  2185. }
  2186. .col-lg-pull-9 {
  2187. right: 75%;
  2188. }
  2189. .col-lg-pull-8 {
  2190. right: 66.66666667%;
  2191. }
  2192. .col-lg-pull-7 {
  2193. right: 58.33333333%;
  2194. }
  2195. .col-lg-pull-6 {
  2196. right: 50%;
  2197. }
  2198. .col-lg-pull-5 {
  2199. right: 41.66666667%;
  2200. }
  2201. .col-lg-pull-4 {
  2202. right: 33.33333333%;
  2203. }
  2204. .col-lg-pull-3 {
  2205. right: 25%;
  2206. }
  2207. .col-lg-pull-2 {
  2208. right: 16.66666667%;
  2209. }
  2210. .col-lg-pull-1 {
  2211. right: 8.33333333%;
  2212. }
  2213. .col-lg-pull-0 {
  2214. right: auto;
  2215. }
  2216. .col-lg-push-12 {
  2217. left: 100%;
  2218. }
  2219. .col-lg-push-11 {
  2220. left: 91.66666667%;
  2221. }
  2222. .col-lg-push-10 {
  2223. left: 83.33333333%;
  2224. }
  2225. .col-lg-push-9 {
  2226. left: 75%;
  2227. }
  2228. .col-lg-push-8 {
  2229. left: 66.66666667%;
  2230. }
  2231. .col-lg-push-7 {
  2232. left: 58.33333333%;
  2233. }
  2234. .col-lg-push-6 {
  2235. left: 50%;
  2236. }
  2237. .col-lg-push-5 {
  2238. left: 41.66666667%;
  2239. }
  2240. .col-lg-push-4 {
  2241. left: 33.33333333%;
  2242. }
  2243. .col-lg-push-3 {
  2244. left: 25%;
  2245. }
  2246. .col-lg-push-2 {
  2247. left: 16.66666667%;
  2248. }
  2249. .col-lg-push-1 {
  2250. left: 8.33333333%;
  2251. }
  2252. .col-lg-push-0 {
  2253. left: auto;
  2254. }
  2255. .col-lg-offset-12 {
  2256. margin-left: 100%;
  2257. }
  2258. .col-lg-offset-11 {
  2259. margin-left: 91.66666667%;
  2260. }
  2261. .col-lg-offset-10 {
  2262. margin-left: 83.33333333%;
  2263. }
  2264. .col-lg-offset-9 {
  2265. margin-left: 75%;
  2266. }
  2267. .col-lg-offset-8 {
  2268. margin-left: 66.66666667%;
  2269. }
  2270. .col-lg-offset-7 {
  2271. margin-left: 58.33333333%;
  2272. }
  2273. .col-lg-offset-6 {
  2274. margin-left: 50%;
  2275. }
  2276. .col-lg-offset-5 {
  2277. margin-left: 41.66666667%;
  2278. }
  2279. .col-lg-offset-4 {
  2280. margin-left: 33.33333333%;
  2281. }
  2282. .col-lg-offset-3 {
  2283. margin-left: 25%;
  2284. }
  2285. .col-lg-offset-2 {
  2286. margin-left: 16.66666667%;
  2287. }
  2288. .col-lg-offset-1 {
  2289. margin-left: 8.33333333%;
  2290. }
  2291. .col-lg-offset-0 {
  2292. margin-left: 0%;
  2293. }
  2294. }
  2295. table {
  2296. background-color: transparent;
  2297. }
  2298. caption {
  2299. padding-top: 8px;
  2300. padding-bottom: 8px;
  2301. color: #777777;
  2302. text-align: left;
  2303. }
  2304. th {
  2305. text-align: left;
  2306. }
  2307. .table {
  2308. width: 100%;
  2309. max-width: 100%;
  2310. margin-bottom: 18px;
  2311. }
  2312. .table > thead > tr > th,
  2313. .table > tbody > tr > th,
  2314. .table > tfoot > tr > th,
  2315. .table > thead > tr > td,
  2316. .table > tbody > tr > td,
  2317. .table > tfoot > tr > td {
  2318. padding: 8px;
  2319. line-height: 1.42857143;
  2320. vertical-align: top;
  2321. border-top: 1px solid #ddd;
  2322. }
  2323. .table > thead > tr > th {
  2324. vertical-align: bottom;
  2325. border-bottom: 2px solid #ddd;
  2326. }
  2327. .table > caption + thead > tr:first-child > th,
  2328. .table > colgroup + thead > tr:first-child > th,
  2329. .table > thead:first-child > tr:first-child > th,
  2330. .table > caption + thead > tr:first-child > td,
  2331. .table > colgroup + thead > tr:first-child > td,
  2332. .table > thead:first-child > tr:first-child > td {
  2333. border-top: 0;
  2334. }
  2335. .table > tbody + tbody {
  2336. border-top: 2px solid #ddd;
  2337. }
  2338. .table .table {
  2339. background-color: #fff;
  2340. }
  2341. .table-condensed > thead > tr > th,
  2342. .table-condensed > tbody > tr > th,
  2343. .table-condensed > tfoot > tr > th,
  2344. .table-condensed > thead > tr > td,
  2345. .table-condensed > tbody > tr > td,
  2346. .table-condensed > tfoot > tr > td {
  2347. padding: 5px;
  2348. }
  2349. .table-bordered {
  2350. border: 1px solid #ddd;
  2351. }
  2352. .table-bordered > thead > tr > th,
  2353. .table-bordered > tbody > tr > th,
  2354. .table-bordered > tfoot > tr > th,
  2355. .table-bordered > thead > tr > td,
  2356. .table-bordered > tbody > tr > td,
  2357. .table-bordered > tfoot > tr > td {
  2358. border: 1px solid #ddd;
  2359. }
  2360. .table-bordered > thead > tr > th,
  2361. .table-bordered > thead > tr > td {
  2362. border-bottom-width: 2px;
  2363. }
  2364. .table-striped > tbody > tr:nth-of-type(odd) {
  2365. background-color: #f9f9f9;
  2366. }
  2367. .table-hover > tbody > tr:hover {
  2368. background-color: #f5f5f5;
  2369. }
  2370. table col[class*="col-"] {
  2371. position: static;
  2372. float: none;
  2373. display: table-column;
  2374. }
  2375. table td[class*="col-"],
  2376. table th[class*="col-"] {
  2377. position: static;
  2378. float: none;
  2379. display: table-cell;
  2380. }
  2381. .table > thead > tr > td.active,
  2382. .table > tbody > tr > td.active,
  2383. .table > tfoot > tr > td.active,
  2384. .table > thead > tr > th.active,
  2385. .table > tbody > tr > th.active,
  2386. .table > tfoot > tr > th.active,
  2387. .table > thead > tr.active > td,
  2388. .table > tbody > tr.active > td,
  2389. .table > tfoot > tr.active > td,
  2390. .table > thead > tr.active > th,
  2391. .table > tbody > tr.active > th,
  2392. .table > tfoot > tr.active > th {
  2393. background-color: #f5f5f5;
  2394. }
  2395. .table-hover > tbody > tr > td.active:hover,
  2396. .table-hover > tbody > tr > th.active:hover,
  2397. .table-hover > tbody > tr.active:hover > td,
  2398. .table-hover > tbody > tr:hover > .active,
  2399. .table-hover > tbody > tr.active:hover > th {
  2400. background-color: #e8e8e8;
  2401. }
  2402. .table > thead > tr > td.success,
  2403. .table > tbody > tr > td.success,
  2404. .table > tfoot > tr > td.success,
  2405. .table > thead > tr > th.success,
  2406. .table > tbody > tr > th.success,
  2407. .table > tfoot > tr > th.success,
  2408. .table > thead > tr.success > td,
  2409. .table > tbody > tr.success > td,
  2410. .table > tfoot > tr.success > td,
  2411. .table > thead > tr.success > th,
  2412. .table > tbody > tr.success > th,
  2413. .table > tfoot > tr.success > th {
  2414. background-color: #dff0d8;
  2415. }
  2416. .table-hover > tbody > tr > td.success:hover,
  2417. .table-hover > tbody > tr > th.success:hover,
  2418. .table-hover > tbody > tr.success:hover > td,
  2419. .table-hover > tbody > tr:hover > .success,
  2420. .table-hover > tbody > tr.success:hover > th {
  2421. background-color: #d0e9c6;
  2422. }
  2423. .table > thead > tr > td.info,
  2424. .table > tbody > tr > td.info,
  2425. .table > tfoot > tr > td.info,
  2426. .table > thead > tr > th.info,
  2427. .table > tbody > tr > th.info,
  2428. .table > tfoot > tr > th.info,
  2429. .table > thead > tr.info > td,
  2430. .table > tbody > tr.info > td,
  2431. .table > tfoot > tr.info > td,
  2432. .table > thead > tr.info > th,
  2433. .table > tbody > tr.info > th,
  2434. .table > tfoot > tr.info > th {
  2435. background-color: #d9edf7;
  2436. }
  2437. .table-hover > tbody > tr > td.info:hover,
  2438. .table-hover > tbody > tr > th.info:hover,
  2439. .table-hover > tbody > tr.info:hover > td,
  2440. .table-hover > tbody > tr:hover > .info,
  2441. .table-hover > tbody > tr.info:hover > th {
  2442. background-color: #c4e3f3;
  2443. }
  2444. .table > thead > tr > td.warning,
  2445. .table > tbody > tr > td.warning,
  2446. .table > tfoot > tr > td.warning,
  2447. .table > thead > tr > th.warning,
  2448. .table > tbody > tr > th.warning,
  2449. .table > tfoot > tr > th.warning,
  2450. .table > thead > tr.warning > td,
  2451. .table > tbody > tr.warning > td,
  2452. .table > tfoot > tr.warning > td,
  2453. .table > thead > tr.warning > th,
  2454. .table > tbody > tr.warning > th,
  2455. .table > tfoot > tr.warning > th {
  2456. background-color: #fcf8e3;
  2457. }
  2458. .table-hover > tbody > tr > td.warning:hover,
  2459. .table-hover > tbody > tr > th.warning:hover,
  2460. .table-hover > tbody > tr.warning:hover > td,
  2461. .table-hover > tbody > tr:hover > .warning,
  2462. .table-hover > tbody > tr.warning:hover > th {
  2463. background-color: #faf2cc;
  2464. }
  2465. .table > thead > tr > td.danger,
  2466. .table > tbody > tr > td.danger,
  2467. .table > tfoot > tr > td.danger,
  2468. .table > thead > tr > th.danger,
  2469. .table > tbody > tr > th.danger,
  2470. .table > tfoot > tr > th.danger,
  2471. .table > thead > tr.danger > td,
  2472. .table > tbody > tr.danger > td,
  2473. .table > tfoot > tr.danger > td,
  2474. .table > thead > tr.danger > th,
  2475. .table > tbody > tr.danger > th,
  2476. .table > tfoot > tr.danger > th {
  2477. background-color: #f2dede;
  2478. }
  2479. .table-hover > tbody > tr > td.danger:hover,
  2480. .table-hover > tbody > tr > th.danger:hover,
  2481. .table-hover > tbody > tr.danger:hover > td,
  2482. .table-hover > tbody > tr:hover > .danger,
  2483. .table-hover > tbody > tr.danger:hover > th {
  2484. background-color: #ebcccc;
  2485. }
  2486. .table-responsive {
  2487. overflow-x: auto;
  2488. min-height: 0.01%;
  2489. }
  2490. @media screen and (max-width: 767px) {
  2491. .table-responsive {
  2492. width: 100%;
  2493. margin-bottom: 13.5px;
  2494. overflow-y: hidden;
  2495. -ms-overflow-style: -ms-autohiding-scrollbar;
  2496. border: 1px solid #ddd;
  2497. }
  2498. .table-responsive > .table {
  2499. margin-bottom: 0;
  2500. }
  2501. .table-responsive > .table > thead > tr > th,
  2502. .table-responsive > .table > tbody > tr > th,
  2503. .table-responsive > .table > tfoot > tr > th,
  2504. .table-responsive > .table > thead > tr > td,
  2505. .table-responsive > .table > tbody > tr > td,
  2506. .table-responsive > .table > tfoot > tr > td {
  2507. white-space: nowrap;
  2508. }
  2509. .table-responsive > .table-bordered {
  2510. border: 0;
  2511. }
  2512. .table-responsive > .table-bordered > thead > tr > th:first-child,
  2513. .table-responsive > .table-bordered > tbody > tr > th:first-child,
  2514. .table-responsive > .table-bordered > tfoot > tr > th:first-child,
  2515. .table-responsive > .table-bordered > thead > tr > td:first-child,
  2516. .table-responsive > .table-bordered > tbody > tr > td:first-child,
  2517. .table-responsive > .table-bordered > tfoot > tr > td:first-child {
  2518. border-left: 0;
  2519. }
  2520. .table-responsive > .table-bordered > thead > tr > th:last-child,
  2521. .table-responsive > .table-bordered > tbody > tr > th:last-child,
  2522. .table-responsive > .table-bordered > tfoot > tr > th:last-child,
  2523. .table-responsive > .table-bordered > thead > tr > td:last-child,
  2524. .table-responsive > .table-bordered > tbody > tr > td:last-child,
  2525. .table-responsive > .table-bordered > tfoot > tr > td:last-child {
  2526. border-right: 0;
  2527. }
  2528. .table-responsive > .table-bordered > tbody > tr:last-child > th,
  2529. .table-responsive > .table-bordered > tfoot > tr:last-child > th,
  2530. .table-responsive > .table-bordered > tbody > tr:last-child > td,
  2531. .table-responsive > .table-bordered > tfoot > tr:last-child > td {
  2532. border-bottom: 0;
  2533. }
  2534. }
  2535. fieldset {
  2536. padding: 0;
  2537. margin: 0;
  2538. border: 0;
  2539. min-width: 0;
  2540. }
  2541. legend {
  2542. display: block;
  2543. width: 100%;
  2544. padding: 0;
  2545. margin-bottom: 18px;
  2546. font-size: 19.5px;
  2547. line-height: inherit;
  2548. color: #333333;
  2549. border: 0;
  2550. border-bottom: 1px solid #e5e5e5;
  2551. }
  2552. label {
  2553. display: inline-block;
  2554. max-width: 100%;
  2555. margin-bottom: 5px;
  2556. font-weight: bold;
  2557. }
  2558. input[type="search"] {
  2559. -webkit-box-sizing: border-box;
  2560. -moz-box-sizing: border-box;
  2561. box-sizing: border-box;
  2562. }
  2563. input[type="radio"],
  2564. input[type="checkbox"] {
  2565. margin: 4px 0 0;
  2566. margin-top: 1px \9;
  2567. line-height: normal;
  2568. }
  2569. input[type="file"] {
  2570. display: block;
  2571. }
  2572. input[type="range"] {
  2573. display: block;
  2574. width: 100%;
  2575. }
  2576. select[multiple],
  2577. select[size] {
  2578. height: auto;
  2579. }
  2580. input[type="file"]:focus,
  2581. input[type="radio"]:focus,
  2582. input[type="checkbox"]:focus {
  2583. outline: thin dotted;
  2584. outline: 5px auto -webkit-focus-ring-color;
  2585. outline-offset: -2px;
  2586. }
  2587. output {
  2588. display: block;
  2589. padding-top: 7px;
  2590. font-size: 13px;
  2591. line-height: 1.42857143;
  2592. color: #555555;
  2593. }
  2594. .form-control {
  2595. display: block;
  2596. width: 100%;
  2597. height: 32px;
  2598. padding: 6px 12px;
  2599. font-size: 13px;
  2600. line-height: 1.42857143;
  2601. color: #555555;
  2602. background-color: #fff;
  2603. background-image: none;
  2604. border: 1px solid #ccc;
  2605. border-radius: 2px;
  2606. -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  2607. box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  2608. -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  2609. -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  2610. transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  2611. }
  2612. .form-control:focus {
  2613. border-color: #66afe9;
  2614. outline: 0;
  2615. -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
  2616. box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
  2617. }
  2618. .form-control::-moz-placeholder {
  2619. color: #999;
  2620. opacity: 1;
  2621. }
  2622. .form-control:-ms-input-placeholder {
  2623. color: #999;
  2624. }
  2625. .form-control::-webkit-input-placeholder {
  2626. color: #999;
  2627. }
  2628. .form-control::-ms-expand {
  2629. border: 0;
  2630. background-color: transparent;
  2631. }
  2632. .form-control[disabled],
  2633. .form-control[readonly],
  2634. fieldset[disabled] .form-control {
  2635. background-color: #eeeeee;
  2636. opacity: 1;
  2637. }
  2638. .form-control[disabled],
  2639. fieldset[disabled] .form-control {
  2640. cursor: not-allowed;
  2641. }
  2642. textarea.form-control {
  2643. height: auto;
  2644. }
  2645. input[type="search"] {
  2646. -webkit-appearance: none;
  2647. }
  2648. @media screen and (-webkit-min-device-pixel-ratio: 0) {
  2649. input[type="date"].form-control,
  2650. input[type="time"].form-control,
  2651. input[type="datetime-local"].form-control,
  2652. input[type="month"].form-control {
  2653. line-height: 32px;
  2654. }
  2655. input[type="date"].input-sm,
  2656. input[type="time"].input-sm,
  2657. input[type="datetime-local"].input-sm,
  2658. input[type="month"].input-sm,
  2659. .input-group-sm input[type="date"],
  2660. .input-group-sm input[type="time"],
  2661. .input-group-sm input[type="datetime-local"],
  2662. .input-group-sm input[type="month"] {
  2663. line-height: 30px;
  2664. }
  2665. input[type="date"].input-lg,
  2666. input[type="time"].input-lg,
  2667. input[type="datetime-local"].input-lg,
  2668. input[type="month"].input-lg,
  2669. .input-group-lg input[type="date"],
  2670. .input-group-lg input[type="time"],
  2671. .input-group-lg input[type="datetime-local"],
  2672. .input-group-lg input[type="month"] {
  2673. line-height: 45px;
  2674. }
  2675. }
  2676. .form-group {
  2677. margin-bottom: 15px;
  2678. }
  2679. .radio,
  2680. .checkbox {
  2681. position: relative;
  2682. display: block;
  2683. margin-top: 10px;
  2684. margin-bottom: 10px;
  2685. }
  2686. .radio label,
  2687. .checkbox label {
  2688. min-height: 18px;
  2689. padding-left: 20px;
  2690. margin-bottom: 0;
  2691. font-weight: normal;
  2692. cursor: pointer;
  2693. }
  2694. .radio input[type="radio"],
  2695. .radio-inline input[type="radio"],
  2696. .checkbox input[type="checkbox"],
  2697. .checkbox-inline input[type="checkbox"] {
  2698. position: absolute;
  2699. margin-left: -20px;
  2700. margin-top: 4px \9;
  2701. }
  2702. .radio + .radio,
  2703. .checkbox + .checkbox {
  2704. margin-top: -5px;
  2705. }
  2706. .radio-inline,
  2707. .checkbox-inline {
  2708. position: relative;
  2709. display: inline-block;
  2710. padding-left: 20px;
  2711. margin-bottom: 0;
  2712. vertical-align: middle;
  2713. font-weight: normal;
  2714. cursor: pointer;
  2715. }
  2716. .radio-inline + .radio-inline,
  2717. .checkbox-inline + .checkbox-inline {
  2718. margin-top: 0;
  2719. margin-left: 10px;
  2720. }
  2721. input[type="radio"][disabled],
  2722. input[type="checkbox"][disabled],
  2723. input[type="radio"].disabled,
  2724. input[type="checkbox"].disabled,
  2725. fieldset[disabled] input[type="radio"],
  2726. fieldset[disabled] input[type="checkbox"] {
  2727. cursor: not-allowed;
  2728. }
  2729. .radio-inline.disabled,
  2730. .checkbox-inline.disabled,
  2731. fieldset[disabled] .radio-inline,
  2732. fieldset[disabled] .checkbox-inline {
  2733. cursor: not-allowed;
  2734. }
  2735. .radio.disabled label,
  2736. .checkbox.disabled label,
  2737. fieldset[disabled] .radio label,
  2738. fieldset[disabled] .checkbox label {
  2739. cursor: not-allowed;
  2740. }
  2741. .form-control-static {
  2742. padding-top: 7px;
  2743. padding-bottom: 7px;
  2744. margin-bottom: 0;
  2745. min-height: 31px;
  2746. }
  2747. .form-control-static.input-lg,
  2748. .form-control-static.input-sm {
  2749. padding-left: 0;
  2750. padding-right: 0;
  2751. }
  2752. .input-sm {
  2753. height: 30px;
  2754. padding: 5px 10px;
  2755. font-size: 12px;
  2756. line-height: 1.5;
  2757. border-radius: 1px;
  2758. }
  2759. select.input-sm {
  2760. height: 30px;
  2761. line-height: 30px;
  2762. }
  2763. textarea.input-sm,
  2764. select[multiple].input-sm {
  2765. height: auto;
  2766. }
  2767. .form-group-sm .form-control {
  2768. height: 30px;
  2769. padding: 5px 10px;
  2770. font-size: 12px;
  2771. line-height: 1.5;
  2772. border-radius: 1px;
  2773. }
  2774. .form-group-sm select.form-control {
  2775. height: 30px;
  2776. line-height: 30px;
  2777. }
  2778. .form-group-sm textarea.form-control,
  2779. .form-group-sm select[multiple].form-control {
  2780. height: auto;
  2781. }
  2782. .form-group-sm .form-control-static {
  2783. height: 30px;
  2784. min-height: 30px;
  2785. padding: 6px 10px;
  2786. font-size: 12px;
  2787. line-height: 1.5;
  2788. }
  2789. .input-lg {
  2790. height: 45px;
  2791. padding: 10px 16px;
  2792. font-size: 17px;
  2793. line-height: 1.3333333;
  2794. border-radius: 3px;
  2795. }
  2796. select.input-lg {
  2797. height: 45px;
  2798. line-height: 45px;
  2799. }
  2800. textarea.input-lg,
  2801. select[multiple].input-lg {
  2802. height: auto;
  2803. }
  2804. .form-group-lg .form-control {
  2805. height: 45px;
  2806. padding: 10px 16px;
  2807. font-size: 17px;
  2808. line-height: 1.3333333;
  2809. border-radius: 3px;
  2810. }
  2811. .form-group-lg select.form-control {
  2812. height: 45px;
  2813. line-height: 45px;
  2814. }
  2815. .form-group-lg textarea.form-control,
  2816. .form-group-lg select[multiple].form-control {
  2817. height: auto;
  2818. }
  2819. .form-group-lg .form-control-static {
  2820. height: 45px;
  2821. min-height: 35px;
  2822. padding: 11px 16px;
  2823. font-size: 17px;
  2824. line-height: 1.3333333;
  2825. }
  2826. .has-feedback {
  2827. position: relative;
  2828. }
  2829. .has-feedback .form-control {
  2830. padding-right: 40px;
  2831. }
  2832. .form-control-feedback {
  2833. position: absolute;
  2834. top: 0;
  2835. right: 0;
  2836. z-index: 2;
  2837. display: block;
  2838. width: 32px;
  2839. height: 32px;
  2840. line-height: 32px;
  2841. text-align: center;
  2842. pointer-events: none;
  2843. }
  2844. .input-lg + .form-control-feedback,
  2845. .input-group-lg + .form-control-feedback,
  2846. .form-group-lg .form-control + .form-control-feedback {
  2847. width: 45px;
  2848. height: 45px;
  2849. line-height: 45px;
  2850. }
  2851. .input-sm + .form-control-feedback,
  2852. .input-group-sm + .form-control-feedback,
  2853. .form-group-sm .form-control + .form-control-feedback {
  2854. width: 30px;
  2855. height: 30px;
  2856. line-height: 30px;
  2857. }
  2858. .has-success .help-block,
  2859. .has-success .control-label,
  2860. .has-success .radio,
  2861. .has-success .checkbox,
  2862. .has-success .radio-inline,
  2863. .has-success .checkbox-inline,
  2864. .has-success.radio label,
  2865. .has-success.checkbox label,
  2866. .has-success.radio-inline label,
  2867. .has-success.checkbox-inline label {
  2868. color: #3c763d;
  2869. }
  2870. .has-success .form-control {
  2871. border-color: #3c763d;
  2872. -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  2873. box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  2874. }
  2875. .has-success .form-control:focus {
  2876. border-color: #2b542c;
  2877. -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
  2878. box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
  2879. }
  2880. .has-success .input-group-addon {
  2881. color: #3c763d;
  2882. border-color: #3c763d;
  2883. background-color: #dff0d8;
  2884. }
  2885. .has-success .form-control-feedback {
  2886. color: #3c763d;
  2887. }
  2888. .has-warning .help-block,
  2889. .has-warning .control-label,
  2890. .has-warning .radio,
  2891. .has-warning .checkbox,
  2892. .has-warning .radio-inline,
  2893. .has-warning .checkbox-inline,
  2894. .has-warning.radio label,
  2895. .has-warning.checkbox label,
  2896. .has-warning.radio-inline label,
  2897. .has-warning.checkbox-inline label {
  2898. color: #8a6d3b;
  2899. }
  2900. .has-warning .form-control {
  2901. border-color: #8a6d3b;
  2902. -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  2903. box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  2904. }
  2905. .has-warning .form-control:focus {
  2906. border-color: #66512c;
  2907. -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
  2908. box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
  2909. }
  2910. .has-warning .input-group-addon {
  2911. color: #8a6d3b;
  2912. border-color: #8a6d3b;
  2913. background-color: #fcf8e3;
  2914. }
  2915. .has-warning .form-control-feedback {
  2916. color: #8a6d3b;
  2917. }
  2918. .has-error .help-block,
  2919. .has-error .control-label,
  2920. .has-error .radio,
  2921. .has-error .checkbox,
  2922. .has-error .radio-inline,
  2923. .has-error .checkbox-inline,
  2924. .has-error.radio label,
  2925. .has-error.checkbox label,
  2926. .has-error.radio-inline label,
  2927. .has-error.checkbox-inline label {
  2928. color: #a94442;
  2929. }
  2930. .has-error .form-control {
  2931. border-color: #a94442;
  2932. -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  2933. box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  2934. }
  2935. .has-error .form-control:focus {
  2936. border-color: #843534;
  2937. -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
  2938. box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
  2939. }
  2940. .has-error .input-group-addon {
  2941. color: #a94442;
  2942. border-color: #a94442;
  2943. background-color: #f2dede;
  2944. }
  2945. .has-error .form-control-feedback {
  2946. color: #a94442;
  2947. }
  2948. .has-feedback label ~ .form-control-feedback {
  2949. top: 23px;
  2950. }
  2951. .has-feedback label.sr-only ~ .form-control-feedback {
  2952. top: 0;
  2953. }
  2954. .help-block {
  2955. display: block;
  2956. margin-top: 5px;
  2957. margin-bottom: 10px;
  2958. color: #404040;
  2959. }
  2960. @media (min-width: 768px) {
  2961. .form-inline .form-group {
  2962. display: inline-block;
  2963. margin-bottom: 0;
  2964. vertical-align: middle;
  2965. }
  2966. .form-inline .form-control {
  2967. display: inline-block;
  2968. width: auto;
  2969. vertical-align: middle;
  2970. }
  2971. .form-inline .form-control-static {
  2972. display: inline-block;
  2973. }
  2974. .form-inline .input-group {
  2975. display: inline-table;
  2976. vertical-align: middle;
  2977. }
  2978. .form-inline .input-group .input-group-addon,
  2979. .form-inline .input-group .input-group-btn,
  2980. .form-inline .input-group .form-control {
  2981. width: auto;
  2982. }
  2983. .form-inline .input-group > .form-control {
  2984. width: 100%;
  2985. }
  2986. .form-inline .control-label {
  2987. margin-bottom: 0;
  2988. vertical-align: middle;
  2989. }
  2990. .form-inline .radio,
  2991. .form-inline .checkbox {
  2992. display: inline-block;
  2993. margin-top: 0;
  2994. margin-bottom: 0;
  2995. vertical-align: middle;
  2996. }
  2997. .form-inline .radio label,
  2998. .form-inline .checkbox label {
  2999. padding-left: 0;
  3000. }
  3001. .form-inline .radio input[type="radio"],
  3002. .form-inline .checkbox input[type="checkbox"] {
  3003. position: relative;
  3004. margin-left: 0;
  3005. }
  3006. .form-inline .has-feedback .form-control-feedback {
  3007. top: 0;
  3008. }
  3009. }
  3010. .form-horizontal .radio,
  3011. .form-horizontal .checkbox,
  3012. .form-horizontal .radio-inline,
  3013. .form-horizontal .checkbox-inline {
  3014. margin-top: 0;
  3015. margin-bottom: 0;
  3016. padding-top: 7px;
  3017. }
  3018. .form-horizontal .radio,
  3019. .form-horizontal .checkbox {
  3020. min-height: 25px;
  3021. }
  3022. .form-horizontal .form-group {
  3023. margin-left: 0px;
  3024. margin-right: 0px;
  3025. }
  3026. @media (min-width: 768px) {
  3027. .form-horizontal .control-label {
  3028. text-align: right;
  3029. margin-bottom: 0;
  3030. padding-top: 7px;
  3031. }
  3032. }
  3033. .form-horizontal .has-feedback .form-control-feedback {
  3034. right: 0px;
  3035. }
  3036. @media (min-width: 768px) {
  3037. .form-horizontal .form-group-lg .control-label {
  3038. padding-top: 11px;
  3039. font-size: 17px;
  3040. }
  3041. }
  3042. @media (min-width: 768px) {
  3043. .form-horizontal .form-group-sm .control-label {
  3044. padding-top: 6px;
  3045. font-size: 12px;
  3046. }
  3047. }
  3048. .btn {
  3049. display: inline-block;
  3050. margin-bottom: 0;
  3051. font-weight: normal;
  3052. text-align: center;
  3053. vertical-align: middle;
  3054. touch-action: manipulation;
  3055. cursor: pointer;
  3056. background-image: none;
  3057. border: 1px solid transparent;
  3058. white-space: nowrap;
  3059. padding: 6px 12px;
  3060. font-size: 13px;
  3061. line-height: 1.42857143;
  3062. border-radius: 2px;
  3063. -webkit-user-select: none;
  3064. -moz-user-select: none;
  3065. -ms-user-select: none;
  3066. user-select: none;
  3067. }
  3068. .btn:focus,
  3069. .btn:active:focus,
  3070. .btn.active:focus,
  3071. .btn.focus,
  3072. .btn:active.focus,
  3073. .btn.active.focus {
  3074. outline: thin dotted;
  3075. outline: 5px auto -webkit-focus-ring-color;
  3076. outline-offset: -2px;
  3077. }
  3078. .btn:hover,
  3079. .btn:focus,
  3080. .btn.focus {
  3081. color: #333;
  3082. text-decoration: none;
  3083. }
  3084. .btn:active,
  3085. .btn.active {
  3086. outline: 0;
  3087. background-image: none;
  3088. -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
  3089. box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
  3090. }
  3091. .btn.disabled,
  3092. .btn[disabled],
  3093. fieldset[disabled] .btn {
  3094. cursor: not-allowed;
  3095. opacity: 0.65;
  3096. filter: alpha(opacity=65);
  3097. -webkit-box-shadow: none;
  3098. box-shadow: none;
  3099. }
  3100. a.btn.disabled,
  3101. fieldset[disabled] a.btn {
  3102. pointer-events: none;
  3103. }
  3104. .btn-default {
  3105. color: #333;
  3106. background-color: #fff;
  3107. border-color: #ccc;
  3108. }
  3109. .btn-default:focus,
  3110. .btn-default.focus {
  3111. color: #333;
  3112. background-color: #e6e6e6;
  3113. border-color: #8c8c8c;
  3114. }
  3115. .btn-default:hover {
  3116. color: #333;
  3117. background-color: #e6e6e6;
  3118. border-color: #adadad;
  3119. }
  3120. .btn-default:active,
  3121. .btn-default.active,
  3122. .open > .dropdown-toggle.btn-default {
  3123. color: #333;
  3124. background-color: #e6e6e6;
  3125. border-color: #adadad;
  3126. }
  3127. .btn-default:active:hover,
  3128. .btn-default.active:hover,
  3129. .open > .dropdown-toggle.btn-default:hover,
  3130. .btn-default:active:focus,
  3131. .btn-default.active:focus,
  3132. .open > .dropdown-toggle.btn-default:focus,
  3133. .btn-default:active.focus,
  3134. .btn-default.active.focus,
  3135. .open > .dropdown-toggle.btn-default.focus {
  3136. color: #333;
  3137. background-color: #d4d4d4;
  3138. border-color: #8c8c8c;
  3139. }
  3140. .btn-default:active,
  3141. .btn-default.active,
  3142. .open > .dropdown-toggle.btn-default {
  3143. background-image: none;
  3144. }
  3145. .btn-default.disabled:hover,
  3146. .btn-default[disabled]:hover,
  3147. fieldset[disabled] .btn-default:hover,
  3148. .btn-default.disabled:focus,
  3149. .btn-default[disabled]:focus,
  3150. fieldset[disabled] .btn-default:focus,
  3151. .btn-default.disabled.focus,
  3152. .btn-default[disabled].focus,
  3153. fieldset[disabled] .btn-default.focus {
  3154. background-color: #fff;
  3155. border-color: #ccc;
  3156. }
  3157. .btn-default .badge {
  3158. color: #fff;
  3159. background-color: #333;
  3160. }
  3161. .btn-primary {
  3162. color: #fff;
  3163. background-color: #337ab7;
  3164. border-color: #2e6da4;
  3165. }
  3166. .btn-primary:focus,
  3167. .btn-primary.focus {
  3168. color: #fff;
  3169. background-color: #286090;
  3170. border-color: #122b40;
  3171. }
  3172. .btn-primary:hover {
  3173. color: #fff;
  3174. background-color: #286090;
  3175. border-color: #204d74;
  3176. }
  3177. .btn-primary:active,
  3178. .btn-primary.active,
  3179. .open > .dropdown-toggle.btn-primary {
  3180. color: #fff;
  3181. background-color: #286090;
  3182. border-color: #204d74;
  3183. }
  3184. .btn-primary:active:hover,
  3185. .btn-primary.active:hover,
  3186. .open > .dropdown-toggle.btn-primary:hover,
  3187. .btn-primary:active:focus,
  3188. .btn-primary.active:focus,
  3189. .open > .dropdown-toggle.btn-primary:focus,
  3190. .btn-primary:active.focus,
  3191. .btn-primary.active.focus,
  3192. .open > .dropdown-toggle.btn-primary.focus {
  3193. color: #fff;
  3194. background-color: #204d74;
  3195. border-color: #122b40;
  3196. }
  3197. .btn-primary:active,
  3198. .btn-primary.active,
  3199. .open > .dropdown-toggle.btn-primary {
  3200. background-image: none;
  3201. }
  3202. .btn-primary.disabled:hover,
  3203. .btn-primary[disabled]:hover,
  3204. fieldset[disabled] .btn-primary:hover,
  3205. .btn-primary.disabled:focus,
  3206. .btn-primary[disabled]:focus,
  3207. fieldset[disabled] .btn-primary:focus,
  3208. .btn-primary.disabled.focus,
  3209. .btn-primary[disabled].focus,
  3210. fieldset[disabled] .btn-primary.focus {
  3211. background-color: #337ab7;
  3212. border-color: #2e6da4;
  3213. }
  3214. .btn-primary .badge {
  3215. color: #337ab7;
  3216. background-color: #fff;
  3217. }
  3218. .btn-success {
  3219. color: #fff;
  3220. background-color: #5cb85c;
  3221. border-color: #4cae4c;
  3222. }
  3223. .btn-success:focus,
  3224. .btn-success.focus {
  3225. color: #fff;
  3226. background-color: #449d44;
  3227. border-color: #255625;
  3228. }
  3229. .btn-success:hover {
  3230. color: #fff;
  3231. background-color: #449d44;
  3232. border-color: #398439;
  3233. }
  3234. .btn-success:active,
  3235. .btn-success.active,
  3236. .open > .dropdown-toggle.btn-success {
  3237. color: #fff;
  3238. background-color: #449d44;
  3239. border-color: #398439;
  3240. }
  3241. .btn-success:active:hover,
  3242. .btn-success.active:hover,
  3243. .open > .dropdown-toggle.btn-success:hover,
  3244. .btn-success:active:focus,
  3245. .btn-success.active:focus,
  3246. .open > .dropdown-toggle.btn-success:focus,
  3247. .btn-success:active.focus,
  3248. .btn-success.active.focus,
  3249. .open > .dropdown-toggle.btn-success.focus {
  3250. color: #fff;
  3251. background-color: #398439;
  3252. border-color: #255625;
  3253. }
  3254. .btn-success:active,
  3255. .btn-success.active,
  3256. .open > .dropdown-toggle.btn-success {
  3257. background-image: none;
  3258. }
  3259. .btn-success.disabled:hover,
  3260. .btn-success[disabled]:hover,
  3261. fieldset[disabled] .btn-success:hover,
  3262. .btn-success.disabled:focus,
  3263. .btn-success[disabled]:focus,
  3264. fieldset[disabled] .btn-success:focus,
  3265. .btn-success.disabled.focus,
  3266. .btn-success[disabled].focus,
  3267. fieldset[disabled] .btn-success.focus {
  3268. background-color: #5cb85c;
  3269. border-color: #4cae4c;
  3270. }
  3271. .btn-success .badge {
  3272. color: #5cb85c;
  3273. background-color: #fff;
  3274. }
  3275. .btn-info {
  3276. color: #fff;
  3277. background-color: #5bc0de;
  3278. border-color: #46b8da;
  3279. }
  3280. .btn-info:focus,
  3281. .btn-info.focus {
  3282. color: #fff;
  3283. background-color: #31b0d5;
  3284. border-color: #1b6d85;
  3285. }
  3286. .btn-info:hover {
  3287. color: #fff;
  3288. background-color: #31b0d5;
  3289. border-color: #269abc;
  3290. }
  3291. .btn-info:active,
  3292. .btn-info.active,
  3293. .open > .dropdown-toggle.btn-info {
  3294. color: #fff;
  3295. background-color: #31b0d5;
  3296. border-color: #269abc;
  3297. }
  3298. .btn-info:active:hover,
  3299. .btn-info.active:hover,
  3300. .open > .dropdown-toggle.btn-info:hover,
  3301. .btn-info:active:focus,
  3302. .btn-info.active:focus,
  3303. .open > .dropdown-toggle.btn-info:focus,
  3304. .btn-info:active.focus,
  3305. .btn-info.active.focus,
  3306. .open > .dropdown-toggle.btn-info.focus {
  3307. color: #fff;
  3308. background-color: #269abc;
  3309. border-color: #1b6d85;
  3310. }
  3311. .btn-info:active,
  3312. .btn-info.active,
  3313. .open > .dropdown-toggle.btn-info {
  3314. background-image: none;
  3315. }
  3316. .btn-info.disabled:hover,
  3317. .btn-info[disabled]:hover,
  3318. fieldset[disabled] .btn-info:hover,
  3319. .btn-info.disabled:focus,
  3320. .btn-info[disabled]:focus,
  3321. fieldset[disabled] .btn-info:focus,
  3322. .btn-info.disabled.focus,
  3323. .btn-info[disabled].focus,
  3324. fieldset[disabled] .btn-info.focus {
  3325. background-color: #5bc0de;
  3326. border-color: #46b8da;
  3327. }
  3328. .btn-info .badge {
  3329. color: #5bc0de;
  3330. background-color: #fff;
  3331. }
  3332. .btn-warning {
  3333. color: #fff;
  3334. background-color: #f0ad4e;
  3335. border-color: #eea236;
  3336. }
  3337. .btn-warning:focus,
  3338. .btn-warning.focus {
  3339. color: #fff;
  3340. background-color: #ec971f;
  3341. border-color: #985f0d;
  3342. }
  3343. .btn-warning:hover {
  3344. color: #fff;
  3345. background-color: #ec971f;
  3346. border-color: #d58512;
  3347. }
  3348. .btn-warning:active,
  3349. .btn-warning.active,
  3350. .open > .dropdown-toggle.btn-warning {
  3351. color: #fff;
  3352. background-color: #ec971f;
  3353. border-color: #d58512;
  3354. }
  3355. .btn-warning:active:hover,
  3356. .btn-warning.active:hover,
  3357. .open > .dropdown-toggle.btn-warning:hover,
  3358. .btn-warning:active:focus,
  3359. .btn-warning.active:focus,
  3360. .open > .dropdown-toggle.btn-warning:focus,
  3361. .btn-warning:active.focus,
  3362. .btn-warning.active.focus,
  3363. .open > .dropdown-toggle.btn-warning.focus {
  3364. color: #fff;
  3365. background-color: #d58512;
  3366. border-color: #985f0d;
  3367. }
  3368. .btn-warning:active,
  3369. .btn-warning.active,
  3370. .open > .dropdown-toggle.btn-warning {
  3371. background-image: none;
  3372. }
  3373. .btn-warning.disabled:hover,
  3374. .btn-warning[disabled]:hover,
  3375. fieldset[disabled] .btn-warning:hover,
  3376. .btn-warning.disabled:focus,
  3377. .btn-warning[disabled]:focus,
  3378. fieldset[disabled] .btn-warning:focus,
  3379. .btn-warning.disabled.focus,
  3380. .btn-warning[disabled].focus,
  3381. fieldset[disabled] .btn-warning.focus {
  3382. background-color: #f0ad4e;
  3383. border-color: #eea236;
  3384. }
  3385. .btn-warning .badge {
  3386. color: #f0ad4e;
  3387. background-color: #fff;
  3388. }
  3389. .btn-danger {
  3390. color: #fff;
  3391. background-color: #d9534f;
  3392. border-color: #d43f3a;
  3393. }
  3394. .btn-danger:focus,
  3395. .btn-danger.focus {
  3396. color: #fff;
  3397. background-color: #c9302c;
  3398. border-color: #761c19;
  3399. }
  3400. .btn-danger:hover {
  3401. color: #fff;
  3402. background-color: #c9302c;
  3403. border-color: #ac2925;
  3404. }
  3405. .btn-danger:active,
  3406. .btn-danger.active,
  3407. .open > .dropdown-toggle.btn-danger {
  3408. color: #fff;
  3409. background-color: #c9302c;
  3410. border-color: #ac2925;
  3411. }
  3412. .btn-danger:active:hover,
  3413. .btn-danger.active:hover,
  3414. .open > .dropdown-toggle.btn-danger:hover,
  3415. .btn-danger:active:focus,
  3416. .btn-danger.active:focus,
  3417. .open > .dropdown-toggle.btn-danger:focus,
  3418. .btn-danger:active.focus,
  3419. .btn-danger.active.focus,
  3420. .open > .dropdown-toggle.btn-danger.focus {
  3421. color: #fff;
  3422. background-color: #ac2925;
  3423. border-color: #761c19;
  3424. }
  3425. .btn-danger:active,
  3426. .btn-danger.active,
  3427. .open > .dropdown-toggle.btn-danger {
  3428. background-image: none;
  3429. }
  3430. .btn-danger.disabled:hover,
  3431. .btn-danger[disabled]:hover,
  3432. fieldset[disabled] .btn-danger:hover,
  3433. .btn-danger.disabled:focus,
  3434. .btn-danger[disabled]:focus,
  3435. fieldset[disabled] .btn-danger:focus,
  3436. .btn-danger.disabled.focus,
  3437. .btn-danger[disabled].focus,
  3438. fieldset[disabled] .btn-danger.focus {
  3439. background-color: #d9534f;
  3440. border-color: #d43f3a;
  3441. }
  3442. .btn-danger .badge {
  3443. color: #d9534f;
  3444. background-color: #fff;
  3445. }
  3446. .btn-link {
  3447. color: #337ab7;
  3448. font-weight: normal;
  3449. border-radius: 0;
  3450. }
  3451. .btn-link,
  3452. .btn-link:active,
  3453. .btn-link.active,
  3454. .btn-link[disabled],
  3455. fieldset[disabled] .btn-link {
  3456. background-color: transparent;
  3457. -webkit-box-shadow: none;
  3458. box-shadow: none;
  3459. }
  3460. .btn-link,
  3461. .btn-link:hover,
  3462. .btn-link:focus,
  3463. .btn-link:active {
  3464. border-color: transparent;
  3465. }
  3466. .btn-link:hover,
  3467. .btn-link:focus {
  3468. color: #23527c;
  3469. text-decoration: underline;
  3470. background-color: transparent;
  3471. }
  3472. .btn-link[disabled]:hover,
  3473. fieldset[disabled] .btn-link:hover,
  3474. .btn-link[disabled]:focus,
  3475. fieldset[disabled] .btn-link:focus {
  3476. color: #777777;
  3477. text-decoration: none;
  3478. }
  3479. .btn-lg,
  3480. .btn-group-lg > .btn {
  3481. padding: 10px 16px;
  3482. font-size: 17px;
  3483. line-height: 1.3333333;
  3484. border-radius: 3px;
  3485. }
  3486. .btn-sm,
  3487. .btn-group-sm > .btn {
  3488. padding: 5px 10px;
  3489. font-size: 12px;
  3490. line-height: 1.5;
  3491. border-radius: 1px;
  3492. }
  3493. .btn-xs,
  3494. .btn-group-xs > .btn {
  3495. padding: 1px 5px;
  3496. font-size: 12px;
  3497. line-height: 1.5;
  3498. border-radius: 1px;
  3499. }
  3500. .btn-block {
  3501. display: block;
  3502. width: 100%;
  3503. }
  3504. .btn-block + .btn-block {
  3505. margin-top: 5px;
  3506. }
  3507. input[type="submit"].btn-block,
  3508. input[type="reset"].btn-block,
  3509. input[type="button"].btn-block {
  3510. width: 100%;
  3511. }
  3512. .fade {
  3513. opacity: 0;
  3514. -webkit-transition: opacity 0.15s linear;
  3515. -o-transition: opacity 0.15s linear;
  3516. transition: opacity 0.15s linear;
  3517. }
  3518. .fade.in {
  3519. opacity: 1;
  3520. }
  3521. .collapse {
  3522. display: none;
  3523. }
  3524. .collapse.in {
  3525. display: block;
  3526. }
  3527. tr.collapse.in {
  3528. display: table-row;
  3529. }
  3530. tbody.collapse.in {
  3531. display: table-row-group;
  3532. }
  3533. .collapsing {
  3534. position: relative;
  3535. height: 0;
  3536. overflow: hidden;
  3537. -webkit-transition-property: height, visibility;
  3538. transition-property: height, visibility;
  3539. -webkit-transition-duration: 0.35s;
  3540. transition-duration: 0.35s;
  3541. -webkit-transition-timing-function: ease;
  3542. transition-timing-function: ease;
  3543. }
  3544. .caret {
  3545. display: inline-block;
  3546. width: 0;
  3547. height: 0;
  3548. margin-left: 2px;
  3549. vertical-align: middle;
  3550. border-top: 4px dashed;
  3551. border-top: 4px solid \9;
  3552. border-right: 4px solid transparent;
  3553. border-left: 4px solid transparent;
  3554. }
  3555. .dropup,
  3556. .dropdown {
  3557. position: relative;
  3558. }
  3559. .dropdown-toggle:focus {
  3560. outline: 0;
  3561. }
  3562. .dropdown-menu {
  3563. position: absolute;
  3564. top: 100%;
  3565. left: 0;
  3566. z-index: 1000;
  3567. display: none;
  3568. float: left;
  3569. min-width: 160px;
  3570. padding: 5px 0;
  3571. margin: 2px 0 0;
  3572. list-style: none;
  3573. font-size: 13px;
  3574. text-align: left;
  3575. background-color: #fff;
  3576. border: 1px solid #ccc;
  3577. border: 1px solid rgba(0, 0, 0, 0.15);
  3578. border-radius: 2px;
  3579. -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
  3580. box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
  3581. background-clip: padding-box;
  3582. }
  3583. .dropdown-menu.pull-right {
  3584. right: 0;
  3585. left: auto;
  3586. }
  3587. .dropdown-menu .divider {
  3588. height: 1px;
  3589. margin: 8px 0;
  3590. overflow: hidden;
  3591. background-color: #e5e5e5;
  3592. }
  3593. .dropdown-menu > li > a {
  3594. display: block;
  3595. padding: 3px 20px;
  3596. clear: both;
  3597. font-weight: normal;
  3598. line-height: 1.42857143;
  3599. color: #333333;
  3600. white-space: nowrap;
  3601. }
  3602. .dropdown-menu > li > a:hover,
  3603. .dropdown-menu > li > a:focus {
  3604. text-decoration: none;
  3605. color: #262626;
  3606. background-color: #f5f5f5;
  3607. }
  3608. .dropdown-menu > .active > a,
  3609. .dropdown-menu > .active > a:hover,
  3610. .dropdown-menu > .active > a:focus {
  3611. color: #fff;
  3612. text-decoration: none;
  3613. outline: 0;
  3614. background-color: #337ab7;
  3615. }
  3616. .dropdown-menu > .disabled > a,
  3617. .dropdown-menu > .disabled > a:hover,
  3618. .dropdown-menu > .disabled > a:focus {
  3619. color: #777777;
  3620. }
  3621. .dropdown-menu > .disabled > a:hover,
  3622. .dropdown-menu > .disabled > a:focus {
  3623. text-decoration: none;
  3624. background-color: transparent;
  3625. background-image: none;
  3626. filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
  3627. cursor: not-allowed;
  3628. }
  3629. .open > .dropdown-menu {
  3630. display: block;
  3631. }
  3632. .open > a {
  3633. outline: 0;
  3634. }
  3635. .dropdown-menu-right {
  3636. left: auto;
  3637. right: 0;
  3638. }
  3639. .dropdown-menu-left {
  3640. left: 0;
  3641. right: auto;
  3642. }
  3643. .dropdown-header {
  3644. display: block;
  3645. padding: 3px 20px;
  3646. font-size: 12px;
  3647. line-height: 1.42857143;
  3648. color: #777777;
  3649. white-space: nowrap;
  3650. }
  3651. .dropdown-backdrop {
  3652. position: fixed;
  3653. left: 0;
  3654. right: 0;
  3655. bottom: 0;
  3656. top: 0;
  3657. z-index: 990;
  3658. }
  3659. .pull-right > .dropdown-menu {
  3660. right: 0;
  3661. left: auto;
  3662. }
  3663. .dropup .caret,
  3664. .navbar-fixed-bottom .dropdown .caret {
  3665. border-top: 0;
  3666. border-bottom: 4px dashed;
  3667. border-bottom: 4px solid \9;
  3668. content: "";
  3669. }
  3670. .dropup .dropdown-menu,
  3671. .navbar-fixed-bottom .dropdown .dropdown-menu {
  3672. top: auto;
  3673. bottom: 100%;
  3674. margin-bottom: 2px;
  3675. }
  3676. @media (min-width: 541px) {
  3677. .navbar-right .dropdown-menu {
  3678. left: auto;
  3679. right: 0;
  3680. }
  3681. .navbar-right .dropdown-menu-left {
  3682. left: 0;
  3683. right: auto;
  3684. }
  3685. }
  3686. .btn-group,
  3687. .btn-group-vertical {
  3688. position: relative;
  3689. display: inline-block;
  3690. vertical-align: middle;
  3691. }
  3692. .btn-group > .btn,
  3693. .btn-group-vertical > .btn {
  3694. position: relative;
  3695. float: left;
  3696. }
  3697. .btn-group > .btn:hover,
  3698. .btn-group-vertical > .btn:hover,
  3699. .btn-group > .btn:focus,
  3700. .btn-group-vertical > .btn:focus,
  3701. .btn-group > .btn:active,
  3702. .btn-group-vertical > .btn:active,
  3703. .btn-group > .btn.active,
  3704. .btn-group-vertical > .btn.active {
  3705. z-index: 2;
  3706. }
  3707. .btn-group .btn + .btn,
  3708. .btn-group .btn + .btn-group,
  3709. .btn-group .btn-group + .btn,
  3710. .btn-group .btn-group + .btn-group {
  3711. margin-left: -1px;
  3712. }
  3713. .btn-toolbar {
  3714. margin-left: -5px;
  3715. }
  3716. .btn-toolbar .btn,
  3717. .btn-toolbar .btn-group,
  3718. .btn-toolbar .input-group {
  3719. float: left;
  3720. }
  3721. .btn-toolbar > .btn,
  3722. .btn-toolbar > .btn-group,
  3723. .btn-toolbar > .input-group {
  3724. margin-left: 5px;
  3725. }
  3726. .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
  3727. border-radius: 0;
  3728. }
  3729. .btn-group > .btn:first-child {
  3730. margin-left: 0;
  3731. }
  3732. .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
  3733. border-bottom-right-radius: 0;
  3734. border-top-right-radius: 0;
  3735. }
  3736. .btn-group > .btn:last-child:not(:first-child),
  3737. .btn-group > .dropdown-toggle:not(:first-child) {
  3738. border-bottom-left-radius: 0;
  3739. border-top-left-radius: 0;
  3740. }
  3741. .btn-group > .btn-group {
  3742. float: left;
  3743. }
  3744. .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
  3745. border-radius: 0;
  3746. }
  3747. .btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
  3748. .btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
  3749. border-bottom-right-radius: 0;
  3750. border-top-right-radius: 0;
  3751. }
  3752. .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
  3753. border-bottom-left-radius: 0;
  3754. border-top-left-radius: 0;
  3755. }
  3756. .btn-group .dropdown-toggle:active,
  3757. .btn-group.open .dropdown-toggle {
  3758. outline: 0;
  3759. }
  3760. .btn-group > .btn + .dropdown-toggle {
  3761. padding-left: 8px;
  3762. padding-right: 8px;
  3763. }
  3764. .btn-group > .btn-lg + .dropdown-toggle {
  3765. padding-left: 12px;
  3766. padding-right: 12px;
  3767. }
  3768. .btn-group.open .dropdown-toggle {
  3769. -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
  3770. box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
  3771. }
  3772. .btn-group.open .dropdown-toggle.btn-link {
  3773. -webkit-box-shadow: none;
  3774. box-shadow: none;
  3775. }
  3776. .btn .caret {
  3777. margin-left: 0;
  3778. }
  3779. .btn-lg .caret {
  3780. border-width: 5px 5px 0;
  3781. border-bottom-width: 0;
  3782. }
  3783. .dropup .btn-lg .caret {
  3784. border-width: 0 5px 5px;
  3785. }
  3786. .btn-group-vertical > .btn,
  3787. .btn-group-vertical > .btn-group,
  3788. .btn-group-vertical > .btn-group > .btn {
  3789. display: block;
  3790. float: none;
  3791. width: 100%;
  3792. max-width: 100%;
  3793. }
  3794. .btn-group-vertical > .btn-group > .btn {
  3795. float: none;
  3796. }
  3797. .btn-group-vertical > .btn + .btn,
  3798. .btn-group-vertical > .btn + .btn-group,
  3799. .btn-group-vertical > .btn-group + .btn,
  3800. .btn-group-vertical > .btn-group + .btn-group {
  3801. margin-top: -1px;
  3802. margin-left: 0;
  3803. }
  3804. .btn-group-vertical > .btn:not(:first-child):not(:last-child) {
  3805. border-radius: 0;
  3806. }
  3807. .btn-group-vertical > .btn:first-child:not(:last-child) {
  3808. border-top-right-radius: 2px;
  3809. border-top-left-radius: 2px;
  3810. border-bottom-right-radius: 0;
  3811. border-bottom-left-radius: 0;
  3812. }
  3813. .btn-group-vertical > .btn:last-child:not(:first-child) {
  3814. border-top-right-radius: 0;
  3815. border-top-left-radius: 0;
  3816. border-bottom-right-radius: 2px;
  3817. border-bottom-left-radius: 2px;
  3818. }
  3819. .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
  3820. border-radius: 0;
  3821. }
  3822. .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
  3823. .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
  3824. border-bottom-right-radius: 0;
  3825. border-bottom-left-radius: 0;
  3826. }
  3827. .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
  3828. border-top-right-radius: 0;
  3829. border-top-left-radius: 0;
  3830. }
  3831. .btn-group-justified {
  3832. display: table;
  3833. width: 100%;
  3834. table-layout: fixed;
  3835. border-collapse: separate;
  3836. }
  3837. .btn-group-justified > .btn,
  3838. .btn-group-justified > .btn-group {
  3839. float: none;
  3840. display: table-cell;
  3841. width: 1%;
  3842. }
  3843. .btn-group-justified > .btn-group .btn {
  3844. width: 100%;
  3845. }
  3846. .btn-group-justified > .btn-group .dropdown-menu {
  3847. left: auto;
  3848. }
  3849. [data-toggle="buttons"] > .btn input[type="radio"],
  3850. [data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
  3851. [data-toggle="buttons"] > .btn input[type="checkbox"],
  3852. [data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
  3853. position: absolute;
  3854. clip: rect(0, 0, 0, 0);
  3855. pointer-events: none;
  3856. }
  3857. .input-group {
  3858. position: relative;
  3859. display: table;
  3860. border-collapse: separate;
  3861. }
  3862. .input-group[class*="col-"] {
  3863. float: none;
  3864. padding-left: 0;
  3865. padding-right: 0;
  3866. }
  3867. .input-group .form-control {
  3868. position: relative;
  3869. z-index: 2;
  3870. float: left;
  3871. width: 100%;
  3872. margin-bottom: 0;
  3873. }
  3874. .input-group .form-control:focus {
  3875. z-index: 3;
  3876. }
  3877. .input-group-lg > .form-control,
  3878. .input-group-lg > .input-group-addon,
  3879. .input-group-lg > .input-group-btn > .btn {
  3880. height: 45px;
  3881. padding: 10px 16px;
  3882. font-size: 17px;
  3883. line-height: 1.3333333;
  3884. border-radius: 3px;
  3885. }
  3886. select.input-group-lg > .form-control,
  3887. select.input-group-lg > .input-group-addon,
  3888. select.input-group-lg > .input-group-btn > .btn {
  3889. height: 45px;
  3890. line-height: 45px;
  3891. }
  3892. textarea.input-group-lg > .form-control,
  3893. textarea.input-group-lg > .input-group-addon,
  3894. textarea.input-group-lg > .input-group-btn > .btn,
  3895. select[multiple].input-group-lg > .form-control,
  3896. select[multiple].input-group-lg > .input-group-addon,
  3897. select[multiple].input-group-lg > .input-group-btn > .btn {
  3898. height: auto;
  3899. }
  3900. .input-group-sm > .form-control,
  3901. .input-group-sm > .input-group-addon,
  3902. .input-group-sm > .input-group-btn > .btn {
  3903. height: 30px;
  3904. padding: 5px 10px;
  3905. font-size: 12px;
  3906. line-height: 1.5;
  3907. border-radius: 1px;
  3908. }
  3909. select.input-group-sm > .form-control,
  3910. select.input-group-sm > .input-group-addon,
  3911. select.input-group-sm > .input-group-btn > .btn {
  3912. height: 30px;
  3913. line-height: 30px;
  3914. }
  3915. textarea.input-group-sm > .form-control,
  3916. textarea.input-group-sm > .input-group-addon,
  3917. textarea.input-group-sm > .input-group-btn > .btn,
  3918. select[multiple].input-group-sm > .form-control,
  3919. select[multiple].input-group-sm > .input-group-addon,
  3920. select[multiple].input-group-sm > .input-group-btn > .btn {
  3921. height: auto;
  3922. }
  3923. .input-group-addon,
  3924. .input-group-btn,
  3925. .input-group .form-control {
  3926. display: table-cell;
  3927. }
  3928. .input-group-addon:not(:first-child):not(:last-child),
  3929. .input-group-btn:not(:first-child):not(:last-child),
  3930. .input-group .form-control:not(:first-child):not(:last-child) {
  3931. border-radius: 0;
  3932. }
  3933. .input-group-addon,
  3934. .input-group-btn {
  3935. width: 1%;
  3936. white-space: nowrap;
  3937. vertical-align: middle;
  3938. }
  3939. .input-group-addon {
  3940. padding: 6px 12px;
  3941. font-size: 13px;
  3942. font-weight: normal;
  3943. line-height: 1;
  3944. color: #555555;
  3945. text-align: center;
  3946. background-color: #eeeeee;
  3947. border: 1px solid #ccc;
  3948. border-radius: 2px;
  3949. }
  3950. .input-group-addon.input-sm {
  3951. padding: 5px 10px;
  3952. font-size: 12px;
  3953. border-radius: 1px;
  3954. }
  3955. .input-group-addon.input-lg {
  3956. padding: 10px 16px;
  3957. font-size: 17px;
  3958. border-radius: 3px;
  3959. }
  3960. .input-group-addon input[type="radio"],
  3961. .input-group-addon input[type="checkbox"] {
  3962. margin-top: 0;
  3963. }
  3964. .input-group .form-control:first-child,
  3965. .input-group-addon:first-child,
  3966. .input-group-btn:first-child > .btn,
  3967. .input-group-btn:first-child > .btn-group > .btn,
  3968. .input-group-btn:first-child > .dropdown-toggle,
  3969. .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
  3970. .input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
  3971. border-bottom-right-radius: 0;
  3972. border-top-right-radius: 0;
  3973. }
  3974. .input-group-addon:first-child {
  3975. border-right: 0;
  3976. }
  3977. .input-group .form-control:last-child,
  3978. .input-group-addon:last-child,
  3979. .input-group-btn:last-child > .btn,
  3980. .input-group-btn:last-child > .btn-group > .btn,
  3981. .input-group-btn:last-child > .dropdown-toggle,
  3982. .input-group-btn:first-child > .btn:not(:first-child),
  3983. .input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
  3984. border-bottom-left-radius: 0;
  3985. border-top-left-radius: 0;
  3986. }
  3987. .input-group-addon:last-child {
  3988. border-left: 0;
  3989. }
  3990. .input-group-btn {
  3991. position: relative;
  3992. font-size: 0;
  3993. white-space: nowrap;
  3994. }
  3995. .input-group-btn > .btn {
  3996. position: relative;
  3997. }
  3998. .input-group-btn > .btn + .btn {
  3999. margin-left: -1px;
  4000. }
  4001. .input-group-btn > .btn:hover,
  4002. .input-group-btn > .btn:focus,
  4003. .input-group-btn > .btn:active {
  4004. z-index: 2;
  4005. }
  4006. .input-group-btn:first-child > .btn,
  4007. .input-group-btn:first-child > .btn-group {
  4008. margin-right: -1px;
  4009. }
  4010. .input-group-btn:last-child > .btn,
  4011. .input-group-btn:last-child > .btn-group {
  4012. z-index: 2;
  4013. margin-left: -1px;
  4014. }
  4015. .nav {
  4016. margin-bottom: 0;
  4017. padding-left: 0;
  4018. list-style: none;
  4019. }
  4020. .nav > li {
  4021. position: relative;
  4022. display: block;
  4023. }
  4024. .nav > li > a {
  4025. position: relative;
  4026. display: block;
  4027. padding: 10px 15px;
  4028. }
  4029. .nav > li > a:hover,
  4030. .nav > li > a:focus {
  4031. text-decoration: none;
  4032. background-color: #eeeeee;
  4033. }
  4034. .nav > li.disabled > a {
  4035. color: #777777;
  4036. }
  4037. .nav > li.disabled > a:hover,
  4038. .nav > li.disabled > a:focus {
  4039. color: #777777;
  4040. text-decoration: none;
  4041. background-color: transparent;
  4042. cursor: not-allowed;
  4043. }
  4044. .nav .open > a,
  4045. .nav .open > a:hover,
  4046. .nav .open > a:focus {
  4047. background-color: #eeeeee;
  4048. border-color: #337ab7;
  4049. }
  4050. .nav .nav-divider {
  4051. height: 1px;
  4052. margin: 8px 0;
  4053. overflow: hidden;
  4054. background-color: #e5e5e5;
  4055. }
  4056. .nav > li > a > img {
  4057. max-width: none;
  4058. }
  4059. .nav-tabs {
  4060. border-bottom: 1px solid #ddd;
  4061. }
  4062. .nav-tabs > li {
  4063. float: left;
  4064. margin-bottom: -1px;
  4065. }
  4066. .nav-tabs > li > a {
  4067. margin-right: 2px;
  4068. line-height: 1.42857143;
  4069. border: 1px solid transparent;
  4070. border-radius: 2px 2px 0 0;
  4071. }
  4072. .nav-tabs > li > a:hover {
  4073. border-color: #eeeeee #eeeeee #ddd;
  4074. }
  4075. .nav-tabs > li.active > a,
  4076. .nav-tabs > li.active > a:hover,
  4077. .nav-tabs > li.active > a:focus {
  4078. color: #555555;
  4079. background-color: #fff;
  4080. border: 1px solid #ddd;
  4081. border-bottom-color: transparent;
  4082. cursor: default;
  4083. }
  4084. .nav-tabs.nav-justified {
  4085. width: 100%;
  4086. border-bottom: 0;
  4087. }
  4088. .nav-tabs.nav-justified > li {
  4089. float: none;
  4090. }
  4091. .nav-tabs.nav-justified > li > a {
  4092. text-align: center;
  4093. margin-bottom: 5px;
  4094. }
  4095. .nav-tabs.nav-justified > .dropdown .dropdown-menu {
  4096. top: auto;
  4097. left: auto;
  4098. }
  4099. @media (min-width: 768px) {
  4100. .nav-tabs.nav-justified > li {
  4101. display: table-cell;
  4102. width: 1%;
  4103. }
  4104. .nav-tabs.nav-justified > li > a {
  4105. margin-bottom: 0;
  4106. }
  4107. }
  4108. .nav-tabs.nav-justified > li > a {
  4109. margin-right: 0;
  4110. border-radius: 2px;
  4111. }
  4112. .nav-tabs.nav-justified > .active > a,
  4113. .nav-tabs.nav-justified > .active > a:hover,
  4114. .nav-tabs.nav-justified > .active > a:focus {
  4115. border: 1px solid #ddd;
  4116. }
  4117. @media (min-width: 768px) {
  4118. .nav-tabs.nav-justified > li > a {
  4119. border-bottom: 1px solid #ddd;
  4120. border-radius: 2px 2px 0 0;
  4121. }
  4122. .nav-tabs.nav-justified > .active > a,
  4123. .nav-tabs.nav-justified > .active > a:hover,
  4124. .nav-tabs.nav-justified > .active > a:focus {
  4125. border-bottom-color: #fff;
  4126. }
  4127. }
  4128. .nav-pills > li {
  4129. float: left;
  4130. }
  4131. .nav-pills > li > a {
  4132. border-radius: 2px;
  4133. }
  4134. .nav-pills > li + li {
  4135. margin-left: 2px;
  4136. }
  4137. .nav-pills > li.active > a,
  4138. .nav-pills > li.active > a:hover,
  4139. .nav-pills > li.active > a:focus {
  4140. color: #fff;
  4141. background-color: #337ab7;
  4142. }
  4143. .nav-stacked > li {
  4144. float: none;
  4145. }
  4146. .nav-stacked > li + li {
  4147. margin-top: 2px;
  4148. margin-left: 0;
  4149. }
  4150. .nav-justified {
  4151. width: 100%;
  4152. }
  4153. .nav-justified > li {
  4154. float: none;
  4155. }
  4156. .nav-justified > li > a {
  4157. text-align: center;
  4158. margin-bottom: 5px;
  4159. }
  4160. .nav-justified > .dropdown .dropdown-menu {
  4161. top: auto;
  4162. left: auto;
  4163. }
  4164. @media (min-width: 768px) {
  4165. .nav-justified > li {
  4166. display: table-cell;
  4167. width: 1%;
  4168. }
  4169. .nav-justified > li > a {
  4170. margin-bottom: 0;
  4171. }
  4172. }
  4173. .nav-tabs-justified {
  4174. border-bottom: 0;
  4175. }
  4176. .nav-tabs-justified > li > a {
  4177. margin-right: 0;
  4178. border-radius: 2px;
  4179. }
  4180. .nav-tabs-justified > .active > a,
  4181. .nav-tabs-justified > .active > a:hover,
  4182. .nav-tabs-justified > .active > a:focus {
  4183. border: 1px solid #ddd;
  4184. }
  4185. @media (min-width: 768px) {
  4186. .nav-tabs-justified > li > a {
  4187. border-bottom: 1px solid #ddd;
  4188. border-radius: 2px 2px 0 0;
  4189. }
  4190. .nav-tabs-justified > .active > a,
  4191. .nav-tabs-justified > .active > a:hover,
  4192. .nav-tabs-justified > .active > a:focus {
  4193. border-bottom-color: #fff;
  4194. }
  4195. }
  4196. .tab-content > .tab-pane {
  4197. display: none;
  4198. }
  4199. .tab-content > .active {
  4200. display: block;
  4201. }
  4202. .nav-tabs .dropdown-menu {
  4203. margin-top: -1px;
  4204. border-top-right-radius: 0;
  4205. border-top-left-radius: 0;
  4206. }
  4207. .navbar {
  4208. position: relative;
  4209. min-height: 30px;
  4210. margin-bottom: 18px;
  4211. border: 1px solid transparent;
  4212. }
  4213. @media (min-width: 541px) {
  4214. .navbar {
  4215. border-radius: 2px;
  4216. }
  4217. }
  4218. @media (min-width: 541px) {
  4219. .navbar-header {
  4220. float: left;
  4221. }
  4222. }
  4223. .navbar-collapse {
  4224. overflow-x: visible;
  4225. padding-right: 0px;
  4226. padding-left: 0px;
  4227. border-top: 1px solid transparent;
  4228. box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
  4229. -webkit-overflow-scrolling: touch;
  4230. }
  4231. .navbar-collapse.in {
  4232. overflow-y: auto;
  4233. }
  4234. @media (min-width: 541px) {
  4235. .navbar-collapse {
  4236. width: auto;
  4237. border-top: 0;
  4238. box-shadow: none;
  4239. }
  4240. .navbar-collapse.collapse {
  4241. display: block !important;
  4242. height: auto !important;
  4243. padding-bottom: 0;
  4244. overflow: visible !important;
  4245. }
  4246. .navbar-collapse.in {
  4247. overflow-y: visible;
  4248. }
  4249. .navbar-fixed-top .navbar-collapse,
  4250. .navbar-static-top .navbar-collapse,
  4251. .navbar-fixed-bottom .navbar-collapse {
  4252. padding-left: 0;
  4253. padding-right: 0;
  4254. }
  4255. }
  4256. .navbar-fixed-top .navbar-collapse,
  4257. .navbar-fixed-bottom .navbar-collapse {
  4258. max-height: 340px;
  4259. }
  4260. @media (max-device-width: 540px) and (orientation: landscape) {
  4261. .navbar-fixed-top .navbar-collapse,
  4262. .navbar-fixed-bottom .navbar-collapse {
  4263. max-height: 200px;
  4264. }
  4265. }
  4266. .container > .navbar-header,
  4267. .container-fluid > .navbar-header,
  4268. .container > .navbar-collapse,
  4269. .container-fluid > .navbar-collapse {
  4270. margin-right: 0px;
  4271. margin-left: 0px;
  4272. }
  4273. @media (min-width: 541px) {
  4274. .container > .navbar-header,
  4275. .container-fluid > .navbar-header,
  4276. .container > .navbar-collapse,
  4277. .container-fluid > .navbar-collapse {
  4278. margin-right: 0;
  4279. margin-left: 0;
  4280. }
  4281. }
  4282. .navbar-static-top {
  4283. z-index: 1000;
  4284. border-width: 0 0 1px;
  4285. }
  4286. @media (min-width: 541px) {
  4287. .navbar-static-top {
  4288. border-radius: 0;
  4289. }
  4290. }
  4291. .navbar-fixed-top,
  4292. .navbar-fixed-bottom {
  4293. position: fixed;
  4294. right: 0;
  4295. left: 0;
  4296. z-index: 1030;
  4297. }
  4298. @media (min-width: 541px) {
  4299. .navbar-fixed-top,
  4300. .navbar-fixed-bottom {
  4301. border-radius: 0;
  4302. }
  4303. }
  4304. .navbar-fixed-top {
  4305. top: 0;
  4306. border-width: 0 0 1px;
  4307. }
  4308. .navbar-fixed-bottom {
  4309. bottom: 0;
  4310. margin-bottom: 0;
  4311. border-width: 1px 0 0;
  4312. }
  4313. .navbar-brand {
  4314. float: left;
  4315. padding: 6px 0px;
  4316. font-size: 17px;
  4317. line-height: 18px;
  4318. height: 30px;
  4319. }
  4320. .navbar-brand:hover,
  4321. .navbar-brand:focus {
  4322. text-decoration: none;
  4323. }
  4324. .navbar-brand > img {
  4325. display: block;
  4326. }
  4327. @media (min-width: 541px) {
  4328. .navbar > .container .navbar-brand,
  4329. .navbar > .container-fluid .navbar-brand {
  4330. margin-left: 0px;
  4331. }
  4332. }
  4333. .navbar-toggle {
  4334. position: relative;
  4335. float: right;
  4336. margin-right: 0px;
  4337. padding: 9px 10px;
  4338. margin-top: -2px;
  4339. margin-bottom: -2px;
  4340. background-color: transparent;
  4341. background-image: none;
  4342. border: 1px solid transparent;
  4343. border-radius: 2px;
  4344. }
  4345. .navbar-toggle:focus {
  4346. outline: 0;
  4347. }
  4348. .navbar-toggle .icon-bar {
  4349. display: block;
  4350. width: 22px;
  4351. height: 2px;
  4352. border-radius: 1px;
  4353. }
  4354. .navbar-toggle .icon-bar + .icon-bar {
  4355. margin-top: 4px;
  4356. }
  4357. @media (min-width: 541px) {
  4358. .navbar-toggle {
  4359. display: none;
  4360. }
  4361. }
  4362. .navbar-nav {
  4363. margin: 3px 0px;
  4364. }
  4365. .navbar-nav > li > a {
  4366. padding-top: 10px;
  4367. padding-bottom: 10px;
  4368. line-height: 18px;
  4369. }
  4370. @media (max-width: 540px) {
  4371. .navbar-nav .open .dropdown-menu {
  4372. position: static;
  4373. float: none;
  4374. width: auto;
  4375. margin-top: 0;
  4376. background-color: transparent;
  4377. border: 0;
  4378. box-shadow: none;
  4379. }
  4380. .navbar-nav .open .dropdown-menu > li > a,
  4381. .navbar-nav .open .dropdown-menu .dropdown-header {
  4382. padding: 5px 15px 5px 25px;
  4383. }
  4384. .navbar-nav .open .dropdown-menu > li > a {
  4385. line-height: 18px;
  4386. }
  4387. .navbar-nav .open .dropdown-menu > li > a:hover,
  4388. .navbar-nav .open .dropdown-menu > li > a:focus {
  4389. background-image: none;
  4390. }
  4391. }
  4392. @media (min-width: 541px) {
  4393. .navbar-nav {
  4394. float: left;
  4395. margin: 0;
  4396. }
  4397. .navbar-nav > li {
  4398. float: left;
  4399. }
  4400. .navbar-nav > li > a {
  4401. padding-top: 6px;
  4402. padding-bottom: 6px;
  4403. }
  4404. }
  4405. .navbar-form {
  4406. margin-left: 0px;
  4407. margin-right: 0px;
  4408. padding: 10px 0px;
  4409. border-top: 1px solid transparent;
  4410. border-bottom: 1px solid transparent;
  4411. -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
  4412. box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
  4413. margin-top: -1px;
  4414. margin-bottom: -1px;
  4415. }
  4416. @media (min-width: 768px) {
  4417. .navbar-form .form-group {
  4418. display: inline-block;
  4419. margin-bottom: 0;
  4420. vertical-align: middle;
  4421. }
  4422. .navbar-form .form-control {
  4423. display: inline-block;
  4424. width: auto;
  4425. vertical-align: middle;
  4426. }
  4427. .navbar-form .form-control-static {
  4428. display: inline-block;
  4429. }
  4430. .navbar-form .input-group {
  4431. display: inline-table;
  4432. vertical-align: middle;
  4433. }
  4434. .navbar-form .input-group .input-group-addon,
  4435. .navbar-form .input-group .input-group-btn,
  4436. .navbar-form .input-group .form-control {
  4437. width: auto;
  4438. }
  4439. .navbar-form .input-group > .form-control {
  4440. width: 100%;
  4441. }
  4442. .navbar-form .control-label {
  4443. margin-bottom: 0;
  4444. vertical-align: middle;
  4445. }
  4446. .navbar-form .radio,
  4447. .navbar-form .checkbox {
  4448. display: inline-block;
  4449. margin-top: 0;
  4450. margin-bottom: 0;
  4451. vertical-align: middle;
  4452. }
  4453. .navbar-form .radio label,
  4454. .navbar-form .checkbox label {
  4455. padding-left: 0;
  4456. }
  4457. .navbar-form .radio input[type="radio"],
  4458. .navbar-form .checkbox input[type="checkbox"] {
  4459. position: relative;
  4460. margin-left: 0;
  4461. }
  4462. .navbar-form .has-feedback .form-control-feedback {
  4463. top: 0;
  4464. }
  4465. }
  4466. @media (max-width: 540px) {
  4467. .navbar-form .form-group {
  4468. margin-bottom: 5px;
  4469. }
  4470. .navbar-form .form-group:last-child {
  4471. margin-bottom: 0;
  4472. }
  4473. }
  4474. @media (min-width: 541px) {
  4475. .navbar-form {
  4476. width: auto;
  4477. border: 0;
  4478. margin-left: 0;
  4479. margin-right: 0;
  4480. padding-top: 0;
  4481. padding-bottom: 0;
  4482. -webkit-box-shadow: none;
  4483. box-shadow: none;
  4484. }
  4485. }
  4486. .navbar-nav > li > .dropdown-menu {
  4487. margin-top: 0;
  4488. border-top-right-radius: 0;
  4489. border-top-left-radius: 0;
  4490. }
  4491. .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
  4492. margin-bottom: 0;
  4493. border-top-right-radius: 2px;
  4494. border-top-left-radius: 2px;
  4495. border-bottom-right-radius: 0;
  4496. border-bottom-left-radius: 0;
  4497. }
  4498. .navbar-btn {
  4499. margin-top: -1px;
  4500. margin-bottom: -1px;
  4501. }
  4502. .navbar-btn.btn-sm {
  4503. margin-top: 0px;
  4504. margin-bottom: 0px;
  4505. }
  4506. .navbar-btn.btn-xs {
  4507. margin-top: 4px;
  4508. margin-bottom: 4px;
  4509. }
  4510. .navbar-text {
  4511. margin-top: 6px;
  4512. margin-bottom: 6px;
  4513. }
  4514. @media (min-width: 541px) {
  4515. .navbar-text {
  4516. float: left;
  4517. margin-left: 0px;
  4518. margin-right: 0px;
  4519. }
  4520. }
  4521. @media (min-width: 541px) {
  4522. .navbar-left {
  4523. float: left !important;
  4524. float: left;
  4525. }
  4526. .navbar-right {
  4527. float: right !important;
  4528. float: right;
  4529. margin-right: 0px;
  4530. }
  4531. .navbar-right ~ .navbar-right {
  4532. margin-right: 0;
  4533. }
  4534. }
  4535. .navbar-default {
  4536. background-color: #f8f8f8;
  4537. border-color: #e7e7e7;
  4538. }
  4539. .navbar-default .navbar-brand {
  4540. color: #777;
  4541. }
  4542. .navbar-default .navbar-brand:hover,
  4543. .navbar-default .navbar-brand:focus {
  4544. color: #5e5e5e;
  4545. background-color: transparent;
  4546. }
  4547. .navbar-default .navbar-text {
  4548. color: #777;
  4549. }
  4550. .navbar-default .navbar-nav > li > a {
  4551. color: #777;
  4552. }
  4553. .navbar-default .navbar-nav > li > a:hover,
  4554. .navbar-default .navbar-nav > li > a:focus {
  4555. color: #333;
  4556. background-color: transparent;
  4557. }
  4558. .navbar-default .navbar-nav > .active > a,
  4559. .navbar-default .navbar-nav > .active > a:hover,
  4560. .navbar-default .navbar-nav > .active > a:focus {
  4561. color: #555;
  4562. background-color: #e7e7e7;
  4563. }
  4564. .navbar-default .navbar-nav > .disabled > a,
  4565. .navbar-default .navbar-nav > .disabled > a:hover,
  4566. .navbar-default .navbar-nav > .disabled > a:focus {
  4567. color: #ccc;
  4568. background-color: transparent;
  4569. }
  4570. .navbar-default .navbar-toggle {
  4571. border-color: #ddd;
  4572. }
  4573. .navbar-default .navbar-toggle:hover,
  4574. .navbar-default .navbar-toggle:focus {
  4575. background-color: #ddd;
  4576. }
  4577. .navbar-default .navbar-toggle .icon-bar {
  4578. background-color: #888;
  4579. }
  4580. .navbar-default .navbar-collapse,
  4581. .navbar-default .navbar-form {
  4582. border-color: #e7e7e7;
  4583. }
  4584. .navbar-default .navbar-nav > .open > a,
  4585. .navbar-default .navbar-nav > .open > a:hover,
  4586. .navbar-default .navbar-nav > .open > a:focus {
  4587. background-color: #e7e7e7;
  4588. color: #555;
  4589. }
  4590. @media (max-width: 540px) {
  4591. .navbar-default .navbar-nav .open .dropdown-menu > li > a {
  4592. color: #777;
  4593. }
  4594. .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
  4595. .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
  4596. color: #333;
  4597. background-color: transparent;
  4598. }
  4599. .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
  4600. .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
  4601. .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
  4602. color: #555;
  4603. background-color: #e7e7e7;
  4604. }
  4605. .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
  4606. .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
  4607. .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
  4608. color: #ccc;
  4609. background-color: transparent;
  4610. }
  4611. }
  4612. .navbar-default .navbar-link {
  4613. color: #777;
  4614. }
  4615. .navbar-default .navbar-link:hover {
  4616. color: #333;
  4617. }
  4618. .navbar-default .btn-link {
  4619. color: #777;
  4620. }
  4621. .navbar-default .btn-link:hover,
  4622. .navbar-default .btn-link:focus {
  4623. color: #333;
  4624. }
  4625. .navbar-default .btn-link[disabled]:hover,
  4626. fieldset[disabled] .navbar-default .btn-link:hover,
  4627. .navbar-default .btn-link[disabled]:focus,
  4628. fieldset[disabled] .navbar-default .btn-link:focus {
  4629. color: #ccc;
  4630. }
  4631. .navbar-inverse {
  4632. background-color: #222;
  4633. border-color: #080808;
  4634. }
  4635. .navbar-inverse .navbar-brand {
  4636. color: #9d9d9d;
  4637. }
  4638. .navbar-inverse .navbar-brand:hover,
  4639. .navbar-inverse .navbar-brand:focus {
  4640. color: #fff;
  4641. background-color: transparent;
  4642. }
  4643. .navbar-inverse .navbar-text {
  4644. color: #9d9d9d;
  4645. }
  4646. .navbar-inverse .navbar-nav > li > a {
  4647. color: #9d9d9d;
  4648. }
  4649. .navbar-inverse .navbar-nav > li > a:hover,
  4650. .navbar-inverse .navbar-nav > li > a:focus {
  4651. color: #fff;
  4652. background-color: transparent;
  4653. }
  4654. .navbar-inverse .navbar-nav > .active > a,
  4655. .navbar-inverse .navbar-nav > .active > a:hover,
  4656. .navbar-inverse .navbar-nav > .active > a:focus {
  4657. color: #fff;
  4658. background-color: #080808;
  4659. }
  4660. .navbar-inverse .navbar-nav > .disabled > a,
  4661. .navbar-inverse .navbar-nav > .disabled > a:hover,
  4662. .navbar-inverse .navbar-nav > .disabled > a:focus {
  4663. color: #444;
  4664. background-color: transparent;
  4665. }
  4666. .navbar-inverse .navbar-toggle {
  4667. border-color: #333;
  4668. }
  4669. .navbar-inverse .navbar-toggle:hover,
  4670. .navbar-inverse .navbar-toggle:focus {
  4671. background-color: #333;
  4672. }
  4673. .navbar-inverse .navbar-toggle .icon-bar {
  4674. background-color: #fff;
  4675. }
  4676. .navbar-inverse .navbar-collapse,
  4677. .navbar-inverse .navbar-form {
  4678. border-color: #101010;
  4679. }
  4680. .navbar-inverse .navbar-nav > .open > a,
  4681. .navbar-inverse .navbar-nav > .open > a:hover,
  4682. .navbar-inverse .navbar-nav > .open > a:focus {
  4683. background-color: #080808;
  4684. color: #fff;
  4685. }
  4686. @media (max-width: 540px) {
  4687. .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
  4688. border-color: #080808;
  4689. }
  4690. .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
  4691. background-color: #080808;
  4692. }
  4693. .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
  4694. color: #9d9d9d;
  4695. }
  4696. .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
  4697. .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
  4698. color: #fff;
  4699. background-color: transparent;
  4700. }
  4701. .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
  4702. .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
  4703. .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
  4704. color: #fff;
  4705. background-color: #080808;
  4706. }
  4707. .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
  4708. .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
  4709. .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
  4710. color: #444;
  4711. background-color: transparent;
  4712. }
  4713. }
  4714. .navbar-inverse .navbar-link {
  4715. color: #9d9d9d;
  4716. }
  4717. .navbar-inverse .navbar-link:hover {
  4718. color: #fff;
  4719. }
  4720. .navbar-inverse .btn-link {
  4721. color: #9d9d9d;
  4722. }
  4723. .navbar-inverse .btn-link:hover,
  4724. .navbar-inverse .btn-link:focus {
  4725. color: #fff;
  4726. }
  4727. .navbar-inverse .btn-link[disabled]:hover,
  4728. fieldset[disabled] .navbar-inverse .btn-link:hover,
  4729. .navbar-inverse .btn-link[disabled]:focus,
  4730. fieldset[disabled] .navbar-inverse .btn-link:focus {
  4731. color: #444;
  4732. }
  4733. .breadcrumb {
  4734. padding: 8px 15px;
  4735. margin-bottom: 18px;
  4736. list-style: none;
  4737. background-color: #f5f5f5;
  4738. border-radius: 2px;
  4739. }
  4740. .breadcrumb > li {
  4741. display: inline-block;
  4742. }
  4743. .breadcrumb > li + li:before {
  4744. content: "/\00a0";
  4745. padding: 0 5px;
  4746. color: #5e5e5e;
  4747. }
  4748. .breadcrumb > .active {
  4749. color: #777777;
  4750. }
  4751. .pagination {
  4752. display: inline-block;
  4753. padding-left: 0;
  4754. margin: 18px 0;
  4755. border-radius: 2px;
  4756. }
  4757. .pagination > li {
  4758. display: inline;
  4759. }
  4760. .pagination > li > a,
  4761. .pagination > li > span {
  4762. position: relative;
  4763. float: left;
  4764. padding: 6px 12px;
  4765. line-height: 1.42857143;
  4766. text-decoration: none;
  4767. color: #337ab7;
  4768. background-color: #fff;
  4769. border: 1px solid #ddd;
  4770. margin-left: -1px;
  4771. }
  4772. .pagination > li:first-child > a,
  4773. .pagination > li:first-child > span {
  4774. margin-left: 0;
  4775. border-bottom-left-radius: 2px;
  4776. border-top-left-radius: 2px;
  4777. }
  4778. .pagination > li:last-child > a,
  4779. .pagination > li:last-child > span {
  4780. border-bottom-right-radius: 2px;
  4781. border-top-right-radius: 2px;
  4782. }
  4783. .pagination > li > a:hover,
  4784. .pagination > li > span:hover,
  4785. .pagination > li > a:focus,
  4786. .pagination > li > span:focus {
  4787. z-index: 2;
  4788. color: #23527c;
  4789. background-color: #eeeeee;
  4790. border-color: #ddd;
  4791. }
  4792. .pagination > .active > a,
  4793. .pagination > .active > span,
  4794. .pagination > .active > a:hover,
  4795. .pagination > .active > span:hover,
  4796. .pagination > .active > a:focus,
  4797. .pagination > .active > span:focus {
  4798. z-index: 3;
  4799. color: #fff;
  4800. background-color: #337ab7;
  4801. border-color: #337ab7;
  4802. cursor: default;
  4803. }
  4804. .pagination > .disabled > span,
  4805. .pagination > .disabled > span:hover,
  4806. .pagination > .disabled > span:focus,
  4807. .pagination > .disabled > a,
  4808. .pagination > .disabled > a:hover,
  4809. .pagination > .disabled > a:focus {
  4810. color: #777777;
  4811. background-color: #fff;
  4812. border-color: #ddd;
  4813. cursor: not-allowed;
  4814. }
  4815. .pagination-lg > li > a,
  4816. .pagination-lg > li > span {
  4817. padding: 10px 16px;
  4818. font-size: 17px;
  4819. line-height: 1.3333333;
  4820. }
  4821. .pagination-lg > li:first-child > a,
  4822. .pagination-lg > li:first-child > span {
  4823. border-bottom-left-radius: 3px;
  4824. border-top-left-radius: 3px;
  4825. }
  4826. .pagination-lg > li:last-child > a,
  4827. .pagination-lg > li:last-child > span {
  4828. border-bottom-right-radius: 3px;
  4829. border-top-right-radius: 3px;
  4830. }
  4831. .pagination-sm > li > a,
  4832. .pagination-sm > li > span {
  4833. padding: 5px 10px;
  4834. font-size: 12px;
  4835. line-height: 1.5;
  4836. }
  4837. .pagination-sm > li:first-child > a,
  4838. .pagination-sm > li:first-child > span {
  4839. border-bottom-left-radius: 1px;
  4840. border-top-left-radius: 1px;
  4841. }
  4842. .pagination-sm > li:last-child > a,
  4843. .pagination-sm > li:last-child > span {
  4844. border-bottom-right-radius: 1px;
  4845. border-top-right-radius: 1px;
  4846. }
  4847. .pager {
  4848. padding-left: 0;
  4849. margin: 18px 0;
  4850. list-style: none;
  4851. text-align: center;
  4852. }
  4853. .pager li {
  4854. display: inline;
  4855. }
  4856. .pager li > a,
  4857. .pager li > span {
  4858. display: inline-block;
  4859. padding: 5px 14px;
  4860. background-color: #fff;
  4861. border: 1px solid #ddd;
  4862. border-radius: 15px;
  4863. }
  4864. .pager li > a:hover,
  4865. .pager li > a:focus {
  4866. text-decoration: none;
  4867. background-color: #eeeeee;
  4868. }
  4869. .pager .next > a,
  4870. .pager .next > span {
  4871. float: right;
  4872. }
  4873. .pager .previous > a,
  4874. .pager .previous > span {
  4875. float: left;
  4876. }
  4877. .pager .disabled > a,
  4878. .pager .disabled > a:hover,
  4879. .pager .disabled > a:focus,
  4880. .pager .disabled > span {
  4881. color: #777777;
  4882. background-color: #fff;
  4883. cursor: not-allowed;
  4884. }
  4885. .label {
  4886. display: inline;
  4887. padding: .2em .6em .3em;
  4888. font-size: 75%;
  4889. font-weight: bold;
  4890. line-height: 1;
  4891. color: #fff;
  4892. text-align: center;
  4893. white-space: nowrap;
  4894. vertical-align: baseline;
  4895. border-radius: .25em;
  4896. }
  4897. a.label:hover,
  4898. a.label:focus {
  4899. color: #fff;
  4900. text-decoration: none;
  4901. cursor: pointer;
  4902. }
  4903. .label:empty {
  4904. display: none;
  4905. }
  4906. .btn .label {
  4907. position: relative;
  4908. top: -1px;
  4909. }
  4910. .label-default {
  4911. background-color: #777777;
  4912. }
  4913. .label-default[href]:hover,
  4914. .label-default[href]:focus {
  4915. background-color: #5e5e5e;
  4916. }
  4917. .label-primary {
  4918. background-color: #337ab7;
  4919. }
  4920. .label-primary[href]:hover,
  4921. .label-primary[href]:focus {
  4922. background-color: #286090;
  4923. }
  4924. .label-success {
  4925. background-color: #5cb85c;
  4926. }
  4927. .label-success[href]:hover,
  4928. .label-success[href]:focus {
  4929. background-color: #449d44;
  4930. }
  4931. .label-info {
  4932. background-color: #5bc0de;
  4933. }
  4934. .label-info[href]:hover,
  4935. .label-info[href]:focus {
  4936. background-color: #31b0d5;
  4937. }
  4938. .label-warning {
  4939. background-color: #f0ad4e;
  4940. }
  4941. .label-warning[href]:hover,
  4942. .label-warning[href]:focus {
  4943. background-color: #ec971f;
  4944. }
  4945. .label-danger {
  4946. background-color: #d9534f;
  4947. }
  4948. .label-danger[href]:hover,
  4949. .label-danger[href]:focus {
  4950. background-color: #c9302c;
  4951. }
  4952. .badge {
  4953. display: inline-block;
  4954. min-width: 10px;
  4955. padding: 3px 7px;
  4956. font-size: 12px;
  4957. font-weight: bold;
  4958. color: #fff;
  4959. line-height: 1;
  4960. vertical-align: middle;
  4961. white-space: nowrap;
  4962. text-align: center;
  4963. background-color: #777777;
  4964. border-radius: 10px;
  4965. }
  4966. .badge:empty {
  4967. display: none;
  4968. }
  4969. .btn .badge {
  4970. position: relative;
  4971. top: -1px;
  4972. }
  4973. .btn-xs .badge,
  4974. .btn-group-xs > .btn .badge {
  4975. top: 0;
  4976. padding: 1px 5px;
  4977. }
  4978. a.badge:hover,
  4979. a.badge:focus {
  4980. color: #fff;
  4981. text-decoration: none;
  4982. cursor: pointer;
  4983. }
  4984. .list-group-item.active > .badge,
  4985. .nav-pills > .active > a > .badge {
  4986. color: #337ab7;
  4987. background-color: #fff;
  4988. }
  4989. .list-group-item > .badge {
  4990. float: right;
  4991. }
  4992. .list-group-item > .badge + .badge {
  4993. margin-right: 5px;
  4994. }
  4995. .nav-pills > li > a > .badge {
  4996. margin-left: 3px;
  4997. }
  4998. .jumbotron {
  4999. padding-top: 30px;
  5000. padding-bottom: 30px;
  5001. margin-bottom: 30px;
  5002. color: inherit;
  5003. background-color: #eeeeee;
  5004. }
  5005. .jumbotron h1,
  5006. .jumbotron .h1 {
  5007. color: inherit;
  5008. }
  5009. .jumbotron p {
  5010. margin-bottom: 15px;
  5011. font-size: 20px;
  5012. font-weight: 200;
  5013. }
  5014. .jumbotron > hr {
  5015. border-top-color: #d5d5d5;
  5016. }
  5017. .container .jumbotron,
  5018. .container-fluid .jumbotron {
  5019. border-radius: 3px;
  5020. padding-left: 0px;
  5021. padding-right: 0px;
  5022. }
  5023. .jumbotron .container {
  5024. max-width: 100%;
  5025. }
  5026. @media screen and (min-width: 768px) {
  5027. .jumbotron {
  5028. padding-top: 48px;
  5029. padding-bottom: 48px;
  5030. }
  5031. .container .jumbotron,
  5032. .container-fluid .jumbotron {
  5033. padding-left: 60px;
  5034. padding-right: 60px;
  5035. }
  5036. .jumbotron h1,
  5037. .jumbotron .h1 {
  5038. font-size: 59px;
  5039. }
  5040. }
  5041. .thumbnail {
  5042. display: block;
  5043. padding: 4px;
  5044. margin-bottom: 18px;
  5045. line-height: 1.42857143;
  5046. background-color: #fff;
  5047. border: 1px solid #ddd;
  5048. border-radius: 2px;
  5049. -webkit-transition: border 0.2s ease-in-out;
  5050. -o-transition: border 0.2s ease-in-out;
  5051. transition: border 0.2s ease-in-out;
  5052. }
  5053. .thumbnail > img,
  5054. .thumbnail a > img {
  5055. margin-left: auto;
  5056. margin-right: auto;
  5057. }
  5058. a.thumbnail:hover,
  5059. a.thumbnail:focus,
  5060. a.thumbnail.active {
  5061. border-color: #337ab7;
  5062. }
  5063. .thumbnail .caption {
  5064. padding: 9px;
  5065. color: #000;
  5066. }
  5067. .alert {
  5068. padding: 15px;
  5069. margin-bottom: 18px;
  5070. border: 1px solid transparent;
  5071. border-radius: 2px;
  5072. }
  5073. .alert h4 {
  5074. margin-top: 0;
  5075. color: inherit;
  5076. }
  5077. .alert .alert-link {
  5078. font-weight: bold;
  5079. }
  5080. .alert > p,
  5081. .alert > ul {
  5082. margin-bottom: 0;
  5083. }
  5084. .alert > p + p {
  5085. margin-top: 5px;
  5086. }
  5087. .alert-dismissable,
  5088. .alert-dismissible {
  5089. padding-right: 35px;
  5090. }
  5091. .alert-dismissable .close,
  5092. .alert-dismissible .close {
  5093. position: relative;
  5094. top: -2px;
  5095. right: -21px;
  5096. color: inherit;
  5097. }
  5098. .alert-success {
  5099. background-color: #dff0d8;
  5100. border-color: #d6e9c6;
  5101. color: #3c763d;
  5102. }
  5103. .alert-success hr {
  5104. border-top-color: #c9e2b3;
  5105. }
  5106. .alert-success .alert-link {
  5107. color: #2b542c;
  5108. }
  5109. .alert-info {
  5110. background-color: #d9edf7;
  5111. border-color: #bce8f1;
  5112. color: #31708f;
  5113. }
  5114. .alert-info hr {
  5115. border-top-color: #a6e1ec;
  5116. }
  5117. .alert-info .alert-link {
  5118. color: #245269;
  5119. }
  5120. .alert-warning {
  5121. background-color: #fcf8e3;
  5122. border-color: #faebcc;
  5123. color: #8a6d3b;
  5124. }
  5125. .alert-warning hr {
  5126. border-top-color: #f7e1b5;
  5127. }
  5128. .alert-warning .alert-link {
  5129. color: #66512c;
  5130. }
  5131. .alert-danger {
  5132. background-color: #f2dede;
  5133. border-color: #ebccd1;
  5134. color: #a94442;
  5135. }
  5136. .alert-danger hr {
  5137. border-top-color: #e4b9c0;
  5138. }
  5139. .alert-danger .alert-link {
  5140. color: #843534;
  5141. }
  5142. @-webkit-keyframes progress-bar-stripes {
  5143. from {
  5144. background-position: 40px 0;
  5145. }
  5146. to {
  5147. background-position: 0 0;
  5148. }
  5149. }
  5150. @keyframes progress-bar-stripes {
  5151. from {
  5152. background-position: 40px 0;
  5153. }
  5154. to {
  5155. background-position: 0 0;
  5156. }
  5157. }
  5158. .progress {
  5159. overflow: hidden;
  5160. height: 18px;
  5161. margin-bottom: 18px;
  5162. background-color: #f5f5f5;
  5163. border-radius: 2px;
  5164. -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
  5165. box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
  5166. }
  5167. .progress-bar {
  5168. float: left;
  5169. width: 0%;
  5170. height: 100%;
  5171. font-size: 12px;
  5172. line-height: 18px;
  5173. color: #fff;
  5174. text-align: center;
  5175. background-color: #337ab7;
  5176. -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
  5177. box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
  5178. -webkit-transition: width 0.6s ease;
  5179. -o-transition: width 0.6s ease;
  5180. transition: width 0.6s ease;
  5181. }
  5182. .progress-striped .progress-bar,
  5183. .progress-bar-striped {
  5184. background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  5185. background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  5186. background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  5187. background-size: 40px 40px;
  5188. }
  5189. .progress.active .progress-bar,
  5190. .progress-bar.active {
  5191. -webkit-animation: progress-bar-stripes 2s linear infinite;
  5192. -o-animation: progress-bar-stripes 2s linear infinite;
  5193. animation: progress-bar-stripes 2s linear infinite;
  5194. }
  5195. .progress-bar-success {
  5196. background-color: #5cb85c;
  5197. }
  5198. .progress-striped .progress-bar-success {
  5199. background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  5200. background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  5201. background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  5202. }
  5203. .progress-bar-info {
  5204. background-color: #5bc0de;
  5205. }
  5206. .progress-striped .progress-bar-info {
  5207. background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  5208. background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  5209. background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  5210. }
  5211. .progress-bar-warning {
  5212. background-color: #f0ad4e;
  5213. }
  5214. .progress-striped .progress-bar-warning {
  5215. background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  5216. background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  5217. background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  5218. }
  5219. .progress-bar-danger {
  5220. background-color: #d9534f;
  5221. }
  5222. .progress-striped .progress-bar-danger {
  5223. background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  5224. background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  5225. background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  5226. }
  5227. .media {
  5228. margin-top: 15px;
  5229. }
  5230. .media:first-child {
  5231. margin-top: 0;
  5232. }
  5233. .media,
  5234. .media-body {
  5235. zoom: 1;
  5236. overflow: hidden;
  5237. }
  5238. .media-body {
  5239. width: 10000px;
  5240. }
  5241. .media-object {
  5242. display: block;
  5243. }
  5244. .media-object.img-thumbnail {
  5245. max-width: none;
  5246. }
  5247. .media-right,
  5248. .media > .pull-right {
  5249. padding-left: 10px;
  5250. }
  5251. .media-left,
  5252. .media > .pull-left {
  5253. padding-right: 10px;
  5254. }
  5255. .media-left,
  5256. .media-right,
  5257. .media-body {
  5258. display: table-cell;
  5259. vertical-align: top;
  5260. }
  5261. .media-middle {
  5262. vertical-align: middle;
  5263. }
  5264. .media-bottom {
  5265. vertical-align: bottom;
  5266. }
  5267. .media-heading {
  5268. margin-top: 0;
  5269. margin-bottom: 5px;
  5270. }
  5271. .media-list {
  5272. padding-left: 0;
  5273. list-style: none;
  5274. }
  5275. .list-group {
  5276. margin-bottom: 20px;
  5277. padding-left: 0;
  5278. }
  5279. .list-group-item {
  5280. position: relative;
  5281. display: block;
  5282. padding: 10px 15px;
  5283. margin-bottom: -1px;
  5284. background-color: #fff;
  5285. border: 1px solid #ddd;
  5286. }
  5287. .list-group-item:first-child {
  5288. border-top-right-radius: 2px;
  5289. border-top-left-radius: 2px;
  5290. }
  5291. .list-group-item:last-child {
  5292. margin-bottom: 0;
  5293. border-bottom-right-radius: 2px;
  5294. border-bottom-left-radius: 2px;
  5295. }
  5296. a.list-group-item,
  5297. button.list-group-item {
  5298. color: #555;
  5299. }
  5300. a.list-group-item .list-group-item-heading,
  5301. button.list-group-item .list-group-item-heading {
  5302. color: #333;
  5303. }
  5304. a.list-group-item:hover,
  5305. button.list-group-item:hover,
  5306. a.list-group-item:focus,
  5307. button.list-group-item:focus {
  5308. text-decoration: none;
  5309. color: #555;
  5310. background-color: #f5f5f5;
  5311. }
  5312. button.list-group-item {
  5313. width: 100%;
  5314. text-align: left;
  5315. }
  5316. .list-group-item.disabled,
  5317. .list-group-item.disabled:hover,
  5318. .list-group-item.disabled:focus {
  5319. background-color: #eeeeee;
  5320. color: #777777;
  5321. cursor: not-allowed;
  5322. }
  5323. .list-group-item.disabled .list-group-item-heading,
  5324. .list-group-item.disabled:hover .list-group-item-heading,
  5325. .list-group-item.disabled:focus .list-group-item-heading {
  5326. color: inherit;
  5327. }
  5328. .list-group-item.disabled .list-group-item-text,
  5329. .list-group-item.disabled:hover .list-group-item-text,
  5330. .list-group-item.disabled:focus .list-group-item-text {
  5331. color: #777777;
  5332. }
  5333. .list-group-item.active,
  5334. .list-group-item.active:hover,
  5335. .list-group-item.active:focus {
  5336. z-index: 2;
  5337. color: #fff;
  5338. background-color: #337ab7;
  5339. border-color: #337ab7;
  5340. }
  5341. .list-group-item.active .list-group-item-heading,
  5342. .list-group-item.active:hover .list-group-item-heading,
  5343. .list-group-item.active:focus .list-group-item-heading,
  5344. .list-group-item.active .list-group-item-heading > small,
  5345. .list-group-item.active:hover .list-group-item-heading > small,
  5346. .list-group-item.active:focus .list-group-item-heading > small,
  5347. .list-group-item.active .list-group-item-heading > .small,
  5348. .list-group-item.active:hover .list-group-item-heading > .small,
  5349. .list-group-item.active:focus .list-group-item-heading > .small {
  5350. color: inherit;
  5351. }
  5352. .list-group-item.active .list-group-item-text,
  5353. .list-group-item.active:hover .list-group-item-text,
  5354. .list-group-item.active:focus .list-group-item-text {
  5355. color: #c7ddef;
  5356. }
  5357. .list-group-item-success {
  5358. color: #3c763d;
  5359. background-color: #dff0d8;
  5360. }
  5361. a.list-group-item-success,
  5362. button.list-group-item-success {
  5363. color: #3c763d;
  5364. }
  5365. a.list-group-item-success .list-group-item-heading,
  5366. button.list-group-item-success .list-group-item-heading {
  5367. color: inherit;
  5368. }
  5369. a.list-group-item-success:hover,
  5370. button.list-group-item-success:hover,
  5371. a.list-group-item-success:focus,
  5372. button.list-group-item-success:focus {
  5373. color: #3c763d;
  5374. background-color: #d0e9c6;
  5375. }
  5376. a.list-group-item-success.active,
  5377. button.list-group-item-success.active,
  5378. a.list-group-item-success.active:hover,
  5379. button.list-group-item-success.active:hover,
  5380. a.list-group-item-success.active:focus,
  5381. button.list-group-item-success.active:focus {
  5382. color: #fff;
  5383. background-color: #3c763d;
  5384. border-color: #3c763d;
  5385. }
  5386. .list-group-item-info {
  5387. color: #31708f;
  5388. background-color: #d9edf7;
  5389. }
  5390. a.list-group-item-info,
  5391. button.list-group-item-info {
  5392. color: #31708f;
  5393. }
  5394. a.list-group-item-info .list-group-item-heading,
  5395. button.list-group-item-info .list-group-item-heading {
  5396. color: inherit;
  5397. }
  5398. a.list-group-item-info:hover,
  5399. button.list-group-item-info:hover,
  5400. a.list-group-item-info:focus,
  5401. button.list-group-item-info:focus {
  5402. color: #31708f;
  5403. background-color: #c4e3f3;
  5404. }
  5405. a.list-group-item-info.active,
  5406. button.list-group-item-info.active,
  5407. a.list-group-item-info.active:hover,
  5408. button.list-group-item-info.active:hover,
  5409. a.list-group-item-info.active:focus,
  5410. button.list-group-item-info.active:focus {
  5411. color: #fff;
  5412. background-color: #31708f;
  5413. border-color: #31708f;
  5414. }
  5415. .list-group-item-warning {
  5416. color: #8a6d3b;
  5417. background-color: #fcf8e3;
  5418. }
  5419. a.list-group-item-warning,
  5420. button.list-group-item-warning {
  5421. color: #8a6d3b;
  5422. }
  5423. a.list-group-item-warning .list-group-item-heading,
  5424. button.list-group-item-warning .list-group-item-heading {
  5425. color: inherit;
  5426. }
  5427. a.list-group-item-warning:hover,
  5428. button.list-group-item-warning:hover,
  5429. a.list-group-item-warning:focus,
  5430. button.list-group-item-warning:focus {
  5431. color: #8a6d3b;
  5432. background-color: #faf2cc;
  5433. }
  5434. a.list-group-item-warning.active,
  5435. button.list-group-item-warning.active,
  5436. a.list-group-item-warning.active:hover,
  5437. button.list-group-item-warning.active:hover,
  5438. a.list-group-item-warning.active:focus,
  5439. button.list-group-item-warning.active:focus {
  5440. color: #fff;
  5441. background-color: #8a6d3b;
  5442. border-color: #8a6d3b;
  5443. }
  5444. .list-group-item-danger {
  5445. color: #a94442;
  5446. background-color: #f2dede;
  5447. }
  5448. a.list-group-item-danger,
  5449. button.list-group-item-danger {
  5450. color: #a94442;
  5451. }
  5452. a.list-group-item-danger .list-group-item-heading,
  5453. button.list-group-item-danger .list-group-item-heading {
  5454. color: inherit;
  5455. }
  5456. a.list-group-item-danger:hover,
  5457. button.list-group-item-danger:hover,
  5458. a.list-group-item-danger:focus,
  5459. button.list-group-item-danger:focus {
  5460. color: #a94442;
  5461. background-color: #ebcccc;
  5462. }
  5463. a.list-group-item-danger.active,
  5464. button.list-group-item-danger.active,
  5465. a.list-group-item-danger.active:hover,
  5466. button.list-group-item-danger.active:hover,
  5467. a.list-group-item-danger.active:focus,
  5468. button.list-group-item-danger.active:focus {
  5469. color: #fff;
  5470. background-color: #a94442;
  5471. border-color: #a94442;
  5472. }
  5473. .list-group-item-heading {
  5474. margin-top: 0;
  5475. margin-bottom: 5px;
  5476. }
  5477. .list-group-item-text {
  5478. margin-bottom: 0;
  5479. line-height: 1.3;
  5480. }
  5481. .panel {
  5482. margin-bottom: 18px;
  5483. background-color: #fff;
  5484. border: 1px solid transparent;
  5485. border-radius: 2px;
  5486. -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
  5487. box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
  5488. }
  5489. .panel-body {
  5490. padding: 15px;
  5491. }
  5492. .panel-heading {
  5493. padding: 10px 15px;
  5494. border-bottom: 1px solid transparent;
  5495. border-top-right-radius: 1px;
  5496. border-top-left-radius: 1px;
  5497. }
  5498. .panel-heading > .dropdown .dropdown-toggle {
  5499. color: inherit;
  5500. }
  5501. .panel-title {
  5502. margin-top: 0;
  5503. margin-bottom: 0;
  5504. font-size: 15px;
  5505. color: inherit;
  5506. }
  5507. .panel-title > a,
  5508. .panel-title > small,
  5509. .panel-title > .small,
  5510. .panel-title > small > a,
  5511. .panel-title > .small > a {
  5512. color: inherit;
  5513. }
  5514. .panel-footer {
  5515. padding: 10px 15px;
  5516. background-color: #f5f5f5;
  5517. border-top: 1px solid #ddd;
  5518. border-bottom-right-radius: 1px;
  5519. border-bottom-left-radius: 1px;
  5520. }
  5521. .panel > .list-group,
  5522. .panel > .panel-collapse > .list-group {
  5523. margin-bottom: 0;
  5524. }
  5525. .panel > .list-group .list-group-item,
  5526. .panel > .panel-collapse > .list-group .list-group-item {
  5527. border-width: 1px 0;
  5528. border-radius: 0;
  5529. }
  5530. .panel > .list-group:first-child .list-group-item:first-child,
  5531. .panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
  5532. border-top: 0;
  5533. border-top-right-radius: 1px;
  5534. border-top-left-radius: 1px;
  5535. }
  5536. .panel > .list-group:last-child .list-group-item:last-child,
  5537. .panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
  5538. border-bottom: 0;
  5539. border-bottom-right-radius: 1px;
  5540. border-bottom-left-radius: 1px;
  5541. }
  5542. .panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {
  5543. border-top-right-radius: 0;
  5544. border-top-left-radius: 0;
  5545. }
  5546. .panel-heading + .list-group .list-group-item:first-child {
  5547. border-top-width: 0;
  5548. }
  5549. .list-group + .panel-footer {
  5550. border-top-width: 0;
  5551. }
  5552. .panel > .table,
  5553. .panel > .table-responsive > .table,
  5554. .panel > .panel-collapse > .table {
  5555. margin-bottom: 0;
  5556. }
  5557. .panel > .table caption,
  5558. .panel > .table-responsive > .table caption,
  5559. .panel > .panel-collapse > .table caption {
  5560. padding-left: 15px;
  5561. padding-right: 15px;
  5562. }
  5563. .panel > .table:first-child,
  5564. .panel > .table-responsive:first-child > .table:first-child {
  5565. border-top-right-radius: 1px;
  5566. border-top-left-radius: 1px;
  5567. }
  5568. .panel > .table:first-child > thead:first-child > tr:first-child,
  5569. .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
  5570. .panel > .table:first-child > tbody:first-child > tr:first-child,
  5571. .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
  5572. border-top-left-radius: 1px;
  5573. border-top-right-radius: 1px;
  5574. }
  5575. .panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
  5576. .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
  5577. .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
  5578. .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
  5579. .panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
  5580. .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
  5581. .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
  5582. .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
  5583. border-top-left-radius: 1px;
  5584. }
  5585. .panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
  5586. .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
  5587. .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
  5588. .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
  5589. .panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
  5590. .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
  5591. .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
  5592. .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
  5593. border-top-right-radius: 1px;
  5594. }
  5595. .panel > .table:last-child,
  5596. .panel > .table-responsive:last-child > .table:last-child {
  5597. border-bottom-right-radius: 1px;
  5598. border-bottom-left-radius: 1px;
  5599. }
  5600. .panel > .table:last-child > tbody:last-child > tr:last-child,
  5601. .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
  5602. .panel > .table:last-child > tfoot:last-child > tr:last-child,
  5603. .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
  5604. border-bottom-left-radius: 1px;
  5605. border-bottom-right-radius: 1px;
  5606. }
  5607. .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
  5608. .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
  5609. .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
  5610. .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
  5611. .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
  5612. .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
  5613. .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
  5614. .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
  5615. border-bottom-left-radius: 1px;
  5616. }
  5617. .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
  5618. .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
  5619. .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
  5620. .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
  5621. .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
  5622. .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
  5623. .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
  5624. .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
  5625. border-bottom-right-radius: 1px;
  5626. }
  5627. .panel > .panel-body + .table,
  5628. .panel > .panel-body + .table-responsive,
  5629. .panel > .table + .panel-body,
  5630. .panel > .table-responsive + .panel-body {
  5631. border-top: 1px solid #ddd;
  5632. }
  5633. .panel > .table > tbody:first-child > tr:first-child th,
  5634. .panel > .table > tbody:first-child > tr:first-child td {
  5635. border-top: 0;
  5636. }
  5637. .panel > .table-bordered,
  5638. .panel > .table-responsive > .table-bordered {
  5639. border: 0;
  5640. }
  5641. .panel > .table-bordered > thead > tr > th:first-child,
  5642. .panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
  5643. .panel > .table-bordered > tbody > tr > th:first-child,
  5644. .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
  5645. .panel > .table-bordered > tfoot > tr > th:first-child,
  5646. .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
  5647. .panel > .table-bordered > thead > tr > td:first-child,
  5648. .panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
  5649. .panel > .table-bordered > tbody > tr > td:first-child,
  5650. .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
  5651. .panel > .table-bordered > tfoot > tr > td:first-child,
  5652. .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
  5653. border-left: 0;
  5654. }
  5655. .panel > .table-bordered > thead > tr > th:last-child,
  5656. .panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
  5657. .panel > .table-bordered > tbody > tr > th:last-child,
  5658. .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
  5659. .panel > .table-bordered > tfoot > tr > th:last-child,
  5660. .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
  5661. .panel > .table-bordered > thead > tr > td:last-child,
  5662. .panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
  5663. .panel > .table-bordered > tbody > tr > td:last-child,
  5664. .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
  5665. .panel > .table-bordered > tfoot > tr > td:last-child,
  5666. .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
  5667. border-right: 0;
  5668. }
  5669. .panel > .table-bordered > thead > tr:first-child > td,
  5670. .panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
  5671. .panel > .table-bordered > tbody > tr:first-child > td,
  5672. .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
  5673. .panel > .table-bordered > thead > tr:first-child > th,
  5674. .panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
  5675. .panel > .table-bordered > tbody > tr:first-child > th,
  5676. .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
  5677. border-bottom: 0;
  5678. }
  5679. .panel > .table-bordered > tbody > tr:last-child > td,
  5680. .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
  5681. .panel > .table-bordered > tfoot > tr:last-child > td,
  5682. .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
  5683. .panel > .table-bordered > tbody > tr:last-child > th,
  5684. .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
  5685. .panel > .table-bordered > tfoot > tr:last-child > th,
  5686. .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
  5687. border-bottom: 0;
  5688. }
  5689. .panel > .table-responsive {
  5690. border: 0;
  5691. margin-bottom: 0;
  5692. }
  5693. .panel-group {
  5694. margin-bottom: 18px;
  5695. }
  5696. .panel-group .panel {
  5697. margin-bottom: 0;
  5698. border-radius: 2px;
  5699. }
  5700. .panel-group .panel + .panel {
  5701. margin-top: 5px;
  5702. }
  5703. .panel-group .panel-heading {
  5704. border-bottom: 0;
  5705. }
  5706. .panel-group .panel-heading + .panel-collapse > .panel-body,
  5707. .panel-group .panel-heading + .panel-collapse > .list-group {
  5708. border-top: 1px solid #ddd;
  5709. }
  5710. .panel-group .panel-footer {
  5711. border-top: 0;
  5712. }
  5713. .panel-group .panel-footer + .panel-collapse .panel-body {
  5714. border-bottom: 1px solid #ddd;
  5715. }
  5716. .panel-default {
  5717. border-color: #ddd;
  5718. }
  5719. .panel-default > .panel-heading {
  5720. color: #333333;
  5721. background-color: #f5f5f5;
  5722. border-color: #ddd;
  5723. }
  5724. .panel-default > .panel-heading + .panel-collapse > .panel-body {
  5725. border-top-color: #ddd;
  5726. }
  5727. .panel-default > .panel-heading .badge {
  5728. color: #f5f5f5;
  5729. background-color: #333333;
  5730. }
  5731. .panel-default > .panel-footer + .panel-collapse > .panel-body {
  5732. border-bottom-color: #ddd;
  5733. }
  5734. .panel-primary {
  5735. border-color: #337ab7;
  5736. }
  5737. .panel-primary > .panel-heading {
  5738. color: #fff;
  5739. background-color: #337ab7;
  5740. border-color: #337ab7;
  5741. }
  5742. .panel-primary > .panel-heading + .panel-collapse > .panel-body {
  5743. border-top-color: #337ab7;
  5744. }
  5745. .panel-primary > .panel-heading .badge {
  5746. color: #337ab7;
  5747. background-color: #fff;
  5748. }
  5749. .panel-primary > .panel-footer + .panel-collapse > .panel-body {
  5750. border-bottom-color: #337ab7;
  5751. }
  5752. .panel-success {
  5753. border-color: #d6e9c6;
  5754. }
  5755. .panel-success > .panel-heading {
  5756. color: #3c763d;
  5757. background-color: #dff0d8;
  5758. border-color: #d6e9c6;
  5759. }
  5760. .panel-success > .panel-heading + .panel-collapse > .panel-body {
  5761. border-top-color: #d6e9c6;
  5762. }
  5763. .panel-success > .panel-heading .badge {
  5764. color: #dff0d8;
  5765. background-color: #3c763d;
  5766. }
  5767. .panel-success > .panel-footer + .panel-collapse > .panel-body {
  5768. border-bottom-color: #d6e9c6;
  5769. }
  5770. .panel-info {
  5771. border-color: #bce8f1;
  5772. }
  5773. .panel-info > .panel-heading {
  5774. color: #31708f;
  5775. background-color: #d9edf7;
  5776. border-color: #bce8f1;
  5777. }
  5778. .panel-info > .panel-heading + .panel-collapse > .panel-body {
  5779. border-top-color: #bce8f1;
  5780. }
  5781. .panel-info > .panel-heading .badge {
  5782. color: #d9edf7;
  5783. background-color: #31708f;
  5784. }
  5785. .panel-info > .panel-footer + .panel-collapse > .panel-body {
  5786. border-bottom-color: #bce8f1;
  5787. }
  5788. .panel-warning {
  5789. border-color: #faebcc;
  5790. }
  5791. .panel-warning > .panel-heading {
  5792. color: #8a6d3b;
  5793. background-color: #fcf8e3;
  5794. border-color: #faebcc;
  5795. }
  5796. .panel-warning > .panel-heading + .panel-collapse > .panel-body {
  5797. border-top-color: #faebcc;
  5798. }
  5799. .panel-warning > .panel-heading .badge {
  5800. color: #fcf8e3;
  5801. background-color: #8a6d3b;
  5802. }
  5803. .panel-warning > .panel-footer + .panel-collapse > .panel-body {
  5804. border-bottom-color: #faebcc;
  5805. }
  5806. .panel-danger {
  5807. border-color: #ebccd1;
  5808. }
  5809. .panel-danger > .panel-heading {
  5810. color: #a94442;
  5811. background-color: #f2dede;
  5812. border-color: #ebccd1;
  5813. }
  5814. .panel-danger > .panel-heading + .panel-collapse > .panel-body {
  5815. border-top-color: #ebccd1;
  5816. }
  5817. .panel-danger > .panel-heading .badge {
  5818. color: #f2dede;
  5819. background-color: #a94442;
  5820. }
  5821. .panel-danger > .panel-footer + .panel-collapse > .panel-body {
  5822. border-bottom-color: #ebccd1;
  5823. }
  5824. .embed-responsive {
  5825. position: relative;
  5826. display: block;
  5827. height: 0;
  5828. padding: 0;
  5829. overflow: hidden;
  5830. }
  5831. .embed-responsive .embed-responsive-item,
  5832. .embed-responsive iframe,
  5833. .embed-responsive embed,
  5834. .embed-responsive object,
  5835. .embed-responsive video {
  5836. position: absolute;
  5837. top: 0;
  5838. left: 0;
  5839. bottom: 0;
  5840. height: 100%;
  5841. width: 100%;
  5842. border: 0;
  5843. }
  5844. .embed-responsive-16by9 {
  5845. padding-bottom: 56.25%;
  5846. }
  5847. .embed-responsive-4by3 {
  5848. padding-bottom: 75%;
  5849. }
  5850. .well {
  5851. min-height: 20px;
  5852. padding: 19px;
  5853. margin-bottom: 20px;
  5854. background-color: #f5f5f5;
  5855. border: 1px solid #e3e3e3;
  5856. border-radius: 2px;
  5857. -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
  5858. box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
  5859. }
  5860. .well blockquote {
  5861. border-color: #ddd;
  5862. border-color: rgba(0, 0, 0, 0.15);
  5863. }
  5864. .well-lg {
  5865. padding: 24px;
  5866. border-radius: 3px;
  5867. }
  5868. .well-sm {
  5869. padding: 9px;
  5870. border-radius: 1px;
  5871. }
  5872. .close {
  5873. float: right;
  5874. font-size: 19.5px;
  5875. font-weight: bold;
  5876. line-height: 1;
  5877. color: #000;
  5878. text-shadow: 0 1px 0 #fff;
  5879. opacity: 0.2;
  5880. filter: alpha(opacity=20);
  5881. }
  5882. .close:hover,
  5883. .close:focus {
  5884. color: #000;
  5885. text-decoration: none;
  5886. cursor: pointer;
  5887. opacity: 0.5;
  5888. filter: alpha(opacity=50);
  5889. }
  5890. button.close {
  5891. padding: 0;
  5892. cursor: pointer;
  5893. background: transparent;
  5894. border: 0;
  5895. -webkit-appearance: none;
  5896. }
  5897. .modal-open {
  5898. overflow: hidden;
  5899. }
  5900. .modal {
  5901. display: none;
  5902. overflow: hidden;
  5903. position: fixed;
  5904. top: 0;
  5905. right: 0;
  5906. bottom: 0;
  5907. left: 0;
  5908. z-index: 1050;
  5909. -webkit-overflow-scrolling: touch;
  5910. outline: 0;
  5911. }
  5912. .modal.fade .modal-dialog {
  5913. -webkit-transform: translate(0, -25%);
  5914. -ms-transform: translate(0, -25%);
  5915. -o-transform: translate(0, -25%);
  5916. transform: translate(0, -25%);
  5917. -webkit-transition: -webkit-transform 0.3s ease-out;
  5918. -moz-transition: -moz-transform 0.3s ease-out;
  5919. -o-transition: -o-transform 0.3s ease-out;
  5920. transition: transform 0.3s ease-out;
  5921. }
  5922. .modal.in .modal-dialog {
  5923. -webkit-transform: translate(0, 0);
  5924. -ms-transform: translate(0, 0);
  5925. -o-transform: translate(0, 0);
  5926. transform: translate(0, 0);
  5927. }
  5928. .modal-open .modal {
  5929. overflow-x: hidden;
  5930. overflow-y: auto;
  5931. }
  5932. .modal-dialog {
  5933. position: relative;
  5934. width: auto;
  5935. margin: 10px;
  5936. }
  5937. .modal-content {
  5938. position: relative;
  5939. background-color: #fff;
  5940. border: 1px solid #999;
  5941. border: 1px solid rgba(0, 0, 0, 0.2);
  5942. border-radius: 3px;
  5943. -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
  5944. box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
  5945. background-clip: padding-box;
  5946. outline: 0;
  5947. }
  5948. .modal-backdrop {
  5949. position: fixed;
  5950. top: 0;
  5951. right: 0;
  5952. bottom: 0;
  5953. left: 0;
  5954. z-index: 1040;
  5955. background-color: #000;
  5956. }
  5957. .modal-backdrop.fade {
  5958. opacity: 0;
  5959. filter: alpha(opacity=0);
  5960. }
  5961. .modal-backdrop.in {
  5962. opacity: 0.5;
  5963. filter: alpha(opacity=50);
  5964. }
  5965. .modal-header {
  5966. padding: 15px;
  5967. border-bottom: 1px solid #e5e5e5;
  5968. }
  5969. .modal-header .close {
  5970. margin-top: -2px;
  5971. }
  5972. .modal-title {
  5973. margin: 0;
  5974. line-height: 1.42857143;
  5975. }
  5976. .modal-body {
  5977. position: relative;
  5978. padding: 15px;
  5979. }
  5980. .modal-footer {
  5981. padding: 15px;
  5982. text-align: right;
  5983. border-top: 1px solid #e5e5e5;
  5984. }
  5985. .modal-footer .btn + .btn {
  5986. margin-left: 5px;
  5987. margin-bottom: 0;
  5988. }
  5989. .modal-footer .btn-group .btn + .btn {
  5990. margin-left: -1px;
  5991. }
  5992. .modal-footer .btn-block + .btn-block {
  5993. margin-left: 0;
  5994. }
  5995. .modal-scrollbar-measure {
  5996. position: absolute;
  5997. top: -9999px;
  5998. width: 50px;
  5999. height: 50px;
  6000. overflow: scroll;
  6001. }
  6002. @media (min-width: 768px) {
  6003. .modal-dialog {
  6004. width: 600px;
  6005. margin: 30px auto;
  6006. }
  6007. .modal-content {
  6008. -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
  6009. box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
  6010. }
  6011. .modal-sm {
  6012. width: 300px;
  6013. }
  6014. }
  6015. @media (min-width: 992px) {
  6016. .modal-lg {
  6017. width: 900px;
  6018. }
  6019. }
  6020. .tooltip {
  6021. position: absolute;
  6022. z-index: 1070;
  6023. display: block;
  6024. font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  6025. font-style: normal;
  6026. font-weight: normal;
  6027. letter-spacing: normal;
  6028. line-break: auto;
  6029. line-height: 1.42857143;
  6030. text-align: left;
  6031. text-align: start;
  6032. text-decoration: none;
  6033. text-shadow: none;
  6034. text-transform: none;
  6035. white-space: normal;
  6036. word-break: normal;
  6037. word-spacing: normal;
  6038. word-wrap: normal;
  6039. font-size: 12px;
  6040. opacity: 0;
  6041. filter: alpha(opacity=0);
  6042. }
  6043. .tooltip.in {
  6044. opacity: 0.9;
  6045. filter: alpha(opacity=90);
  6046. }
  6047. .tooltip.top {
  6048. margin-top: -3px;
  6049. padding: 5px 0;
  6050. }
  6051. .tooltip.right {
  6052. margin-left: 3px;
  6053. padding: 0 5px;
  6054. }
  6055. .tooltip.bottom {
  6056. margin-top: 3px;
  6057. padding: 5px 0;
  6058. }
  6059. .tooltip.left {
  6060. margin-left: -3px;
  6061. padding: 0 5px;
  6062. }
  6063. .tooltip-inner {
  6064. max-width: 200px;
  6065. padding: 3px 8px;
  6066. color: #fff;
  6067. text-align: center;
  6068. background-color: #000;
  6069. border-radius: 2px;
  6070. }
  6071. .tooltip-arrow {
  6072. position: absolute;
  6073. width: 0;
  6074. height: 0;
  6075. border-color: transparent;
  6076. border-style: solid;
  6077. }
  6078. .tooltip.top .tooltip-arrow {
  6079. bottom: 0;
  6080. left: 50%;
  6081. margin-left: -5px;
  6082. border-width: 5px 5px 0;
  6083. border-top-color: #000;
  6084. }
  6085. .tooltip.top-left .tooltip-arrow {
  6086. bottom: 0;
  6087. right: 5px;
  6088. margin-bottom: -5px;
  6089. border-width: 5px 5px 0;
  6090. border-top-color: #000;
  6091. }
  6092. .tooltip.top-right .tooltip-arrow {
  6093. bottom: 0;
  6094. left: 5px;
  6095. margin-bottom: -5px;
  6096. border-width: 5px 5px 0;
  6097. border-top-color: #000;
  6098. }
  6099. .tooltip.right .tooltip-arrow {
  6100. top: 50%;
  6101. left: 0;
  6102. margin-top: -5px;
  6103. border-width: 5px 5px 5px 0;
  6104. border-right-color: #000;
  6105. }
  6106. .tooltip.left .tooltip-arrow {
  6107. top: 50%;
  6108. right: 0;
  6109. margin-top: -5px;
  6110. border-width: 5px 0 5px 5px;
  6111. border-left-color: #000;
  6112. }
  6113. .tooltip.bottom .tooltip-arrow {
  6114. top: 0;
  6115. left: 50%;
  6116. margin-left: -5px;
  6117. border-width: 0 5px 5px;
  6118. border-bottom-color: #000;
  6119. }
  6120. .tooltip.bottom-left .tooltip-arrow {
  6121. top: 0;
  6122. right: 5px;
  6123. margin-top: -5px;
  6124. border-width: 0 5px 5px;
  6125. border-bottom-color: #000;
  6126. }
  6127. .tooltip.bottom-right .tooltip-arrow {
  6128. top: 0;
  6129. left: 5px;
  6130. margin-top: -5px;
  6131. border-width: 0 5px 5px;
  6132. border-bottom-color: #000;
  6133. }
  6134. .popover {
  6135. position: absolute;
  6136. top: 0;
  6137. left: 0;
  6138. z-index: 1060;
  6139. display: none;
  6140. max-width: 276px;
  6141. padding: 1px;
  6142. font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  6143. font-style: normal;
  6144. font-weight: normal;
  6145. letter-spacing: normal;
  6146. line-break: auto;
  6147. line-height: 1.42857143;
  6148. text-align: left;
  6149. text-align: start;
  6150. text-decoration: none;
  6151. text-shadow: none;
  6152. text-transform: none;
  6153. white-space: normal;
  6154. word-break: normal;
  6155. word-spacing: normal;
  6156. word-wrap: normal;
  6157. font-size: 13px;
  6158. background-color: #fff;
  6159. background-clip: padding-box;
  6160. border: 1px solid #ccc;
  6161. border: 1px solid rgba(0, 0, 0, 0.2);
  6162. border-radius: 3px;
  6163. -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
  6164. box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
  6165. }
  6166. .popover.top {
  6167. margin-top: -10px;
  6168. }
  6169. .popover.right {
  6170. margin-left: 10px;
  6171. }
  6172. .popover.bottom {
  6173. margin-top: 10px;
  6174. }
  6175. .popover.left {
  6176. margin-left: -10px;
  6177. }
  6178. .popover-title {
  6179. margin: 0;
  6180. padding: 8px 14px;
  6181. font-size: 13px;
  6182. background-color: #f7f7f7;
  6183. border-bottom: 1px solid #ebebeb;
  6184. border-radius: 2px 2px 0 0;
  6185. }
  6186. .popover-content {
  6187. padding: 9px 14px;
  6188. }
  6189. .popover > .arrow,
  6190. .popover > .arrow:after {
  6191. position: absolute;
  6192. display: block;
  6193. width: 0;
  6194. height: 0;
  6195. border-color: transparent;
  6196. border-style: solid;
  6197. }
  6198. .popover > .arrow {
  6199. border-width: 11px;
  6200. }
  6201. .popover > .arrow:after {
  6202. border-width: 10px;
  6203. content: "";
  6204. }
  6205. .popover.top > .arrow {
  6206. left: 50%;
  6207. margin-left: -11px;
  6208. border-bottom-width: 0;
  6209. border-top-color: #999999;
  6210. border-top-color: rgba(0, 0, 0, 0.25);
  6211. bottom: -11px;
  6212. }
  6213. .popover.top > .arrow:after {
  6214. content: " ";
  6215. bottom: 1px;
  6216. margin-left: -10px;
  6217. border-bottom-width: 0;
  6218. border-top-color: #fff;
  6219. }
  6220. .popover.right > .arrow {
  6221. top: 50%;
  6222. left: -11px;
  6223. margin-top: -11px;
  6224. border-left-width: 0;
  6225. border-right-color: #999999;
  6226. border-right-color: rgba(0, 0, 0, 0.25);
  6227. }
  6228. .popover.right > .arrow:after {
  6229. content: " ";
  6230. left: 1px;
  6231. bottom: -10px;
  6232. border-left-width: 0;
  6233. border-right-color: #fff;
  6234. }
  6235. .popover.bottom > .arrow {
  6236. left: 50%;
  6237. margin-left: -11px;
  6238. border-top-width: 0;
  6239. border-bottom-color: #999999;
  6240. border-bottom-color: rgba(0, 0, 0, 0.25);
  6241. top: -11px;
  6242. }
  6243. .popover.bottom > .arrow:after {
  6244. content: " ";
  6245. top: 1px;
  6246. margin-left: -10px;
  6247. border-top-width: 0;
  6248. border-bottom-color: #fff;
  6249. }
  6250. .popover.left > .arrow {
  6251. top: 50%;
  6252. right: -11px;
  6253. margin-top: -11px;
  6254. border-right-width: 0;
  6255. border-left-color: #999999;
  6256. border-left-color: rgba(0, 0, 0, 0.25);
  6257. }
  6258. .popover.left > .arrow:after {
  6259. content: " ";
  6260. right: 1px;
  6261. border-right-width: 0;
  6262. border-left-color: #fff;
  6263. bottom: -10px;
  6264. }
  6265. .carousel {
  6266. position: relative;
  6267. }
  6268. .carousel-inner {
  6269. position: relative;
  6270. overflow: hidden;
  6271. width: 100%;
  6272. }
  6273. .carousel-inner > .item {
  6274. display: none;
  6275. position: relative;
  6276. -webkit-transition: 0.6s ease-in-out left;
  6277. -o-transition: 0.6s ease-in-out left;
  6278. transition: 0.6s ease-in-out left;
  6279. }
  6280. .carousel-inner > .item > img,
  6281. .carousel-inner > .item > a > img {
  6282. line-height: 1;
  6283. }
  6284. @media all and (transform-3d), (-webkit-transform-3d) {
  6285. .carousel-inner > .item {
  6286. -webkit-transition: -webkit-transform 0.6s ease-in-out;
  6287. -moz-transition: -moz-transform 0.6s ease-in-out;
  6288. -o-transition: -o-transform 0.6s ease-in-out;
  6289. transition: transform 0.6s ease-in-out;
  6290. -webkit-backface-visibility: hidden;
  6291. -moz-backface-visibility: hidden;
  6292. backface-visibility: hidden;
  6293. -webkit-perspective: 1000px;
  6294. -moz-perspective: 1000px;
  6295. perspective: 1000px;
  6296. }
  6297. .carousel-inner > .item.next,
  6298. .carousel-inner > .item.active.right {
  6299. -webkit-transform: translate3d(100%, 0, 0);
  6300. transform: translate3d(100%, 0, 0);
  6301. left: 0;
  6302. }
  6303. .carousel-inner > .item.prev,
  6304. .carousel-inner > .item.active.left {
  6305. -webkit-transform: translate3d(-100%, 0, 0);
  6306. transform: translate3d(-100%, 0, 0);
  6307. left: 0;
  6308. }
  6309. .carousel-inner > .item.next.left,
  6310. .carousel-inner > .item.prev.right,
  6311. .carousel-inner > .item.active {
  6312. -webkit-transform: translate3d(0, 0, 0);
  6313. transform: translate3d(0, 0, 0);
  6314. left: 0;
  6315. }
  6316. }
  6317. .carousel-inner > .active,
  6318. .carousel-inner > .next,
  6319. .carousel-inner > .prev {
  6320. display: block;
  6321. }
  6322. .carousel-inner > .active {
  6323. left: 0;
  6324. }
  6325. .carousel-inner > .next,
  6326. .carousel-inner > .prev {
  6327. position: absolute;
  6328. top: 0;
  6329. width: 100%;
  6330. }
  6331. .carousel-inner > .next {
  6332. left: 100%;
  6333. }
  6334. .carousel-inner > .prev {
  6335. left: -100%;
  6336. }
  6337. .carousel-inner > .next.left,
  6338. .carousel-inner > .prev.right {
  6339. left: 0;
  6340. }
  6341. .carousel-inner > .active.left {
  6342. left: -100%;
  6343. }
  6344. .carousel-inner > .active.right {
  6345. left: 100%;
  6346. }
  6347. .carousel-control {
  6348. position: absolute;
  6349. top: 0;
  6350. left: 0;
  6351. bottom: 0;
  6352. width: 15%;
  6353. opacity: 0.5;
  6354. filter: alpha(opacity=50);
  6355. font-size: 20px;
  6356. color: #fff;
  6357. text-align: center;
  6358. text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
  6359. background-color: rgba(0, 0, 0, 0);
  6360. }
  6361. .carousel-control.left {
  6362. background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
  6363. background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
  6364. background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
  6365. background-repeat: repeat-x;
  6366. filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
  6367. }
  6368. .carousel-control.right {
  6369. left: auto;
  6370. right: 0;
  6371. background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
  6372. background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
  6373. background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
  6374. background-repeat: repeat-x;
  6375. filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
  6376. }
  6377. .carousel-control:hover,
  6378. .carousel-control:focus {
  6379. outline: 0;
  6380. color: #fff;
  6381. text-decoration: none;
  6382. opacity: 0.9;
  6383. filter: alpha(opacity=90);
  6384. }
  6385. .carousel-control .icon-prev,
  6386. .carousel-control .icon-next,
  6387. .carousel-control .glyphicon-chevron-left,
  6388. .carousel-control .glyphicon-chevron-right {
  6389. position: absolute;
  6390. top: 50%;
  6391. margin-top: -10px;
  6392. z-index: 5;
  6393. display: inline-block;
  6394. }
  6395. .carousel-control .icon-prev,
  6396. .carousel-control .glyphicon-chevron-left {
  6397. left: 50%;
  6398. margin-left: -10px;
  6399. }
  6400. .carousel-control .icon-next,
  6401. .carousel-control .glyphicon-chevron-right {
  6402. right: 50%;
  6403. margin-right: -10px;
  6404. }
  6405. .carousel-control .icon-prev,
  6406. .carousel-control .icon-next {
  6407. width: 20px;
  6408. height: 20px;
  6409. line-height: 1;
  6410. font-family: serif;
  6411. }
  6412. .carousel-control .icon-prev:before {
  6413. content: '\2039';
  6414. }
  6415. .carousel-control .icon-next:before {
  6416. content: '\203a';
  6417. }
  6418. .carousel-indicators {
  6419. position: absolute;
  6420. bottom: 10px;
  6421. left: 50%;
  6422. z-index: 15;
  6423. width: 60%;
  6424. margin-left: -30%;
  6425. padding-left: 0;
  6426. list-style: none;
  6427. text-align: center;
  6428. }
  6429. .carousel-indicators li {
  6430. display: inline-block;
  6431. width: 10px;
  6432. height: 10px;
  6433. margin: 1px;
  6434. text-indent: -999px;
  6435. border: 1px solid #fff;
  6436. border-radius: 10px;
  6437. cursor: pointer;
  6438. background-color: #000 \9;
  6439. background-color: rgba(0, 0, 0, 0);
  6440. }
  6441. .carousel-indicators .active {
  6442. margin: 0;
  6443. width: 12px;
  6444. height: 12px;
  6445. background-color: #fff;
  6446. }
  6447. .carousel-caption {
  6448. position: absolute;
  6449. left: 15%;
  6450. right: 15%;
  6451. bottom: 20px;
  6452. z-index: 10;
  6453. padding-top: 20px;
  6454. padding-bottom: 20px;
  6455. color: #fff;
  6456. text-align: center;
  6457. text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
  6458. }
  6459. .carousel-caption .btn {
  6460. text-shadow: none;
  6461. }
  6462. @media screen and (min-width: 768px) {
  6463. .carousel-control .glyphicon-chevron-left,
  6464. .carousel-control .glyphicon-chevron-right,
  6465. .carousel-control .icon-prev,
  6466. .carousel-control .icon-next {
  6467. width: 30px;
  6468. height: 30px;
  6469. margin-top: -10px;
  6470. font-size: 30px;
  6471. }
  6472. .carousel-control .glyphicon-chevron-left,
  6473. .carousel-control .icon-prev {
  6474. margin-left: -10px;
  6475. }
  6476. .carousel-control .glyphicon-chevron-right,
  6477. .carousel-control .icon-next {
  6478. margin-right: -10px;
  6479. }
  6480. .carousel-caption {
  6481. left: 20%;
  6482. right: 20%;
  6483. padding-bottom: 30px;
  6484. }
  6485. .carousel-indicators {
  6486. bottom: 20px;
  6487. }
  6488. }
  6489. .clearfix:before,
  6490. .clearfix:after,
  6491. .dl-horizontal dd:before,
  6492. .dl-horizontal dd:after,
  6493. .container:before,
  6494. .container:after,
  6495. .container-fluid:before,
  6496. .container-fluid:after,
  6497. .row:before,
  6498. .row:after,
  6499. .form-horizontal .form-group:before,
  6500. .form-horizontal .form-group:after,
  6501. .btn-toolbar:before,
  6502. .btn-toolbar:after,
  6503. .btn-group-vertical > .btn-group:before,
  6504. .btn-group-vertical > .btn-group:after,
  6505. .nav:before,
  6506. .nav:after,
  6507. .navbar:before,
  6508. .navbar:after,
  6509. .navbar-header:before,
  6510. .navbar-header:after,
  6511. .navbar-collapse:before,
  6512. .navbar-collapse:after,
  6513. .pager:before,
  6514. .pager:after,
  6515. .panel-body:before,
  6516. .panel-body:after,
  6517. .modal-header:before,
  6518. .modal-header:after,
  6519. .modal-footer:before,
  6520. .modal-footer:after,
  6521. .item_buttons:before,
  6522. .item_buttons:after {
  6523. content: " ";
  6524. display: table;
  6525. }
  6526. .clearfix:after,
  6527. .dl-horizontal dd:after,
  6528. .container:after,
  6529. .container-fluid:after,
  6530. .row:after,
  6531. .form-horizontal .form-group:after,
  6532. .btn-toolbar:after,
  6533. .btn-group-vertical > .btn-group:after,
  6534. .nav:after,
  6535. .navbar:after,
  6536. .navbar-header:after,
  6537. .navbar-collapse:after,
  6538. .pager:after,
  6539. .panel-body:after,
  6540. .modal-header:after,
  6541. .modal-footer:after,
  6542. .item_buttons:after {
  6543. clear: both;
  6544. }
  6545. .center-block {
  6546. display: block;
  6547. margin-left: auto;
  6548. margin-right: auto;
  6549. }
  6550. .pull-right {
  6551. float: right !important;
  6552. }
  6553. .pull-left {
  6554. float: left !important;
  6555. }
  6556. .hide {
  6557. display: none !important;
  6558. }
  6559. .show {
  6560. display: block !important;
  6561. }
  6562. .invisible {
  6563. visibility: hidden;
  6564. }
  6565. .text-hide {
  6566. font: 0/0 a;
  6567. color: transparent;
  6568. text-shadow: none;
  6569. background-color: transparent;
  6570. border: 0;
  6571. }
  6572. .hidden {
  6573. display: none !important;
  6574. }
  6575. .affix {
  6576. position: fixed;
  6577. }
  6578. @-ms-viewport {
  6579. width: device-width;
  6580. }
  6581. .visible-xs,
  6582. .visible-sm,
  6583. .visible-md,
  6584. .visible-lg {
  6585. display: none !important;
  6586. }
  6587. .visible-xs-block,
  6588. .visible-xs-inline,
  6589. .visible-xs-inline-block,
  6590. .visible-sm-block,
  6591. .visible-sm-inline,
  6592. .visible-sm-inline-block,
  6593. .visible-md-block,
  6594. .visible-md-inline,
  6595. .visible-md-inline-block,
  6596. .visible-lg-block,
  6597. .visible-lg-inline,
  6598. .visible-lg-inline-block {
  6599. display: none !important;
  6600. }
  6601. @media (max-width: 767px) {
  6602. .visible-xs {
  6603. display: block !important;
  6604. }
  6605. table.visible-xs {
  6606. display: table !important;
  6607. }
  6608. tr.visible-xs {
  6609. display: table-row !important;
  6610. }
  6611. th.visible-xs,
  6612. td.visible-xs {
  6613. display: table-cell !important;
  6614. }
  6615. }
  6616. @media (max-width: 767px) {
  6617. .visible-xs-block {
  6618. display: block !important;
  6619. }
  6620. }
  6621. @media (max-width: 767px) {
  6622. .visible-xs-inline {
  6623. display: inline !important;
  6624. }
  6625. }
  6626. @media (max-width: 767px) {
  6627. .visible-xs-inline-block {
  6628. display: inline-block !important;
  6629. }
  6630. }
  6631. @media (min-width: 768px) and (max-width: 991px) {
  6632. .visible-sm {
  6633. display: block !important;
  6634. }
  6635. table.visible-sm {
  6636. display: table !important;
  6637. }
  6638. tr.visible-sm {
  6639. display: table-row !important;
  6640. }
  6641. th.visible-sm,
  6642. td.visible-sm {
  6643. display: table-cell !important;
  6644. }
  6645. }
  6646. @media (min-width: 768px) and (max-width: 991px) {
  6647. .visible-sm-block {
  6648. display: block !important;
  6649. }
  6650. }
  6651. @media (min-width: 768px) and (max-width: 991px) {
  6652. .visible-sm-inline {
  6653. display: inline !important;
  6654. }
  6655. }
  6656. @media (min-width: 768px) and (max-width: 991px) {
  6657. .visible-sm-inline-block {
  6658. display: inline-block !important;
  6659. }
  6660. }
  6661. @media (min-width: 992px) and (max-width: 1199px) {
  6662. .visible-md {
  6663. display: block !important;
  6664. }
  6665. table.visible-md {
  6666. display: table !important;
  6667. }
  6668. tr.visible-md {
  6669. display: table-row !important;
  6670. }
  6671. th.visible-md,
  6672. td.visible-md {
  6673. display: table-cell !important;
  6674. }
  6675. }
  6676. @media (min-width: 992px) and (max-width: 1199px) {
  6677. .visible-md-block {
  6678. display: block !important;
  6679. }
  6680. }
  6681. @media (min-width: 992px) and (max-width: 1199px) {
  6682. .visible-md-inline {
  6683. display: inline !important;
  6684. }
  6685. }
  6686. @media (min-width: 992px) and (max-width: 1199px) {
  6687. .visible-md-inline-block {
  6688. display: inline-block !important;
  6689. }
  6690. }
  6691. @media (min-width: 1200px) {
  6692. .visible-lg {
  6693. display: block !important;
  6694. }
  6695. table.visible-lg {
  6696. display: table !important;
  6697. }
  6698. tr.visible-lg {
  6699. display: table-row !important;
  6700. }
  6701. th.visible-lg,
  6702. td.visible-lg {
  6703. display: table-cell !important;
  6704. }
  6705. }
  6706. @media (min-width: 1200px) {
  6707. .visible-lg-block {
  6708. display: block !important;
  6709. }
  6710. }
  6711. @media (min-width: 1200px) {
  6712. .visible-lg-inline {
  6713. display: inline !important;
  6714. }
  6715. }
  6716. @media (min-width: 1200px) {
  6717. .visible-lg-inline-block {
  6718. display: inline-block !important;
  6719. }
  6720. }
  6721. @media (max-width: 767px) {
  6722. .hidden-xs {
  6723. display: none !important;
  6724. }
  6725. }
  6726. @media (min-width: 768px) and (max-width: 991px) {
  6727. .hidden-sm {
  6728. display: none !important;
  6729. }
  6730. }
  6731. @media (min-width: 992px) and (max-width: 1199px) {
  6732. .hidden-md {
  6733. display: none !important;
  6734. }
  6735. }
  6736. @media (min-width: 1200px) {
  6737. .hidden-lg {
  6738. display: none !important;
  6739. }
  6740. }
  6741. .visible-print {
  6742. display: none !important;
  6743. }
  6744. @media print {
  6745. .visible-print {
  6746. display: block !important;
  6747. }
  6748. table.visible-print {
  6749. display: table !important;
  6750. }
  6751. tr.visible-print {
  6752. display: table-row !important;
  6753. }
  6754. th.visible-print,
  6755. td.visible-print {
  6756. display: table-cell !important;
  6757. }
  6758. }
  6759. .visible-print-block {
  6760. display: none !important;
  6761. }
  6762. @media print {
  6763. .visible-print-block {
  6764. display: block !important;
  6765. }
  6766. }
  6767. .visible-print-inline {
  6768. display: none !important;
  6769. }
  6770. @media print {
  6771. .visible-print-inline {
  6772. display: inline !important;
  6773. }
  6774. }
  6775. .visible-print-inline-block {
  6776. display: none !important;
  6777. }
  6778. @media print {
  6779. .visible-print-inline-block {
  6780. display: inline-block !important;
  6781. }
  6782. }
  6783. @media print {
  6784. .hidden-print {
  6785. display: none !important;
  6786. }
  6787. }
  6788. /*!
  6789. *
  6790. * Font Awesome
  6791. *
  6792. */
  6793. /*!
  6794. * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome
  6795. * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
  6796. */
  6797. /* FONT PATH
  6798. * -------------------------- */
  6799. @font-face {
  6800. font-family: 'FontAwesome';
  6801. src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?v=4.2.0');
  6802. src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'), url('../components/font-awesome/fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'), url('../components/font-awesome/fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'), url('../components/font-awesome/fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg');
  6803. font-weight: normal;
  6804. font-style: normal;
  6805. }
  6806. .fa {
  6807. display: inline-block;
  6808. font: normal normal normal 14px/1 FontAwesome;
  6809. font-size: inherit;
  6810. text-rendering: auto;
  6811. -webkit-font-smoothing: antialiased;
  6812. -moz-osx-font-smoothing: grayscale;
  6813. }
  6814. /* makes the font 33% larger relative to the icon container */
  6815. .fa-lg {
  6816. font-size: 1.33333333em;
  6817. line-height: 0.75em;
  6818. vertical-align: -15%;
  6819. }
  6820. .fa-2x {
  6821. font-size: 2em;
  6822. }
  6823. .fa-3x {
  6824. font-size: 3em;
  6825. }
  6826. .fa-4x {
  6827. font-size: 4em;
  6828. }
  6829. .fa-5x {
  6830. font-size: 5em;
  6831. }
  6832. .fa-fw {
  6833. width: 1.28571429em;
  6834. text-align: center;
  6835. }
  6836. .fa-ul {
  6837. padding-left: 0;
  6838. margin-left: 2.14285714em;
  6839. list-style-type: none;
  6840. }
  6841. .fa-ul > li {
  6842. position: relative;
  6843. }
  6844. .fa-li {
  6845. position: absolute;
  6846. left: -2.14285714em;
  6847. width: 2.14285714em;
  6848. top: 0.14285714em;
  6849. text-align: center;
  6850. }
  6851. .fa-li.fa-lg {
  6852. left: -1.85714286em;
  6853. }
  6854. .fa-border {
  6855. padding: .2em .25em .15em;
  6856. border: solid 0.08em #eee;
  6857. border-radius: .1em;
  6858. }
  6859. .pull-right {
  6860. float: right;
  6861. }
  6862. .pull-left {
  6863. float: left;
  6864. }
  6865. .fa.pull-left {
  6866. margin-right: .3em;
  6867. }
  6868. .fa.pull-right {
  6869. margin-left: .3em;
  6870. }
  6871. .fa-spin {
  6872. -webkit-animation: fa-spin 2s infinite linear;
  6873. animation: fa-spin 2s infinite linear;
  6874. }
  6875. @-webkit-keyframes fa-spin {
  6876. 0% {
  6877. -webkit-transform: rotate(0deg);
  6878. transform: rotate(0deg);
  6879. }
  6880. 100% {
  6881. -webkit-transform: rotate(359deg);
  6882. transform: rotate(359deg);
  6883. }
  6884. }
  6885. @keyframes fa-spin {
  6886. 0% {
  6887. -webkit-transform: rotate(0deg);
  6888. transform: rotate(0deg);
  6889. }
  6890. 100% {
  6891. -webkit-transform: rotate(359deg);
  6892. transform: rotate(359deg);
  6893. }
  6894. }
  6895. .fa-rotate-90 {
  6896. filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
  6897. -webkit-transform: rotate(90deg);
  6898. -ms-transform: rotate(90deg);
  6899. transform: rotate(90deg);
  6900. }
  6901. .fa-rotate-180 {
  6902. filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
  6903. -webkit-transform: rotate(180deg);
  6904. -ms-transform: rotate(180deg);
  6905. transform: rotate(180deg);
  6906. }
  6907. .fa-rotate-270 {
  6908. filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
  6909. -webkit-transform: rotate(270deg);
  6910. -ms-transform: rotate(270deg);
  6911. transform: rotate(270deg);
  6912. }
  6913. .fa-flip-horizontal {
  6914. filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
  6915. -webkit-transform: scale(-1, 1);
  6916. -ms-transform: scale(-1, 1);
  6917. transform: scale(-1, 1);
  6918. }
  6919. .fa-flip-vertical {
  6920. filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
  6921. -webkit-transform: scale(1, -1);
  6922. -ms-transform: scale(1, -1);
  6923. transform: scale(1, -1);
  6924. }
  6925. :root .fa-rotate-90,
  6926. :root .fa-rotate-180,
  6927. :root .fa-rotate-270,
  6928. :root .fa-flip-horizontal,
  6929. :root .fa-flip-vertical {
  6930. filter: none;
  6931. }
  6932. .fa-stack {
  6933. position: relative;
  6934. display: inline-block;
  6935. width: 2em;
  6936. height: 2em;
  6937. line-height: 2em;
  6938. vertical-align: middle;
  6939. }
  6940. .fa-stack-1x,
  6941. .fa-stack-2x {
  6942. position: absolute;
  6943. left: 0;
  6944. width: 100%;
  6945. text-align: center;
  6946. }
  6947. .fa-stack-1x {
  6948. line-height: inherit;
  6949. }
  6950. .fa-stack-2x {
  6951. font-size: 2em;
  6952. }
  6953. .fa-inverse {
  6954. color: #fff;
  6955. }
  6956. /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
  6957. readers do not read off random characters that represent icons */
  6958. .fa-glass:before {
  6959. content: "\f000";
  6960. }
  6961. .fa-music:before {
  6962. content: "\f001";
  6963. }
  6964. .fa-search:before {
  6965. content: "\f002";
  6966. }
  6967. .fa-envelope-o:before {
  6968. content: "\f003";
  6969. }
  6970. .fa-heart:before {
  6971. content: "\f004";
  6972. }
  6973. .fa-star:before {
  6974. content: "\f005";
  6975. }
  6976. .fa-star-o:before {
  6977. content: "\f006";
  6978. }
  6979. .fa-user:before {
  6980. content: "\f007";
  6981. }
  6982. .fa-film:before {
  6983. content: "\f008";
  6984. }
  6985. .fa-th-large:before {
  6986. content: "\f009";
  6987. }
  6988. .fa-th:before {
  6989. content: "\f00a";
  6990. }
  6991. .fa-th-list:before {
  6992. content: "\f00b";
  6993. }
  6994. .fa-check:before {
  6995. content: "\f00c";
  6996. }
  6997. .fa-remove:before,
  6998. .fa-close:before,
  6999. .fa-times:before {
  7000. content: "\f00d";
  7001. }
  7002. .fa-search-plus:before {
  7003. content: "\f00e";
  7004. }
  7005. .fa-search-minus:before {
  7006. content: "\f010";
  7007. }
  7008. .fa-power-off:before {
  7009. content: "\f011";
  7010. }
  7011. .fa-signal:before {
  7012. content: "\f012";
  7013. }
  7014. .fa-gear:before,
  7015. .fa-cog:before {
  7016. content: "\f013";
  7017. }
  7018. .fa-trash-o:before {
  7019. content: "\f014";
  7020. }
  7021. .fa-home:before {
  7022. content: "\f015";
  7023. }
  7024. .fa-file-o:before {
  7025. content: "\f016";
  7026. }
  7027. .fa-clock-o:before {
  7028. content: "\f017";
  7029. }
  7030. .fa-road:before {
  7031. content: "\f018";
  7032. }
  7033. .fa-download:before {
  7034. content: "\f019";
  7035. }
  7036. .fa-arrow-circle-o-down:before {
  7037. content: "\f01a";
  7038. }
  7039. .fa-arrow-circle-o-up:before {
  7040. content: "\f01b";
  7041. }
  7042. .fa-inbox:before {
  7043. content: "\f01c";
  7044. }
  7045. .fa-play-circle-o:before {
  7046. content: "\f01d";
  7047. }
  7048. .fa-rotate-right:before,
  7049. .fa-repeat:before {
  7050. content: "\f01e";
  7051. }
  7052. .fa-refresh:before {
  7053. content: "\f021";
  7054. }
  7055. .fa-list-alt:before {
  7056. content: "\f022";
  7057. }
  7058. .fa-lock:before {
  7059. content: "\f023";
  7060. }
  7061. .fa-flag:before {
  7062. content: "\f024";
  7063. }
  7064. .fa-headphones:before {
  7065. content: "\f025";
  7066. }
  7067. .fa-volume-off:before {
  7068. content: "\f026";
  7069. }
  7070. .fa-volume-down:before {
  7071. content: "\f027";
  7072. }
  7073. .fa-volume-up:before {
  7074. content: "\f028";
  7075. }
  7076. .fa-qrcode:before {
  7077. content: "\f029";
  7078. }
  7079. .fa-barcode:before {
  7080. content: "\f02a";
  7081. }
  7082. .fa-tag:before {
  7083. content: "\f02b";
  7084. }
  7085. .fa-tags:before {
  7086. content: "\f02c";
  7087. }
  7088. .fa-book:before {
  7089. content: "\f02d";
  7090. }
  7091. .fa-bookmark:before {
  7092. content: "\f02e";
  7093. }
  7094. .fa-print:before {
  7095. content: "\f02f";
  7096. }
  7097. .fa-camera:before {
  7098. content: "\f030";
  7099. }
  7100. .fa-font:before {
  7101. content: "\f031";
  7102. }
  7103. .fa-bold:before {
  7104. content: "\f032";
  7105. }
  7106. .fa-italic:before {
  7107. content: "\f033";
  7108. }
  7109. .fa-text-height:before {
  7110. content: "\f034";
  7111. }
  7112. .fa-text-width:before {
  7113. content: "\f035";
  7114. }
  7115. .fa-align-left:before {
  7116. content: "\f036";
  7117. }
  7118. .fa-align-center:before {
  7119. content: "\f037";
  7120. }
  7121. .fa-align-right:before {
  7122. content: "\f038";
  7123. }
  7124. .fa-align-justify:before {
  7125. content: "\f039";
  7126. }
  7127. .fa-list:before {
  7128. content: "\f03a";
  7129. }
  7130. .fa-dedent:before,
  7131. .fa-outdent:before {
  7132. content: "\f03b";
  7133. }
  7134. .fa-indent:before {
  7135. content: "\f03c";
  7136. }
  7137. .fa-video-camera:before {
  7138. content: "\f03d";
  7139. }
  7140. .fa-photo:before,
  7141. .fa-image:before,
  7142. .fa-picture-o:before {
  7143. content: "\f03e";
  7144. }
  7145. .fa-pencil:before {
  7146. content: "\f040";
  7147. }
  7148. .fa-map-marker:before {
  7149. content: "\f041";
  7150. }
  7151. .fa-adjust:before {
  7152. content: "\f042";
  7153. }
  7154. .fa-tint:before {
  7155. content: "\f043";
  7156. }
  7157. .fa-edit:before,
  7158. .fa-pencil-square-o:before {
  7159. content: "\f044";
  7160. }
  7161. .fa-share-square-o:before {
  7162. content: "\f045";
  7163. }
  7164. .fa-check-square-o:before {
  7165. content: "\f046";
  7166. }
  7167. .fa-arrows:before {
  7168. content: "\f047";
  7169. }
  7170. .fa-step-backward:before {
  7171. content: "\f048";
  7172. }
  7173. .fa-fast-backward:before {
  7174. content: "\f049";
  7175. }
  7176. .fa-backward:before {
  7177. content: "\f04a";
  7178. }
  7179. .fa-play:before {
  7180. content: "\f04b";
  7181. }
  7182. .fa-pause:before {
  7183. content: "\f04c";
  7184. }
  7185. .fa-stop:before {
  7186. content: "\f04d";
  7187. }
  7188. .fa-forward:before {
  7189. content: "\f04e";
  7190. }
  7191. .fa-fast-forward:before {
  7192. content: "\f050";
  7193. }
  7194. .fa-step-forward:before {
  7195. content: "\f051";
  7196. }
  7197. .fa-eject:before {
  7198. content: "\f052";
  7199. }
  7200. .fa-chevron-left:before {
  7201. content: "\f053";
  7202. }
  7203. .fa-chevron-right:before {
  7204. content: "\f054";
  7205. }
  7206. .fa-plus-circle:before {
  7207. content: "\f055";
  7208. }
  7209. .fa-minus-circle:before {
  7210. content: "\f056";
  7211. }
  7212. .fa-times-circle:before {
  7213. content: "\f057";
  7214. }
  7215. .fa-check-circle:before {
  7216. content: "\f058";
  7217. }
  7218. .fa-question-circle:before {
  7219. content: "\f059";
  7220. }
  7221. .fa-info-circle:before {
  7222. content: "\f05a";
  7223. }
  7224. .fa-crosshairs:before {
  7225. content: "\f05b";
  7226. }
  7227. .fa-times-circle-o:before {
  7228. content: "\f05c";
  7229. }
  7230. .fa-check-circle-o:before {
  7231. content: "\f05d";
  7232. }
  7233. .fa-ban:before {
  7234. content: "\f05e";
  7235. }
  7236. .fa-arrow-left:before {
  7237. content: "\f060";
  7238. }
  7239. .fa-arrow-right:before {
  7240. content: "\f061";
  7241. }
  7242. .fa-arrow-up:before {
  7243. content: "\f062";
  7244. }
  7245. .fa-arrow-down:before {
  7246. content: "\f063";
  7247. }
  7248. .fa-mail-forward:before,
  7249. .fa-share:before {
  7250. content: "\f064";
  7251. }
  7252. .fa-expand:before {
  7253. content: "\f065";
  7254. }
  7255. .fa-compress:before {
  7256. content: "\f066";
  7257. }
  7258. .fa-plus:before {
  7259. content: "\f067";
  7260. }
  7261. .fa-minus:before {
  7262. content: "\f068";
  7263. }
  7264. .fa-asterisk:before {
  7265. content: "\f069";
  7266. }
  7267. .fa-exclamation-circle:before {
  7268. content: "\f06a";
  7269. }
  7270. .fa-gift:before {
  7271. content: "\f06b";
  7272. }
  7273. .fa-leaf:before {
  7274. content: "\f06c";
  7275. }
  7276. .fa-fire:before {
  7277. content: "\f06d";
  7278. }
  7279. .fa-eye:before {
  7280. content: "\f06e";
  7281. }
  7282. .fa-eye-slash:before {
  7283. content: "\f070";
  7284. }
  7285. .fa-warning:before,
  7286. .fa-exclamation-triangle:before {
  7287. content: "\f071";
  7288. }
  7289. .fa-plane:before {
  7290. content: "\f072";
  7291. }
  7292. .fa-calendar:before {
  7293. content: "\f073";
  7294. }
  7295. .fa-random:before {
  7296. content: "\f074";
  7297. }
  7298. .fa-comment:before {
  7299. content: "\f075";
  7300. }
  7301. .fa-magnet:before {
  7302. content: "\f076";
  7303. }
  7304. .fa-chevron-up:before {
  7305. content: "\f077";
  7306. }
  7307. .fa-chevron-down:before {
  7308. content: "\f078";
  7309. }
  7310. .fa-retweet:before {
  7311. content: "\f079";
  7312. }
  7313. .fa-shopping-cart:before {
  7314. content: "\f07a";
  7315. }
  7316. .fa-folder:before {
  7317. content: "\f07b";
  7318. }
  7319. .fa-folder-open:before {
  7320. content: "\f07c";
  7321. }
  7322. .fa-arrows-v:before {
  7323. content: "\f07d";
  7324. }
  7325. .fa-arrows-h:before {
  7326. content: "\f07e";
  7327. }
  7328. .fa-bar-chart-o:before,
  7329. .fa-bar-chart:before {
  7330. content: "\f080";
  7331. }
  7332. .fa-twitter-square:before {
  7333. content: "\f081";
  7334. }
  7335. .fa-facebook-square:before {
  7336. content: "\f082";
  7337. }
  7338. .fa-camera-retro:before {
  7339. content: "\f083";
  7340. }
  7341. .fa-key:before {
  7342. content: "\f084";
  7343. }
  7344. .fa-gears:before,
  7345. .fa-cogs:before {
  7346. content: "\f085";
  7347. }
  7348. .fa-comments:before {
  7349. content: "\f086";
  7350. }
  7351. .fa-thumbs-o-up:before {
  7352. content: "\f087";
  7353. }
  7354. .fa-thumbs-o-down:before {
  7355. content: "\f088";
  7356. }
  7357. .fa-star-half:before {
  7358. content: "\f089";
  7359. }
  7360. .fa-heart-o:before {
  7361. content: "\f08a";
  7362. }
  7363. .fa-sign-out:before {
  7364. content: "\f08b";
  7365. }
  7366. .fa-linkedin-square:before {
  7367. content: "\f08c";
  7368. }
  7369. .fa-thumb-tack:before {
  7370. content: "\f08d";
  7371. }
  7372. .fa-external-link:before {
  7373. content: "\f08e";
  7374. }
  7375. .fa-sign-in:before {
  7376. content: "\f090";
  7377. }
  7378. .fa-trophy:before {
  7379. content: "\f091";
  7380. }
  7381. .fa-github-square:before {
  7382. content: "\f092";
  7383. }
  7384. .fa-upload:before {
  7385. content: "\f093";
  7386. }
  7387. .fa-lemon-o:before {
  7388. content: "\f094";
  7389. }
  7390. .fa-phone:before {
  7391. content: "\f095";
  7392. }
  7393. .fa-square-o:before {
  7394. content: "\f096";
  7395. }
  7396. .fa-bookmark-o:before {
  7397. content: "\f097";
  7398. }
  7399. .fa-phone-square:before {
  7400. content: "\f098";
  7401. }
  7402. .fa-twitter:before {
  7403. content: "\f099";
  7404. }
  7405. .fa-facebook:before {
  7406. content: "\f09a";
  7407. }
  7408. .fa-github:before {
  7409. content: "\f09b";
  7410. }
  7411. .fa-unlock:before {
  7412. content: "\f09c";
  7413. }
  7414. .fa-credit-card:before {
  7415. content: "\f09d";
  7416. }
  7417. .fa-rss:before {
  7418. content: "\f09e";
  7419. }
  7420. .fa-hdd-o:before {
  7421. content: "\f0a0";
  7422. }
  7423. .fa-bullhorn:before {
  7424. content: "\f0a1";
  7425. }
  7426. .fa-bell:before {
  7427. content: "\f0f3";
  7428. }
  7429. .fa-certificate:before {
  7430. content: "\f0a3";
  7431. }
  7432. .fa-hand-o-right:before {
  7433. content: "\f0a4";
  7434. }
  7435. .fa-hand-o-left:before {
  7436. content: "\f0a5";
  7437. }
  7438. .fa-hand-o-up:before {
  7439. content: "\f0a6";
  7440. }
  7441. .fa-hand-o-down:before {
  7442. content: "\f0a7";
  7443. }
  7444. .fa-arrow-circle-left:before {
  7445. content: "\f0a8";
  7446. }
  7447. .fa-arrow-circle-right:before {
  7448. content: "\f0a9";
  7449. }
  7450. .fa-arrow-circle-up:before {
  7451. content: "\f0aa";
  7452. }
  7453. .fa-arrow-circle-down:before {
  7454. content: "\f0ab";
  7455. }
  7456. .fa-globe:before {
  7457. content: "\f0ac";
  7458. }
  7459. .fa-wrench:before {
  7460. content: "\f0ad";
  7461. }
  7462. .fa-tasks:before {
  7463. content: "\f0ae";
  7464. }
  7465. .fa-filter:before {
  7466. content: "\f0b0";
  7467. }
  7468. .fa-briefcase:before {
  7469. content: "\f0b1";
  7470. }
  7471. .fa-arrows-alt:before {
  7472. content: "\f0b2";
  7473. }
  7474. .fa-group:before,
  7475. .fa-users:before {
  7476. content: "\f0c0";
  7477. }
  7478. .fa-chain:before,
  7479. .fa-link:before {
  7480. content: "\f0c1";
  7481. }
  7482. .fa-cloud:before {
  7483. content: "\f0c2";
  7484. }
  7485. .fa-flask:before {
  7486. content: "\f0c3";
  7487. }
  7488. .fa-cut:before,
  7489. .fa-scissors:before {
  7490. content: "\f0c4";
  7491. }
  7492. .fa-copy:before,
  7493. .fa-files-o:before {
  7494. content: "\f0c5";
  7495. }
  7496. .fa-paperclip:before {
  7497. content: "\f0c6";
  7498. }
  7499. .fa-save:before,
  7500. .fa-floppy-o:before {
  7501. content: "\f0c7";
  7502. }
  7503. .fa-square:before {
  7504. content: "\f0c8";
  7505. }
  7506. .fa-navicon:before,
  7507. .fa-reorder:before,
  7508. .fa-bars:before {
  7509. content: "\f0c9";
  7510. }
  7511. .fa-list-ul:before {
  7512. content: "\f0ca";
  7513. }
  7514. .fa-list-ol:before {
  7515. content: "\f0cb";
  7516. }
  7517. .fa-strikethrough:before {
  7518. content: "\f0cc";
  7519. }
  7520. .fa-underline:before {
  7521. content: "\f0cd";
  7522. }
  7523. .fa-table:before {
  7524. content: "\f0ce";
  7525. }
  7526. .fa-magic:before {
  7527. content: "\f0d0";
  7528. }
  7529. .fa-truck:before {
  7530. content: "\f0d1";
  7531. }
  7532. .fa-pinterest:before {
  7533. content: "\f0d2";
  7534. }
  7535. .fa-pinterest-square:before {
  7536. content: "\f0d3";
  7537. }
  7538. .fa-google-plus-square:before {
  7539. content: "\f0d4";
  7540. }
  7541. .fa-google-plus:before {
  7542. content: "\f0d5";
  7543. }
  7544. .fa-money:before {
  7545. content: "\f0d6";
  7546. }
  7547. .fa-caret-down:before {
  7548. content: "\f0d7";
  7549. }
  7550. .fa-caret-up:before {
  7551. content: "\f0d8";
  7552. }
  7553. .fa-caret-left:before {
  7554. content: "\f0d9";
  7555. }
  7556. .fa-caret-right:before {
  7557. content: "\f0da";
  7558. }
  7559. .fa-columns:before {
  7560. content: "\f0db";
  7561. }
  7562. .fa-unsorted:before,
  7563. .fa-sort:before {
  7564. content: "\f0dc";
  7565. }
  7566. .fa-sort-down:before,
  7567. .fa-sort-desc:before {
  7568. content: "\f0dd";
  7569. }
  7570. .fa-sort-up:before,
  7571. .fa-sort-asc:before {
  7572. content: "\f0de";
  7573. }
  7574. .fa-envelope:before {
  7575. content: "\f0e0";
  7576. }
  7577. .fa-linkedin:before {
  7578. content: "\f0e1";
  7579. }
  7580. .fa-rotate-left:before,
  7581. .fa-undo:before {
  7582. content: "\f0e2";
  7583. }
  7584. .fa-legal:before,
  7585. .fa-gavel:before {
  7586. content: "\f0e3";
  7587. }
  7588. .fa-dashboard:before,
  7589. .fa-tachometer:before {
  7590. content: "\f0e4";
  7591. }
  7592. .fa-comment-o:before {
  7593. content: "\f0e5";
  7594. }
  7595. .fa-comments-o:before {
  7596. content: "\f0e6";
  7597. }
  7598. .fa-flash:before,
  7599. .fa-bolt:before {
  7600. content: "\f0e7";
  7601. }
  7602. .fa-sitemap:before {
  7603. content: "\f0e8";
  7604. }
  7605. .fa-umbrella:before {
  7606. content: "\f0e9";
  7607. }
  7608. .fa-paste:before,
  7609. .fa-clipboard:before {
  7610. content: "\f0ea";
  7611. }
  7612. .fa-lightbulb-o:before {
  7613. content: "\f0eb";
  7614. }
  7615. .fa-exchange:before {
  7616. content: "\f0ec";
  7617. }
  7618. .fa-cloud-download:before {
  7619. content: "\f0ed";
  7620. }
  7621. .fa-cloud-upload:before {
  7622. content: "\f0ee";
  7623. }
  7624. .fa-user-md:before {
  7625. content: "\f0f0";
  7626. }
  7627. .fa-stethoscope:before {
  7628. content: "\f0f1";
  7629. }
  7630. .fa-suitcase:before {
  7631. content: "\f0f2";
  7632. }
  7633. .fa-bell-o:before {
  7634. content: "\f0a2";
  7635. }
  7636. .fa-coffee:before {
  7637. content: "\f0f4";
  7638. }
  7639. .fa-cutlery:before {
  7640. content: "\f0f5";
  7641. }
  7642. .fa-file-text-o:before {
  7643. content: "\f0f6";
  7644. }
  7645. .fa-building-o:before {
  7646. content: "\f0f7";
  7647. }
  7648. .fa-hospital-o:before {
  7649. content: "\f0f8";
  7650. }
  7651. .fa-ambulance:before {
  7652. content: "\f0f9";
  7653. }
  7654. .fa-medkit:before {
  7655. content: "\f0fa";
  7656. }
  7657. .fa-fighter-jet:before {
  7658. content: "\f0fb";
  7659. }
  7660. .fa-beer:before {
  7661. content: "\f0fc";
  7662. }
  7663. .fa-h-square:before {
  7664. content: "\f0fd";
  7665. }
  7666. .fa-plus-square:before {
  7667. content: "\f0fe";
  7668. }
  7669. .fa-angle-double-left:before {
  7670. content: "\f100";
  7671. }
  7672. .fa-angle-double-right:before {
  7673. content: "\f101";
  7674. }
  7675. .fa-angle-double-up:before {
  7676. content: "\f102";
  7677. }
  7678. .fa-angle-double-down:before {
  7679. content: "\f103";
  7680. }
  7681. .fa-angle-left:before {
  7682. content: "\f104";
  7683. }
  7684. .fa-angle-right:before {
  7685. content: "\f105";
  7686. }
  7687. .fa-angle-up:before {
  7688. content: "\f106";
  7689. }
  7690. .fa-angle-down:before {
  7691. content: "\f107";
  7692. }
  7693. .fa-desktop:before {
  7694. content: "\f108";
  7695. }
  7696. .fa-laptop:before {
  7697. content: "\f109";
  7698. }
  7699. .fa-tablet:before {
  7700. content: "\f10a";
  7701. }
  7702. .fa-mobile-phone:before,
  7703. .fa-mobile:before {
  7704. content: "\f10b";
  7705. }
  7706. .fa-circle-o:before {
  7707. content: "\f10c";
  7708. }
  7709. .fa-quote-left:before {
  7710. content: "\f10d";
  7711. }
  7712. .fa-quote-right:before {
  7713. content: "\f10e";
  7714. }
  7715. .fa-spinner:before {
  7716. content: "\f110";
  7717. }
  7718. .fa-circle:before {
  7719. content: "\f111";
  7720. }
  7721. .fa-mail-reply:before,
  7722. .fa-reply:before {
  7723. content: "\f112";
  7724. }
  7725. .fa-github-alt:before {
  7726. content: "\f113";
  7727. }
  7728. .fa-folder-o:before {
  7729. content: "\f114";
  7730. }
  7731. .fa-folder-open-o:before {
  7732. content: "\f115";
  7733. }
  7734. .fa-smile-o:before {
  7735. content: "\f118";
  7736. }
  7737. .fa-frown-o:before {
  7738. content: "\f119";
  7739. }
  7740. .fa-meh-o:before {
  7741. content: "\f11a";
  7742. }
  7743. .fa-gamepad:before {
  7744. content: "\f11b";
  7745. }
  7746. .fa-keyboard-o:before {
  7747. content: "\f11c";
  7748. }
  7749. .fa-flag-o:before {
  7750. content: "\f11d";
  7751. }
  7752. .fa-flag-checkered:before {
  7753. content: "\f11e";
  7754. }
  7755. .fa-terminal:before {
  7756. content: "\f120";
  7757. }
  7758. .fa-code:before {
  7759. content: "\f121";
  7760. }
  7761. .fa-mail-reply-all:before,
  7762. .fa-reply-all:before {
  7763. content: "\f122";
  7764. }
  7765. .fa-star-half-empty:before,
  7766. .fa-star-half-full:before,
  7767. .fa-star-half-o:before {
  7768. content: "\f123";
  7769. }
  7770. .fa-location-arrow:before {
  7771. content: "\f124";
  7772. }
  7773. .fa-crop:before {
  7774. content: "\f125";
  7775. }
  7776. .fa-code-fork:before {
  7777. content: "\f126";
  7778. }
  7779. .fa-unlink:before,
  7780. .fa-chain-broken:before {
  7781. content: "\f127";
  7782. }
  7783. .fa-question:before {
  7784. content: "\f128";
  7785. }
  7786. .fa-info:before {
  7787. content: "\f129";
  7788. }
  7789. .fa-exclamation:before {
  7790. content: "\f12a";
  7791. }
  7792. .fa-superscript:before {
  7793. content: "\f12b";
  7794. }
  7795. .fa-subscript:before {
  7796. content: "\f12c";
  7797. }
  7798. .fa-eraser:before {
  7799. content: "\f12d";
  7800. }
  7801. .fa-puzzle-piece:before {
  7802. content: "\f12e";
  7803. }
  7804. .fa-microphone:before {
  7805. content: "\f130";
  7806. }
  7807. .fa-microphone-slash:before {
  7808. content: "\f131";
  7809. }
  7810. .fa-shield:before {
  7811. content: "\f132";
  7812. }
  7813. .fa-calendar-o:before {
  7814. content: "\f133";
  7815. }
  7816. .fa-fire-extinguisher:before {
  7817. content: "\f134";
  7818. }
  7819. .fa-rocket:before {
  7820. content: "\f135";
  7821. }
  7822. .fa-maxcdn:before {
  7823. content: "\f136";
  7824. }
  7825. .fa-chevron-circle-left:before {
  7826. content: "\f137";
  7827. }
  7828. .fa-chevron-circle-right:before {
  7829. content: "\f138";
  7830. }
  7831. .fa-chevron-circle-up:before {
  7832. content: "\f139";
  7833. }
  7834. .fa-chevron-circle-down:before {
  7835. content: "\f13a";
  7836. }
  7837. .fa-html5:before {
  7838. content: "\f13b";
  7839. }
  7840. .fa-css3:before {
  7841. content: "\f13c";
  7842. }
  7843. .fa-anchor:before {
  7844. content: "\f13d";
  7845. }
  7846. .fa-unlock-alt:before {
  7847. content: "\f13e";
  7848. }
  7849. .fa-bullseye:before {
  7850. content: "\f140";
  7851. }
  7852. .fa-ellipsis-h:before {
  7853. content: "\f141";
  7854. }
  7855. .fa-ellipsis-v:before {
  7856. content: "\f142";
  7857. }
  7858. .fa-rss-square:before {
  7859. content: "\f143";
  7860. }
  7861. .fa-play-circle:before {
  7862. content: "\f144";
  7863. }
  7864. .fa-ticket:before {
  7865. content: "\f145";
  7866. }
  7867. .fa-minus-square:before {
  7868. content: "\f146";
  7869. }
  7870. .fa-minus-square-o:before {
  7871. content: "\f147";
  7872. }
  7873. .fa-level-up:before {
  7874. content: "\f148";
  7875. }
  7876. .fa-level-down:before {
  7877. content: "\f149";
  7878. }
  7879. .fa-check-square:before {
  7880. content: "\f14a";
  7881. }
  7882. .fa-pencil-square:before {
  7883. content: "\f14b";
  7884. }
  7885. .fa-external-link-square:before {
  7886. content: "\f14c";
  7887. }
  7888. .fa-share-square:before {
  7889. content: "\f14d";
  7890. }
  7891. .fa-compass:before {
  7892. content: "\f14e";
  7893. }
  7894. .fa-toggle-down:before,
  7895. .fa-caret-square-o-down:before {
  7896. content: "\f150";
  7897. }
  7898. .fa-toggle-up:before,
  7899. .fa-caret-square-o-up:before {
  7900. content: "\f151";
  7901. }
  7902. .fa-toggle-right:before,
  7903. .fa-caret-square-o-right:before {
  7904. content: "\f152";
  7905. }
  7906. .fa-euro:before,
  7907. .fa-eur:before {
  7908. content: "\f153";
  7909. }
  7910. .fa-gbp:before {
  7911. content: "\f154";
  7912. }
  7913. .fa-dollar:before,
  7914. .fa-usd:before {
  7915. content: "\f155";
  7916. }
  7917. .fa-rupee:before,
  7918. .fa-inr:before {
  7919. content: "\f156";
  7920. }
  7921. .fa-cny:before,
  7922. .fa-rmb:before,
  7923. .fa-yen:before,
  7924. .fa-jpy:before {
  7925. content: "\f157";
  7926. }
  7927. .fa-ruble:before,
  7928. .fa-rouble:before,
  7929. .fa-rub:before {
  7930. content: "\f158";
  7931. }
  7932. .fa-won:before,
  7933. .fa-krw:before {
  7934. content: "\f159";
  7935. }
  7936. .fa-bitcoin:before,
  7937. .fa-btc:before {
  7938. content: "\f15a";
  7939. }
  7940. .fa-file:before {
  7941. content: "\f15b";
  7942. }
  7943. .fa-file-text:before {
  7944. content: "\f15c";
  7945. }
  7946. .fa-sort-alpha-asc:before {
  7947. content: "\f15d";
  7948. }
  7949. .fa-sort-alpha-desc:before {
  7950. content: "\f15e";
  7951. }
  7952. .fa-sort-amount-asc:before {
  7953. content: "\f160";
  7954. }
  7955. .fa-sort-amount-desc:before {
  7956. content: "\f161";
  7957. }
  7958. .fa-sort-numeric-asc:before {
  7959. content: "\f162";
  7960. }
  7961. .fa-sort-numeric-desc:before {
  7962. content: "\f163";
  7963. }
  7964. .fa-thumbs-up:before {
  7965. content: "\f164";
  7966. }
  7967. .fa-thumbs-down:before {
  7968. content: "\f165";
  7969. }
  7970. .fa-youtube-square:before {
  7971. content: "\f166";
  7972. }
  7973. .fa-youtube:before {
  7974. content: "\f167";
  7975. }
  7976. .fa-xing:before {
  7977. content: "\f168";
  7978. }
  7979. .fa-xing-square:before {
  7980. content: "\f169";
  7981. }
  7982. .fa-youtube-play:before {
  7983. content: "\f16a";
  7984. }
  7985. .fa-dropbox:before {
  7986. content: "\f16b";
  7987. }
  7988. .fa-stack-overflow:before {
  7989. content: "\f16c";
  7990. }
  7991. .fa-instagram:before {
  7992. content: "\f16d";
  7993. }
  7994. .fa-flickr:before {
  7995. content: "\f16e";
  7996. }
  7997. .fa-adn:before {
  7998. content: "\f170";
  7999. }
  8000. .fa-bitbucket:before {
  8001. content: "\f171";
  8002. }
  8003. .fa-bitbucket-square:before {
  8004. content: "\f172";
  8005. }
  8006. .fa-tumblr:before {
  8007. content: "\f173";
  8008. }
  8009. .fa-tumblr-square:before {
  8010. content: "\f174";
  8011. }
  8012. .fa-long-arrow-down:before {
  8013. content: "\f175";
  8014. }
  8015. .fa-long-arrow-up:before {
  8016. content: "\f176";
  8017. }
  8018. .fa-long-arrow-left:before {
  8019. content: "\f177";
  8020. }
  8021. .fa-long-arrow-right:before {
  8022. content: "\f178";
  8023. }
  8024. .fa-apple:before {
  8025. content: "\f179";
  8026. }
  8027. .fa-windows:before {
  8028. content: "\f17a";
  8029. }
  8030. .fa-android:before {
  8031. content: "\f17b";
  8032. }
  8033. .fa-linux:before {
  8034. content: "\f17c";
  8035. }
  8036. .fa-dribbble:before {
  8037. content: "\f17d";
  8038. }
  8039. .fa-skype:before {
  8040. content: "\f17e";
  8041. }
  8042. .fa-foursquare:before {
  8043. content: "\f180";
  8044. }
  8045. .fa-trello:before {
  8046. content: "\f181";
  8047. }
  8048. .fa-female:before {
  8049. content: "\f182";
  8050. }
  8051. .fa-male:before {
  8052. content: "\f183";
  8053. }
  8054. .fa-gittip:before {
  8055. content: "\f184";
  8056. }
  8057. .fa-sun-o:before {
  8058. content: "\f185";
  8059. }
  8060. .fa-moon-o:before {
  8061. content: "\f186";
  8062. }
  8063. .fa-archive:before {
  8064. content: "\f187";
  8065. }
  8066. .fa-bug:before {
  8067. content: "\f188";
  8068. }
  8069. .fa-vk:before {
  8070. content: "\f189";
  8071. }
  8072. .fa-weibo:before {
  8073. content: "\f18a";
  8074. }
  8075. .fa-renren:before {
  8076. content: "\f18b";
  8077. }
  8078. .fa-pagelines:before {
  8079. content: "\f18c";
  8080. }
  8081. .fa-stack-exchange:before {
  8082. content: "\f18d";
  8083. }
  8084. .fa-arrow-circle-o-right:before {
  8085. content: "\f18e";
  8086. }
  8087. .fa-arrow-circle-o-left:before {
  8088. content: "\f190";
  8089. }
  8090. .fa-toggle-left:before,
  8091. .fa-caret-square-o-left:before {
  8092. content: "\f191";
  8093. }
  8094. .fa-dot-circle-o:before {
  8095. content: "\f192";
  8096. }
  8097. .fa-wheelchair:before {
  8098. content: "\f193";
  8099. }
  8100. .fa-vimeo-square:before {
  8101. content: "\f194";
  8102. }
  8103. .fa-turkish-lira:before,
  8104. .fa-try:before {
  8105. content: "\f195";
  8106. }
  8107. .fa-plus-square-o:before {
  8108. content: "\f196";
  8109. }
  8110. .fa-space-shuttle:before {
  8111. content: "\f197";
  8112. }
  8113. .fa-slack:before {
  8114. content: "\f198";
  8115. }
  8116. .fa-envelope-square:before {
  8117. content: "\f199";
  8118. }
  8119. .fa-wordpress:before {
  8120. content: "\f19a";
  8121. }
  8122. .fa-openid:before {
  8123. content: "\f19b";
  8124. }
  8125. .fa-institution:before,
  8126. .fa-bank:before,
  8127. .fa-university:before {
  8128. content: "\f19c";
  8129. }
  8130. .fa-mortar-board:before,
  8131. .fa-graduation-cap:before {
  8132. content: "\f19d";
  8133. }
  8134. .fa-yahoo:before {
  8135. content: "\f19e";
  8136. }
  8137. .fa-google:before {
  8138. content: "\f1a0";
  8139. }
  8140. .fa-reddit:before {
  8141. content: "\f1a1";
  8142. }
  8143. .fa-reddit-square:before {
  8144. content: "\f1a2";
  8145. }
  8146. .fa-stumbleupon-circle:before {
  8147. content: "\f1a3";
  8148. }
  8149. .fa-stumbleupon:before {
  8150. content: "\f1a4";
  8151. }
  8152. .fa-delicious:before {
  8153. content: "\f1a5";
  8154. }
  8155. .fa-digg:before {
  8156. content: "\f1a6";
  8157. }
  8158. .fa-pied-piper:before {
  8159. content: "\f1a7";
  8160. }
  8161. .fa-pied-piper-alt:before {
  8162. content: "\f1a8";
  8163. }
  8164. .fa-drupal:before {
  8165. content: "\f1a9";
  8166. }
  8167. .fa-joomla:before {
  8168. content: "\f1aa";
  8169. }
  8170. .fa-language:before {
  8171. content: "\f1ab";
  8172. }
  8173. .fa-fax:before {
  8174. content: "\f1ac";
  8175. }
  8176. .fa-building:before {
  8177. content: "\f1ad";
  8178. }
  8179. .fa-child:before {
  8180. content: "\f1ae";
  8181. }
  8182. .fa-paw:before {
  8183. content: "\f1b0";
  8184. }
  8185. .fa-spoon:before {
  8186. content: "\f1b1";
  8187. }
  8188. .fa-cube:before {
  8189. content: "\f1b2";
  8190. }
  8191. .fa-cubes:before {
  8192. content: "\f1b3";
  8193. }
  8194. .fa-behance:before {
  8195. content: "\f1b4";
  8196. }
  8197. .fa-behance-square:before {
  8198. content: "\f1b5";
  8199. }
  8200. .fa-steam:before {
  8201. content: "\f1b6";
  8202. }
  8203. .fa-steam-square:before {
  8204. content: "\f1b7";
  8205. }
  8206. .fa-recycle:before {
  8207. content: "\f1b8";
  8208. }
  8209. .fa-automobile:before,
  8210. .fa-car:before {
  8211. content: "\f1b9";
  8212. }
  8213. .fa-cab:before,
  8214. .fa-taxi:before {
  8215. content: "\f1ba";
  8216. }
  8217. .fa-tree:before {
  8218. content: "\f1bb";
  8219. }
  8220. .fa-spotify:before {
  8221. content: "\f1bc";
  8222. }
  8223. .fa-deviantart:before {
  8224. content: "\f1bd";
  8225. }
  8226. .fa-soundcloud:before {
  8227. content: "\f1be";
  8228. }
  8229. .fa-database:before {
  8230. content: "\f1c0";
  8231. }
  8232. .fa-file-pdf-o:before {
  8233. content: "\f1c1";
  8234. }
  8235. .fa-file-word-o:before {
  8236. content: "\f1c2";
  8237. }
  8238. .fa-file-excel-o:before {
  8239. content: "\f1c3";
  8240. }
  8241. .fa-file-powerpoint-o:before {
  8242. content: "\f1c4";
  8243. }
  8244. .fa-file-photo-o:before,
  8245. .fa-file-picture-o:before,
  8246. .fa-file-image-o:before {
  8247. content: "\f1c5";
  8248. }
  8249. .fa-file-zip-o:before,
  8250. .fa-file-archive-o:before {
  8251. content: "\f1c6";
  8252. }
  8253. .fa-file-sound-o:before,
  8254. .fa-file-audio-o:before {
  8255. content: "\f1c7";
  8256. }
  8257. .fa-file-movie-o:before,
  8258. .fa-file-video-o:before {
  8259. content: "\f1c8";
  8260. }
  8261. .fa-file-code-o:before {
  8262. content: "\f1c9";
  8263. }
  8264. .fa-vine:before {
  8265. content: "\f1ca";
  8266. }
  8267. .fa-codepen:before {
  8268. content: "\f1cb";
  8269. }
  8270. .fa-jsfiddle:before {
  8271. content: "\f1cc";
  8272. }
  8273. .fa-life-bouy:before,
  8274. .fa-life-buoy:before,
  8275. .fa-life-saver:before,
  8276. .fa-support:before,
  8277. .fa-life-ring:before {
  8278. content: "\f1cd";
  8279. }
  8280. .fa-circle-o-notch:before {
  8281. content: "\f1ce";
  8282. }
  8283. .fa-ra:before,
  8284. .fa-rebel:before {
  8285. content: "\f1d0";
  8286. }
  8287. .fa-ge:before,
  8288. .fa-empire:before {
  8289. content: "\f1d1";
  8290. }
  8291. .fa-git-square:before {
  8292. content: "\f1d2";
  8293. }
  8294. .fa-git:before {
  8295. content: "\f1d3";
  8296. }
  8297. .fa-hacker-news:before {
  8298. content: "\f1d4";
  8299. }
  8300. .fa-tencent-weibo:before {
  8301. content: "\f1d5";
  8302. }
  8303. .fa-qq:before {
  8304. content: "\f1d6";
  8305. }
  8306. .fa-wechat:before,
  8307. .fa-weixin:before {
  8308. content: "\f1d7";
  8309. }
  8310. .fa-send:before,
  8311. .fa-paper-plane:before {
  8312. content: "\f1d8";
  8313. }
  8314. .fa-send-o:before,
  8315. .fa-paper-plane-o:before {
  8316. content: "\f1d9";
  8317. }
  8318. .fa-history:before {
  8319. content: "\f1da";
  8320. }
  8321. .fa-circle-thin:before {
  8322. content: "\f1db";
  8323. }
  8324. .fa-header:before {
  8325. content: "\f1dc";
  8326. }
  8327. .fa-paragraph:before {
  8328. content: "\f1dd";
  8329. }
  8330. .fa-sliders:before {
  8331. content: "\f1de";
  8332. }
  8333. .fa-share-alt:before {
  8334. content: "\f1e0";
  8335. }
  8336. .fa-share-alt-square:before {
  8337. content: "\f1e1";
  8338. }
  8339. .fa-bomb:before {
  8340. content: "\f1e2";
  8341. }
  8342. .fa-soccer-ball-o:before,
  8343. .fa-futbol-o:before {
  8344. content: "\f1e3";
  8345. }
  8346. .fa-tty:before {
  8347. content: "\f1e4";
  8348. }
  8349. .fa-binoculars:before {
  8350. content: "\f1e5";
  8351. }
  8352. .fa-plug:before {
  8353. content: "\f1e6";
  8354. }
  8355. .fa-slideshare:before {
  8356. content: "\f1e7";
  8357. }
  8358. .fa-twitch:before {
  8359. content: "\f1e8";
  8360. }
  8361. .fa-yelp:before {
  8362. content: "\f1e9";
  8363. }
  8364. .fa-newspaper-o:before {
  8365. content: "\f1ea";
  8366. }
  8367. .fa-wifi:before {
  8368. content: "\f1eb";
  8369. }
  8370. .fa-calculator:before {
  8371. content: "\f1ec";
  8372. }
  8373. .fa-paypal:before {
  8374. content: "\f1ed";
  8375. }
  8376. .fa-google-wallet:before {
  8377. content: "\f1ee";
  8378. }
  8379. .fa-cc-visa:before {
  8380. content: "\f1f0";
  8381. }
  8382. .fa-cc-mastercard:before {
  8383. content: "\f1f1";
  8384. }
  8385. .fa-cc-discover:before {
  8386. content: "\f1f2";
  8387. }
  8388. .fa-cc-amex:before {
  8389. content: "\f1f3";
  8390. }
  8391. .fa-cc-paypal:before {
  8392. content: "\f1f4";
  8393. }
  8394. .fa-cc-stripe:before {
  8395. content: "\f1f5";
  8396. }
  8397. .fa-bell-slash:before {
  8398. content: "\f1f6";
  8399. }
  8400. .fa-bell-slash-o:before {
  8401. content: "\f1f7";
  8402. }
  8403. .fa-trash:before {
  8404. content: "\f1f8";
  8405. }
  8406. .fa-copyright:before {
  8407. content: "\f1f9";
  8408. }
  8409. .fa-at:before {
  8410. content: "\f1fa";
  8411. }
  8412. .fa-eyedropper:before {
  8413. content: "\f1fb";
  8414. }
  8415. .fa-paint-brush:before {
  8416. content: "\f1fc";
  8417. }
  8418. .fa-birthday-cake:before {
  8419. content: "\f1fd";
  8420. }
  8421. .fa-area-chart:before {
  8422. content: "\f1fe";
  8423. }
  8424. .fa-pie-chart:before {
  8425. content: "\f200";
  8426. }
  8427. .fa-line-chart:before {
  8428. content: "\f201";
  8429. }
  8430. .fa-lastfm:before {
  8431. content: "\f202";
  8432. }
  8433. .fa-lastfm-square:before {
  8434. content: "\f203";
  8435. }
  8436. .fa-toggle-off:before {
  8437. content: "\f204";
  8438. }
  8439. .fa-toggle-on:before {
  8440. content: "\f205";
  8441. }
  8442. .fa-bicycle:before {
  8443. content: "\f206";
  8444. }
  8445. .fa-bus:before {
  8446. content: "\f207";
  8447. }
  8448. .fa-ioxhost:before {
  8449. content: "\f208";
  8450. }
  8451. .fa-angellist:before {
  8452. content: "\f209";
  8453. }
  8454. .fa-cc:before {
  8455. content: "\f20a";
  8456. }
  8457. .fa-shekel:before,
  8458. .fa-sheqel:before,
  8459. .fa-ils:before {
  8460. content: "\f20b";
  8461. }
  8462. .fa-meanpath:before {
  8463. content: "\f20c";
  8464. }
  8465. /*!
  8466. *
  8467. * IPython base
  8468. *
  8469. */
  8470. .modal.fade .modal-dialog {
  8471. -webkit-transform: translate(0, 0);
  8472. -ms-transform: translate(0, 0);
  8473. -o-transform: translate(0, 0);
  8474. transform: translate(0, 0);
  8475. }
  8476. code {
  8477. color: #000;
  8478. }
  8479. pre {
  8480. font-size: inherit;
  8481. line-height: inherit;
  8482. }
  8483. label {
  8484. font-weight: normal;
  8485. }
  8486. /* Make the page background atleast 100% the height of the view port */
  8487. /* Make the page itself atleast 70% the height of the view port */
  8488. .border-box-sizing {
  8489. box-sizing: border-box;
  8490. -moz-box-sizing: border-box;
  8491. -webkit-box-sizing: border-box;
  8492. }
  8493. .corner-all {
  8494. border-radius: 2px;
  8495. }
  8496. .no-padding {
  8497. padding: 0px;
  8498. }
  8499. /* Flexible box model classes */
  8500. /* Taken from Alex Russell http://infrequently.org/2009/08/css-3-progress/ */
  8501. /* This file is a compatability layer. It allows the usage of flexible box
  8502. model layouts accross multiple browsers, including older browsers. The newest,
  8503. universal implementation of the flexible box model is used when available (see
  8504. `Modern browsers` comments below). Browsers that are known to implement this
  8505. new spec completely include:
  8506. Firefox 28.0+
  8507. Chrome 29.0+
  8508. Internet Explorer 11+
  8509. Opera 17.0+
  8510. Browsers not listed, including Safari, are supported via the styling under the
  8511. `Old browsers` comments below.
  8512. */
  8513. .hbox {
  8514. /* Old browsers */
  8515. display: -webkit-box;
  8516. -webkit-box-orient: horizontal;
  8517. -webkit-box-align: stretch;
  8518. display: -moz-box;
  8519. -moz-box-orient: horizontal;
  8520. -moz-box-align: stretch;
  8521. display: box;
  8522. box-orient: horizontal;
  8523. box-align: stretch;
  8524. /* Modern browsers */
  8525. display: flex;
  8526. flex-direction: row;
  8527. align-items: stretch;
  8528. }
  8529. .hbox > * {
  8530. /* Old browsers */
  8531. -webkit-box-flex: 0;
  8532. -moz-box-flex: 0;
  8533. box-flex: 0;
  8534. /* Modern browsers */
  8535. flex: none;
  8536. }
  8537. .vbox {
  8538. /* Old browsers */
  8539. display: -webkit-box;
  8540. -webkit-box-orient: vertical;
  8541. -webkit-box-align: stretch;
  8542. display: -moz-box;
  8543. -moz-box-orient: vertical;
  8544. -moz-box-align: stretch;
  8545. display: box;
  8546. box-orient: vertical;
  8547. box-align: stretch;
  8548. /* Modern browsers */
  8549. display: flex;
  8550. flex-direction: column;
  8551. align-items: stretch;
  8552. }
  8553. .vbox > * {
  8554. /* Old browsers */
  8555. -webkit-box-flex: 0;
  8556. -moz-box-flex: 0;
  8557. box-flex: 0;
  8558. /* Modern browsers */
  8559. flex: none;
  8560. }
  8561. .hbox.reverse,
  8562. .vbox.reverse,
  8563. .reverse {
  8564. /* Old browsers */
  8565. -webkit-box-direction: reverse;
  8566. -moz-box-direction: reverse;
  8567. box-direction: reverse;
  8568. /* Modern browsers */
  8569. flex-direction: row-reverse;
  8570. }
  8571. .hbox.box-flex0,
  8572. .vbox.box-flex0,
  8573. .box-flex0 {
  8574. /* Old browsers */
  8575. -webkit-box-flex: 0;
  8576. -moz-box-flex: 0;
  8577. box-flex: 0;
  8578. /* Modern browsers */
  8579. flex: none;
  8580. width: auto;
  8581. }
  8582. .hbox.box-flex1,
  8583. .vbox.box-flex1,
  8584. .box-flex1 {
  8585. /* Old browsers */
  8586. -webkit-box-flex: 1;
  8587. -moz-box-flex: 1;
  8588. box-flex: 1;
  8589. /* Modern browsers */
  8590. flex: 1;
  8591. }
  8592. .hbox.box-flex,
  8593. .vbox.box-flex,
  8594. .box-flex {
  8595. /* Old browsers */
  8596. /* Old browsers */
  8597. -webkit-box-flex: 1;
  8598. -moz-box-flex: 1;
  8599. box-flex: 1;
  8600. /* Modern browsers */
  8601. flex: 1;
  8602. }
  8603. .hbox.box-flex2,
  8604. .vbox.box-flex2,
  8605. .box-flex2 {
  8606. /* Old browsers */
  8607. -webkit-box-flex: 2;
  8608. -moz-box-flex: 2;
  8609. box-flex: 2;
  8610. /* Modern browsers */
  8611. flex: 2;
  8612. }
  8613. .box-group1 {
  8614. /* Deprecated */
  8615. -webkit-box-flex-group: 1;
  8616. -moz-box-flex-group: 1;
  8617. box-flex-group: 1;
  8618. }
  8619. .box-group2 {
  8620. /* Deprecated */
  8621. -webkit-box-flex-group: 2;
  8622. -moz-box-flex-group: 2;
  8623. box-flex-group: 2;
  8624. }
  8625. .hbox.start,
  8626. .vbox.start,
  8627. .start {
  8628. /* Old browsers */
  8629. -webkit-box-pack: start;
  8630. -moz-box-pack: start;
  8631. box-pack: start;
  8632. /* Modern browsers */
  8633. justify-content: flex-start;
  8634. }
  8635. .hbox.end,
  8636. .vbox.end,
  8637. .end {
  8638. /* Old browsers */
  8639. -webkit-box-pack: end;
  8640. -moz-box-pack: end;
  8641. box-pack: end;
  8642. /* Modern browsers */
  8643. justify-content: flex-end;
  8644. }
  8645. .hbox.center,
  8646. .vbox.center,
  8647. .center {
  8648. /* Old browsers */
  8649. -webkit-box-pack: center;
  8650. -moz-box-pack: center;
  8651. box-pack: center;
  8652. /* Modern browsers */
  8653. justify-content: center;
  8654. }
  8655. .hbox.baseline,
  8656. .vbox.baseline,
  8657. .baseline {
  8658. /* Old browsers */
  8659. -webkit-box-pack: baseline;
  8660. -moz-box-pack: baseline;
  8661. box-pack: baseline;
  8662. /* Modern browsers */
  8663. justify-content: baseline;
  8664. }
  8665. .hbox.stretch,
  8666. .vbox.stretch,
  8667. .stretch {
  8668. /* Old browsers */
  8669. -webkit-box-pack: stretch;
  8670. -moz-box-pack: stretch;
  8671. box-pack: stretch;
  8672. /* Modern browsers */
  8673. justify-content: stretch;
  8674. }
  8675. .hbox.align-start,
  8676. .vbox.align-start,
  8677. .align-start {
  8678. /* Old browsers */
  8679. -webkit-box-align: start;
  8680. -moz-box-align: start;
  8681. box-align: start;
  8682. /* Modern browsers */
  8683. align-items: flex-start;
  8684. }
  8685. .hbox.align-end,
  8686. .vbox.align-end,
  8687. .align-end {
  8688. /* Old browsers */
  8689. -webkit-box-align: end;
  8690. -moz-box-align: end;
  8691. box-align: end;
  8692. /* Modern browsers */
  8693. align-items: flex-end;
  8694. }
  8695. .hbox.align-center,
  8696. .vbox.align-center,
  8697. .align-center {
  8698. /* Old browsers */
  8699. -webkit-box-align: center;
  8700. -moz-box-align: center;
  8701. box-align: center;
  8702. /* Modern browsers */
  8703. align-items: center;
  8704. }
  8705. .hbox.align-baseline,
  8706. .vbox.align-baseline,
  8707. .align-baseline {
  8708. /* Old browsers */
  8709. -webkit-box-align: baseline;
  8710. -moz-box-align: baseline;
  8711. box-align: baseline;
  8712. /* Modern browsers */
  8713. align-items: baseline;
  8714. }
  8715. .hbox.align-stretch,
  8716. .vbox.align-stretch,
  8717. .align-stretch {
  8718. /* Old browsers */
  8719. -webkit-box-align: stretch;
  8720. -moz-box-align: stretch;
  8721. box-align: stretch;
  8722. /* Modern browsers */
  8723. align-items: stretch;
  8724. }
  8725. div.error {
  8726. margin: 2em;
  8727. text-align: center;
  8728. }
  8729. div.error > h1 {
  8730. font-size: 500%;
  8731. line-height: normal;
  8732. }
  8733. div.error > p {
  8734. font-size: 200%;
  8735. line-height: normal;
  8736. }
  8737. div.traceback-wrapper {
  8738. text-align: left;
  8739. max-width: 800px;
  8740. margin: auto;
  8741. }
  8742. /**
  8743. * Primary styles
  8744. *
  8745. * Author: Jupyter Development Team
  8746. */
  8747. body {
  8748. background-color: #fff;
  8749. /* This makes sure that the body covers the entire window and needs to
  8750. be in a different element than the display: box in wrapper below */
  8751. position: absolute;
  8752. left: 0px;
  8753. right: 0px;
  8754. top: 0px;
  8755. bottom: 0px;
  8756. overflow: visible;
  8757. }
  8758. body > #header {
  8759. /* Initially hidden to prevent FLOUC */
  8760. display: none;
  8761. background-color: #fff;
  8762. /* Display over codemirror */
  8763. position: relative;
  8764. z-index: 100;
  8765. }
  8766. body > #header #header-container {
  8767. padding-bottom: 5px;
  8768. padding-top: 5px;
  8769. box-sizing: border-box;
  8770. -moz-box-sizing: border-box;
  8771. -webkit-box-sizing: border-box;
  8772. }
  8773. body > #header .header-bar {
  8774. width: 100%;
  8775. height: 1px;
  8776. background: #e7e7e7;
  8777. margin-bottom: -1px;
  8778. }
  8779. @media print {
  8780. body > #header {
  8781. display: none !important;
  8782. }
  8783. }
  8784. #header-spacer {
  8785. width: 100%;
  8786. visibility: hidden;
  8787. }
  8788. @media print {
  8789. #header-spacer {
  8790. display: none;
  8791. }
  8792. }
  8793. #ipython_notebook {
  8794. padding-left: 0px;
  8795. padding-top: 1px;
  8796. padding-bottom: 1px;
  8797. }
  8798. @media (max-width: 991px) {
  8799. #ipython_notebook {
  8800. margin-left: 10px;
  8801. }
  8802. }
  8803. #noscript {
  8804. width: auto;
  8805. padding-top: 16px;
  8806. padding-bottom: 16px;
  8807. text-align: center;
  8808. font-size: 22px;
  8809. color: red;
  8810. font-weight: bold;
  8811. }
  8812. #ipython_notebook img {
  8813. height: 28px;
  8814. }
  8815. #site {
  8816. width: 100%;
  8817. display: none;
  8818. box-sizing: border-box;
  8819. -moz-box-sizing: border-box;
  8820. -webkit-box-sizing: border-box;
  8821. overflow: auto;
  8822. }
  8823. @media print {
  8824. #site {
  8825. height: auto !important;
  8826. }
  8827. }
  8828. /* Smaller buttons */
  8829. .ui-button .ui-button-text {
  8830. padding: 0.2em 0.8em;
  8831. font-size: 77%;
  8832. }
  8833. input.ui-button {
  8834. padding: 0.3em 0.9em;
  8835. }
  8836. span#login_widget {
  8837. float: right;
  8838. }
  8839. span#login_widget > .button,
  8840. #logout {
  8841. color: #333;
  8842. background-color: #fff;
  8843. border-color: #ccc;
  8844. }
  8845. span#login_widget > .button:focus,
  8846. #logout:focus,
  8847. span#login_widget > .button.focus,
  8848. #logout.focus {
  8849. color: #333;
  8850. background-color: #e6e6e6;
  8851. border-color: #8c8c8c;
  8852. }
  8853. span#login_widget > .button:hover,
  8854. #logout:hover {
  8855. color: #333;
  8856. background-color: #e6e6e6;
  8857. border-color: #adadad;
  8858. }
  8859. span#login_widget > .button:active,
  8860. #logout:active,
  8861. span#login_widget > .button.active,
  8862. #logout.active,
  8863. .open > .dropdown-togglespan#login_widget > .button,
  8864. .open > .dropdown-toggle#logout {
  8865. color: #333;
  8866. background-color: #e6e6e6;
  8867. border-color: #adadad;
  8868. }
  8869. span#login_widget > .button:active:hover,
  8870. #logout:active:hover,
  8871. span#login_widget > .button.active:hover,
  8872. #logout.active:hover,
  8873. .open > .dropdown-togglespan#login_widget > .button:hover,
  8874. .open > .dropdown-toggle#logout:hover,
  8875. span#login_widget > .button:active:focus,
  8876. #logout:active:focus,
  8877. span#login_widget > .button.active:focus,
  8878. #logout.active:focus,
  8879. .open > .dropdown-togglespan#login_widget > .button:focus,
  8880. .open > .dropdown-toggle#logout:focus,
  8881. span#login_widget > .button:active.focus,
  8882. #logout:active.focus,
  8883. span#login_widget > .button.active.focus,
  8884. #logout.active.focus,
  8885. .open > .dropdown-togglespan#login_widget > .button.focus,
  8886. .open > .dropdown-toggle#logout.focus {
  8887. color: #333;
  8888. background-color: #d4d4d4;
  8889. border-color: #8c8c8c;
  8890. }
  8891. span#login_widget > .button:active,
  8892. #logout:active,
  8893. span#login_widget > .button.active,
  8894. #logout.active,
  8895. .open > .dropdown-togglespan#login_widget > .button,
  8896. .open > .dropdown-toggle#logout {
  8897. background-image: none;
  8898. }
  8899. span#login_widget > .button.disabled:hover,
  8900. #logout.disabled:hover,
  8901. span#login_widget > .button[disabled]:hover,
  8902. #logout[disabled]:hover,
  8903. fieldset[disabled] span#login_widget > .button:hover,
  8904. fieldset[disabled] #logout:hover,
  8905. span#login_widget > .button.disabled:focus,
  8906. #logout.disabled:focus,
  8907. span#login_widget > .button[disabled]:focus,
  8908. #logout[disabled]:focus,
  8909. fieldset[disabled] span#login_widget > .button:focus,
  8910. fieldset[disabled] #logout:focus,
  8911. span#login_widget > .button.disabled.focus,
  8912. #logout.disabled.focus,
  8913. span#login_widget > .button[disabled].focus,
  8914. #logout[disabled].focus,
  8915. fieldset[disabled] span#login_widget > .button.focus,
  8916. fieldset[disabled] #logout.focus {
  8917. background-color: #fff;
  8918. border-color: #ccc;
  8919. }
  8920. span#login_widget > .button .badge,
  8921. #logout .badge {
  8922. color: #fff;
  8923. background-color: #333;
  8924. }
  8925. .nav-header {
  8926. text-transform: none;
  8927. }
  8928. #header > span {
  8929. margin-top: 10px;
  8930. }
  8931. .modal_stretch .modal-dialog {
  8932. /* Old browsers */
  8933. display: -webkit-box;
  8934. -webkit-box-orient: vertical;
  8935. -webkit-box-align: stretch;
  8936. display: -moz-box;
  8937. -moz-box-orient: vertical;
  8938. -moz-box-align: stretch;
  8939. display: box;
  8940. box-orient: vertical;
  8941. box-align: stretch;
  8942. /* Modern browsers */
  8943. display: flex;
  8944. flex-direction: column;
  8945. align-items: stretch;
  8946. min-height: 80vh;
  8947. }
  8948. .modal_stretch .modal-dialog .modal-body {
  8949. max-height: calc(100vh - 200px);
  8950. overflow: auto;
  8951. flex: 1;
  8952. }
  8953. @media (min-width: 768px) {
  8954. .modal .modal-dialog {
  8955. width: 700px;
  8956. }
  8957. }
  8958. @media (min-width: 768px) {
  8959. select.form-control {
  8960. margin-left: 12px;
  8961. margin-right: 12px;
  8962. }
  8963. }
  8964. /*!
  8965. *
  8966. * IPython auth
  8967. *
  8968. */
  8969. .center-nav {
  8970. display: inline-block;
  8971. margin-bottom: -4px;
  8972. }
  8973. /*!
  8974. *
  8975. * IPython tree view
  8976. *
  8977. */
  8978. /* We need an invisible input field on top of the sentense*/
  8979. /* "Drag file onto the list ..." */
  8980. .alternate_upload {
  8981. background-color: none;
  8982. display: inline;
  8983. }
  8984. .alternate_upload.form {
  8985. padding: 0;
  8986. margin: 0;
  8987. }
  8988. .alternate_upload input.fileinput {
  8989. text-align: center;
  8990. vertical-align: middle;
  8991. display: inline;
  8992. opacity: 0;
  8993. z-index: 2;
  8994. width: 12ex;
  8995. margin-right: -12ex;
  8996. }
  8997. .alternate_upload .btn-upload {
  8998. height: 22px;
  8999. }
  9000. /**
  9001. * Primary styles
  9002. *
  9003. * Author: Jupyter Development Team
  9004. */
  9005. ul#tabs {
  9006. margin-bottom: 4px;
  9007. }
  9008. ul#tabs a {
  9009. padding-top: 6px;
  9010. padding-bottom: 4px;
  9011. }
  9012. ul.breadcrumb a:focus,
  9013. ul.breadcrumb a:hover {
  9014. text-decoration: none;
  9015. }
  9016. ul.breadcrumb i.icon-home {
  9017. font-size: 16px;
  9018. margin-right: 4px;
  9019. }
  9020. ul.breadcrumb span {
  9021. color: #5e5e5e;
  9022. }
  9023. .list_toolbar {
  9024. padding: 4px 0 4px 0;
  9025. vertical-align: middle;
  9026. }
  9027. .list_toolbar .tree-buttons {
  9028. padding-top: 1px;
  9029. }
  9030. .dynamic-buttons {
  9031. padding-top: 3px;
  9032. display: inline-block;
  9033. }
  9034. .list_toolbar [class*="span"] {
  9035. min-height: 24px;
  9036. }
  9037. .list_header {
  9038. font-weight: bold;
  9039. background-color: #EEE;
  9040. }
  9041. .list_placeholder {
  9042. font-weight: bold;
  9043. padding-top: 4px;
  9044. padding-bottom: 4px;
  9045. padding-left: 7px;
  9046. padding-right: 7px;
  9047. }
  9048. .list_container {
  9049. margin-top: 4px;
  9050. margin-bottom: 20px;
  9051. border: 1px solid #ddd;
  9052. border-radius: 2px;
  9053. }
  9054. .list_container > div {
  9055. border-bottom: 1px solid #ddd;
  9056. }
  9057. .list_container > div:hover .list-item {
  9058. background-color: red;
  9059. }
  9060. .list_container > div:last-child {
  9061. border: none;
  9062. }
  9063. .list_item:hover .list_item {
  9064. background-color: #ddd;
  9065. }
  9066. .list_item a {
  9067. text-decoration: none;
  9068. }
  9069. .list_item:hover {
  9070. background-color: #fafafa;
  9071. }
  9072. .list_header > div,
  9073. .list_item > div {
  9074. padding-top: 4px;
  9075. padding-bottom: 4px;
  9076. padding-left: 7px;
  9077. padding-right: 7px;
  9078. line-height: 22px;
  9079. }
  9080. .list_header > div input,
  9081. .list_item > div input {
  9082. margin-right: 7px;
  9083. margin-left: 14px;
  9084. vertical-align: baseline;
  9085. line-height: 22px;
  9086. position: relative;
  9087. top: -1px;
  9088. }
  9089. .list_header > div .item_link,
  9090. .list_item > div .item_link {
  9091. margin-left: -1px;
  9092. vertical-align: baseline;
  9093. line-height: 22px;
  9094. }
  9095. .new-file input[type=checkbox] {
  9096. visibility: hidden;
  9097. }
  9098. .item_name {
  9099. line-height: 22px;
  9100. height: 24px;
  9101. }
  9102. .item_icon {
  9103. font-size: 14px;
  9104. color: #5e5e5e;
  9105. margin-right: 7px;
  9106. margin-left: 7px;
  9107. line-height: 22px;
  9108. vertical-align: baseline;
  9109. }
  9110. .item_buttons {
  9111. line-height: 1em;
  9112. margin-left: -5px;
  9113. }
  9114. .item_buttons .btn,
  9115. .item_buttons .btn-group,
  9116. .item_buttons .input-group {
  9117. float: left;
  9118. }
  9119. .item_buttons > .btn,
  9120. .item_buttons > .btn-group,
  9121. .item_buttons > .input-group {
  9122. margin-left: 5px;
  9123. }
  9124. .item_buttons .btn {
  9125. min-width: 13ex;
  9126. }
  9127. .item_buttons .running-indicator {
  9128. padding-top: 4px;
  9129. color: #5cb85c;
  9130. }
  9131. .item_buttons .kernel-name {
  9132. padding-top: 4px;
  9133. color: #5bc0de;
  9134. margin-right: 7px;
  9135. float: left;
  9136. }
  9137. .toolbar_info {
  9138. height: 24px;
  9139. line-height: 24px;
  9140. }
  9141. .list_item input:not([type=checkbox]) {
  9142. padding-top: 3px;
  9143. padding-bottom: 3px;
  9144. height: 22px;
  9145. line-height: 14px;
  9146. margin: 0px;
  9147. }
  9148. .highlight_text {
  9149. color: blue;
  9150. }
  9151. #project_name {
  9152. display: inline-block;
  9153. padding-left: 7px;
  9154. margin-left: -2px;
  9155. }
  9156. #project_name > .breadcrumb {
  9157. padding: 0px;
  9158. margin-bottom: 0px;
  9159. background-color: transparent;
  9160. font-weight: bold;
  9161. }
  9162. #tree-selector {
  9163. padding-right: 0px;
  9164. }
  9165. #button-select-all {
  9166. min-width: 50px;
  9167. }
  9168. #select-all {
  9169. margin-left: 7px;
  9170. margin-right: 2px;
  9171. }
  9172. .menu_icon {
  9173. margin-right: 2px;
  9174. }
  9175. .tab-content .row {
  9176. margin-left: 0px;
  9177. margin-right: 0px;
  9178. }
  9179. .folder_icon:before {
  9180. display: inline-block;
  9181. font: normal normal normal 14px/1 FontAwesome;
  9182. font-size: inherit;
  9183. text-rendering: auto;
  9184. -webkit-font-smoothing: antialiased;
  9185. -moz-osx-font-smoothing: grayscale;
  9186. content: "\f114";
  9187. }
  9188. .folder_icon:before.pull-left {
  9189. margin-right: .3em;
  9190. }
  9191. .folder_icon:before.pull-right {
  9192. margin-left: .3em;
  9193. }
  9194. .notebook_icon:before {
  9195. display: inline-block;
  9196. font: normal normal normal 14px/1 FontAwesome;
  9197. font-size: inherit;
  9198. text-rendering: auto;
  9199. -webkit-font-smoothing: antialiased;
  9200. -moz-osx-font-smoothing: grayscale;
  9201. content: "\f02d";
  9202. position: relative;
  9203. top: -1px;
  9204. }
  9205. .notebook_icon:before.pull-left {
  9206. margin-right: .3em;
  9207. }
  9208. .notebook_icon:before.pull-right {
  9209. margin-left: .3em;
  9210. }
  9211. .running_notebook_icon:before {
  9212. display: inline-block;
  9213. font: normal normal normal 14px/1 FontAwesome;
  9214. font-size: inherit;
  9215. text-rendering: auto;
  9216. -webkit-font-smoothing: antialiased;
  9217. -moz-osx-font-smoothing: grayscale;
  9218. content: "\f02d";
  9219. position: relative;
  9220. top: -1px;
  9221. color: #5cb85c;
  9222. }
  9223. .running_notebook_icon:before.pull-left {
  9224. margin-right: .3em;
  9225. }
  9226. .running_notebook_icon:before.pull-right {
  9227. margin-left: .3em;
  9228. }
  9229. .file_icon:before {
  9230. display: inline-block;
  9231. font: normal normal normal 14px/1 FontAwesome;
  9232. font-size: inherit;
  9233. text-rendering: auto;
  9234. -webkit-font-smoothing: antialiased;
  9235. -moz-osx-font-smoothing: grayscale;
  9236. content: "\f016";
  9237. position: relative;
  9238. top: -2px;
  9239. }
  9240. .file_icon:before.pull-left {
  9241. margin-right: .3em;
  9242. }
  9243. .file_icon:before.pull-right {
  9244. margin-left: .3em;
  9245. }
  9246. #notebook_toolbar .pull-right {
  9247. padding-top: 0px;
  9248. margin-right: -1px;
  9249. }
  9250. ul#new-menu {
  9251. left: auto;
  9252. right: 0;
  9253. }
  9254. .kernel-menu-icon {
  9255. padding-right: 12px;
  9256. width: 24px;
  9257. content: "\f096";
  9258. }
  9259. .kernel-menu-icon:before {
  9260. content: "\f096";
  9261. }
  9262. .kernel-menu-icon-current:before {
  9263. content: "\f00c";
  9264. }
  9265. #tab_content {
  9266. padding-top: 20px;
  9267. }
  9268. #running .panel-group .panel {
  9269. margin-top: 3px;
  9270. margin-bottom: 1em;
  9271. }
  9272. #running .panel-group .panel .panel-heading {
  9273. background-color: #EEE;
  9274. padding-top: 4px;
  9275. padding-bottom: 4px;
  9276. padding-left: 7px;
  9277. padding-right: 7px;
  9278. line-height: 22px;
  9279. }
  9280. #running .panel-group .panel .panel-heading a:focus,
  9281. #running .panel-group .panel .panel-heading a:hover {
  9282. text-decoration: none;
  9283. }
  9284. #running .panel-group .panel .panel-body {
  9285. padding: 0px;
  9286. }
  9287. #running .panel-group .panel .panel-body .list_container {
  9288. margin-top: 0px;
  9289. margin-bottom: 0px;
  9290. border: 0px;
  9291. border-radius: 0px;
  9292. }
  9293. #running .panel-group .panel .panel-body .list_container .list_item {
  9294. border-bottom: 1px solid #ddd;
  9295. }
  9296. #running .panel-group .panel .panel-body .list_container .list_item:last-child {
  9297. border-bottom: 0px;
  9298. }
  9299. .delete-button {
  9300. display: none;
  9301. }
  9302. .duplicate-button {
  9303. display: none;
  9304. }
  9305. .rename-button {
  9306. display: none;
  9307. }
  9308. .shutdown-button {
  9309. display: none;
  9310. }
  9311. .dynamic-instructions {
  9312. display: inline-block;
  9313. padding-top: 4px;
  9314. }
  9315. /*!
  9316. *
  9317. * IPython text editor webapp
  9318. *
  9319. */
  9320. .selected-keymap i.fa {
  9321. padding: 0px 5px;
  9322. }
  9323. .selected-keymap i.fa:before {
  9324. content: "\f00c";
  9325. }
  9326. #mode-menu {
  9327. overflow: auto;
  9328. max-height: 20em;
  9329. }
  9330. .edit_app #header {
  9331. -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  9332. box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  9333. }
  9334. .edit_app #menubar .navbar {
  9335. /* Use a negative 1 bottom margin, so the border overlaps the border of the
  9336. header */
  9337. margin-bottom: -1px;
  9338. }
  9339. .dirty-indicator {
  9340. display: inline-block;
  9341. font: normal normal normal 14px/1 FontAwesome;
  9342. font-size: inherit;
  9343. text-rendering: auto;
  9344. -webkit-font-smoothing: antialiased;
  9345. -moz-osx-font-smoothing: grayscale;
  9346. width: 20px;
  9347. }
  9348. .dirty-indicator.pull-left {
  9349. margin-right: .3em;
  9350. }
  9351. .dirty-indicator.pull-right {
  9352. margin-left: .3em;
  9353. }
  9354. .dirty-indicator-dirty {
  9355. display: inline-block;
  9356. font: normal normal normal 14px/1 FontAwesome;
  9357. font-size: inherit;
  9358. text-rendering: auto;
  9359. -webkit-font-smoothing: antialiased;
  9360. -moz-osx-font-smoothing: grayscale;
  9361. width: 20px;
  9362. }
  9363. .dirty-indicator-dirty.pull-left {
  9364. margin-right: .3em;
  9365. }
  9366. .dirty-indicator-dirty.pull-right {
  9367. margin-left: .3em;
  9368. }
  9369. .dirty-indicator-clean {
  9370. display: inline-block;
  9371. font: normal normal normal 14px/1 FontAwesome;
  9372. font-size: inherit;
  9373. text-rendering: auto;
  9374. -webkit-font-smoothing: antialiased;
  9375. -moz-osx-font-smoothing: grayscale;
  9376. width: 20px;
  9377. }
  9378. .dirty-indicator-clean.pull-left {
  9379. margin-right: .3em;
  9380. }
  9381. .dirty-indicator-clean.pull-right {
  9382. margin-left: .3em;
  9383. }
  9384. .dirty-indicator-clean:before {
  9385. display: inline-block;
  9386. font: normal normal normal 14px/1 FontAwesome;
  9387. font-size: inherit;
  9388. text-rendering: auto;
  9389. -webkit-font-smoothing: antialiased;
  9390. -moz-osx-font-smoothing: grayscale;
  9391. content: "\f00c";
  9392. }
  9393. .dirty-indicator-clean:before.pull-left {
  9394. margin-right: .3em;
  9395. }
  9396. .dirty-indicator-clean:before.pull-right {
  9397. margin-left: .3em;
  9398. }
  9399. #filename {
  9400. font-size: 16pt;
  9401. display: table;
  9402. padding: 0px 5px;
  9403. }
  9404. #current-mode {
  9405. padding-left: 5px;
  9406. padding-right: 5px;
  9407. }
  9408. #texteditor-backdrop {
  9409. padding-top: 20px;
  9410. padding-bottom: 20px;
  9411. }
  9412. @media not print {
  9413. #texteditor-backdrop {
  9414. background-color: #EEE;
  9415. }
  9416. }
  9417. @media print {
  9418. #texteditor-backdrop #texteditor-container .CodeMirror-gutter,
  9419. #texteditor-backdrop #texteditor-container .CodeMirror-gutters {
  9420. background-color: #fff;
  9421. }
  9422. }
  9423. @media not print {
  9424. #texteditor-backdrop #texteditor-container .CodeMirror-gutter,
  9425. #texteditor-backdrop #texteditor-container .CodeMirror-gutters {
  9426. background-color: #fff;
  9427. }
  9428. }
  9429. @media not print {
  9430. #texteditor-backdrop #texteditor-container {
  9431. padding: 0px;
  9432. background-color: #fff;
  9433. -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  9434. box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  9435. }
  9436. }
  9437. /*!
  9438. *
  9439. * IPython notebook
  9440. *
  9441. */
  9442. /* CSS font colors for translated ANSI colors. */
  9443. .ansibold {
  9444. font-weight: bold;
  9445. }
  9446. /* use dark versions for foreground, to improve visibility */
  9447. .ansiblack {
  9448. color: black;
  9449. }
  9450. .ansired {
  9451. color: darkred;
  9452. }
  9453. .ansigreen {
  9454. color: darkgreen;
  9455. }
  9456. .ansiyellow {
  9457. color: #c4a000;
  9458. }
  9459. .ansiblue {
  9460. color: darkblue;
  9461. }
  9462. .ansipurple {
  9463. color: darkviolet;
  9464. }
  9465. .ansicyan {
  9466. color: steelblue;
  9467. }
  9468. .ansigray {
  9469. color: gray;
  9470. }
  9471. /* and light for background, for the same reason */
  9472. .ansibgblack {
  9473. background-color: black;
  9474. }
  9475. .ansibgred {
  9476. background-color: red;
  9477. }
  9478. .ansibggreen {
  9479. background-color: green;
  9480. }
  9481. .ansibgyellow {
  9482. background-color: yellow;
  9483. }
  9484. .ansibgblue {
  9485. background-color: blue;
  9486. }
  9487. .ansibgpurple {
  9488. background-color: magenta;
  9489. }
  9490. .ansibgcyan {
  9491. background-color: cyan;
  9492. }
  9493. .ansibggray {
  9494. background-color: gray;
  9495. }
  9496. div.cell {
  9497. /* Old browsers */
  9498. display: -webkit-box;
  9499. -webkit-box-orient: vertical;
  9500. -webkit-box-align: stretch;
  9501. display: -moz-box;
  9502. -moz-box-orient: vertical;
  9503. -moz-box-align: stretch;
  9504. display: box;
  9505. box-orient: vertical;
  9506. box-align: stretch;
  9507. /* Modern browsers */
  9508. display: flex;
  9509. flex-direction: column;
  9510. align-items: stretch;
  9511. border-radius: 2px;
  9512. box-sizing: border-box;
  9513. -moz-box-sizing: border-box;
  9514. -webkit-box-sizing: border-box;
  9515. border-width: 1px;
  9516. border-style: solid;
  9517. border-color: transparent;
  9518. width: 100%;
  9519. padding: 5px;
  9520. /* This acts as a spacer between cells, that is outside the border */
  9521. margin: 0px;
  9522. outline: none;
  9523. border-left-width: 1px;
  9524. padding-left: 5px;
  9525. background: linear-gradient(to right, transparent -40px, transparent 1px, transparent 1px, transparent 100%);
  9526. }
  9527. div.cell.jupyter-soft-selected {
  9528. border-left-color: #90CAF9;
  9529. border-left-color: #E3F2FD;
  9530. border-left-width: 1px;
  9531. padding-left: 5px;
  9532. border-right-color: #E3F2FD;
  9533. border-right-width: 1px;
  9534. background: #E3F2FD;
  9535. }
  9536. @media print {
  9537. div.cell.jupyter-soft-selected {
  9538. border-color: transparent;
  9539. }
  9540. }
  9541. div.cell.selected {
  9542. border-color: #ababab;
  9543. border-left-width: 0px;
  9544. padding-left: 6px;
  9545. background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 5px, transparent 5px, transparent 100%);
  9546. }
  9547. @media print {
  9548. div.cell.selected {
  9549. border-color: transparent;
  9550. }
  9551. }
  9552. div.cell.selected.jupyter-soft-selected {
  9553. border-left-width: 0;
  9554. padding-left: 6px;
  9555. background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 7px, #E3F2FD 7px, #E3F2FD 100%);
  9556. }
  9557. .edit_mode div.cell.selected {
  9558. border-color: #66BB6A;
  9559. border-left-width: 0px;
  9560. padding-left: 6px;
  9561. background: linear-gradient(to right, #66BB6A -40px, #66BB6A 5px, transparent 5px, transparent 100%);
  9562. }
  9563. @media print {
  9564. .edit_mode div.cell.selected {
  9565. border-color: transparent;
  9566. }
  9567. }
  9568. .prompt {
  9569. /* This needs to be wide enough for 3 digit prompt numbers: In[100]: */
  9570. min-width: 14ex;
  9571. /* This padding is tuned to match the padding on the CodeMirror editor. */
  9572. padding: 0.4em;
  9573. margin: 0px;
  9574. font-family: monospace;
  9575. text-align: right;
  9576. /* This has to match that of the the CodeMirror class line-height below */
  9577. line-height: 1.21429em;
  9578. /* Don't highlight prompt number selection */
  9579. -webkit-touch-callout: none;
  9580. -webkit-user-select: none;
  9581. -khtml-user-select: none;
  9582. -moz-user-select: none;
  9583. -ms-user-select: none;
  9584. user-select: none;
  9585. /* Use default cursor */
  9586. cursor: default;
  9587. }
  9588. @media (max-width: 540px) {
  9589. .prompt {
  9590. text-align: left;
  9591. }
  9592. }
  9593. div.inner_cell {
  9594. /* Old browsers */
  9595. display: -webkit-box;
  9596. -webkit-box-orient: vertical;
  9597. -webkit-box-align: stretch;
  9598. display: -moz-box;
  9599. -moz-box-orient: vertical;
  9600. -moz-box-align: stretch;
  9601. display: box;
  9602. box-orient: vertical;
  9603. box-align: stretch;
  9604. /* Modern browsers */
  9605. display: flex;
  9606. flex-direction: column;
  9607. align-items: stretch;
  9608. /* Old browsers */
  9609. -webkit-box-flex: 1;
  9610. -moz-box-flex: 1;
  9611. box-flex: 1;
  9612. /* Modern browsers */
  9613. flex: 1;
  9614. }
  9615. @-moz-document url-prefix() {
  9616. div.inner_cell {
  9617. overflow-x: hidden;
  9618. }
  9619. }
  9620. /* input_area and input_prompt must match in top border and margin for alignment */
  9621. div.input_area {
  9622. border: 1px solid #cfcfcf;
  9623. border-radius: 2px;
  9624. background: #f7f7f7;
  9625. line-height: 1.21429em;
  9626. }
  9627. /* This is needed so that empty prompt areas can collapse to zero height when there
  9628. is no content in the output_subarea and the prompt. The main purpose of this is
  9629. to make sure that empty JavaScript output_subareas have no height. */
  9630. div.prompt:empty {
  9631. padding-top: 0;
  9632. padding-bottom: 0;
  9633. }
  9634. div.unrecognized_cell {
  9635. padding: 5px 5px 5px 0px;
  9636. /* Old browsers */
  9637. display: -webkit-box;
  9638. -webkit-box-orient: horizontal;
  9639. -webkit-box-align: stretch;
  9640. display: -moz-box;
  9641. -moz-box-orient: horizontal;
  9642. -moz-box-align: stretch;
  9643. display: box;
  9644. box-orient: horizontal;
  9645. box-align: stretch;
  9646. /* Modern browsers */
  9647. display: flex;
  9648. flex-direction: row;
  9649. align-items: stretch;
  9650. }
  9651. div.unrecognized_cell .inner_cell {
  9652. border-radius: 2px;
  9653. padding: 5px;
  9654. font-weight: bold;
  9655. color: red;
  9656. border: 1px solid #cfcfcf;
  9657. background: #eaeaea;
  9658. }
  9659. div.unrecognized_cell .inner_cell a {
  9660. color: inherit;
  9661. text-decoration: none;
  9662. }
  9663. div.unrecognized_cell .inner_cell a:hover {
  9664. color: inherit;
  9665. text-decoration: none;
  9666. }
  9667. @media (max-width: 540px) {
  9668. div.unrecognized_cell > div.prompt {
  9669. display: none;
  9670. }
  9671. }
  9672. div.code_cell {
  9673. /* avoid page breaking on code cells when printing */
  9674. }
  9675. @media print {
  9676. div.code_cell {
  9677. page-break-inside: avoid;
  9678. }
  9679. }
  9680. /* any special styling for code cells that are currently running goes here */
  9681. div.input {
  9682. page-break-inside: avoid;
  9683. /* Old browsers */
  9684. display: -webkit-box;
  9685. -webkit-box-orient: horizontal;
  9686. -webkit-box-align: stretch;
  9687. display: -moz-box;
  9688. -moz-box-orient: horizontal;
  9689. -moz-box-align: stretch;
  9690. display: box;
  9691. box-orient: horizontal;
  9692. box-align: stretch;
  9693. /* Modern browsers */
  9694. display: flex;
  9695. flex-direction: row;
  9696. align-items: stretch;
  9697. }
  9698. @media (max-width: 540px) {
  9699. div.input {
  9700. /* Old browsers */
  9701. display: -webkit-box;
  9702. -webkit-box-orient: vertical;
  9703. -webkit-box-align: stretch;
  9704. display: -moz-box;
  9705. -moz-box-orient: vertical;
  9706. -moz-box-align: stretch;
  9707. display: box;
  9708. box-orient: vertical;
  9709. box-align: stretch;
  9710. /* Modern browsers */
  9711. display: flex;
  9712. flex-direction: column;
  9713. align-items: stretch;
  9714. }
  9715. }
  9716. /* input_area and input_prompt must match in top border and margin for alignment */
  9717. div.input_prompt {
  9718. color: #303F9F;
  9719. border-top: 1px solid transparent;
  9720. }
  9721. div.input_area > div.highlight {
  9722. margin: 0.4em;
  9723. border: none;
  9724. padding: 0px;
  9725. background-color: transparent;
  9726. }
  9727. div.input_area > div.highlight > pre {
  9728. margin: 0px;
  9729. border: none;
  9730. padding: 0px;
  9731. background-color: transparent;
  9732. }
  9733. /* The following gets added to the <head> if it is detected that the user has a
  9734. * monospace font with inconsistent normal/bold/italic height. See
  9735. * notebookmain.js. Such fonts will have keywords vertically offset with
  9736. * respect to the rest of the text. The user should select a better font.
  9737. * See: https://github.com/ipython/ipython/issues/1503
  9738. *
  9739. * .CodeMirror span {
  9740. * vertical-align: bottom;
  9741. * }
  9742. */
  9743. .CodeMirror {
  9744. line-height: 1.21429em;
  9745. /* Changed from 1em to our global default */
  9746. font-size: 14px;
  9747. height: auto;
  9748. /* Changed to auto to autogrow */
  9749. background: none;
  9750. /* Changed from white to allow our bg to show through */
  9751. }
  9752. .CodeMirror-scroll {
  9753. /* The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/
  9754. /* We have found that if it is visible, vertical scrollbars appear with font size changes.*/
  9755. overflow-y: hidden;
  9756. overflow-x: auto;
  9757. }
  9758. .CodeMirror-lines {
  9759. /* In CM2, this used to be 0.4em, but in CM3 it went to 4px. We need the em value because */
  9760. /* we have set a different line-height and want this to scale with that. */
  9761. padding: 0.4em;
  9762. }
  9763. .CodeMirror-linenumber {
  9764. padding: 0 8px 0 4px;
  9765. }
  9766. .CodeMirror-gutters {
  9767. border-bottom-left-radius: 2px;
  9768. border-top-left-radius: 2px;
  9769. }
  9770. .CodeMirror pre {
  9771. /* In CM3 this went to 4px from 0 in CM2. We need the 0 value because of how we size */
  9772. /* .CodeMirror-lines */
  9773. padding: 0;
  9774. border: 0;
  9775. border-radius: 0;
  9776. }
  9777. /*
  9778. Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
  9779. Adapted from GitHub theme
  9780. */
  9781. .highlight-base {
  9782. color: #000;
  9783. }
  9784. .highlight-variable {
  9785. color: #000;
  9786. }
  9787. .highlight-variable-2 {
  9788. color: #1a1a1a;
  9789. }
  9790. .highlight-variable-3 {
  9791. color: #333333;
  9792. }
  9793. .highlight-string {
  9794. color: #BA2121;
  9795. }
  9796. .highlight-comment {
  9797. color: #408080;
  9798. font-style: italic;
  9799. }
  9800. .highlight-number {
  9801. color: #080;
  9802. }
  9803. .highlight-atom {
  9804. color: #88F;
  9805. }
  9806. .highlight-keyword {
  9807. color: #008000;
  9808. font-weight: bold;
  9809. }
  9810. .highlight-builtin {
  9811. color: #008000;
  9812. }
  9813. .highlight-error {
  9814. color: #f00;
  9815. }
  9816. .highlight-operator {
  9817. color: #AA22FF;
  9818. font-weight: bold;
  9819. }
  9820. .highlight-meta {
  9821. color: #AA22FF;
  9822. }
  9823. /* previously not defined, copying from default codemirror */
  9824. .highlight-def {
  9825. color: #00f;
  9826. }
  9827. .highlight-string-2 {
  9828. color: #f50;
  9829. }
  9830. .highlight-qualifier {
  9831. color: #555;
  9832. }
  9833. .highlight-bracket {
  9834. color: #997;
  9835. }
  9836. .highlight-tag {
  9837. color: #170;
  9838. }
  9839. .highlight-attribute {
  9840. color: #00c;
  9841. }
  9842. .highlight-header {
  9843. color: blue;
  9844. }
  9845. .highlight-quote {
  9846. color: #090;
  9847. }
  9848. .highlight-link {
  9849. color: #00c;
  9850. }
  9851. /* apply the same style to codemirror */
  9852. .cm-s-ipython span.cm-keyword {
  9853. color: #008000;
  9854. font-weight: bold;
  9855. }
  9856. .cm-s-ipython span.cm-atom {
  9857. color: #88F;
  9858. }
  9859. .cm-s-ipython span.cm-number {
  9860. color: #080;
  9861. }
  9862. .cm-s-ipython span.cm-def {
  9863. color: #00f;
  9864. }
  9865. .cm-s-ipython span.cm-variable {
  9866. color: #000;
  9867. }
  9868. .cm-s-ipython span.cm-operator {
  9869. color: #AA22FF;
  9870. font-weight: bold;
  9871. }
  9872. .cm-s-ipython span.cm-variable-2 {
  9873. color: #1a1a1a;
  9874. }
  9875. .cm-s-ipython span.cm-variable-3 {
  9876. color: #333333;
  9877. }
  9878. .cm-s-ipython span.cm-comment {
  9879. color: #408080;
  9880. font-style: italic;
  9881. }
  9882. .cm-s-ipython span.cm-string {
  9883. color: #BA2121;
  9884. }
  9885. .cm-s-ipython span.cm-string-2 {
  9886. color: #f50;
  9887. }
  9888. .cm-s-ipython span.cm-meta {
  9889. color: #AA22FF;
  9890. }
  9891. .cm-s-ipython span.cm-qualifier {
  9892. color: #555;
  9893. }
  9894. .cm-s-ipython span.cm-builtin {
  9895. color: #008000;
  9896. }
  9897. .cm-s-ipython span.cm-bracket {
  9898. color: #997;
  9899. }
  9900. .cm-s-ipython span.cm-tag {
  9901. color: #170;
  9902. }
  9903. .cm-s-ipython span.cm-attribute {
  9904. color: #00c;
  9905. }
  9906. .cm-s-ipython span.cm-header {
  9907. color: blue;
  9908. }
  9909. .cm-s-ipython span.cm-quote {
  9910. color: #090;
  9911. }
  9912. .cm-s-ipython span.cm-link {
  9913. color: #00c;
  9914. }
  9915. .cm-s-ipython span.cm-error {
  9916. color: #f00;
  9917. }
  9918. .cm-s-ipython span.cm-tab {
  9919. background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);
  9920. background-position: right;
  9921. background-repeat: no-repeat;
  9922. }
  9923. div.output_wrapper {
  9924. /* this position must be relative to enable descendents to be absolute within it */
  9925. position: relative;
  9926. /* Old browsers */
  9927. display: -webkit-box;
  9928. -webkit-box-orient: vertical;
  9929. -webkit-box-align: stretch;
  9930. display: -moz-box;
  9931. -moz-box-orient: vertical;
  9932. -moz-box-align: stretch;
  9933. display: box;
  9934. box-orient: vertical;
  9935. box-align: stretch;
  9936. /* Modern browsers */
  9937. display: flex;
  9938. flex-direction: column;
  9939. align-items: stretch;
  9940. z-index: 1;
  9941. }
  9942. /* class for the output area when it should be height-limited */
  9943. div.output_scroll {
  9944. /* ideally, this would be max-height, but FF barfs all over that */
  9945. height: 24em;
  9946. /* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */
  9947. width: 100%;
  9948. overflow: auto;
  9949. border-radius: 2px;
  9950. -webkit-box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
  9951. box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
  9952. display: block;
  9953. }
  9954. /* output div while it is collapsed */
  9955. div.output_collapsed {
  9956. margin: 0px;
  9957. padding: 0px;
  9958. /* Old browsers */
  9959. display: -webkit-box;
  9960. -webkit-box-orient: vertical;
  9961. -webkit-box-align: stretch;
  9962. display: -moz-box;
  9963. -moz-box-orient: vertical;
  9964. -moz-box-align: stretch;
  9965. display: box;
  9966. box-orient: vertical;
  9967. box-align: stretch;
  9968. /* Modern browsers */
  9969. display: flex;
  9970. flex-direction: column;
  9971. align-items: stretch;
  9972. }
  9973. div.out_prompt_overlay {
  9974. height: 100%;
  9975. padding: 0px 0.4em;
  9976. position: absolute;
  9977. border-radius: 2px;
  9978. }
  9979. div.out_prompt_overlay:hover {
  9980. /* use inner shadow to get border that is computed the same on WebKit/FF */
  9981. -webkit-box-shadow: inset 0 0 1px #000;
  9982. box-shadow: inset 0 0 1px #000;
  9983. background: rgba(240, 240, 240, 0.5);
  9984. }
  9985. div.output_prompt {
  9986. color: #D84315;
  9987. }
  9988. /* This class is the outer container of all output sections. */
  9989. div.output_area {
  9990. padding: 0px;
  9991. page-break-inside: avoid;
  9992. /* Old browsers */
  9993. display: -webkit-box;
  9994. -webkit-box-orient: horizontal;
  9995. -webkit-box-align: stretch;
  9996. display: -moz-box;
  9997. -moz-box-orient: horizontal;
  9998. -moz-box-align: stretch;
  9999. display: box;
  10000. box-orient: horizontal;
  10001. box-align: stretch;
  10002. /* Modern browsers */
  10003. display: flex;
  10004. flex-direction: row;
  10005. align-items: stretch;
  10006. }
  10007. div.output_area .MathJax_Display {
  10008. text-align: left !important;
  10009. }
  10010. div.output_area .rendered_html table {
  10011. margin-left: 0;
  10012. margin-right: 0;
  10013. }
  10014. div.output_area .rendered_html img {
  10015. margin-left: 0;
  10016. margin-right: 0;
  10017. }
  10018. div.output_area img,
  10019. div.output_area svg {
  10020. max-width: 100%;
  10021. height: auto;
  10022. }
  10023. div.output_area img.unconfined,
  10024. div.output_area svg.unconfined {
  10025. max-width: none;
  10026. }
  10027. /* This is needed to protect the pre formating from global settings such
  10028. as that of bootstrap */
  10029. .output {
  10030. /* Old browsers */
  10031. display: -webkit-box;
  10032. -webkit-box-orient: vertical;
  10033. -webkit-box-align: stretch;
  10034. display: -moz-box;
  10035. -moz-box-orient: vertical;
  10036. -moz-box-align: stretch;
  10037. display: box;
  10038. box-orient: vertical;
  10039. box-align: stretch;
  10040. /* Modern browsers */
  10041. display: flex;
  10042. flex-direction: column;
  10043. align-items: stretch;
  10044. }
  10045. @media (max-width: 540px) {
  10046. div.output_area {
  10047. /* Old browsers */
  10048. display: -webkit-box;
  10049. -webkit-box-orient: vertical;
  10050. -webkit-box-align: stretch;
  10051. display: -moz-box;
  10052. -moz-box-orient: vertical;
  10053. -moz-box-align: stretch;
  10054. display: box;
  10055. box-orient: vertical;
  10056. box-align: stretch;
  10057. /* Modern browsers */
  10058. display: flex;
  10059. flex-direction: column;
  10060. align-items: stretch;
  10061. }
  10062. }
  10063. div.output_area pre {
  10064. margin: 0;
  10065. padding: 0;
  10066. border: 0;
  10067. vertical-align: baseline;
  10068. color: black;
  10069. background-color: transparent;
  10070. border-radius: 0;
  10071. }
  10072. /* This class is for the output subarea inside the output_area and after
  10073. the prompt div. */
  10074. div.output_subarea {
  10075. overflow-x: auto;
  10076. padding: 0.4em;
  10077. /* Old browsers */
  10078. -webkit-box-flex: 1;
  10079. -moz-box-flex: 1;
  10080. box-flex: 1;
  10081. /* Modern browsers */
  10082. flex: 1;
  10083. max-width: calc(100% - 14ex);
  10084. }
  10085. div.output_scroll div.output_subarea {
  10086. overflow-x: visible;
  10087. }
  10088. /* The rest of the output_* classes are for special styling of the different
  10089. output types */
  10090. /* all text output has this class: */
  10091. div.output_text {
  10092. text-align: left;
  10093. color: #000;
  10094. /* This has to match that of the the CodeMirror class line-height below */
  10095. line-height: 1.21429em;
  10096. }
  10097. /* stdout/stderr are 'text' as well as 'stream', but execute_result/error are *not* streams */
  10098. div.output_stderr {
  10099. background: #fdd;
  10100. /* very light red background for stderr */
  10101. }
  10102. div.output_latex {
  10103. text-align: left;
  10104. }
  10105. /* Empty output_javascript divs should have no height */
  10106. div.output_javascript:empty {
  10107. padding: 0;
  10108. }
  10109. .js-error {
  10110. color: darkred;
  10111. }
  10112. /* raw_input styles */
  10113. div.raw_input_container {
  10114. line-height: 1.21429em;
  10115. padding-top: 5px;
  10116. }
  10117. pre.raw_input_prompt {
  10118. /* nothing needed here. */
  10119. }
  10120. input.raw_input {
  10121. font-family: monospace;
  10122. font-size: inherit;
  10123. color: inherit;
  10124. width: auto;
  10125. /* make sure input baseline aligns with prompt */
  10126. vertical-align: baseline;
  10127. /* padding + margin = 0.5em between prompt and cursor */
  10128. padding: 0em 0.25em;
  10129. margin: 0em 0.25em;
  10130. }
  10131. input.raw_input:focus {
  10132. box-shadow: none;
  10133. }
  10134. p.p-space {
  10135. margin-bottom: 10px;
  10136. }
  10137. div.output_unrecognized {
  10138. padding: 5px;
  10139. font-weight: bold;
  10140. color: red;
  10141. }
  10142. div.output_unrecognized a {
  10143. color: inherit;
  10144. text-decoration: none;
  10145. }
  10146. div.output_unrecognized a:hover {
  10147. color: inherit;
  10148. text-decoration: none;
  10149. }
  10150. .rendered_html {
  10151. color: #000;
  10152. /* any extras will just be numbers: */
  10153. }
  10154. .rendered_html em {
  10155. font-style: italic;
  10156. }
  10157. .rendered_html strong {
  10158. font-weight: bold;
  10159. }
  10160. .rendered_html u {
  10161. text-decoration: underline;
  10162. }
  10163. .rendered_html :link {
  10164. text-decoration: underline;
  10165. }
  10166. .rendered_html :visited {
  10167. text-decoration: underline;
  10168. }
  10169. .rendered_html h1 {
  10170. font-size: 185.7%;
  10171. margin: 1.08em 0 0 0;
  10172. font-weight: bold;
  10173. line-height: 1.0;
  10174. }
  10175. .rendered_html h2 {
  10176. font-size: 157.1%;
  10177. margin: 1.27em 0 0 0;
  10178. font-weight: bold;
  10179. line-height: 1.0;
  10180. }
  10181. .rendered_html h3 {
  10182. font-size: 128.6%;
  10183. margin: 1.55em 0 0 0;
  10184. font-weight: bold;
  10185. line-height: 1.0;
  10186. }
  10187. .rendered_html h4 {
  10188. font-size: 100%;
  10189. margin: 2em 0 0 0;
  10190. font-weight: bold;
  10191. line-height: 1.0;
  10192. }
  10193. .rendered_html h5 {
  10194. font-size: 100%;
  10195. margin: 2em 0 0 0;
  10196. font-weight: bold;
  10197. line-height: 1.0;
  10198. font-style: italic;
  10199. }
  10200. .rendered_html h6 {
  10201. font-size: 100%;
  10202. margin: 2em 0 0 0;
  10203. font-weight: bold;
  10204. line-height: 1.0;
  10205. font-style: italic;
  10206. }
  10207. .rendered_html h1:first-child {
  10208. margin-top: 0.538em;
  10209. }
  10210. .rendered_html h2:first-child {
  10211. margin-top: 0.636em;
  10212. }
  10213. .rendered_html h3:first-child {
  10214. margin-top: 0.777em;
  10215. }
  10216. .rendered_html h4:first-child {
  10217. margin-top: 1em;
  10218. }
  10219. .rendered_html h5:first-child {
  10220. margin-top: 1em;
  10221. }
  10222. .rendered_html h6:first-child {
  10223. margin-top: 1em;
  10224. }
  10225. .rendered_html ul {
  10226. list-style: disc;
  10227. margin: 0em 2em;
  10228. padding-left: 0px;
  10229. }
  10230. .rendered_html ul ul {
  10231. list-style: square;
  10232. margin: 0em 2em;
  10233. }
  10234. .rendered_html ul ul ul {
  10235. list-style: circle;
  10236. margin: 0em 2em;
  10237. }
  10238. .rendered_html ol {
  10239. list-style: decimal;
  10240. margin: 0em 2em;
  10241. padding-left: 0px;
  10242. }
  10243. .rendered_html ol ol {
  10244. list-style: upper-alpha;
  10245. margin: 0em 2em;
  10246. }
  10247. .rendered_html ol ol ol {
  10248. list-style: lower-alpha;
  10249. margin: 0em 2em;
  10250. }
  10251. .rendered_html ol ol ol ol {
  10252. list-style: lower-roman;
  10253. margin: 0em 2em;
  10254. }
  10255. .rendered_html ol ol ol ol ol {
  10256. list-style: decimal;
  10257. margin: 0em 2em;
  10258. }
  10259. .rendered_html * + ul {
  10260. margin-top: 1em;
  10261. }
  10262. .rendered_html * + ol {
  10263. margin-top: 1em;
  10264. }
  10265. .rendered_html hr {
  10266. color: black;
  10267. background-color: black;
  10268. }
  10269. .rendered_html pre {
  10270. margin: 1em 2em;
  10271. }
  10272. .rendered_html pre,
  10273. .rendered_html code {
  10274. border: 0;
  10275. background-color: #fff;
  10276. color: #000;
  10277. font-size: 100%;
  10278. padding: 0px;
  10279. }
  10280. .rendered_html blockquote {
  10281. margin: 1em 2em;
  10282. }
  10283. .rendered_html table {
  10284. margin-left: auto;
  10285. margin-right: auto;
  10286. border: 1px solid black;
  10287. border-collapse: collapse;
  10288. }
  10289. .rendered_html tr,
  10290. .rendered_html th,
  10291. .rendered_html td {
  10292. border: 1px solid black;
  10293. border-collapse: collapse;
  10294. margin: 1em 2em;
  10295. }
  10296. .rendered_html td,
  10297. .rendered_html th {
  10298. text-align: left;
  10299. vertical-align: middle;
  10300. padding: 4px;
  10301. }
  10302. .rendered_html th {
  10303. font-weight: bold;
  10304. }
  10305. .rendered_html * + table {
  10306. margin-top: 1em;
  10307. }
  10308. .rendered_html p {
  10309. text-align: left;
  10310. }
  10311. .rendered_html * + p {
  10312. margin-top: 1em;
  10313. }
  10314. .rendered_html img {
  10315. display: block;
  10316. margin-left: auto;
  10317. margin-right: auto;
  10318. }
  10319. .rendered_html * + img {
  10320. margin-top: 1em;
  10321. }
  10322. .rendered_html img,
  10323. .rendered_html svg {
  10324. max-width: 100%;
  10325. height: auto;
  10326. }
  10327. .rendered_html img.unconfined,
  10328. .rendered_html svg.unconfined {
  10329. max-width: none;
  10330. }
  10331. div.text_cell {
  10332. /* Old browsers */
  10333. display: -webkit-box;
  10334. -webkit-box-orient: horizontal;
  10335. -webkit-box-align: stretch;
  10336. display: -moz-box;
  10337. -moz-box-orient: horizontal;
  10338. -moz-box-align: stretch;
  10339. display: box;
  10340. box-orient: horizontal;
  10341. box-align: stretch;
  10342. /* Modern browsers */
  10343. display: flex;
  10344. flex-direction: row;
  10345. align-items: stretch;
  10346. }
  10347. @media (max-width: 540px) {
  10348. div.text_cell > div.prompt {
  10349. display: none;
  10350. }
  10351. }
  10352. div.text_cell_render {
  10353. /*font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;*/
  10354. outline: none;
  10355. resize: none;
  10356. width: inherit;
  10357. border-style: none;
  10358. padding: 0.5em 0.5em 0.5em 0.4em;
  10359. color: #000;
  10360. box-sizing: border-box;
  10361. -moz-box-sizing: border-box;
  10362. -webkit-box-sizing: border-box;
  10363. }
  10364. a.anchor-link:link {
  10365. text-decoration: none;
  10366. padding: 0px 20px;
  10367. visibility: hidden;
  10368. }
  10369. h1:hover .anchor-link,
  10370. h2:hover .anchor-link,
  10371. h3:hover .anchor-link,
  10372. h4:hover .anchor-link,
  10373. h5:hover .anchor-link,
  10374. h6:hover .anchor-link {
  10375. visibility: visible;
  10376. }
  10377. .text_cell.rendered .input_area {
  10378. display: none;
  10379. }
  10380. .text_cell.rendered .rendered_html {
  10381. overflow-x: auto;
  10382. overflow-y: hidden;
  10383. }
  10384. .text_cell.unrendered .text_cell_render {
  10385. display: none;
  10386. }
  10387. .cm-header-1,
  10388. .cm-header-2,
  10389. .cm-header-3,
  10390. .cm-header-4,
  10391. .cm-header-5,
  10392. .cm-header-6 {
  10393. font-weight: bold;
  10394. font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  10395. }
  10396. .cm-header-1 {
  10397. font-size: 185.7%;
  10398. }
  10399. .cm-header-2 {
  10400. font-size: 157.1%;
  10401. }
  10402. .cm-header-3 {
  10403. font-size: 128.6%;
  10404. }
  10405. .cm-header-4 {
  10406. font-size: 110%;
  10407. }
  10408. .cm-header-5 {
  10409. font-size: 100%;
  10410. font-style: italic;
  10411. }
  10412. .cm-header-6 {
  10413. font-size: 100%;
  10414. font-style: italic;
  10415. }
  10416. /*!
  10417. *
  10418. * IPython notebook webapp
  10419. *
  10420. */
  10421. @media (max-width: 767px) {
  10422. .notebook_app {
  10423. padding-left: 0px;
  10424. padding-right: 0px;
  10425. }
  10426. }
  10427. #ipython-main-app {
  10428. box-sizing: border-box;
  10429. -moz-box-sizing: border-box;
  10430. -webkit-box-sizing: border-box;
  10431. height: 100%;
  10432. }
  10433. div#notebook_panel {
  10434. margin: 0px;
  10435. padding: 0px;
  10436. box-sizing: border-box;
  10437. -moz-box-sizing: border-box;
  10438. -webkit-box-sizing: border-box;
  10439. height: 100%;
  10440. }
  10441. div#notebook {
  10442. font-size: 14px;
  10443. line-height: 20px;
  10444. overflow-y: hidden;
  10445. overflow-x: auto;
  10446. width: 100%;
  10447. /* This spaces the page away from the edge of the notebook area */
  10448. padding-top: 20px;
  10449. margin: 0px;
  10450. outline: none;
  10451. box-sizing: border-box;
  10452. -moz-box-sizing: border-box;
  10453. -webkit-box-sizing: border-box;
  10454. min-height: 100%;
  10455. }
  10456. @media not print {
  10457. #notebook-container {
  10458. padding: 15px;
  10459. background-color: #fff;
  10460. min-height: 0;
  10461. -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  10462. box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  10463. }
  10464. }
  10465. @media print {
  10466. #notebook-container {
  10467. width: 100%;
  10468. }
  10469. }
  10470. div.ui-widget-content {
  10471. border: 1px solid #ababab;
  10472. outline: none;
  10473. }
  10474. pre.dialog {
  10475. background-color: #f7f7f7;
  10476. border: 1px solid #ddd;
  10477. border-radius: 2px;
  10478. padding: 0.4em;
  10479. padding-left: 2em;
  10480. }
  10481. p.dialog {
  10482. padding: 0.2em;
  10483. }
  10484. /* Word-wrap output correctly. This is the CSS3 spelling, though Firefox seems
  10485. to not honor it correctly. Webkit browsers (Chrome, rekonq, Safari) do.
  10486. */
  10487. pre,
  10488. code,
  10489. kbd,
  10490. samp {
  10491. white-space: pre-wrap;
  10492. }
  10493. #fonttest {
  10494. font-family: monospace;
  10495. }
  10496. p {
  10497. margin-bottom: 0;
  10498. }
  10499. .end_space {
  10500. min-height: 100px;
  10501. transition: height .2s ease;
  10502. }
  10503. .notebook_app > #header {
  10504. -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  10505. box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  10506. }
  10507. @media not print {
  10508. .notebook_app {
  10509. background-color: #EEE;
  10510. }
  10511. }
  10512. kbd {
  10513. border-style: solid;
  10514. border-width: 1px;
  10515. box-shadow: none;
  10516. margin: 2px;
  10517. padding-left: 2px;
  10518. padding-right: 2px;
  10519. padding-top: 1px;
  10520. padding-bottom: 1px;
  10521. }
  10522. /* CSS for the cell toolbar */
  10523. .celltoolbar {
  10524. border: thin solid #CFCFCF;
  10525. border-bottom: none;
  10526. background: #EEE;
  10527. border-radius: 2px 2px 0px 0px;
  10528. width: 100%;
  10529. height: 29px;
  10530. padding-right: 4px;
  10531. /* Old browsers */
  10532. display: -webkit-box;
  10533. -webkit-box-orient: horizontal;
  10534. -webkit-box-align: stretch;
  10535. display: -moz-box;
  10536. -moz-box-orient: horizontal;
  10537. -moz-box-align: stretch;
  10538. display: box;
  10539. box-orient: horizontal;
  10540. box-align: stretch;
  10541. /* Modern browsers */
  10542. display: flex;
  10543. flex-direction: row;
  10544. align-items: stretch;
  10545. /* Old browsers */
  10546. -webkit-box-pack: end;
  10547. -moz-box-pack: end;
  10548. box-pack: end;
  10549. /* Modern browsers */
  10550. justify-content: flex-end;
  10551. display: -webkit-flex;
  10552. }
  10553. @media print {
  10554. .celltoolbar {
  10555. display: none;
  10556. }
  10557. }
  10558. .ctb_hideshow {
  10559. display: none;
  10560. vertical-align: bottom;
  10561. }
  10562. /* ctb_show is added to the ctb_hideshow div to show the cell toolbar.
  10563. Cell toolbars are only shown when the ctb_global_show class is also set.
  10564. */
  10565. .ctb_global_show .ctb_show.ctb_hideshow {
  10566. display: block;
  10567. }
  10568. .ctb_global_show .ctb_show + .input_area,
  10569. .ctb_global_show .ctb_show + div.text_cell_input,
  10570. .ctb_global_show .ctb_show ~ div.text_cell_render {
  10571. border-top-right-radius: 0px;
  10572. border-top-left-radius: 0px;
  10573. }
  10574. .ctb_global_show .ctb_show ~ div.text_cell_render {
  10575. border: 1px solid #cfcfcf;
  10576. }
  10577. .celltoolbar {
  10578. font-size: 87%;
  10579. padding-top: 3px;
  10580. }
  10581. .celltoolbar select {
  10582. display: block;
  10583. width: 100%;
  10584. height: 32px;
  10585. padding: 6px 12px;
  10586. font-size: 13px;
  10587. line-height: 1.42857143;
  10588. color: #555555;
  10589. background-color: #fff;
  10590. background-image: none;
  10591. border: 1px solid #ccc;
  10592. border-radius: 2px;
  10593. -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  10594. box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  10595. -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  10596. -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  10597. transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  10598. height: 30px;
  10599. padding: 5px 10px;
  10600. font-size: 12px;
  10601. line-height: 1.5;
  10602. border-radius: 1px;
  10603. width: inherit;
  10604. font-size: inherit;
  10605. height: 22px;
  10606. padding: 0px;
  10607. display: inline-block;
  10608. }
  10609. .celltoolbar select:focus {
  10610. border-color: #66afe9;
  10611. outline: 0;
  10612. -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
  10613. box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
  10614. }
  10615. .celltoolbar select::-moz-placeholder {
  10616. color: #999;
  10617. opacity: 1;
  10618. }
  10619. .celltoolbar select:-ms-input-placeholder {
  10620. color: #999;
  10621. }
  10622. .celltoolbar select::-webkit-input-placeholder {
  10623. color: #999;
  10624. }
  10625. .celltoolbar select::-ms-expand {
  10626. border: 0;
  10627. background-color: transparent;
  10628. }
  10629. .celltoolbar select[disabled],
  10630. .celltoolbar select[readonly],
  10631. fieldset[disabled] .celltoolbar select {
  10632. background-color: #eeeeee;
  10633. opacity: 1;
  10634. }
  10635. .celltoolbar select[disabled],
  10636. fieldset[disabled] .celltoolbar select {
  10637. cursor: not-allowed;
  10638. }
  10639. textarea.celltoolbar select {
  10640. height: auto;
  10641. }
  10642. select.celltoolbar select {
  10643. height: 30px;
  10644. line-height: 30px;
  10645. }
  10646. textarea.celltoolbar select,
  10647. select[multiple].celltoolbar select {
  10648. height: auto;
  10649. }
  10650. .celltoolbar label {
  10651. margin-left: 5px;
  10652. margin-right: 5px;
  10653. }
  10654. .completions {
  10655. position: absolute;
  10656. z-index: 110;
  10657. overflow: hidden;
  10658. border: 1px solid #ababab;
  10659. border-radius: 2px;
  10660. -webkit-box-shadow: 0px 6px 10px -1px #adadad;
  10661. box-shadow: 0px 6px 10px -1px #adadad;
  10662. line-height: 1;
  10663. }
  10664. .completions select {
  10665. background: white;
  10666. outline: none;
  10667. border: none;
  10668. padding: 0px;
  10669. margin: 0px;
  10670. overflow: auto;
  10671. font-family: monospace;
  10672. font-size: 110%;
  10673. color: #000;
  10674. width: auto;
  10675. }
  10676. .completions select option.context {
  10677. color: #286090;
  10678. }
  10679. #kernel_logo_widget {
  10680. float: right !important;
  10681. float: right;
  10682. }
  10683. #kernel_logo_widget .current_kernel_logo {
  10684. display: none;
  10685. margin-top: -1px;
  10686. margin-bottom: -1px;
  10687. width: 32px;
  10688. height: 32px;
  10689. }
  10690. #menubar {
  10691. box-sizing: border-box;
  10692. -moz-box-sizing: border-box;
  10693. -webkit-box-sizing: border-box;
  10694. margin-top: 1px;
  10695. }
  10696. #menubar .navbar {
  10697. border-top: 1px;
  10698. border-radius: 0px 0px 2px 2px;
  10699. margin-bottom: 0px;
  10700. }
  10701. #menubar .navbar-toggle {
  10702. float: left;
  10703. padding-top: 7px;
  10704. padding-bottom: 7px;
  10705. border: none;
  10706. }
  10707. #menubar .navbar-collapse {
  10708. clear: left;
  10709. }
  10710. .nav-wrapper {
  10711. border-bottom: 1px solid #e7e7e7;
  10712. }
  10713. i.menu-icon {
  10714. padding-top: 4px;
  10715. }
  10716. ul#help_menu li a {
  10717. overflow: hidden;
  10718. padding-right: 2.2em;
  10719. }
  10720. ul#help_menu li a i {
  10721. margin-right: -1.2em;
  10722. }
  10723. .dropdown-submenu {
  10724. position: relative;
  10725. }
  10726. .dropdown-submenu > .dropdown-menu {
  10727. top: 0;
  10728. left: 100%;
  10729. margin-top: -6px;
  10730. margin-left: -1px;
  10731. }
  10732. .dropdown-submenu:hover > .dropdown-menu {
  10733. display: block;
  10734. }
  10735. .dropdown-submenu > a:after {
  10736. display: inline-block;
  10737. font: normal normal normal 14px/1 FontAwesome;
  10738. font-size: inherit;
  10739. text-rendering: auto;
  10740. -webkit-font-smoothing: antialiased;
  10741. -moz-osx-font-smoothing: grayscale;
  10742. display: block;
  10743. content: "\f0da";
  10744. float: right;
  10745. color: #333333;
  10746. margin-top: 2px;
  10747. margin-right: -10px;
  10748. }
  10749. .dropdown-submenu > a:after.pull-left {
  10750. margin-right: .3em;
  10751. }
  10752. .dropdown-submenu > a:after.pull-right {
  10753. margin-left: .3em;
  10754. }
  10755. .dropdown-submenu:hover > a:after {
  10756. color: #262626;
  10757. }
  10758. .dropdown-submenu.pull-left {
  10759. float: none;
  10760. }
  10761. .dropdown-submenu.pull-left > .dropdown-menu {
  10762. left: -100%;
  10763. margin-left: 10px;
  10764. }
  10765. #notification_area {
  10766. float: right !important;
  10767. float: right;
  10768. z-index: 10;
  10769. }
  10770. .indicator_area {
  10771. float: right !important;
  10772. float: right;
  10773. color: #777;
  10774. margin-left: 5px;
  10775. margin-right: 5px;
  10776. width: 11px;
  10777. z-index: 10;
  10778. text-align: center;
  10779. width: auto;
  10780. }
  10781. #kernel_indicator {
  10782. float: right !important;
  10783. float: right;
  10784. color: #777;
  10785. margin-left: 5px;
  10786. margin-right: 5px;
  10787. width: 11px;
  10788. z-index: 10;
  10789. text-align: center;
  10790. width: auto;
  10791. border-left: 1px solid;
  10792. }
  10793. #kernel_indicator .kernel_indicator_name {
  10794. padding-left: 5px;
  10795. padding-right: 5px;
  10796. }
  10797. #modal_indicator {
  10798. float: right !important;
  10799. float: right;
  10800. color: #777;
  10801. margin-left: 5px;
  10802. margin-right: 5px;
  10803. width: 11px;
  10804. z-index: 10;
  10805. text-align: center;
  10806. width: auto;
  10807. }
  10808. #readonly-indicator {
  10809. float: right !important;
  10810. float: right;
  10811. color: #777;
  10812. margin-left: 5px;
  10813. margin-right: 5px;
  10814. width: 11px;
  10815. z-index: 10;
  10816. text-align: center;
  10817. width: auto;
  10818. margin-top: 2px;
  10819. margin-bottom: 0px;
  10820. margin-left: 0px;
  10821. margin-right: 0px;
  10822. display: none;
  10823. }
  10824. .modal_indicator:before {
  10825. width: 1.28571429em;
  10826. text-align: center;
  10827. }
  10828. .edit_mode .modal_indicator:before {
  10829. display: inline-block;
  10830. font: normal normal normal 14px/1 FontAwesome;
  10831. font-size: inherit;
  10832. text-rendering: auto;
  10833. -webkit-font-smoothing: antialiased;
  10834. -moz-osx-font-smoothing: grayscale;
  10835. content: "\f040";
  10836. }
  10837. .edit_mode .modal_indicator:before.pull-left {
  10838. margin-right: .3em;
  10839. }
  10840. .edit_mode .modal_indicator:before.pull-right {
  10841. margin-left: .3em;
  10842. }
  10843. .command_mode .modal_indicator:before {
  10844. display: inline-block;
  10845. font: normal normal normal 14px/1 FontAwesome;
  10846. font-size: inherit;
  10847. text-rendering: auto;
  10848. -webkit-font-smoothing: antialiased;
  10849. -moz-osx-font-smoothing: grayscale;
  10850. content: ' ';
  10851. }
  10852. .command_mode .modal_indicator:before.pull-left {
  10853. margin-right: .3em;
  10854. }
  10855. .command_mode .modal_indicator:before.pull-right {
  10856. margin-left: .3em;
  10857. }
  10858. .kernel_idle_icon:before {
  10859. display: inline-block;
  10860. font: normal normal normal 14px/1 FontAwesome;
  10861. font-size: inherit;
  10862. text-rendering: auto;
  10863. -webkit-font-smoothing: antialiased;
  10864. -moz-osx-font-smoothing: grayscale;
  10865. content: "\f10c";
  10866. }
  10867. .kernel_idle_icon:before.pull-left {
  10868. margin-right: .3em;
  10869. }
  10870. .kernel_idle_icon:before.pull-right {
  10871. margin-left: .3em;
  10872. }
  10873. .kernel_busy_icon:before {
  10874. display: inline-block;
  10875. font: normal normal normal 14px/1 FontAwesome;
  10876. font-size: inherit;
  10877. text-rendering: auto;
  10878. -webkit-font-smoothing: antialiased;
  10879. -moz-osx-font-smoothing: grayscale;
  10880. content: "\f111";
  10881. }
  10882. .kernel_busy_icon:before.pull-left {
  10883. margin-right: .3em;
  10884. }
  10885. .kernel_busy_icon:before.pull-right {
  10886. margin-left: .3em;
  10887. }
  10888. .kernel_dead_icon:before {
  10889. display: inline-block;
  10890. font: normal normal normal 14px/1 FontAwesome;
  10891. font-size: inherit;
  10892. text-rendering: auto;
  10893. -webkit-font-smoothing: antialiased;
  10894. -moz-osx-font-smoothing: grayscale;
  10895. content: "\f1e2";
  10896. }
  10897. .kernel_dead_icon:before.pull-left {
  10898. margin-right: .3em;
  10899. }
  10900. .kernel_dead_icon:before.pull-right {
  10901. margin-left: .3em;
  10902. }
  10903. .kernel_disconnected_icon:before {
  10904. display: inline-block;
  10905. font: normal normal normal 14px/1 FontAwesome;
  10906. font-size: inherit;
  10907. text-rendering: auto;
  10908. -webkit-font-smoothing: antialiased;
  10909. -moz-osx-font-smoothing: grayscale;
  10910. content: "\f127";
  10911. }
  10912. .kernel_disconnected_icon:before.pull-left {
  10913. margin-right: .3em;
  10914. }
  10915. .kernel_disconnected_icon:before.pull-right {
  10916. margin-left: .3em;
  10917. }
  10918. .notification_widget {
  10919. color: #777;
  10920. z-index: 10;
  10921. background: rgba(240, 240, 240, 0.5);
  10922. margin-right: 4px;
  10923. color: #333;
  10924. background-color: #fff;
  10925. border-color: #ccc;
  10926. }
  10927. .notification_widget:focus,
  10928. .notification_widget.focus {
  10929. color: #333;
  10930. background-color: #e6e6e6;
  10931. border-color: #8c8c8c;
  10932. }
  10933. .notification_widget:hover {
  10934. color: #333;
  10935. background-color: #e6e6e6;
  10936. border-color: #adadad;
  10937. }
  10938. .notification_widget:active,
  10939. .notification_widget.active,
  10940. .open > .dropdown-toggle.notification_widget {
  10941. color: #333;
  10942. background-color: #e6e6e6;
  10943. border-color: #adadad;
  10944. }
  10945. .notification_widget:active:hover,
  10946. .notification_widget.active:hover,
  10947. .open > .dropdown-toggle.notification_widget:hover,
  10948. .notification_widget:active:focus,
  10949. .notification_widget.active:focus,
  10950. .open > .dropdown-toggle.notification_widget:focus,
  10951. .notification_widget:active.focus,
  10952. .notification_widget.active.focus,
  10953. .open > .dropdown-toggle.notification_widget.focus {
  10954. color: #333;
  10955. background-color: #d4d4d4;
  10956. border-color: #8c8c8c;
  10957. }
  10958. .notification_widget:active,
  10959. .notification_widget.active,
  10960. .open > .dropdown-toggle.notification_widget {
  10961. background-image: none;
  10962. }
  10963. .notification_widget.disabled:hover,
  10964. .notification_widget[disabled]:hover,
  10965. fieldset[disabled] .notification_widget:hover,
  10966. .notification_widget.disabled:focus,
  10967. .notification_widget[disabled]:focus,
  10968. fieldset[disabled] .notification_widget:focus,
  10969. .notification_widget.disabled.focus,
  10970. .notification_widget[disabled].focus,
  10971. fieldset[disabled] .notification_widget.focus {
  10972. background-color: #fff;
  10973. border-color: #ccc;
  10974. }
  10975. .notification_widget .badge {
  10976. color: #fff;
  10977. background-color: #333;
  10978. }
  10979. .notification_widget.warning {
  10980. color: #fff;
  10981. background-color: #f0ad4e;
  10982. border-color: #eea236;
  10983. }
  10984. .notification_widget.warning:focus,
  10985. .notification_widget.warning.focus {
  10986. color: #fff;
  10987. background-color: #ec971f;
  10988. border-color: #985f0d;
  10989. }
  10990. .notification_widget.warning:hover {
  10991. color: #fff;
  10992. background-color: #ec971f;
  10993. border-color: #d58512;
  10994. }
  10995. .notification_widget.warning:active,
  10996. .notification_widget.warning.active,
  10997. .open > .dropdown-toggle.notification_widget.warning {
  10998. color: #fff;
  10999. background-color: #ec971f;
  11000. border-color: #d58512;
  11001. }
  11002. .notification_widget.warning:active:hover,
  11003. .notification_widget.warning.active:hover,
  11004. .open > .dropdown-toggle.notification_widget.warning:hover,
  11005. .notification_widget.warning:active:focus,
  11006. .notification_widget.warning.active:focus,
  11007. .open > .dropdown-toggle.notification_widget.warning:focus,
  11008. .notification_widget.warning:active.focus,
  11009. .notification_widget.warning.active.focus,
  11010. .open > .dropdown-toggle.notification_widget.warning.focus {
  11011. color: #fff;
  11012. background-color: #d58512;
  11013. border-color: #985f0d;
  11014. }
  11015. .notification_widget.warning:active,
  11016. .notification_widget.warning.active,
  11017. .open > .dropdown-toggle.notification_widget.warning {
  11018. background-image: none;
  11019. }
  11020. .notification_widget.warning.disabled:hover,
  11021. .notification_widget.warning[disabled]:hover,
  11022. fieldset[disabled] .notification_widget.warning:hover,
  11023. .notification_widget.warning.disabled:focus,
  11024. .notification_widget.warning[disabled]:focus,
  11025. fieldset[disabled] .notification_widget.warning:focus,
  11026. .notification_widget.warning.disabled.focus,
  11027. .notification_widget.warning[disabled].focus,
  11028. fieldset[disabled] .notification_widget.warning.focus {
  11029. background-color: #f0ad4e;
  11030. border-color: #eea236;
  11031. }
  11032. .notification_widget.warning .badge {
  11033. color: #f0ad4e;
  11034. background-color: #fff;
  11035. }
  11036. .notification_widget.success {
  11037. color: #fff;
  11038. background-color: #5cb85c;
  11039. border-color: #4cae4c;
  11040. }
  11041. .notification_widget.success:focus,
  11042. .notification_widget.success.focus {
  11043. color: #fff;
  11044. background-color: #449d44;
  11045. border-color: #255625;
  11046. }
  11047. .notification_widget.success:hover {
  11048. color: #fff;
  11049. background-color: #449d44;
  11050. border-color: #398439;
  11051. }
  11052. .notification_widget.success:active,
  11053. .notification_widget.success.active,
  11054. .open > .dropdown-toggle.notification_widget.success {
  11055. color: #fff;
  11056. background-color: #449d44;
  11057. border-color: #398439;
  11058. }
  11059. .notification_widget.success:active:hover,
  11060. .notification_widget.success.active:hover,
  11061. .open > .dropdown-toggle.notification_widget.success:hover,
  11062. .notification_widget.success:active:focus,
  11063. .notification_widget.success.active:focus,
  11064. .open > .dropdown-toggle.notification_widget.success:focus,
  11065. .notification_widget.success:active.focus,
  11066. .notification_widget.success.active.focus,
  11067. .open > .dropdown-toggle.notification_widget.success.focus {
  11068. color: #fff;
  11069. background-color: #398439;
  11070. border-color: #255625;
  11071. }
  11072. .notification_widget.success:active,
  11073. .notification_widget.success.active,
  11074. .open > .dropdown-toggle.notification_widget.success {
  11075. background-image: none;
  11076. }
  11077. .notification_widget.success.disabled:hover,
  11078. .notification_widget.success[disabled]:hover,
  11079. fieldset[disabled] .notification_widget.success:hover,
  11080. .notification_widget.success.disabled:focus,
  11081. .notification_widget.success[disabled]:focus,
  11082. fieldset[disabled] .notification_widget.success:focus,
  11083. .notification_widget.success.disabled.focus,
  11084. .notification_widget.success[disabled].focus,
  11085. fieldset[disabled] .notification_widget.success.focus {
  11086. background-color: #5cb85c;
  11087. border-color: #4cae4c;
  11088. }
  11089. .notification_widget.success .badge {
  11090. color: #5cb85c;
  11091. background-color: #fff;
  11092. }
  11093. .notification_widget.info {
  11094. color: #fff;
  11095. background-color: #5bc0de;
  11096. border-color: #46b8da;
  11097. }
  11098. .notification_widget.info:focus,
  11099. .notification_widget.info.focus {
  11100. color: #fff;
  11101. background-color: #31b0d5;
  11102. border-color: #1b6d85;
  11103. }
  11104. .notification_widget.info:hover {
  11105. color: #fff;
  11106. background-color: #31b0d5;
  11107. border-color: #269abc;
  11108. }
  11109. .notification_widget.info:active,
  11110. .notification_widget.info.active,
  11111. .open > .dropdown-toggle.notification_widget.info {
  11112. color: #fff;
  11113. background-color: #31b0d5;
  11114. border-color: #269abc;
  11115. }
  11116. .notification_widget.info:active:hover,
  11117. .notification_widget.info.active:hover,
  11118. .open > .dropdown-toggle.notification_widget.info:hover,
  11119. .notification_widget.info:active:focus,
  11120. .notification_widget.info.active:focus,
  11121. .open > .dropdown-toggle.notification_widget.info:focus,
  11122. .notification_widget.info:active.focus,
  11123. .notification_widget.info.active.focus,
  11124. .open > .dropdown-toggle.notification_widget.info.focus {
  11125. color: #fff;
  11126. background-color: #269abc;
  11127. border-color: #1b6d85;
  11128. }
  11129. .notification_widget.info:active,
  11130. .notification_widget.info.active,
  11131. .open > .dropdown-toggle.notification_widget.info {
  11132. background-image: none;
  11133. }
  11134. .notification_widget.info.disabled:hover,
  11135. .notification_widget.info[disabled]:hover,
  11136. fieldset[disabled] .notification_widget.info:hover,
  11137. .notification_widget.info.disabled:focus,
  11138. .notification_widget.info[disabled]:focus,
  11139. fieldset[disabled] .notification_widget.info:focus,
  11140. .notification_widget.info.disabled.focus,
  11141. .notification_widget.info[disabled].focus,
  11142. fieldset[disabled] .notification_widget.info.focus {
  11143. background-color: #5bc0de;
  11144. border-color: #46b8da;
  11145. }
  11146. .notification_widget.info .badge {
  11147. color: #5bc0de;
  11148. background-color: #fff;
  11149. }
  11150. .notification_widget.danger {
  11151. color: #fff;
  11152. background-color: #d9534f;
  11153. border-color: #d43f3a;
  11154. }
  11155. .notification_widget.danger:focus,
  11156. .notification_widget.danger.focus {
  11157. color: #fff;
  11158. background-color: #c9302c;
  11159. border-color: #761c19;
  11160. }
  11161. .notification_widget.danger:hover {
  11162. color: #fff;
  11163. background-color: #c9302c;
  11164. border-color: #ac2925;
  11165. }
  11166. .notification_widget.danger:active,
  11167. .notification_widget.danger.active,
  11168. .open > .dropdown-toggle.notification_widget.danger {
  11169. color: #fff;
  11170. background-color: #c9302c;
  11171. border-color: #ac2925;
  11172. }
  11173. .notification_widget.danger:active:hover,
  11174. .notification_widget.danger.active:hover,
  11175. .open > .dropdown-toggle.notification_widget.danger:hover,
  11176. .notification_widget.danger:active:focus,
  11177. .notification_widget.danger.active:focus,
  11178. .open > .dropdown-toggle.notification_widget.danger:focus,
  11179. .notification_widget.danger:active.focus,
  11180. .notification_widget.danger.active.focus,
  11181. .open > .dropdown-toggle.notification_widget.danger.focus {
  11182. color: #fff;
  11183. background-color: #ac2925;
  11184. border-color: #761c19;
  11185. }
  11186. .notification_widget.danger:active,
  11187. .notification_widget.danger.active,
  11188. .open > .dropdown-toggle.notification_widget.danger {
  11189. background-image: none;
  11190. }
  11191. .notification_widget.danger.disabled:hover,
  11192. .notification_widget.danger[disabled]:hover,
  11193. fieldset[disabled] .notification_widget.danger:hover,
  11194. .notification_widget.danger.disabled:focus,
  11195. .notification_widget.danger[disabled]:focus,
  11196. fieldset[disabled] .notification_widget.danger:focus,
  11197. .notification_widget.danger.disabled.focus,
  11198. .notification_widget.danger[disabled].focus,
  11199. fieldset[disabled] .notification_widget.danger.focus {
  11200. background-color: #d9534f;
  11201. border-color: #d43f3a;
  11202. }
  11203. .notification_widget.danger .badge {
  11204. color: #d9534f;
  11205. background-color: #fff;
  11206. }
  11207. div#pager {
  11208. background-color: #fff;
  11209. font-size: 14px;
  11210. line-height: 20px;
  11211. overflow: hidden;
  11212. display: none;
  11213. position: fixed;
  11214. bottom: 0px;
  11215. width: 100%;
  11216. max-height: 50%;
  11217. padding-top: 8px;
  11218. -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  11219. box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  11220. /* Display over codemirror */
  11221. z-index: 100;
  11222. /* Hack which prevents jquery ui resizable from changing top. */
  11223. top: auto !important;
  11224. }
  11225. div#pager pre {
  11226. line-height: 1.21429em;
  11227. color: #000;
  11228. background-color: #f7f7f7;
  11229. padding: 0.4em;
  11230. }
  11231. div#pager #pager-button-area {
  11232. position: absolute;
  11233. top: 8px;
  11234. right: 20px;
  11235. }
  11236. div#pager #pager-contents {
  11237. position: relative;
  11238. overflow: auto;
  11239. width: 100%;
  11240. height: 100%;
  11241. }
  11242. div#pager #pager-contents #pager-container {
  11243. position: relative;
  11244. padding: 15px 0px;
  11245. box-sizing: border-box;
  11246. -moz-box-sizing: border-box;
  11247. -webkit-box-sizing: border-box;
  11248. }
  11249. div#pager .ui-resizable-handle {
  11250. top: 0px;
  11251. height: 8px;
  11252. background: #f7f7f7;
  11253. border-top: 1px solid #cfcfcf;
  11254. border-bottom: 1px solid #cfcfcf;
  11255. /* This injects handle bars (a short, wide = symbol) for
  11256. the resize handle. */
  11257. }
  11258. div#pager .ui-resizable-handle::after {
  11259. content: '';
  11260. top: 2px;
  11261. left: 50%;
  11262. height: 3px;
  11263. width: 30px;
  11264. margin-left: -15px;
  11265. position: absolute;
  11266. border-top: 1px solid #cfcfcf;
  11267. }
  11268. .quickhelp {
  11269. /* Old browsers */
  11270. display: -webkit-box;
  11271. -webkit-box-orient: horizontal;
  11272. -webkit-box-align: stretch;
  11273. display: -moz-box;
  11274. -moz-box-orient: horizontal;
  11275. -moz-box-align: stretch;
  11276. display: box;
  11277. box-orient: horizontal;
  11278. box-align: stretch;
  11279. /* Modern browsers */
  11280. display: flex;
  11281. flex-direction: row;
  11282. align-items: stretch;
  11283. line-height: 1.8em;
  11284. }
  11285. .shortcut_key {
  11286. display: inline-block;
  11287. width: 20ex;
  11288. text-align: right;
  11289. font-family: monospace;
  11290. }
  11291. .shortcut_descr {
  11292. display: inline-block;
  11293. /* Old browsers */
  11294. -webkit-box-flex: 1;
  11295. -moz-box-flex: 1;
  11296. box-flex: 1;
  11297. /* Modern browsers */
  11298. flex: 1;
  11299. }
  11300. span.save_widget {
  11301. margin-top: 6px;
  11302. }
  11303. span.save_widget span.filename {
  11304. height: 1em;
  11305. line-height: 1em;
  11306. padding: 3px;
  11307. margin-left: 16px;
  11308. border: none;
  11309. font-size: 146.5%;
  11310. border-radius: 2px;
  11311. }
  11312. span.save_widget span.filename:hover {
  11313. background-color: #e6e6e6;
  11314. }
  11315. span.checkpoint_status,
  11316. span.autosave_status {
  11317. font-size: small;
  11318. }
  11319. @media (max-width: 767px) {
  11320. span.save_widget {
  11321. font-size: small;
  11322. }
  11323. span.checkpoint_status,
  11324. span.autosave_status {
  11325. display: none;
  11326. }
  11327. }
  11328. @media (min-width: 768px) and (max-width: 991px) {
  11329. span.checkpoint_status {
  11330. display: none;
  11331. }
  11332. span.autosave_status {
  11333. font-size: x-small;
  11334. }
  11335. }
  11336. .toolbar {
  11337. padding: 0px;
  11338. margin-left: -5px;
  11339. margin-top: 2px;
  11340. margin-bottom: 5px;
  11341. box-sizing: border-box;
  11342. -moz-box-sizing: border-box;
  11343. -webkit-box-sizing: border-box;
  11344. }
  11345. .toolbar select,
  11346. .toolbar label {
  11347. width: auto;
  11348. vertical-align: middle;
  11349. margin-right: 2px;
  11350. margin-bottom: 0px;
  11351. display: inline;
  11352. font-size: 92%;
  11353. margin-left: 0.3em;
  11354. margin-right: 0.3em;
  11355. padding: 0px;
  11356. padding-top: 3px;
  11357. }
  11358. .toolbar .btn {
  11359. padding: 2px 8px;
  11360. }
  11361. .toolbar .btn-group {
  11362. margin-top: 0px;
  11363. margin-left: 5px;
  11364. }
  11365. #maintoolbar {
  11366. margin-bottom: -3px;
  11367. margin-top: -8px;
  11368. border: 0px;
  11369. min-height: 27px;
  11370. margin-left: 0px;
  11371. padding-top: 11px;
  11372. padding-bottom: 3px;
  11373. }
  11374. #maintoolbar .navbar-text {
  11375. float: none;
  11376. vertical-align: middle;
  11377. text-align: right;
  11378. margin-left: 5px;
  11379. margin-right: 0px;
  11380. margin-top: 0px;
  11381. }
  11382. .select-xs {
  11383. height: 24px;
  11384. }
  11385. .pulse,
  11386. .dropdown-menu > li > a.pulse,
  11387. li.pulse > a.dropdown-toggle,
  11388. li.pulse.open > a.dropdown-toggle {
  11389. background-color: #F37626;
  11390. color: white;
  11391. }
  11392. /**
  11393. * Primary styles
  11394. *
  11395. * Author: Jupyter Development Team
  11396. */
  11397. /** WARNING IF YOU ARE EDITTING THIS FILE, if this is a .css file, It has a lot
  11398. * of chance of beeing generated from the ../less/[samename].less file, you can
  11399. * try to get back the less file by reverting somme commit in history
  11400. **/
  11401. /*
  11402. * We'll try to get something pretty, so we
  11403. * have some strange css to have the scroll bar on
  11404. * the left with fix button on the top right of the tooltip
  11405. */
  11406. @-moz-keyframes fadeOut {
  11407. from {
  11408. opacity: 1;
  11409. }
  11410. to {
  11411. opacity: 0;
  11412. }
  11413. }
  11414. @-webkit-keyframes fadeOut {
  11415. from {
  11416. opacity: 1;
  11417. }
  11418. to {
  11419. opacity: 0;
  11420. }
  11421. }
  11422. @-moz-keyframes fadeIn {
  11423. from {
  11424. opacity: 0;
  11425. }
  11426. to {
  11427. opacity: 1;
  11428. }
  11429. }
  11430. @-webkit-keyframes fadeIn {
  11431. from {
  11432. opacity: 0;
  11433. }
  11434. to {
  11435. opacity: 1;
  11436. }
  11437. }
  11438. /*properties of tooltip after "expand"*/
  11439. .bigtooltip {
  11440. overflow: auto;
  11441. height: 200px;
  11442. -webkit-transition-property: height;
  11443. -webkit-transition-duration: 500ms;
  11444. -moz-transition-property: height;
  11445. -moz-transition-duration: 500ms;
  11446. transition-property: height;
  11447. transition-duration: 500ms;
  11448. }
  11449. /*properties of tooltip before "expand"*/
  11450. .smalltooltip {
  11451. -webkit-transition-property: height;
  11452. -webkit-transition-duration: 500ms;
  11453. -moz-transition-property: height;
  11454. -moz-transition-duration: 500ms;
  11455. transition-property: height;
  11456. transition-duration: 500ms;
  11457. text-overflow: ellipsis;
  11458. overflow: hidden;
  11459. height: 80px;
  11460. }
  11461. .tooltipbuttons {
  11462. position: absolute;
  11463. padding-right: 15px;
  11464. top: 0px;
  11465. right: 0px;
  11466. }
  11467. .tooltiptext {
  11468. /*avoid the button to overlap on some docstring*/
  11469. padding-right: 30px;
  11470. }
  11471. .ipython_tooltip {
  11472. max-width: 700px;
  11473. /*fade-in animation when inserted*/
  11474. -webkit-animation: fadeOut 400ms;
  11475. -moz-animation: fadeOut 400ms;
  11476. animation: fadeOut 400ms;
  11477. -webkit-animation: fadeIn 400ms;
  11478. -moz-animation: fadeIn 400ms;
  11479. animation: fadeIn 400ms;
  11480. vertical-align: middle;
  11481. background-color: #f7f7f7;
  11482. overflow: visible;
  11483. border: #ababab 1px solid;
  11484. outline: none;
  11485. padding: 3px;
  11486. margin: 0px;
  11487. padding-left: 7px;
  11488. font-family: monospace;
  11489. min-height: 50px;
  11490. -moz-box-shadow: 0px 6px 10px -1px #adadad;
  11491. -webkit-box-shadow: 0px 6px 10px -1px #adadad;
  11492. box-shadow: 0px 6px 10px -1px #adadad;
  11493. border-radius: 2px;
  11494. position: absolute;
  11495. z-index: 1000;
  11496. }
  11497. .ipython_tooltip a {
  11498. float: right;
  11499. }
  11500. .ipython_tooltip .tooltiptext pre {
  11501. border: 0;
  11502. border-radius: 0;
  11503. font-size: 100%;
  11504. background-color: #f7f7f7;
  11505. }
  11506. .pretooltiparrow {
  11507. left: 0px;
  11508. margin: 0px;
  11509. top: -16px;
  11510. width: 40px;
  11511. height: 16px;
  11512. overflow: hidden;
  11513. position: absolute;
  11514. }
  11515. .pretooltiparrow:before {
  11516. background-color: #f7f7f7;
  11517. border: 1px #ababab solid;
  11518. z-index: 11;
  11519. content: "";
  11520. position: absolute;
  11521. left: 15px;
  11522. top: 10px;
  11523. width: 25px;
  11524. height: 25px;
  11525. -webkit-transform: rotate(45deg);
  11526. -moz-transform: rotate(45deg);
  11527. -ms-transform: rotate(45deg);
  11528. -o-transform: rotate(45deg);
  11529. }
  11530. ul.typeahead-list i {
  11531. margin-left: -10px;
  11532. width: 18px;
  11533. }
  11534. ul.typeahead-list {
  11535. max-height: 80vh;
  11536. overflow: auto;
  11537. }
  11538. ul.typeahead-list > li > a {
  11539. /** Firefox bug **/
  11540. /* see https://github.com/jupyter/notebook/issues/559 */
  11541. white-space: normal;
  11542. }
  11543. .cmd-palette .modal-body {
  11544. padding: 7px;
  11545. }
  11546. .cmd-palette form {
  11547. background: white;
  11548. }
  11549. .cmd-palette input {
  11550. outline: none;
  11551. }
  11552. .no-shortcut {
  11553. display: none;
  11554. }
  11555. .command-shortcut:before {
  11556. content: "(command)";
  11557. padding-right: 3px;
  11558. color: #777777;
  11559. }
  11560. .edit-shortcut:before {
  11561. content: "(edit)";
  11562. padding-right: 3px;
  11563. color: #777777;
  11564. }
  11565. #find-and-replace #replace-preview .match,
  11566. #find-and-replace #replace-preview .insert {
  11567. background-color: #BBDEFB;
  11568. border-color: #90CAF9;
  11569. border-style: solid;
  11570. border-width: 1px;
  11571. border-radius: 0px;
  11572. }
  11573. #find-and-replace #replace-preview .replace .match {
  11574. background-color: #FFCDD2;
  11575. border-color: #EF9A9A;
  11576. border-radius: 0px;
  11577. }
  11578. #find-and-replace #replace-preview .replace .insert {
  11579. background-color: #C8E6C9;
  11580. border-color: #A5D6A7;
  11581. border-radius: 0px;
  11582. }
  11583. #find-and-replace #replace-preview {
  11584. max-height: 60vh;
  11585. overflow: auto;
  11586. }
  11587. #find-and-replace #replace-preview pre {
  11588. padding: 5px 10px;
  11589. }
  11590. .terminal-app {
  11591. background: #EEE;
  11592. }
  11593. .terminal-app #header {
  11594. background: #fff;
  11595. -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  11596. box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  11597. }
  11598. .terminal-app .terminal {
  11599. float: left;
  11600. font-family: monospace;
  11601. color: white;
  11602. background: black;
  11603. padding: 0.4em;
  11604. border-radius: 2px;
  11605. -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.4);
  11606. box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.4);
  11607. }
  11608. .terminal-app .terminal,
  11609. .terminal-app .terminal dummy-screen {
  11610. line-height: 1em;
  11611. font-size: 14px;
  11612. }
  11613. .terminal-app .terminal-cursor {
  11614. color: black;
  11615. background: white;
  11616. }
  11617. .terminal-app #terminado-container {
  11618. margin-top: 20px;
  11619. }
  11620. /*# sourceMappingURL=style.min.css.map */
  11621. </style>
  11622. <style type="text/css">
  11623. .highlight .hll { background-color: #ffffcc }
  11624. .highlight { background: #f8f8f8; }
  11625. .highlight .c { color: #408080; font-style: italic } /* Comment */
  11626. .highlight .err { border: 1px solid #FF0000 } /* Error */
  11627. .highlight .k { color: #008000; font-weight: bold } /* Keyword */
  11628. .highlight .o { color: #666666 } /* Operator */
  11629. .highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
  11630. .highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
  11631. .highlight .cp { color: #BC7A00 } /* Comment.Preproc */
  11632. .highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
  11633. .highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
  11634. .highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
  11635. .highlight .gd { color: #A00000 } /* Generic.Deleted */
  11636. .highlight .ge { font-style: italic } /* Generic.Emph */
  11637. .highlight .gr { color: #FF0000 } /* Generic.Error */
  11638. .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
  11639. .highlight .gi { color: #00A000 } /* Generic.Inserted */
  11640. .highlight .go { color: #888888 } /* Generic.Output */
  11641. .highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
  11642. .highlight .gs { font-weight: bold } /* Generic.Strong */
  11643. .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
  11644. .highlight .gt { color: #0044DD } /* Generic.Traceback */
  11645. .highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
  11646. .highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
  11647. .highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
  11648. .highlight .kp { color: #008000 } /* Keyword.Pseudo */
  11649. .highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
  11650. .highlight .kt { color: #B00040 } /* Keyword.Type */
  11651. .highlight .m { color: #666666 } /* Literal.Number */
  11652. .highlight .s { color: #BA2121 } /* Literal.String */
  11653. .highlight .na { color: #7D9029 } /* Name.Attribute */
  11654. .highlight .nb { color: #008000 } /* Name.Builtin */
  11655. .highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
  11656. .highlight .no { color: #880000 } /* Name.Constant */
  11657. .highlight .nd { color: #AA22FF } /* Name.Decorator */
  11658. .highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
  11659. .highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
  11660. .highlight .nf { color: #0000FF } /* Name.Function */
  11661. .highlight .nl { color: #A0A000 } /* Name.Label */
  11662. .highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
  11663. .highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
  11664. .highlight .nv { color: #19177C } /* Name.Variable */
  11665. .highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
  11666. .highlight .w { color: #bbbbbb } /* Text.Whitespace */
  11667. .highlight .mb { color: #666666 } /* Literal.Number.Bin */
  11668. .highlight .mf { color: #666666 } /* Literal.Number.Float */
  11669. .highlight .mh { color: #666666 } /* Literal.Number.Hex */
  11670. .highlight .mi { color: #666666 } /* Literal.Number.Integer */
  11671. .highlight .mo { color: #666666 } /* Literal.Number.Oct */
  11672. .highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
  11673. .highlight .sc { color: #BA2121 } /* Literal.String.Char */
  11674. .highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
  11675. .highlight .s2 { color: #BA2121 } /* Literal.String.Double */
  11676. .highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
  11677. .highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
  11678. .highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
  11679. .highlight .sx { color: #008000 } /* Literal.String.Other */
  11680. .highlight .sr { color: #BB6688 } /* Literal.String.Regex */
  11681. .highlight .s1 { color: #BA2121 } /* Literal.String.Single */
  11682. .highlight .ss { color: #19177C } /* Literal.String.Symbol */
  11683. .highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
  11684. .highlight .vc { color: #19177C } /* Name.Variable.Class */
  11685. .highlight .vg { color: #19177C } /* Name.Variable.Global */
  11686. .highlight .vi { color: #19177C } /* Name.Variable.Instance */
  11687. .highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
  11688. </style>
  11689. <style type="text/css">
  11690. /* Temporary definitions which will become obsolete with Notebook release 5.0 */
  11691. .ansi-black-fg { color: #3E424D; }
  11692. .ansi-black-bg { background-color: #3E424D; }
  11693. .ansi-black-intense-fg { color: #282C36; }
  11694. .ansi-black-intense-bg { background-color: #282C36; }
  11695. .ansi-red-fg { color: #E75C58; }
  11696. .ansi-red-bg { background-color: #E75C58; }
  11697. .ansi-red-intense-fg { color: #B22B31; }
  11698. .ansi-red-intense-bg { background-color: #B22B31; }
  11699. .ansi-green-fg { color: #00A250; }
  11700. .ansi-green-bg { background-color: #00A250; }
  11701. .ansi-green-intense-fg { color: #007427; }
  11702. .ansi-green-intense-bg { background-color: #007427; }
  11703. .ansi-yellow-fg { color: #DDB62B; }
  11704. .ansi-yellow-bg { background-color: #DDB62B; }
  11705. .ansi-yellow-intense-fg { color: #B27D12; }
  11706. .ansi-yellow-intense-bg { background-color: #B27D12; }
  11707. .ansi-blue-fg { color: #208FFB; }
  11708. .ansi-blue-bg { background-color: #208FFB; }
  11709. .ansi-blue-intense-fg { color: #0065CA; }
  11710. .ansi-blue-intense-bg { background-color: #0065CA; }
  11711. .ansi-magenta-fg { color: #D160C4; }
  11712. .ansi-magenta-bg { background-color: #D160C4; }
  11713. .ansi-magenta-intense-fg { color: #A03196; }
  11714. .ansi-magenta-intense-bg { background-color: #A03196; }
  11715. .ansi-cyan-fg { color: #60C6C8; }
  11716. .ansi-cyan-bg { background-color: #60C6C8; }
  11717. .ansi-cyan-intense-fg { color: #258F8F; }
  11718. .ansi-cyan-intense-bg { background-color: #258F8F; }
  11719. .ansi-white-fg { color: #C5C1B4; }
  11720. .ansi-white-bg { background-color: #C5C1B4; }
  11721. .ansi-white-intense-fg { color: #A1A6B2; }
  11722. .ansi-white-intense-bg { background-color: #A1A6B2; }
  11723. .ansi-bold { font-weight: bold; }
  11724. </style>
  11725. <style type="text/css">
  11726. /* Overrides of notebook CSS for static HTML export */
  11727. .reveal {
  11728. font-size: 160%;
  11729. overflow-y: scroll;
  11730. }
  11731. .reveal pre {
  11732. width: inherit;
  11733. padding: 0.4em;
  11734. margin: 0px;
  11735. font-family: monospace, sans-serif;
  11736. font-size: 80%;
  11737. box-shadow: 0px 0px 0px rgba(0, 0, 0, 0);
  11738. }
  11739. .reveal pre code {
  11740. padding: 0px;
  11741. }
  11742. .reveal section img {
  11743. border: 0px solid black;
  11744. box-shadow: 0 0 10px rgba(0, 0, 0, 0);
  11745. }
  11746. .reveal i {
  11747. font-style: normal;
  11748. font-family: FontAwesome;
  11749. font-size: 2em;
  11750. }
  11751. .reveal .slides {
  11752. text-align: left;
  11753. }
  11754. .reveal.fade {
  11755. opacity: 1;
  11756. }
  11757. .reveal .progress {
  11758. position: static;
  11759. }
  11760. div.input_area {
  11761. padding: 0.06em;
  11762. }
  11763. div.code_cell {
  11764. background-color: transparent;
  11765. }
  11766. div.prompt {
  11767. width: 11ex;
  11768. padding: 0.4em;
  11769. margin: 0px;
  11770. font-family: monospace, sans-serif;
  11771. font-size: 80%;
  11772. text-align: right;
  11773. }
  11774. div.output_area pre {
  11775. font-family: monospace, sans-serif;
  11776. font-size: 80%;
  11777. }
  11778. div.output_prompt {
  11779. /* 5px right shift to account for margin in parent container */
  11780. margin: 5px 5px 0 0;
  11781. }
  11782. div.text_cell.rendered .rendered_html {
  11783. /* The H1 height seems miscalculated, we are just hidding the scrollbar */
  11784. overflow-y: hidden;
  11785. }
  11786. a.anchor-link {
  11787. /* There is still an anchor, we are only hidding it */
  11788. display: none;
  11789. }
  11790. .rendered_html p {
  11791. text-align: inherit;
  11792. }
  11793. </style>
  11794. <!-- Custom stylesheet, it must be in the same directory as the html file -->
  11795. <link rel="stylesheet" href="custom.css">
  11796. </head>
  11797. <body>
  11798. <div class="reveal">
  11799. <div class="slides">
  11800. <section><section>
  11801. <div class="cell border-box-sizing text_cell rendered">
  11802. <div class="prompt input_prompt">
  11803. </div>
  11804. <div class="inner_cell">
  11805. <div class="text_cell_render border-box-sizing rendered_html">
  11806. <h1 id="7-Reasons-Why-I-&lt;3-Python">7 Reasons Why I &lt;3 Python<a class="anchor-link" href="#7-Reasons-Why-I-&lt;3-Python">&#182;</a></h1><p><img src="assets/8324418418_fd96aa2a4d_z.jpg"/>
  11807. <!-- https://www.flickr.com/photos/46990836@N03/8324418418/in/photolist-dFAPzu-84UDhW-5GLqRK-5GLmmH-5GQPgy-dHWLKu-nko93Q-ssYxi-iTzLxq-eFFN1v-9BiGdV-rnkoGd-nkoP4z-5MazPG-6xS62e-nvGUoC-kE4q4E-anVJs5-5GQFnq-nkowMh-qTy55d-8kFagv-nkonHf-puxpDp-5GLnzc-3LV5nd-pXGaMS-5GQDKL-Jvujy-netUoC-5GLoUZ-6TnLfc-dABayk-bW2VvT-23GScN-bGyDM-5WwnHr-5BBcoR-csNGwL-e8TK7k-5GQEJs-9pnCNb-nkohSJ-dFvpe6-9kiSMS-7jnd94-7iPM12-5pstA5-j8TwuU-5GLzbr --></p>
  11808. <h2 id="Keith-Maull-/-Sep.-14,-2016-/-Galvanize-gSchool-Boulder">Keith Maull / Sep. 14, 2016 / Galvanize gSchool Boulder<a class="anchor-link" href="#Keith-Maull-/-Sep.-14,-2016-/-Galvanize-gSchool-Boulder">&#182;</a></h2>
  11809. </div>
  11810. </div>
  11811. </div></section></section><section><section>
  11812. <div class="cell border-box-sizing text_cell rendered">
  11813. <div class="prompt input_prompt">
  11814. </div>
  11815. <div class="inner_cell">
  11816. <div class="text_cell_render border-box-sizing rendered_html">
  11817. <h1 id="1.-It-is-beautiful,-clean-and-precise">1. It is beautiful, clean and precise<a class="anchor-link" href="#1.-It-is-beautiful,-clean-and-precise">&#182;</a></h1><p><img src="assets/3717019943_7e6637b322_z.jpg"/>
  11818. <!-- https://www.flickr.com/photos/noodlefish/3717019943/in/photolist-fCfsFK-8skXjU-nAUYLu-7MVBXq-6poidm-8MMFdC-PMWrY-JMkZD-fCfsJP-2NKdk6-2Vft6H-af65YT-4SaCFj-5zx1T8-9W5SpL-JMm14-6h4SR1-qFsmnC-4R4PwH-5KvWdE-addunC-48RV8J-d2P53q-2gptSR-JMkZB-hDuYtP-8FsTtq-dWVKso-JMm12-f4iCPs-6EsGwK-32PBax-f6W9iS-6EsFHi-f6mxBd-fCfsFH-f67gX6-8QjEFY-6Hsb4o-6EwSXQ-JMiD6-5FtQ8z-2gucC1-2gpjV6-2gptUX-3cAS3L-f67gpg-5b4bYW-nRmMYh-nVbCtZ
  11819. --></p>
  11820. </div>
  11821. </div>
  11822. </div></section><section>
  11823. <div class="cell border-box-sizing code_cell rendered">
  11824. <div class="input">
  11825. <div class="prompt input_prompt">In&nbsp;[1]:</div>
  11826. <div class="inner_cell">
  11827. <div class="input_area">
  11828. <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">gcd</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">):</span>
  11829. <span class="k">while</span> <span class="n">b</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
  11830. <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="n">b</span><span class="p">,</span> <span class="n">a</span><span class="o">%</span><span class="k">b</span>
  11831. <span class="k">return</span> <span class="n">a</span>
  11832. <span class="n">tests</span> <span class="o">=</span> <span class="p">[(</span><span class="mi">216</span><span class="p">,</span><span class="mi">846</span><span class="p">),</span> <span class="p">(</span><span class="mi">1071</span><span class="p">,</span><span class="mi">462</span><span class="p">),</span> <span class="p">(</span><span class="mi">1024</span><span class="p">,</span><span class="mi">768</span><span class="p">)]</span>
  11833. <span class="k">for</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">tests</span><span class="p">:</span>
  11834. <span class="k">print</span><span class="p">(</span><span class="s2">&quot;The gcd of {} and {} is {}.&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">gcd</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">)))</span>
  11835. </pre></div>
  11836. </div>
  11837. </div>
  11838. </div>
  11839. <div class="output_wrapper">
  11840. <div class="output">
  11841. <div class="output_area"><div class="prompt"></div>
  11842. <div class="output_subarea output_stream output_stdout output_text">
  11843. <pre>The gcd of 216 and 846 is 18.
  11844. The gcd of 1071 and 462 is 21.
  11845. The gcd of 1024 and 768 is 256.
  11846. </pre>
  11847. </div>
  11848. </div>
  11849. </div>
  11850. </div>
  11851. </div></section><section>
  11852. <div class="cell border-box-sizing code_cell rendered">
  11853. <div class="input">
  11854. <div class="prompt input_prompt">In&nbsp;[2]:</div>
  11855. <div class="inner_cell">
  11856. <div class="input_area">
  11857. <div class=" highlight hl-ipython2"><pre><span></span><span class="k">if</span> <span class="mi">1</span> <span class="ow">and</span> <span class="bp">True</span><span class="p">:</span>
  11858. <span class="k">print</span><span class="p">(</span><span class="s2">&quot;1 and True is True&quot;</span><span class="p">)</span>
  11859. <span class="k">if</span> <span class="ow">not</span><span class="p">(</span><span class="mi">0</span> <span class="ow">or</span> <span class="bp">False</span><span class="p">):</span>
  11860. <span class="k">print</span><span class="p">(</span><span class="s2">&quot;0 or False is False&quot;</span><span class="p">)</span>
  11861. </pre></div>
  11862. </div>
  11863. </div>
  11864. </div>
  11865. <div class="output_wrapper">
  11866. <div class="output">
  11867. <div class="output_area"><div class="prompt"></div>
  11868. <div class="output_subarea output_stream output_stdout output_text">
  11869. <pre>1 and True is True
  11870. 0 or False is False
  11871. </pre>
  11872. </div>
  11873. </div>
  11874. </div>
  11875. </div>
  11876. </div></section><section>
  11877. <div class="cell border-box-sizing code_cell rendered">
  11878. <div class="input">
  11879. <div class="prompt input_prompt">In&nbsp;[3]:</div>
  11880. <div class="inner_cell">
  11881. <div class="input_area">
  11882. <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">outer</span><span class="p">(</span><span class="n">v1</span><span class="p">,</span> <span class="n">v2</span><span class="p">):</span>
  11883. <span class="c1"># defining a nested function</span>
  11884. <span class="k">def</span> <span class="nf">inner</span><span class="p">(</span><span class="n">iv1</span><span class="p">,</span> <span class="n">iv2</span><span class="p">):</span>
  11885. <span class="k">print</span><span class="p">(</span><span class="s2">&quot;Outer v1={}, Outer v2={}&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">v1</span><span class="p">,</span> <span class="n">v2</span><span class="p">))</span>
  11886. <span class="k">print</span><span class="p">(</span><span class="s2">&quot;Outer iv1={}, Outer iv2={}&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">iv1</span><span class="p">,</span> <span class="n">iv2</span><span class="p">))</span>
  11887. <span class="n">inner</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">)</span>
  11888. <span class="n">outer</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span>
  11889. </pre></div>
  11890. </div>
  11891. </div>
  11892. </div>
  11893. <div class="output_wrapper">
  11894. <div class="output">
  11895. <div class="output_area"><div class="prompt"></div>
  11896. <div class="output_subarea output_stream output_stdout output_text">
  11897. <pre>Outer v1=1, Outer v2=2
  11898. Outer iv1=3, Outer iv2=4
  11899. </pre>
  11900. </div>
  11901. </div>
  11902. </div>
  11903. </div>
  11904. </div></section></section><section><section>
  11905. <div class="cell border-box-sizing text_cell rendered">
  11906. <div class="prompt input_prompt">
  11907. </div>
  11908. <div class="inner_cell">
  11909. <div class="text_cell_render border-box-sizing rendered_html">
  11910. <h1 id="2.-Text-and-Strings-are-a-joy-to-work-with!">2. Text and Strings are a joy to work with!<a class="anchor-link" href="#2.-Text-and-Strings-are-a-joy-to-work-with!">&#182;</a></h1><p><img src="assets/157789902_ee3c6092b7_z.jpg"/>
  11911. <!-- https://www.flickr.com/photos/76283671@N00/157789902/in/photolist-eWHry-3p5xPR-9KvWoj-8EPNse-8hHfXJ-aDGD5X-74VGBk-5EA2Gw-8SUDFg-63S4Gn-8W6FV-8yXuVZ-8z1zM5-cQiWxu-8acKHx-avHUv6-FSeczR-aXRjnp-a66RN5-9wVi9p-Am2g-avLxeY-9o3Q7f-2YEhMQ-9fCbAN-4CkWu8-bXiwuY-92VoHu-bCbYXP-CaK6BB-mEpxvX-6Ctruz-axKSdr-3dBZ3f-52LLAo-52JqBR-s57ww-9WqcpG-2BM7qe-6mVdFd-bDKMrc-7eV4Lm-UMkAg-5ULJBL-ad2qsh-ayHw4M-a4weRB-aXTXwD-4Cqfzd-fBmx4 --></p>
  11912. </div>
  11913. </div>
  11914. </div></section><section>
  11915. <div class="cell border-box-sizing code_cell rendered">
  11916. <div class="input">
  11917. <div class="prompt input_prompt">In&nbsp;[4]:</div>
  11918. <div class="inner_cell">
  11919. <div class="input_area">
  11920. <div class=" highlight hl-ipython2"><pre><span></span><span class="n">lorem_text</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;</span>
  11921. <span class="s2">Lorem ipsum dolor sit amet, consectetur adipiscing elit. In sed iaculis sapien, vitae vestibulum nunc. Vivamus pharetra risus neque, ut iaculis elit porta non. Vivamus ullamcorper dolor sit amet sollicitudin vehicula. Aliquam quis tristique nibh, eget malesuada purus. Proin varius sollicitudin turpis, fermentum mollis elit cursus vel. Suspendisse vehicula enim ac magna consequat ultricies. Pellentesque in leo et nulla porta faucibus. Quisque tincidunt in erat ut commodo. Quisque id augue a nisl mollis pulvinar id at nulla. Morbi a augue erat. Sed pharetra molestie mauris nec ultricies. Pellentesque efficitur blandit mauris, sed vulputate ante bibendum eu. Nulla facilisi. Sed porta massa eu ligula tristique, nec hendrerit elit euismod. Phasellus luctus placerat facilisis.</span>
  11922. <span class="s2">&quot;&quot;&quot;</span>
  11923. <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">lorem_text</span><span class="o">.</span><span class="n">split</span><span class="p">():</span>
  11924. <span class="k">print</span> <span class="n">t</span>
  11925. </pre></div>
  11926. </div>
  11927. </div>
  11928. </div>
  11929. <div class="output_wrapper">
  11930. <div class="output">
  11931. <div class="output_area"><div class="prompt"></div>
  11932. <div class="output_subarea output_stream output_stdout output_text">
  11933. <pre>Lorem
  11934. ipsum
  11935. dolor
  11936. sit
  11937. amet,
  11938. consectetur
  11939. adipiscing
  11940. elit.
  11941. In
  11942. sed
  11943. iaculis
  11944. sapien,
  11945. vitae
  11946. vestibulum
  11947. nunc.
  11948. Vivamus
  11949. pharetra
  11950. risus
  11951. neque,
  11952. ut
  11953. iaculis
  11954. elit
  11955. porta
  11956. non.
  11957. Vivamus
  11958. ullamcorper
  11959. dolor
  11960. sit
  11961. amet
  11962. sollicitudin
  11963. vehicula.
  11964. Aliquam
  11965. quis
  11966. tristique
  11967. nibh,
  11968. eget
  11969. malesuada
  11970. purus.
  11971. Proin
  11972. varius
  11973. sollicitudin
  11974. turpis,
  11975. fermentum
  11976. mollis
  11977. elit
  11978. cursus
  11979. vel.
  11980. Suspendisse
  11981. vehicula
  11982. enim
  11983. ac
  11984. magna
  11985. consequat
  11986. ultricies.
  11987. Pellentesque
  11988. in
  11989. leo
  11990. et
  11991. nulla
  11992. porta
  11993. faucibus.
  11994. Quisque
  11995. tincidunt
  11996. in
  11997. erat
  11998. ut
  11999. commodo.
  12000. Quisque
  12001. id
  12002. augue
  12003. a
  12004. nisl
  12005. mollis
  12006. pulvinar
  12007. id
  12008. at
  12009. nulla.
  12010. Morbi
  12011. a
  12012. augue
  12013. erat.
  12014. Sed
  12015. pharetra
  12016. molestie
  12017. mauris
  12018. nec
  12019. ultricies.
  12020. Pellentesque
  12021. efficitur
  12022. blandit
  12023. mauris,
  12024. sed
  12025. vulputate
  12026. ante
  12027. bibendum
  12028. eu.
  12029. Nulla
  12030. facilisi.
  12031. Sed
  12032. porta
  12033. massa
  12034. eu
  12035. ligula
  12036. tristique,
  12037. nec
  12038. hendrerit
  12039. elit
  12040. euismod.
  12041. Phasellus
  12042. luctus
  12043. placerat
  12044. facilisis.
  12045. </pre>
  12046. </div>
  12047. </div>
  12048. </div>
  12049. </div>
  12050. </div></section><section>
  12051. <div class="cell border-box-sizing code_cell rendered">
  12052. <div class="input">
  12053. <div class="prompt input_prompt">In&nbsp;[5]:</div>
  12054. <div class="inner_cell">
  12055. <div class="input_area">
  12056. <div class=" highlight hl-ipython2"><pre><span></span><span class="k">for</span> <span class="n">w</span> <span class="ow">in</span> <span class="n">lorem_text</span><span class="o">.</span><span class="n">split</span><span class="p">():</span>
  12057. <span class="k">if</span> <span class="n">w</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">&#39;,&#39;</span><span class="p">,</span> <span class="s2">&quot;.&quot;</span><span class="p">]:</span>
  12058. <span class="k">print</span> <span class="n">w</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
  12059. <span class="k">else</span><span class="p">:</span>
  12060. <span class="k">print</span> <span class="n">w</span>
  12061. </pre></div>
  12062. </div>
  12063. </div>
  12064. </div>
  12065. <div class="output_wrapper">
  12066. <div class="output">
  12067. <div class="output_area"><div class="prompt"></div>
  12068. <div class="output_subarea output_stream output_stdout output_text">
  12069. <pre>Lorem
  12070. ipsum
  12071. dolor
  12072. sit
  12073. amet
  12074. consectetur
  12075. adipiscing
  12076. elit
  12077. In
  12078. sed
  12079. iaculis
  12080. sapien
  12081. vitae
  12082. vestibulum
  12083. nunc
  12084. Vivamus
  12085. pharetra
  12086. risus
  12087. neque
  12088. ut
  12089. iaculis
  12090. elit
  12091. porta
  12092. non
  12093. Vivamus
  12094. ullamcorper
  12095. dolor
  12096. sit
  12097. amet
  12098. sollicitudin
  12099. vehicula
  12100. Aliquam
  12101. quis
  12102. tristique
  12103. nibh
  12104. eget
  12105. malesuada
  12106. purus
  12107. Proin
  12108. varius
  12109. sollicitudin
  12110. turpis
  12111. fermentum
  12112. mollis
  12113. elit
  12114. cursus
  12115. vel
  12116. Suspendisse
  12117. vehicula
  12118. enim
  12119. ac
  12120. magna
  12121. consequat
  12122. ultricies
  12123. Pellentesque
  12124. in
  12125. leo
  12126. et
  12127. nulla
  12128. porta
  12129. faucibus
  12130. Quisque
  12131. tincidunt
  12132. in
  12133. erat
  12134. ut
  12135. commodo
  12136. Quisque
  12137. id
  12138. augue
  12139. a
  12140. nisl
  12141. mollis
  12142. pulvinar
  12143. id
  12144. at
  12145. nulla
  12146. Morbi
  12147. a
  12148. augue
  12149. erat
  12150. Sed
  12151. pharetra
  12152. molestie
  12153. mauris
  12154. nec
  12155. ultricies
  12156. Pellentesque
  12157. efficitur
  12158. blandit
  12159. mauris
  12160. sed
  12161. vulputate
  12162. ante
  12163. bibendum
  12164. eu
  12165. Nulla
  12166. facilisi
  12167. Sed
  12168. porta
  12169. massa
  12170. eu
  12171. ligula
  12172. tristique
  12173. nec
  12174. hendrerit
  12175. elit
  12176. euismod
  12177. Phasellus
  12178. luctus
  12179. placerat
  12180. facilisis
  12181. </pre>
  12182. </div>
  12183. </div>
  12184. </div>
  12185. </div>
  12186. </div></section><section>
  12187. <div class="cell border-box-sizing code_cell rendered">
  12188. <div class="input">
  12189. <div class="prompt input_prompt">In&nbsp;[6]:</div>
  12190. <div class="inner_cell">
  12191. <div class="input_area">
  12192. <div class=" highlight hl-ipython2"><pre><span></span><span class="k">for</span> <span class="n">w</span> <span class="ow">in</span> <span class="n">lorem_text</span><span class="o">.</span><span class="n">split</span><span class="p">()[:</span><span class="mi">5</span><span class="p">]:</span>
  12193. <span class="k">if</span> <span class="n">w</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">&#39;,&#39;</span><span class="p">,</span> <span class="s2">&quot;.&quot;</span><span class="p">]:</span>
  12194. <span class="k">print</span> <span class="n">w</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
  12195. <span class="k">else</span><span class="p">:</span>
  12196. <span class="k">print</span> <span class="n">w</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
  12197. </pre></div>
  12198. </div>
  12199. </div>
  12200. </div>
  12201. <div class="output_wrapper">
  12202. <div class="output">
  12203. <div class="output_area"><div class="prompt"></div>
  12204. <div class="output_subarea output_stream output_stdout output_text">
  12205. <pre>lorem
  12206. ipsum
  12207. dolor
  12208. sit
  12209. amet
  12210. </pre>
  12211. </div>
  12212. </div>
  12213. </div>
  12214. </div>
  12215. </div></section><section>
  12216. <div class="cell border-box-sizing code_cell rendered">
  12217. <div class="input">
  12218. <div class="prompt input_prompt">In&nbsp;[7]:</div>
  12219. <div class="inner_cell">
  12220. <div class="input_area">
  12221. <div class=" highlight hl-ipython2"><pre><span></span><span class="k">for</span> <span class="n">w</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="n">lorem_text</span><span class="o">.</span><span class="n">split</span><span class="p">()[:</span><span class="mi">5</span><span class="p">]):</span>
  12222. <span class="k">print</span> <span class="n">w</span>
  12223. </pre></div>
  12224. </div>
  12225. </div>
  12226. </div>
  12227. <div class="output_wrapper">
  12228. <div class="output">
  12229. <div class="output_area"><div class="prompt"></div>
  12230. <div class="output_subarea output_stream output_stdout output_text">
  12231. <pre>amet,
  12232. sit
  12233. dolor
  12234. ipsum
  12235. Lorem
  12236. </pre>
  12237. </div>
  12238. </div>
  12239. </div>
  12240. </div>
  12241. </div></section><section>
  12242. <div class="cell border-box-sizing code_cell rendered">
  12243. <div class="input">
  12244. <div class="prompt input_prompt">In&nbsp;[8]:</div>
  12245. <div class="inner_cell">
  12246. <div class="input_area">
  12247. <div class=" highlight hl-ipython2"><pre><span></span><span class="n">e_word_count</span> <span class="o">=</span> <span class="mi">0</span>
  12248. <span class="k">for</span> <span class="n">w</span> <span class="ow">in</span> <span class="n">lorem_text</span><span class="o">.</span><span class="n">split</span><span class="p">():</span>
  12249. <span class="k">if</span> <span class="s1">&#39;e&#39;</span> <span class="ow">in</span> <span class="n">w</span><span class="p">:</span>
  12250. <span class="n">e_word_count</span> <span class="o">+=</span> <span class="mi">1</span>
  12251. <span class="k">print</span> <span class="n">e_word_count</span>
  12252. </pre></div>
  12253. </div>
  12254. </div>
  12255. </div>
  12256. <div class="output_wrapper">
  12257. <div class="output">
  12258. <div class="output_area"><div class="prompt"></div>
  12259. <div class="output_subarea output_stream output_stdout output_text">
  12260. <pre>55
  12261. </pre>
  12262. </div>
  12263. </div>
  12264. </div>
  12265. </div>
  12266. </div></section><section>
  12267. <div class="cell border-box-sizing code_cell rendered">
  12268. <div class="input">
  12269. <div class="prompt input_prompt">In&nbsp;[9]:</div>
  12270. <div class="inner_cell">
  12271. <div class="input_area">
  12272. <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">lorem_clean_sample</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">):</span>
  12273. <span class="n">sample</span> <span class="o">=</span> <span class="p">[]</span>
  12274. <span class="k">for</span> <span class="n">w</span> <span class="ow">in</span> <span class="n">lorem_text</span><span class="o">.</span><span class="n">split</span><span class="p">()[</span><span class="n">start</span><span class="p">:</span><span class="n">end</span><span class="p">]:</span>
  12275. <span class="k">if</span> <span class="n">w</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">&#39;,&#39;</span><span class="p">,</span> <span class="s2">&quot;.&quot;</span><span class="p">]:</span>
  12276. <span class="n">sample</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">w</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
  12277. <span class="k">else</span><span class="p">:</span>
  12278. <span class="n">sample</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">w</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
  12279. <span class="k">return</span> <span class="n">sample</span>
  12280. </pre></div>
  12281. </div>
  12282. </div>
  12283. </div>
  12284. </div></section></section><section><section>
  12285. <div class="cell border-box-sizing text_cell rendered">
  12286. <div class="prompt input_prompt">
  12287. </div>
  12288. <div class="inner_cell">
  12289. <div class="text_cell_render border-box-sizing rendered_html">
  12290. <h1 id="3.-There-are-just-enough-data-types-to-get-started-...">3. There are just enough data types to get started ...<a class="anchor-link" href="#3.-There-are-just-enough-data-types-to-get-started-...">&#182;</a></h1><p><img src="assets/5009171128_22a32d98a1_z.jpg"/>
  12291. <!-- https://www.flickr.com/photos/mfatic/5009171128/in/photolist-8CDj4s-sv2cN-cHqD9-H82d2J-ee998U-bEg1kD-9objQt-7VXmyG-cAJyP-7Y7fTE-jDQKGR-HD7PEu-bSZHYz-8Am1VT-oRXevU-kzA4Gf-8kQchz-3omu6m-agcavR-6sBGoq-pHA4Hi-6FxhWP-dwp8YN-aiLJvD-fB7Kkw-ncoPxB-dp25WU-6pVCtc-m7vJRb-HZRrD9-cxJDVf-bu3h8-bdMe2V-ktakv4-dipJP9-cGTzWC-naBhMm-eKtpXn-6L69ux-fkNEmY-2jiSJA-HMK37d-yZAzzm-8VUF5f-wNAJr-9o6Q1M-8wRXZ7-dipLfC-8AYxxx-aEPqLh --></p>
  12292. </div>
  12293. </div>
  12294. </div></section><section>
  12295. <div class="cell border-box-sizing code_cell rendered">
  12296. <div class="input">
  12297. <div class="prompt input_prompt">In&nbsp;[10]:</div>
  12298. <div class="inner_cell">
  12299. <div class="input_area">
  12300. <div class=" highlight hl-ipython2"><pre><span></span><span class="c1"># dictionaries / maps</span>
  12301. <span class="n">d</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;a&quot;</span><span class="p">:</span> <span class="mi">1</span><span class="p">}</span>
  12302. <span class="c1"># tuples (immutable &quot;lists&quot;)</span>
  12303. <span class="n">tup</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;b&quot;</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
  12304. <span class="c1"># lists [1, 2, 3]</span>
  12305. <span class="n">lis</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;c&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">]</span>
  12306. </pre></div>
  12307. </div>
  12308. </div>
  12309. </div>
  12310. </div></section><section>
  12311. <div class="cell border-box-sizing text_cell rendered">
  12312. <div class="prompt input_prompt">
  12313. </div>
  12314. <div class="inner_cell">
  12315. <div class="text_cell_render border-box-sizing rendered_html">
  12316. <h1 id="...-and-they-play-well-together">... and they play well together<a class="anchor-link" href="#...-and-they-play-well-together">&#182;</a></h1>
  12317. </div>
  12318. </div>
  12319. </div></section><section>
  12320. <div class="cell border-box-sizing code_cell rendered">
  12321. <div class="input">
  12322. <div class="prompt input_prompt">In&nbsp;[11]:</div>
  12323. <div class="inner_cell">
  12324. <div class="input_area">
  12325. <div class=" highlight hl-ipython2"><pre><span></span><span class="nb">list</span><span class="p">(</span><span class="n">tup</span><span class="p">)</span>
  12326. </pre></div>
  12327. </div>
  12328. </div>
  12329. </div>
  12330. <div class="output_wrapper">
  12331. <div class="output">
  12332. <div class="output_area"><div class="prompt output_prompt">Out[11]:</div>
  12333. <div class="output_text output_subarea output_execute_result">
  12334. <pre>[&#39;b&#39;, 2]</pre>
  12335. </div>
  12336. </div>
  12337. </div>
  12338. </div>
  12339. </div><div class="fragment">
  12340. <div class="cell border-box-sizing code_cell rendered">
  12341. <div class="input">
  12342. <div class="prompt input_prompt">In&nbsp;[12]:</div>
  12343. <div class="inner_cell">
  12344. <div class="input_area">
  12345. <div class=" highlight hl-ipython2"><pre><span></span><span class="nb">tuple</span><span class="p">(</span><span class="n">lis</span><span class="p">)</span>
  12346. </pre></div>
  12347. </div>
  12348. </div>
  12349. </div>
  12350. <div class="output_wrapper">
  12351. <div class="output">
  12352. <div class="output_area"><div class="prompt output_prompt">Out[12]:</div>
  12353. <div class="output_text output_subarea output_execute_result">
  12354. <pre>(&#39;c&#39;, 1)</pre>
  12355. </div>
  12356. </div>
  12357. </div>
  12358. </div>
  12359. </div></div><div class="fragment">
  12360. <div class="cell border-box-sizing code_cell rendered">
  12361. <div class="input">
  12362. <div class="prompt input_prompt">In&nbsp;[13]:</div>
  12363. <div class="inner_cell">
  12364. <div class="input_area">
  12365. <div class=" highlight hl-ipython2"><pre><span></span><span class="nb">dict</span><span class="p">([</span><span class="nb">tuple</span><span class="p">(</span><span class="n">lis</span><span class="p">)])</span>
  12366. </pre></div>
  12367. </div>
  12368. </div>
  12369. </div>
  12370. <div class="output_wrapper">
  12371. <div class="output">
  12372. <div class="output_area"><div class="prompt output_prompt">Out[13]:</div>
  12373. <div class="output_text output_subarea output_execute_result">
  12374. <pre>{&#39;c&#39;: 1}</pre>
  12375. </div>
  12376. </div>
  12377. </div>
  12378. </div>
  12379. </div></div><div class="fragment">
  12380. <div class="cell border-box-sizing code_cell rendered">
  12381. <div class="input">
  12382. <div class="prompt input_prompt">In&nbsp;[14]:</div>
  12383. <div class="inner_cell">
  12384. <div class="input_area">
  12385. <div class=" highlight hl-ipython2"><pre><span></span><span class="nb">dict</span><span class="p">([</span><span class="n">tup</span><span class="p">])</span>
  12386. </pre></div>
  12387. </div>
  12388. </div>
  12389. </div>
  12390. <div class="output_wrapper">
  12391. <div class="output">
  12392. <div class="output_area"><div class="prompt output_prompt">Out[14]:</div>
  12393. <div class="output_text output_subarea output_execute_result">
  12394. <pre>{&#39;b&#39;: 2}</pre>
  12395. </div>
  12396. </div>
  12397. </div>
  12398. </div>
  12399. </div></div></section><section>
  12400. <div class="cell border-box-sizing code_cell rendered">
  12401. <div class="input">
  12402. <div class="prompt input_prompt">In&nbsp;[15]:</div>
  12403. <div class="inner_cell">
  12404. <div class="input_area">
  12405. <div class=" highlight hl-ipython2"><pre><span></span><span class="nb">dict</span><span class="o">.</span><span class="n">fromkeys</span><span class="p">([</span><span class="s2">&quot;a&quot;</span><span class="p">,</span> <span class="s2">&quot;b&quot;</span><span class="p">,</span> <span class="s2">&quot;c&quot;</span><span class="p">])</span>
  12406. </pre></div>
  12407. </div>
  12408. </div>
  12409. </div>
  12410. <div class="output_wrapper">
  12411. <div class="output">
  12412. <div class="output_area"><div class="prompt output_prompt">Out[15]:</div>
  12413. <div class="output_text output_subarea output_execute_result">
  12414. <pre>{&#39;a&#39;: None, &#39;b&#39;: None, &#39;c&#39;: None}</pre>
  12415. </div>
  12416. </div>
  12417. </div>
  12418. </div>
  12419. </div><div class="fragment">
  12420. <div class="cell border-box-sizing code_cell rendered">
  12421. <div class="input">
  12422. <div class="prompt input_prompt">In&nbsp;[16]:</div>
  12423. <div class="inner_cell">
  12424. <div class="input_area">
  12425. <div class=" highlight hl-ipython2"><pre><span></span><span class="nb">dict</span><span class="o">.</span><span class="n">fromkeys</span><span class="p">((</span><span class="s2">&quot;a&quot;</span><span class="p">,</span> <span class="s2">&quot;b&quot;</span><span class="p">,</span> <span class="s2">&quot;c&quot;</span><span class="p">))</span>
  12426. </pre></div>
  12427. </div>
  12428. </div>
  12429. </div>
  12430. <div class="output_wrapper">
  12431. <div class="output">
  12432. <div class="output_area"><div class="prompt output_prompt">Out[16]:</div>
  12433. <div class="output_text output_subarea output_execute_result">
  12434. <pre>{&#39;a&#39;: None, &#39;b&#39;: None, &#39;c&#39;: None}</pre>
  12435. </div>
  12436. </div>
  12437. </div>
  12438. </div>
  12439. </div></div></section><section>
  12440. <div class="cell border-box-sizing code_cell rendered">
  12441. <div class="input">
  12442. <div class="prompt input_prompt">In&nbsp;[17]:</div>
  12443. <div class="inner_cell">
  12444. <div class="input_area">
  12445. <div class=" highlight hl-ipython2"><pre><span></span><span class="n">d</span> <span class="o">=</span> <span class="nb">dict</span><span class="o">.</span><span class="n">fromkeys</span><span class="p">([</span><span class="s2">&quot;a&quot;</span><span class="p">,</span> <span class="s2">&quot;b&quot;</span><span class="p">,</span> <span class="s2">&quot;c&quot;</span><span class="p">])</span>
  12446. <span class="n">d</span>
  12447. </pre></div>
  12448. </div>
  12449. </div>
  12450. </div>
  12451. <div class="output_wrapper">
  12452. <div class="output">
  12453. <div class="output_area"><div class="prompt output_prompt">Out[17]:</div>
  12454. <div class="output_text output_subarea output_execute_result">
  12455. <pre>{&#39;a&#39;: None, &#39;b&#39;: None, &#39;c&#39;: None}</pre>
  12456. </div>
  12457. </div>
  12458. </div>
  12459. </div>
  12460. </div><div class="fragment">
  12461. <div class="cell border-box-sizing code_cell rendered">
  12462. <div class="input">
  12463. <div class="prompt input_prompt">In&nbsp;[18]:</div>
  12464. <div class="inner_cell">
  12465. <div class="input_area">
  12466. <div class=" highlight hl-ipython2"><pre><span></span><span class="n">d</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="nb">dict</span><span class="p">([</span><span class="nb">tuple</span><span class="p">(</span><span class="n">lis</span><span class="p">)]))</span>
  12467. </pre></div>
  12468. </div>
  12469. </div>
  12470. </div>
  12471. </div></div><div class="fragment">
  12472. <div class="cell border-box-sizing code_cell rendered">
  12473. <div class="input">
  12474. <div class="prompt input_prompt">In&nbsp;[19]:</div>
  12475. <div class="inner_cell">
  12476. <div class="input_area">
  12477. <div class=" highlight hl-ipython2"><pre><span></span><span class="n">d</span>
  12478. </pre></div>
  12479. </div>
  12480. </div>
  12481. </div>
  12482. <div class="output_wrapper">
  12483. <div class="output">
  12484. <div class="output_area"><div class="prompt output_prompt">Out[19]:</div>
  12485. <div class="output_text output_subarea output_execute_result">
  12486. <pre>{&#39;a&#39;: None, &#39;b&#39;: None, &#39;c&#39;: 1}</pre>
  12487. </div>
  12488. </div>
  12489. </div>
  12490. </div>
  12491. </div></div><div class="fragment">
  12492. <div class="cell border-box-sizing code_cell rendered">
  12493. <div class="input">
  12494. <div class="prompt input_prompt">In&nbsp;[20]:</div>
  12495. <div class="inner_cell">
  12496. <div class="input_area">
  12497. <div class=" highlight hl-ipython2"><pre><span></span><span class="n">d</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="nb">dict</span><span class="p">([(</span><span class="s1">&#39;a&#39;</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">lis</span><span class="p">),</span> <span class="n">tup</span><span class="p">]))</span>
  12498. </pre></div>
  12499. </div>
  12500. </div>
  12501. </div>
  12502. </div></div><div class="fragment">
  12503. <div class="cell border-box-sizing code_cell rendered">
  12504. <div class="input">
  12505. <div class="prompt input_prompt">In&nbsp;[21]:</div>
  12506. <div class="inner_cell">
  12507. <div class="input_area">
  12508. <div class=" highlight hl-ipython2"><pre><span></span><span class="n">d</span>
  12509. </pre></div>
  12510. </div>
  12511. </div>
  12512. </div>
  12513. <div class="output_wrapper">
  12514. <div class="output">
  12515. <div class="output_area"><div class="prompt output_prompt">Out[21]:</div>
  12516. <div class="output_text output_subarea output_execute_result">
  12517. <pre>{&#39;a&#39;: 1, &#39;b&#39;: 2, &#39;c&#39;: 1}</pre>
  12518. </div>
  12519. </div>
  12520. </div>
  12521. </div>
  12522. </div></div></section></section><section><section>
  12523. <div class="cell border-box-sizing text_cell rendered">
  12524. <div class="prompt input_prompt">
  12525. </div>
  12526. <div class="inner_cell">
  12527. <div class="text_cell_render border-box-sizing rendered_html">
  12528. <h1 id="4.-And-there-are-some-nice-short-cuts-...">4. And there are some nice short cuts ...<a class="anchor-link" href="#4.-And-there-are-some-nice-short-cuts-...">&#182;</a></h1><p><img src="assets/13563527335_7282ccd926_o.jpg"/>
  12529. <!-- https://www.flickr.com/photos/penguinandfish/13563527335/in/photolist-mEyC8z-xokZe-cvG6i-cvG6f-78pQcU-687d5B-J8JY5t-6PrzZ9-77x4pd-oYgqzQ-dNLFAw-8ZGhsA-5yAQGL-pfJj19-iqW4gY-6Dn5in-99oXCd-8WipvU-4gMDBd-9uYt1L-xokZj-ayxHqU-4S6ukZ-5B2cX4-7tUS2M-4pc9m2-sjqz2E-6MJPeL-xokfd-7tUSfT-az5QPT-7dy1no-f4wS42-xokZk-xokfa-5Re3Dz-6vGHki-9qBB8c-4gcyjN-xokeZ-f9EGpb-ah5B12-h4hW4Y-az5QUt-9mznbJ-sjqzfW-7dxZT1-s2ZpHS-FRcxry-3zGaoU --></p>
  12530. </div>
  12531. </div>
  12532. </div></section><section>
  12533. <div class="cell border-box-sizing code_cell rendered">
  12534. <div class="input">
  12535. <div class="prompt input_prompt">In&nbsp;[22]:</div>
  12536. <div class="inner_cell">
  12537. <div class="input_area">
  12538. <div class=" highlight hl-ipython2"><pre><span></span><span class="c1"># list comprehensions</span>
  12539. <span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">16</span><span class="p">)]</span>
  12540. </pre></div>
  12541. </div>
  12542. </div>
  12543. </div>
  12544. <div class="output_wrapper">
  12545. <div class="output">
  12546. <div class="output_area"><div class="prompt output_prompt">Out[22]:</div>
  12547. <div class="output_text output_subarea output_execute_result">
  12548. <pre>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]</pre>
  12549. </div>
  12550. </div>
  12551. </div>
  12552. </div>
  12553. </div></section><section>
  12554. <div class="cell border-box-sizing code_cell rendered">
  12555. <div class="input">
  12556. <div class="prompt input_prompt">In&nbsp;[23]:</div>
  12557. <div class="inner_cell">
  12558. <div class="input_area">
  12559. <div class=" highlight hl-ipython2"><pre><span></span><span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">16</span><span class="p">)</span> <span class="k">if</span> <span class="n">i</span><span class="o">%</span><span class="k">2</span>] # say what???
  12560. </pre></div>
  12561. </div>
  12562. </div>
  12563. </div>
  12564. <div class="output_wrapper">
  12565. <div class="output">
  12566. <div class="output_area"><div class="prompt output_prompt">Out[23]:</div>
  12567. <div class="output_text output_subarea output_execute_result">
  12568. <pre>[1, 3, 5, 7, 9, 11, 13, 15]</pre>
  12569. </div>
  12570. </div>
  12571. </div>
  12572. </div>
  12573. </div></section><section>
  12574. <div class="cell border-box-sizing code_cell rendered">
  12575. <div class="input">
  12576. <div class="prompt input_prompt">In&nbsp;[24]:</div>
  12577. <div class="inner_cell">
  12578. <div class="input_area">
  12579. <div class=" highlight hl-ipython2"><pre><span></span><span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">16</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">i</span><span class="o">%</span><span class="k">2</span>] # aha!!!
  12580. </pre></div>
  12581. </div>
  12582. </div>
  12583. </div>
  12584. <div class="output_wrapper">
  12585. <div class="output">
  12586. <div class="output_area"><div class="prompt output_prompt">Out[24]:</div>
  12587. <div class="output_text output_subarea output_execute_result">
  12588. <pre>[2, 4, 6, 8, 10, 12, 14]</pre>
  12589. </div>
  12590. </div>
  12591. </div>
  12592. </div>
  12593. </div></section><section>
  12594. <div class="cell border-box-sizing code_cell rendered">
  12595. <div class="input">
  12596. <div class="prompt input_prompt">In&nbsp;[25]:</div>
  12597. <div class="inner_cell">
  12598. <div class="input_area">
  12599. <div class=" highlight hl-ipython2"><pre><span></span><span class="c1"># dictionary comprehensions</span>
  12600. <span class="n">lorem_wlen</span> <span class="o">=</span> <span class="p">{</span><span class="n">key</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">lorem_clean_sample</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">)}</span>
  12601. <span class="n">lorem_wlen</span>
  12602. </pre></div>
  12603. </div>
  12604. </div>
  12605. </div>
  12606. <div class="output_wrapper">
  12607. <div class="output">
  12608. <div class="output_area"><div class="prompt output_prompt">Out[25]:</div>
  12609. <div class="output_text output_subarea output_execute_result">
  12610. <pre>{&#39;adipiscing&#39;: 10,
  12611. &#39;amet&#39;: 4,
  12612. &#39;consectetur&#39;: 11,
  12613. &#39;dolor&#39;: 5,
  12614. &#39;elit&#39;: 4,
  12615. &#39;in&#39;: 2,
  12616. &#39;ipsum&#39;: 5,
  12617. &#39;lorem&#39;: 5,
  12618. &#39;sed&#39;: 3,
  12619. &#39;sit&#39;: 3}</pre>
  12620. </div>
  12621. </div>
  12622. </div>
  12623. </div>
  12624. </div></section><section>
  12625. <div class="cell border-box-sizing code_cell rendered">
  12626. <div class="input">
  12627. <div class="prompt input_prompt">In&nbsp;[26]:</div>
  12628. <div class="inner_cell">
  12629. <div class="input_area">
  12630. <div class=" highlight hl-ipython2"><pre><span></span><span class="n">lorem_cnt_e</span> <span class="o">=</span> <span class="p">{</span><span class="n">key</span><span class="p">:</span> <span class="n">key</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s2">&quot;e&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">lorem_clean_sample</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">)}</span>
  12631. <span class="n">lorem_cnt_e</span>
  12632. </pre></div>
  12633. </div>
  12634. </div>
  12635. </div>
  12636. <div class="output_wrapper">
  12637. <div class="output">
  12638. <div class="output_area"><div class="prompt output_prompt">Out[26]:</div>
  12639. <div class="output_text output_subarea output_execute_result">
  12640. <pre>{&#39;adipiscing&#39;: 0,
  12641. &#39;amet&#39;: 1,
  12642. &#39;consectetur&#39;: 2,
  12643. &#39;dolor&#39;: 0,
  12644. &#39;elit&#39;: 1,
  12645. &#39;in&#39;: 0,
  12646. &#39;ipsum&#39;: 0,
  12647. &#39;lorem&#39;: 1,
  12648. &#39;sed&#39;: 1,
  12649. &#39;sit&#39;: 0}</pre>
  12650. </div>
  12651. </div>
  12652. </div>
  12653. </div>
  12654. </div></section></section><section><section>
  12655. <div class="cell border-box-sizing text_cell rendered">
  12656. <div class="prompt input_prompt">
  12657. </div>
  12658. <div class="inner_cell">
  12659. <div class="text_cell_render border-box-sizing rendered_html">
  12660. <h1 id="5.-Batteries-included-....">5. Batteries included ....<a class="anchor-link" href="#5.-Batteries-included-....">&#182;</a></h1><p><img src="assets/13610718405_c247cc2925_z.jpg" />
  12661. <!-- https://www.flickr.com/photos/vintuitive/13610718405/in/photolist-mJJuoH-67y58t-pVuSW4-askYpe-nZfcyQ-2ZXjk4-9dh1gK-6QVJJT-9kixy9-91VEbQ-aBm9AH-arTTuE-r19JmA-37LN9W-cvvasy-aH15vp-5pgu3M-d77zoG-62epCR-4Js3Ki-BrNHkh-3VbqeB-7bzvtv-cKwNwE-3kGb35-9K4bGg-nMScWf-e9XLkL-nfRyBD-9DEb2v-5FkYhQ-qbYryC-5u18Ud-ovqtVt-oBnzvF-abfaWh-o54g8R-7yjvs1-5PHjgc-6J8QnF-p1bz4C-Jo61wp-9pGc6S-5FbjF8-cj1FNE-qpmBrn-pCQJAN-cRYEyC-hBpyoD-4X3LvS --></p>
  12662. </div>
  12663. </div>
  12664. </div></section><section>
  12665. <div class="cell border-box-sizing code_cell rendered">
  12666. <div class="input">
  12667. <div class="prompt input_prompt">In&nbsp;[27]:</div>
  12668. <div class="inner_cell">
  12669. <div class="input_area">
  12670. <div class=" highlight hl-ipython2"><pre><span></span><span class="kn">import</span> <span class="nn">requests</span>
  12671. <span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;http://www2.ed.gov/data.json&quot;</span><span class="p">)</span>
  12672. <span class="k">if</span> <span class="n">r</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
  12673. <span class="n">payload_dict</span> <span class="o">=</span> <span class="n">r</span><span class="o">.</span><span class="n">json</span><span class="p">()</span> <span class="c1"># loading the data into a dict via the json() just works!</span>
  12674. <span class="k">else</span><span class="p">:</span>
  12675. <span class="k">print</span> <span class="s2">&quot;Could not load the data at this endpoint.&quot;</span>
  12676. </pre></div>
  12677. </div>
  12678. </div>
  12679. </div>
  12680. </div><div class="fragment">
  12681. <div class="cell border-box-sizing code_cell rendered">
  12682. <div class="input">
  12683. <div class="prompt input_prompt">In&nbsp;[28]:</div>
  12684. <div class="inner_cell">
  12685. <div class="input_area">
  12686. <div class=" highlight hl-ipython2"><pre><span></span><span class="n">payload_dict</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span>
  12687. </pre></div>
  12688. </div>
  12689. </div>
  12690. </div>
  12691. <div class="output_wrapper">
  12692. <div class="output">
  12693. <div class="output_area"><div class="prompt output_prompt">Out[28]:</div>
  12694. <div class="output_text output_subarea output_execute_result">
  12695. <pre>[u&#39;conformsTo&#39;, u&#39;dataset&#39;, u&#39;describedBy&#39;, u&#39;@context&#39;, u&#39;@id&#39;, u&#39;@type&#39;]</pre>
  12696. </div>
  12697. </div>
  12698. </div>
  12699. </div>
  12700. </div></div></section><section>
  12701. <div class="cell border-box-sizing code_cell rendered">
  12702. <div class="input">
  12703. <div class="prompt input_prompt">In&nbsp;[29]:</div>
  12704. <div class="inner_cell">
  12705. <div class="input_area">
  12706. <div class=" highlight hl-ipython2"><pre><span></span><span class="n">arra_data</span> <span class="o">=</span> <span class="p">{}</span>
  12707. <span class="k">for</span> <span class="n">dataset</span> <span class="ow">in</span> <span class="n">payload_dict</span><span class="p">[</span><span class="s1">&#39;dataset&#39;</span><span class="p">]:</span>
  12708. <span class="k">if</span> <span class="s2">&quot;ARRA&quot;</span> <span class="ow">in</span> <span class="n">dataset</span><span class="p">[</span><span class="s1">&#39;description&#39;</span><span class="p">]:</span>
  12709. <span class="n">dsid</span> <span class="o">=</span> <span class="n">dataset</span><span class="p">[</span><span class="s1">&#39;identifier&#39;</span><span class="p">]</span>
  12710. <span class="n">desc</span> <span class="o">=</span> <span class="n">dataset</span><span class="p">[</span><span class="s1">&#39;description&#39;</span><span class="p">]</span>
  12711. <span class="n">title</span> <span class="o">=</span> <span class="n">dataset</span><span class="p">[</span><span class="s1">&#39;title&#39;</span><span class="p">]</span>
  12712. <span class="n">arra_data</span><span class="p">[</span><span class="n">dsid</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;description&#39;</span><span class="p">:</span> <span class="n">desc</span><span class="p">,</span> <span class="s1">&#39;title&#39;</span><span class="p">:</span> <span class="n">title</span><span class="p">}</span>
  12713. </pre></div>
  12714. </div>
  12715. </div>
  12716. </div>
  12717. </div></section><section>
  12718. <div class="cell border-box-sizing code_cell rendered">
  12719. <div class="input">
  12720. <div class="prompt input_prompt">In&nbsp;[30]:</div>
  12721. <div class="inner_cell">
  12722. <div class="input_area">
  12723. <div class=" highlight hl-ipython2"><pre><span></span><span class="n">arra_data</span>
  12724. </pre></div>
  12725. </div>
  12726. </div>
  12727. </div>
  12728. <div class="output_wrapper">
  12729. <div class="output">
  12730. <div class="output_area"><div class="prompt output_prompt">Out[30]:</div>
  12731. <div class="output_text output_subarea output_execute_result">
  12732. <pre>{u&#39;ED-2485&#39;: {&#39;description&#39;: u&#39;The Investing in Innovation (i3) Fund website depicts and allows downloading of general information on the i3 applicants received, grantees awarded and project locations. The Investing in Innovation Fund, established under section 14007 of the American Recovery and Reinvestment Act of 2009 (ARRA), provides funding to support (1) local educational agencies (LEAs), and (2) nonprofit organizations in partnership with (a) one or more LEAs or (b) a consortium of schools. The purpose of the i3 program is to provide competitive grants to applicants with a record of improving student achievement and attainment in order to expand the implementation of, and investment in, innovative practices that are demonstrated to have an impact on improving student achievement or student growth, closing achievement gaps, decreasing dropout rates, increasing high school graduation rates, or increasing college enrollment and completion rates. These grants will (1) allow eligible entities to expand and develop innovative practices that can serve as models of best practices, (2) allow eligible entities to work in partnership with the private sector and the philanthropic community, and (3) identify and document best practices that can be shared and taken to scale based on demonstrated success.&#39;,
  12733. &#39;title&#39;: u&#39;ED Grants: Investing in Innovation (i3) Fund 2010&#39;},
  12734. u&#39;ED-5562&#39;: {&#39;description&#39;: u&#39;The Investing in Innovation (i3) Fund website depicts and allows downloading of general information on the i3 applicants received, grantees awarded and project locations. The Investing in Innovation Fund, established under section 14007 of the American Recovery and Reinvestment Act of 2009 (ARRA), provides funding to support (1) local educational agencies (LEAs), and (2) nonprofit organizations in partnership with (a) one or more LEAs or (b) a consortium of schools. The purpose of the i3 program is to provide competitive grants to applicants with a record of improving student achievement and attainment in order to expand the implementation of, and investment in, innovative practices that are demonstrated to have an impact on improving student achievement or student growth, closing achievement gaps, decreasing dropout rates, increasing high school graduation rates, or increasing college enrollment and completion rates. These grants will (1) allow eligible entities to expand and develop innovative practices that can serve as models of best practices, (2) allow eligible entities to work in partnership with the private sector and the philanthropic community, and (3) identify and document best practices that can be shared and taken to scale based on demonstrated success.&#39;,
  12735. &#39;title&#39;: u&#39;ED Grants: Investing in Innovation (i3) Fund 2011&#39;}}</pre>
  12736. </div>
  12737. </div>
  12738. </div>
  12739. </div>
  12740. </div></section><section>
  12741. <div class="cell border-box-sizing code_cell rendered">
  12742. <div class="input">
  12743. <div class="prompt input_prompt">In&nbsp;[31]:</div>
  12744. <div class="inner_cell">
  12745. <div class="input_area">
  12746. <div class=" highlight hl-ipython2"><pre><span></span><span class="n">arra_data_dc</span> <span class="o">=</span> <span class="p">{</span> <span class="n">dataset</span><span class="p">[</span><span class="s1">&#39;identifier&#39;</span><span class="p">]</span> <span class="p">:</span>
  12747. <span class="p">{</span><span class="s1">&#39;description&#39;</span><span class="p">:</span> <span class="n">dataset</span><span class="p">[</span><span class="s1">&#39;description&#39;</span><span class="p">],</span>
  12748. <span class="s1">&#39;title&#39;</span><span class="p">:</span> <span class="n">dataset</span><span class="p">[</span><span class="s1">&#39;title&#39;</span><span class="p">]}</span>
  12749. <span class="k">for</span> <span class="n">dataset</span> <span class="ow">in</span> <span class="n">payload_dict</span><span class="p">[</span><span class="s1">&#39;dataset&#39;</span><span class="p">]</span>
  12750. <span class="k">if</span> <span class="s2">&quot;ARRA&quot;</span> <span class="ow">in</span> <span class="n">dataset</span><span class="p">[</span><span class="s1">&#39;description&#39;</span><span class="p">]</span> <span class="p">}</span>
  12751. </pre></div>
  12752. </div>
  12753. </div>
  12754. </div>
  12755. </div></section><section>
  12756. <div class="cell border-box-sizing code_cell rendered">
  12757. <div class="input">
  12758. <div class="prompt input_prompt">In&nbsp;[32]:</div>
  12759. <div class="inner_cell">
  12760. <div class="input_area">
  12761. <div class=" highlight hl-ipython2"><pre><span></span><span class="n">arra_data_dc</span>
  12762. </pre></div>
  12763. </div>
  12764. </div>
  12765. </div>
  12766. <div class="output_wrapper">
  12767. <div class="output">
  12768. <div class="output_area"><div class="prompt output_prompt">Out[32]:</div>
  12769. <div class="output_text output_subarea output_execute_result">
  12770. <pre>{u&#39;ED-2485&#39;: {&#39;description&#39;: u&#39;The Investing in Innovation (i3) Fund website depicts and allows downloading of general information on the i3 applicants received, grantees awarded and project locations. The Investing in Innovation Fund, established under section 14007 of the American Recovery and Reinvestment Act of 2009 (ARRA), provides funding to support (1) local educational agencies (LEAs), and (2) nonprofit organizations in partnership with (a) one or more LEAs or (b) a consortium of schools. The purpose of the i3 program is to provide competitive grants to applicants with a record of improving student achievement and attainment in order to expand the implementation of, and investment in, innovative practices that are demonstrated to have an impact on improving student achievement or student growth, closing achievement gaps, decreasing dropout rates, increasing high school graduation rates, or increasing college enrollment and completion rates. These grants will (1) allow eligible entities to expand and develop innovative practices that can serve as models of best practices, (2) allow eligible entities to work in partnership with the private sector and the philanthropic community, and (3) identify and document best practices that can be shared and taken to scale based on demonstrated success.&#39;,
  12771. &#39;title&#39;: u&#39;ED Grants: Investing in Innovation (i3) Fund 2010&#39;},
  12772. u&#39;ED-5562&#39;: {&#39;description&#39;: u&#39;The Investing in Innovation (i3) Fund website depicts and allows downloading of general information on the i3 applicants received, grantees awarded and project locations. The Investing in Innovation Fund, established under section 14007 of the American Recovery and Reinvestment Act of 2009 (ARRA), provides funding to support (1) local educational agencies (LEAs), and (2) nonprofit organizations in partnership with (a) one or more LEAs or (b) a consortium of schools. The purpose of the i3 program is to provide competitive grants to applicants with a record of improving student achievement and attainment in order to expand the implementation of, and investment in, innovative practices that are demonstrated to have an impact on improving student achievement or student growth, closing achievement gaps, decreasing dropout rates, increasing high school graduation rates, or increasing college enrollment and completion rates. These grants will (1) allow eligible entities to expand and develop innovative practices that can serve as models of best practices, (2) allow eligible entities to work in partnership with the private sector and the philanthropic community, and (3) identify and document best practices that can be shared and taken to scale based on demonstrated success.&#39;,
  12773. &#39;title&#39;: u&#39;ED Grants: Investing in Innovation (i3) Fund 2011&#39;}}</pre>
  12774. </div>
  12775. </div>
  12776. </div>
  12777. </div>
  12778. </div></section></section><section><section>
  12779. <div class="cell border-box-sizing text_cell rendered">
  12780. <div class="prompt input_prompt">
  12781. </div>
  12782. <div class="inner_cell">
  12783. <div class="text_cell_render border-box-sizing rendered_html">
  12784. <h1 id="6.-Juptyer-Notebooks">6. Juptyer Notebooks<a class="anchor-link" href="#6.-Juptyer-Notebooks">&#182;</a></h1><p><img src="assets/jupyter_logo.jpg" />
  12785. <!-- http://jupyter.org --></p>
  12786. </div>
  12787. </div>
  12788. </div></section><section>
  12789. <div class="cell border-box-sizing code_cell rendered">
  12790. <div class="input">
  12791. <div class="prompt input_prompt">In&nbsp;[33]:</div>
  12792. <div class="inner_cell">
  12793. <div class="input_area">
  12794. <div class=" highlight hl-ipython2"><pre><span></span><span class="kn">import</span> <span class="nn">csv</span>
  12795. <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s2">&quot;Export.csv&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">fi</span><span class="p">:</span>
  12796. <span class="n">csv_fi</span> <span class="o">=</span> <span class="n">csv</span><span class="o">.</span><span class="n">DictReader</span><span class="p">(</span><span class="n">fi</span><span class="p">)</span>
  12797. <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">csv_fi</span><span class="p">:</span>
  12798. <span class="k">print</span> <span class="n">row</span><span class="p">[</span><span class="s1">&#39;MarketName&#39;</span><span class="p">],</span> <span class="n">row</span><span class="p">[</span><span class="s1">&#39;x&#39;</span><span class="p">],</span> <span class="n">row</span><span class="p">[</span><span class="s1">&#39;y&#39;</span><span class="p">]</span>
  12799. <span class="k">break</span>
  12800. </pre></div>
  12801. </div>
  12802. </div>
  12803. </div>
  12804. <div class="output_wrapper">
  12805. <div class="output">
  12806. <div class="output_area"><div class="prompt"></div>
  12807. <div class="output_subarea output_stream output_stdout output_text">
  12808. <pre> Caledonia Farmers Market Association - Danville -72.140305 44.411013
  12809. </pre>
  12810. </div>
  12811. </div>
  12812. </div>
  12813. </div>
  12814. </div></section><section>
  12815. <div class="cell border-box-sizing code_cell rendered">
  12816. <div class="input">
  12817. <div class="prompt input_prompt">In&nbsp;[34]:</div>
  12818. <div class="inner_cell">
  12819. <div class="input_area">
  12820. <div class=" highlight hl-ipython2"><pre><span></span><span class="n">map_data_objects</span> <span class="o">=</span> <span class="p">{}</span>
  12821. <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s2">&quot;Export.csv&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">fi</span><span class="p">:</span>
  12822. <span class="n">csv_fi</span> <span class="o">=</span> <span class="n">csv</span><span class="o">.</span><span class="n">DictReader</span><span class="p">(</span><span class="n">fi</span><span class="p">)</span>
  12823. <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">csv_fi</span><span class="p">:</span>
  12824. <span class="k">try</span><span class="p">:</span>
  12825. <span class="n">map_data_objects</span><span class="p">[</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;FMID&#39;</span><span class="p">]]</span> <span class="o">=</span> <span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;MarketName&#39;</span><span class="p">],</span> <span class="nb">float</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;x&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()),</span> <span class="nb">float</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;y&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()))</span>
  12826. <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
  12827. <span class="k">print</span><span class="p">(</span><span class="s2">&quot;Count not convert row for FMID: {}&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="s1">&#39;FMID&#39;</span><span class="p">]))</span>
  12828. </pre></div>
  12829. </div>
  12830. </div>
  12831. </div>
  12832. <div class="output_wrapper">
  12833. <div class="output">
  12834. <div class="output_area"><div class="prompt"></div>
  12835. <div class="output_subarea output_stream output_stdout output_text">
  12836. <pre>Count not convert row for FMID: 2000001
  12837. Count not convert row for FMID: 1011689
  12838. Count not convert row for FMID: 2000002
  12839. Count not convert row for FMID: 1002854
  12840. Count not convert row for FMID: 2000004
  12841. Count not convert row for FMID: 2000005
  12842. Count not convert row for FMID: 2000006
  12843. Count not convert row for FMID: 2000007
  12844. Count not convert row for FMID: 2000008
  12845. Count not convert row for FMID: 2000009
  12846. Count not convert row for FMID: 2000010
  12847. Count not convert row for FMID: 2000011
  12848. Count not convert row for FMID: 2000012
  12849. Count not convert row for FMID: 2000013
  12850. Count not convert row for FMID: 2000014
  12851. Count not convert row for FMID: 2000016
  12852. Count not convert row for FMID: 2000017
  12853. Count not convert row for FMID: 2000019
  12854. Count not convert row for FMID: 2000020
  12855. Count not convert row for FMID: 2000021
  12856. Count not convert row for FMID: 2000022
  12857. Count not convert row for FMID: 2000026
  12858. Count not convert row for FMID: 2000028
  12859. Count not convert row for FMID: 2000030
  12860. Count not convert row for FMID: 2000032
  12861. Count not convert row for FMID: 2000033
  12862. Count not convert row for FMID: 2000034
  12863. Count not convert row for FMID: 2000035
  12864. Count not convert row for FMID: 2000036
  12865. </pre>
  12866. </div>
  12867. </div>
  12868. </div>
  12869. </div>
  12870. </div></section><section>
  12871. <div class="cell border-box-sizing code_cell rendered">
  12872. <div class="input">
  12873. <div class="prompt input_prompt">In&nbsp;[35]:</div>
  12874. <div class="inner_cell">
  12875. <div class="input_area">
  12876. <div class=" highlight hl-ipython2"><pre><span></span><span class="kn">import</span> <span class="nn">folium</span>
  12877. <span class="n">us_fm_map</span> <span class="o">=</span> <span class="n">folium</span><span class="o">.</span><span class="n">Map</span><span class="p">(</span><span class="n">location</span><span class="o">=</span><span class="p">[</span><span class="mf">39.232253</span><span class="p">,</span> <span class="o">-</span><span class="mf">97.910156</span><span class="p">],</span>
  12878. <span class="n">zoom_start</span><span class="o">=</span><span class="mi">4</span><span class="p">,</span>
  12879. <span class="n">tiles</span><span class="o">=</span><span class="s1">&#39;Stamen Terrain&#39;</span><span class="p">)</span>
  12880. <span class="k">for</span> <span class="n">fmid</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">map_data_objects</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
  12881. <span class="n">name</span><span class="p">,</span> <span class="n">lon</span><span class="p">,</span> <span class="n">lat</span> <span class="o">=</span> <span class="n">v</span>
  12882. <span class="k">if</span> <span class="p">(</span><span class="n">lon</span> <span class="o">&lt;</span> <span class="o">-</span><span class="mi">104</span> <span class="ow">and</span> <span class="n">lon</span> <span class="o">&gt;</span> <span class="o">-</span><span class="mi">106</span><span class="p">)</span> \
  12883. <span class="ow">and</span> \
  12884. <span class="p">(</span><span class="n">lat</span> <span class="o">&lt;</span> <span class="mi">43</span> <span class="ow">and</span> <span class="n">lat</span> <span class="o">&gt;</span> <span class="mi">30</span><span class="p">):</span>
  12885. <span class="n">folium</span><span class="o">.</span><span class="n">Marker</span><span class="p">([</span><span class="n">lat</span><span class="p">,</span> <span class="n">lon</span><span class="p">],</span>
  12886. <span class="n">popup</span><span class="o">=</span><span class="nb">unicode</span><span class="p">(</span><span class="n">name</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">&#39;utf-8&#39;</span><span class="p">))</span>
  12887. <span class="p">)</span><span class="o">.</span><span class="n">add_to</span><span class="p">(</span><span class="n">us_fm_map</span><span class="p">)</span>
  12888. </pre></div>
  12889. </div>
  12890. </div>
  12891. </div>
  12892. </div></section><section>
  12893. <div class="cell border-box-sizing code_cell rendered">
  12894. <div class="input">
  12895. <div class="prompt input_prompt">In&nbsp;[36]:</div>
  12896. <div class="inner_cell">
  12897. <div class="input_area">
  12898. <div class=" highlight hl-ipython2"><pre><span></span><span class="n">us_fm_map</span>
  12899. </pre></div>
  12900. </div>
  12901. </div>
  12902. </div>
  12903. <div class="output_wrapper">
  12904. <div class="output">
  12905. <div class="output_area"><div class="prompt output_prompt">Out[36]:</div>
  12906. <div class="output_html rendered_html output_subarea output_execute_result">
  12907. <div style="width:100%;"><div style="position:relative;width:100%;height:0;padding-bottom:60%;"><iframe src="data:text/html;base64,CiAgICAgICAgPCFET0NUWVBFIGh0bWw+CiAgICAgICAgPGhlYWQ+CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgLz4KICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9sZWFmbGV0LzAuNy4zL2xlYWZsZXQuanMiPjwvc2NyaXB0PgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvanF1ZXJ5LzEuMTEuMS9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9qcy9ib290c3RyYXAubWluLmpzIj48L3NjcmlwdD4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5taW4uanMiPjwvc2NyaXB0PgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2xlYWZsZXQubWFya2VyY2x1c3Rlci8wLjQuMC9sZWFmbGV0Lm1hcmtlcmNsdXN0ZXItc3JjLmpzIj48L3NjcmlwdD4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9sZWFmbGV0Lm1hcmtlcmNsdXN0ZXIvMC40LjAvbGVhZmxldC5tYXJrZXJjbHVzdGVyLmpzIj48L3NjcmlwdD4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvbGVhZmxldC8wLjcuMy9sZWFmbGV0LmNzcyIgLz4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC5taW4uY3NzIiAvPgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLXRoZW1lLm1pbi5jc3MiIC8+CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuMS4wL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIgLz4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuY3NzIiAvPgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9sZWFmbGV0Lm1hcmtlcmNsdXN0ZXIvMC40LjAvTWFya2VyQ2x1c3Rlci5EZWZhdWx0LmNzcyIgLz4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvbGVhZmxldC5tYXJrZXJjbHVzdGVyLzAuNC4wL01hcmtlckNsdXN0ZXIuY3NzIiAvPgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIiAvPgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgPHN0eWxlPgoKICAgICAgICAgICAgaHRtbCwgYm9keSB7CiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAgICAgICAgIG1hcmdpbjogMDsKICAgICAgICAgICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAjbWFwIHsKICAgICAgICAgICAgICAgIHBvc2l0aW9uOmFic29sdXRlOwogICAgICAgICAgICAgICAgdG9wOjA7CiAgICAgICAgICAgICAgICBib3R0b206MDsKICAgICAgICAgICAgICAgIHJpZ2h0OjA7CiAgICAgICAgICAgICAgICBsZWZ0OjA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIDwvc3R5bGU+CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgPHN0eWxlPiAjbWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjIHsKICAgICAgICAgICAgICAgIHBvc2l0aW9uIDogcmVsYXRpdmU7CiAgICAgICAgICAgICAgICB3aWR0aCA6IDEwMC4wJTsKICAgICAgICAgICAgICAgIGhlaWdodDogMTAwLjAlOwogICAgICAgICAgICAgICAgbGVmdDogMC4wJTsKICAgICAgICAgICAgICAgIHRvcDogMC4wJTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgPC9zdHlsZT4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICA8L2hlYWQ+CiAgICAgICAgPGJvZHk+CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyIgPjwvZGl2PgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIDwvYm9keT4KICAgICAgICA8c2NyaXB0PgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgc291dGhXZXN0ID0gTC5sYXRMbmcoLTkwLCAtMTgwKTsKICAgICAgICAgICAgdmFyIG5vcnRoRWFzdCA9IEwubGF0TG5nKDkwLCAxODApOwogICAgICAgICAgICB2YXIgYm91bmRzID0gTC5sYXRMbmdCb3VuZHMoc291dGhXZXN0LCBub3J0aEVhc3QpOwoKICAgICAgICAgICAgdmFyIG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyA9IEwubWFwKCdtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMnLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZW50ZXI6WzM5LjIzMjI1MywtOTcuOTEwMTU2XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvb206IDQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyczogW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHRpbGVfbGF5ZXJfNzY2Mjg4OGFiZTU2NDg3NWIzNzc4NjA1OTU4MWU2YWEgPSBMLnRpbGVMYXllcigKICAgICAgICAgICAgICAgICdodHRwczovL3N0YW1lbi10aWxlcy17c30uYS5zc2wuZmFzdGx5Lm5ldC90ZXJyYWluL3t6fS97eH0ve3l9LmpwZycsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbWF4Wm9vbTogMTgsCiAgICAgICAgICAgICAgICAgICAgbWluWm9vbTogMSwKICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGlvbjogJ01hcCB0aWxlcyBieSA8YSBocmVmPSJodHRwOi8vc3RhbWVuLmNvbSI+U3RhbWVuIERlc2lnbjwvYT4sIHVuZGVyIDxhIGhyZWY9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzMuMCI+Q0MgQlkgMy4wPC9hPi4gRGF0YSBieSA8YSBocmVmPSJodHRwOi8vb3BlbnN0cmVldG1hcC5vcmciPk9wZW5TdHJlZXRNYXA8L2E+LCB1bmRlciA8YSBocmVmPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8zLjAiPkNDIEJZIFNBPC9hPi4nLAogICAgICAgICAgICAgICAgICAgIGRldGVjdFJldGluYTogZmFsc2UKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CgogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDRkMDllMDViZmYyNDZiMmIwNjliYjY0NjQzNDM2YzAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOS42ODg0NTYsLTEwNC45ODA0N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmVhMjQ3ODg4NDA4NGJmYmFhN2UxYmY0MDdlNjUzMjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjBlYTkwYTMzYjdmNGU2ODljNWQwMzdhMDE2MjRhYmYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzYwZWE5MGEzM2I3ZjRlNjg5YzVkMDM3YTAxNjI0YWJmIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTb3V0aCBQZWFybCBTdHJlZXQgRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZWEyNDc4ODg0MDg0YmZiYWE3ZTFiZjQwN2U2NTMyMy5zZXRDb250ZW50KGh0bWxfNjBlYTkwYTMzYjdmNGU2ODljNWQwMzdhMDE2MjRhYmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80NGQwOWUwNWJmZjI0NmIyYjA2OWJiNjQ2NDM0MzZjMC5iaW5kUG9wdXAocG9wdXBfYmVhMjQ3ODg4NDA4NGJmYmFhN2UxYmY0MDdlNjUzMjMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mNzVkZWRjZDE5YWU0Zjc5ODNlMWY2MTJiYjRmNmFmMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjI3MDQsLTEwNC42Ml0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTVmN2ExMjJlYzFhNDMzMTlmYTNkYjYzNWU3NzAwNTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjVmZWMxMThlNzAzNDIyNjg0ZTM2OTBhYjFiMTY0N2QgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2I1ZmVjMTE4ZTcwMzQyMjY4NGUzNjkwYWIxYjE2NDdkIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBQdWVibG8gRmFybWVycyYjMzk7IE1hcmtldGVlcnM8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTVmN2ExMjJlYzFhNDMzMTlmYTNkYjYzNWU3NzAwNTguc2V0Q29udGVudChodG1sX2I1ZmVjMTE4ZTcwMzQyMjY4NGUzNjkwYWIxYjE2NDdkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjc1ZGVkY2QxOWFlNGY3OTgzZTFmNjEyYmI0ZjZhZjIuYmluZFBvcHVwKHBvcHVwX2E1ZjdhMTIyZWMxYTQzMzE5ZmEzZGI2MzVlNzcwMDU4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTE3MjFmM2IyYzA2NDVlNjljYzAzODNiZWZmMmMxYWMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi4wNDU1LC0xMDQuMTQ1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZTQyMGI1MzljMTg0YWU2ODJjNDA0MzExYjAzNTUxNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZTI0NDMzMzYzYjY0ODAwOGI0NjVkYjg5YTJjY2FlZSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfN2UyNDQzMzM2M2I2NDgwMDhiNDY1ZGI4OWEyY2NhZWUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFRodXJzZGF5IEFmdGVybm9vbiBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZTQyMGI1MzljMTg0YWU2ODJjNDA0MzExYjAzNTUxNC5zZXRDb250ZW50KGh0bWxfN2UyNDQzMzM2M2I2NDgwMDhiNDY1ZGI4OWEyY2NhZWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lMTcyMWYzYjJjMDY0NWU2OWNjMDM4M2JlZmYyYzFhYy5iaW5kUG9wdXAocG9wdXBfOGU0MjBiNTM5YzE4NGFlNjgyYzQwNDMxMWIwMzU1MTQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mZmI5YWYwNDliNjE0ZTA3YThjMzhmOWM4YjRjNTNkYSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjUwMTUsLTEwNS4wOTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQxMTVlZjI4ZWIxNTQxMTRhNGE4NzBjMjhjZGU1MmE0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgzNDE0MzMyMTI4YTQ2MjU4Yjg1NzYxMDVmYWRlODRhID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF84MzQxNDMzMjEyOGE0NjI1OGI4NTc2MTA1ZmFkZTg0YSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR3VsbGV5IEdyZWVuaG91c2UgRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MTE1ZWYyOGViMTU0MTE0YTRhODcwYzI4Y2RlNTJhNC5zZXRDb250ZW50KGh0bWxfODM0MTQzMzIxMjhhNDYyNThiODU3NjEwNWZhZGU4NGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mZmI5YWYwNDliNjE0ZTA3YThjMzhmOWM4YjRjNTNkYS5iaW5kUG9wdXAocG9wdXBfNDExNWVmMjhlYjE1NDExNGE0YTg3MGMyOGNkZTUyYTQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iNzc5M2JkMWZkNTg0YmVhOTgxMjg0N2M1ZTdkNjlkZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5Ljk3ODM4MzYsLTEwNS4xMzA2Nzk1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mOTUwYzMzZGZkMTU0ODFjOGVkZGJiYjk3ZjBkYmI3MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZjYyN2UyYWQ0NDY0Mjk5ODk3ZDU2ZjMyMDg1MjhjOCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOGY2MjdlMmFkNDQ2NDI5OTg5N2Q1NmYzMjA4NTI4YzgiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIExvdWlzdmlsbGUgRmFybWVycyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjk1MGMzM2RmZDE1NDgxYzhlZGRiYmI5N2YwZGJiNzMuc2V0Q29udGVudChodG1sXzhmNjI3ZTJhZDQ0NjQyOTk4OTdkNTZmMzIwODUyOGM4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjc3OTNiZDFmZDU4NGJlYTk4MTI4NDdjNWU3ZDY5ZGYuYmluZFBvcHVwKHBvcHVwX2Y5NTBjMzNkZmQxNTQ4MWM4ZWRkYmJiOTdmMGRiYjczKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTU1YzQ0ODJiOGI5NDEyZTgzNWRjYjk0YWVhMWFmMWUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOS45ODcxODIsLTEwNS4wOTM5N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDUyZjg3MWY3ODVjNDk4MmI3ODA2M2NkNjYxMDQzN2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzI5N2Q1NDUyYzI4NDMxNDkxYWZjMWJjMmNlYmJiNmQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzMyOTdkNTQ1MmMyODQzMTQ5MWFmYzFiYzJjZWJiYjZkIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBMYWZheWV0dGUgRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNTJmODcxZjc4NWM0OTgyYjc4MDYzY2Q2NjEwNDM3Zi5zZXRDb250ZW50KGh0bWxfMzI5N2Q1NDUyYzI4NDMxNDkxYWZjMWJjMmNlYmJiNmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85NTVjNDQ4MmI4Yjk0MTJlODM1ZGNiOTRhZWExYWYxZS5iaW5kUG9wdXAocG9wdXBfMDUyZjg3MWY3ODVjNDk4MmI3ODA2M2NkNjYxMDQzN2YpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80Mzk3MTJiNjM0YTk0MDRjOTNkNTE0YjZiNTllMmY3NCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjQxMDcsLTEwNS42NzZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RhYzkzZTE4Yzk2MzQ4ZGJhZTliMTBmMDAwNGY0ZjdkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ1ZGNlNGZjNTFhNjQxODc5YWMyNDMyN2ZiNzUzNDRmID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF80NWRjZTRmYzUxYTY0MTg3OWFjMjQzMjdmYjc1MzQ0ZiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgTGlvbiYjMzk7cyBQYXJrIGFuZCBNaWRsYW5kIFNwdXIgUmQuPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RhYzkzZTE4Yzk2MzQ4ZGJhZTliMTBmMDAwNGY0ZjdkLnNldENvbnRlbnQoaHRtbF80NWRjZTRmYzUxYTY0MTg3OWFjMjQzMjdmYjc1MzQ0Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQzOTcxMmI2MzRhOTQwNGM5M2Q1MTRiNmI1OWUyZjc0LmJpbmRQb3B1cChwb3B1cF9kYWM5M2UxOGM5NjM0OGRiYWU5YjEwZjAwMDRmNGY3ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2JmNjJkODQzNDJiYTRlZTM5MzRlOTI0NGIyYTk3OGQwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNTkxNDA5LC0xMDQuOTg5MTY4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jN2VjNzZiMTc4NTE0MTYyYmJhYTk2OThmMmM4YmVhYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYjc4Mjk4ZWEzNDc0YjQ2OGE0ZjUyMDI2MjgzZThiMSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfY2I3ODI5OGVhMzQ3NGI0NjhhNGY1MjAyNjI4M2U4YjEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIE1ldHJvIERlbnZlciBGYXJtZXJzJiMzOTsgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M3ZWM3NmIxNzg1MTQxNjJiYmFhOTY5OGYyYzhiZWFiLnNldENvbnRlbnQoaHRtbF9jYjc4Mjk4ZWEzNDc0YjQ2OGE0ZjUyMDI2MjgzZThiMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2JmNjJkODQzNDJiYTRlZTM5MzRlOTI0NGIyYTk3OGQwLmJpbmRQb3B1cChwb3B1cF9jN2VjNzZiMTc4NTE0MTYyYmJhYTk2OThmMmM4YmVhYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzIxMTI1NTM0YmQwMjRjMmM5M2FkNDFhZTI2OTAwMzFhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNzU4NTQsLTEwNS4wMTEyM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWYwNGM5ZGQ0YjA2NGNmYzlhYWQ4MjVlMTZjNDViNzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTFhZDViOWQ0NTUzNDFlMmI3MzQ4NzRlNWU1OGYxYTkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2UxYWQ1YjlkNDU1MzQxZTJiNzM0ODc0ZTVlNThmMWE5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBIaWdobGFuZCBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZjA0YzlkZDRiMDY0Y2ZjOWFhZDgyNWUxNmM0NWI3OS5zZXRDb250ZW50KGh0bWxfZTFhZDViOWQ0NTUzNDFlMmI3MzQ4NzRlNWU1OGYxYTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yMTEyNTUzNGJkMDI0YzJjOTNhZDQxYWUyNjkwMDMxYS5iaW5kUG9wdXAocG9wdXBfZWYwNGM5ZGQ0YjA2NGNmYzlhYWQ4MjVlMTZjNDViNzkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iM2ZjNDEwMTg2MjM0OTgwYTg4ZWZhMGM5N2E4M2RhYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjE1MzQ4MTcsLTEwNS4xMjg2NTYzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNTlhOWViNmU2ZTc0Mzc4OTBmN2NkNGE4ZTkzOTc3ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iN2U1ODk2YWU0NzU0ODg4YTBjMjgzODE1MmFkMGU3YSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYjdlNTg5NmFlNDc1NDg4OGEwYzI4MzgxNTJhZDBlN2EiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEJvdWxkZXIgQ291bnR5IEZhcm1lcnMmIzM5OyBNYXJrZXQgLSBMb25nbW9udCAmYW1wOyBCb3VsZGVyPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q1OWE5ZWI2ZTZlNzQzNzg5MGY3Y2Q0YThlOTM5NzdkLnNldENvbnRlbnQoaHRtbF9iN2U1ODk2YWU0NzU0ODg4YTBjMjgzODE1MmFkMGU3YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2IzZmM0MTAxODYyMzQ5ODBhODhlZmEwYzk3YTgzZGFjLmJpbmRQb3B1cChwb3B1cF9kNTlhOWViNmU2ZTc0Mzc4OTBmN2NkNGE4ZTkzOTc3ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2I1NTIyNjI5YzEzZTQ3ZGZhZjBlMzk2OTFkNDc1ZTlmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzYuNjk4LC0xMDUuNjAxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNTY1N2YxZTE1ODI0ZTBlYjQxNjhlNzBjYjZjMjVmNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNWRmMjgyOGUzMzI0ZGMxOGIyYTg3MDRjNjI4MzNjZSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMDVkZjI4MjhlMzMyNGRjMThiMmE4NzA0YzYyODMzY2UiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFF1ZXN0YSBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNTY1N2YxZTE1ODI0ZTBlYjQxNjhlNzBjYjZjMjVmNi5zZXRDb250ZW50KGh0bWxfMDVkZjI4MjhlMzMyNGRjMThiMmE4NzA0YzYyODMzY2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iNTUyMjYyOWMxM2U0N2RmYWYwZTM5NjkxZDQ3NWU5Zi5iaW5kUG9wdXAocG9wdXBfZDU2NTdmMWUxNTgyNGUwZWI0MTY4ZTcwY2I2YzI1ZjYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mYTZjODcxOTMwZTU0MTc0OTA1MWU3YmRkYzZkZDJhMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMyLjg5OTQ3NzEsLTEwNS45NTkzMzg0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lNDIyMGJjNTVkNmY0ZDJmYjk4MGIyODU4MDg4ZWExZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMjBkMDIxOTk0MmU0YzQxOWRhYjQ5MWIwMTBhZTkzNCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMzIwZDAyMTk5NDJlNGM0MTlkYWI0OTFiMDEwYWU5MzQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEFsYW1vZ29yZG8gRmFybWVycyYjMzk7IE1hcmtldCAtRG93bnRvd248L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTQyMjBiYzU1ZDZmNGQyZmI5ODBiMjg1ODA4OGVhMWUuc2V0Q29udGVudChodG1sXzMyMGQwMjE5OTQyZTRjNDE5ZGFiNDkxYjAxMGFlOTM0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZmE2Yzg3MTkzMGU1NDE3NDkwNTFlN2JkZGM2ZGQyYTAuYmluZFBvcHVwKHBvcHVwX2U0MjIwYmM1NWQ2ZjRkMmZiOTgwYjI4NTgwODhlYTFlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjU2M2UzMWVhYjM4NDM5ZjhjZTgzZmExZDE5NjQ2YTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOC41MzQ5MjA5LC0xMDQuNjc0NzgwN10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTQ2YjY0NGZhYTc3NDA4YmI0YjY3NTRkZjY4ZmM2YTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjQzYzYxNzM4N2RlNGM2NzhhMzFkMWRiYmZlMjcwZjcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2Y0M2M2MTczODdkZTRjNjc4YTMxZDFkYmJmZTI3MGY3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBSYW5jaG8gRmFybSAmYW1wOyBBcnQgbWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk0NmI2NDRmYWE3NzQwOGJiNGI2NzU0ZGY2OGZjNmE3LnNldENvbnRlbnQoaHRtbF9mNDNjNjE3Mzg3ZGU0YzY3OGEzMWQxZGJiZmUyNzBmNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2I1NjNlMzFlYWIzODQzOWY4Y2U4M2ZhMWQxOTY0NmE2LmJpbmRQb3B1cChwb3B1cF85NDZiNjQ0ZmFhNzc0MDhiYjRiNjc1NGRmNjhmYzZhNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzhiZDllZTVjMDZhOTRkNTVhZDIwMWE0ZTM0YjIzOWJmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNjIzNjkwNCwtMTA0Ljc4MDg5OThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQzY2JhMDJlOWRhMjRlOTU4ZTJiY2M1ZWNkMDgxZmNmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA2YWM0NmFkNTNlNDRmYjJhMWU2NzU3YWFmNjQxMGRhID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8wNmFjNDZhZDUzZTQ0ZmIyYTFlNjc1N2FhZjY0MTBkYSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgV2Fsc2VuYnVyZyBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80M2NiYTAyZTlkYTI0ZTk1OGUyYmNjNWVjZDA4MWZjZi5zZXRDb250ZW50KGh0bWxfMDZhYzQ2YWQ1M2U0NGZiMmExZTY3NTdhYWY2NDEwZGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84YmQ5ZWU1YzA2YTk0ZDU1YWQyMDFhNGUzNGIyMzliZi5iaW5kUG9wdXAocG9wdXBfNDNjYmEwMmU5ZGEyNGU5NThlMmJjYzVlY2QwODFmY2YpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81ZTJmZWQxMTk5YTk0OTkyODEzNzRhOWM0ZjEzYWRmYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjA1NDU1MjEsLTEwNC45NTMyNTY5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMWIwODZjODRhNjY0OGU5YjRhYjZlOGY3YjNjMDk5MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMTFjNzQ3ZTQ2N2E0YzBiOWVmNDQxZjkxNWYwNWE4ZCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZjExYzc0N2U0NjdhNGMwYjllZjQ0MWY5MTVmMDVhOGQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFdoZWF0bGFuZCBGYXJtZXJzJiMzOTsgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IxYjA4NmM4NGE2NjQ4ZTliNGFiNmU4ZjdiM2MwOTkxLnNldENvbnRlbnQoaHRtbF9mMTFjNzQ3ZTQ2N2E0YzBiOWVmNDQxZjkxNWYwNWE4ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzVlMmZlZDExOTlhOTQ5OTI4MTM3NGE5YzRmMTNhZGZiLmJpbmRQb3B1cChwb3B1cF9iMWIwODZjODRhNjY0OGU5YjRhYjZlOGY3YjNjMDk5MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2QzMDIyNzM0NTBkMzQwZmU5OTFjNDNjMmJiYzc2YjUxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNDc5NzExLC0xMDQuOTA0MTA2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNDMxNGZkYjNjYzk0NjE5YmUxMmNlYTRhMmVhZjNkNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lYzEyNzViODJiMjg0OTM1OTdhNTgzYmMxMzFjZGI5MSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZWMxMjc1YjgyYjI4NDkzNTk3YTU4M2JjMTMxY2RiOTEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFdpbmRzb3IgRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNDMxNGZkYjNjYzk0NjE5YmUxMmNlYTRhMmVhZjNkNS5zZXRDb250ZW50KGh0bWxfZWMxMjc1YjgyYjI4NDkzNTk3YTU4M2JjMTMxY2RiOTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kMzAyMjczNDUwZDM0MGZlOTkxYzQzYzJiYmM3NmI1MS5iaW5kUG9wdXAocG9wdXBfMTQzMTRmZGIzY2M5NDYxOWJlMTJjZWE0YTJlYWYzZDUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iMzM4OWNlYWYzOTE0ZTBkYjNmMzNiZjE3MmI1MWYyNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU4NzgyNzUsLTEwNS4wNzc1ODU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81Njc4NmFkZWU3ZjY0ZjcxOTlhMTA5MTY1ZGYzNjNjYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZmFlOGQ0Y2MwNTA0MDIxYWUzOGZkZjgxODM3N2U5NSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZmZhZThkNGNjMDUwNDAyMWFlMzhmZGY4MTgzNzdlOTUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIE5vQ28gRm9vZCBDbHVzdGVyIFdpbnRlciBGYXJtZXJzJiMzOTsgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU2Nzg2YWRlZTdmNjRmNzE5OWExMDkxNjVkZjM2M2NiLnNldENvbnRlbnQoaHRtbF9mZmFlOGQ0Y2MwNTA0MDIxYWUzOGZkZjgxODM3N2U5NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2IzMzg5Y2VhZjM5MTRlMGRiM2YzM2JmMTcyYjUxZjI2LmJpbmRQb3B1cChwb3B1cF81Njc4NmFkZWU3ZjY0ZjcxOTlhMTA5MTY1ZGYzNjNjYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzBmMDUzNmQ1ZjUxOTQ2MGNhZDcyZjQ1YmVlZjEwZGNkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNjE3NTE4LC0xMDQuODk5ODcxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZWEwMTEyMDQzZTM0Y2I0YmVjNDc4MGY2YTFkYTU2ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZjE2YzYzYzczMTg0N2RiYTAyZmUzZWIwMDk1NzM1YyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfN2YxNmM2M2M3MzE4NDdkYmEwMmZlM2ViMDA5NTczNWMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIExhbmRtYXJrIEdyZWVud29vZCBWaWxsYWdlIEZyZXNoIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZWEwMTEyMDQzZTM0Y2I0YmVjNDc4MGY2YTFkYTU2ZC5zZXRDb250ZW50KGh0bWxfN2YxNmM2M2M3MzE4NDdkYmEwMmZlM2ViMDA5NTczNWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wZjA1MzZkNWY1MTk0NjBjYWQ3MmY0NWJlZWYxMGRjZC5iaW5kUG9wdXAocG9wdXBfNGVhMDExMjA0M2UzNGNiNGJlYzQ3ODBmNmExZGE1NmQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zMTI0ZjJiZjEzMzE0OWEyOTZhNjBlYTk5MDhiZDI2MCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5Ljc0MDg3LC0xMDQuOTU2ODYzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NmZjMjQxOTg5ZDc0ZjlkYjhmZTU0ZWM4YzJjYjI5OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYTQyMjg5Mjk4NjI0MzU0YjM4NzU2Nzk2MzNjMTI2OCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfY2E0MjI4OTI5ODYyNDM1NGIzODc1Njc5NjMzYzEyNjgiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENpdHkgUGFyayBFc3BsYW5hZGUgRnJlc2ggTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU2ZmMyNDE5ODlkNzRmOWRiOGZlNTRlYzhjMmNiMjk5LnNldENvbnRlbnQoaHRtbF9jYTQyMjg5Mjk4NjI0MzU0YjM4NzU2Nzk2MzNjMTI2OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzMxMjRmMmJmMTMzMTQ5YTI5NmE2MGVhOTkwOGJkMjYwLmJpbmRQb3B1cChwb3B1cF81NmZjMjQxOTg5ZDc0ZjlkYjhmZTU0ZWM4YzJjYjI5OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzk2NmVlYWZhNjEwZTQxYjQ5NmE2M2Y4NzQyYzQ1MDJmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNzU4MDQzLC0xMDQuODk5NzQzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMjI3MmNkODFkOGQ0ZDZjYTcyZjdhYzE0NWFkODRlMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81YjE3N2FhZDY1YWI0ZTdkOTQ2ZmE3NTllZTMxOGMzZCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNWIxNzdhYWQ2NWFiNGU3ZDk0NmZhNzU5ZWUzMThjM2QiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFN0YXBsZXRvbiBGcmVzaCBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTIyNzJjZDgxZDhkNGQ2Y2E3MmY3YWMxNDVhZDg0ZTMuc2V0Q29udGVudChodG1sXzViMTc3YWFkNjVhYjRlN2Q5NDZmYTc1OWVlMzE4YzNkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTY2ZWVhZmE2MTBlNDFiNDk2YTYzZjg3NDJjNDUwMmYuYmluZFBvcHVwKHBvcHVwXzEyMjcyY2Q4MWQ4ZDRkNmNhNzJmN2FjMTQ1YWQ4NGUzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZGZmNDQ4MGZhZTI2NDVhNjlhMTlmZTgzNTZmMjhjODggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOS42MiwtMTA1LjI0MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWYwNGE4YzQxN2U2NDlmMDlmZDkxMzJiOGJkOGJhYzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDQ1NDA4ZmNhMTY0NGRhY2FmOWRiMTE4MzU1NzZlMzIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2Q0NTQwOGZjYTE2NDRkYWNhZjlkYjExODM1NTc2ZTMyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBJbmRpYW4gSGlsbHMgRmFybWVyJiMzOTtzIE1hcmtldCA8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWYwNGE4YzQxN2U2NDlmMDlmZDkxMzJiOGJkOGJhYzMuc2V0Q29udGVudChodG1sX2Q0NTQwOGZjYTE2NDRkYWNhZjlkYjExODM1NTc2ZTMyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZGZmNDQ4MGZhZTI2NDVhNjlhMTlmZTgzNTZmMjhjODguYmluZFBvcHVwKHBvcHVwXzlmMDRhOGM0MTdlNjQ5ZjA5ZmQ5MTMyYjhiZDhiYWMzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjA1N2YwMDZmMDlkNDQxNDhjYTgyMzdmZjU3YjU1NDIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOS43NTkwMjUsLTEwNC40MzMzNTVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgyOWVhZmZlNTYyMTQwOTQ5ZmU0Mzc2YjIxN2EyYmM0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZiMzNlMDUxMGM2ZDRlMDdhYWMzZWU4MzhmNGIwZDk1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF82YjMzZTA1MTBjNmQ0ZTA3YWFjM2VlODM4ZjRiMGQ5NSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRmFybWVycyAmYW1wOyBBcnRpc2FucyBDb21tdW5pdHkgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgyOWVhZmZlNTYyMTQwOTQ5ZmU0Mzc2YjIxN2EyYmM0LnNldENvbnRlbnQoaHRtbF82YjMzZTA1MTBjNmQ0ZTA3YWFjM2VlODM4ZjRiMGQ5NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2IwNTdmMDA2ZjA5ZDQ0MTQ4Y2E4MjM3ZmY1N2I1NTQyLmJpbmRQb3B1cChwb3B1cF84MjllYWZmZTU2MjE0MDk0OWZlNDM3NmIyMTdhMmJjNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2JkOWM0MTdiZDNhNjQ1ZTk4OWI1NDcxYjFlYzliOThhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguNDM3NDc4LC0xMDUuMjQzNDQxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lNzZmY2JlYmFiMjA0ZTQ4OWVkZWVhNTYzNDcwOTAwMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NjM0YjQzYzlkMjE0YmU0OTM3ODY0YzFlMmNlYjQ3NiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfODYzNGI0M2M5ZDIxNGJlNDkzNzg2NGMxZTJjZWI0NzYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENDRkEgRmFybWVycyBNYXJrZXQgQ2Fub24gQ2l0eTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNzZmY2JlYmFiMjA0ZTQ4OWVkZWVhNTYzNDcwOTAwMy5zZXRDb250ZW50KGh0bWxfODYzNGI0M2M5ZDIxNGJlNDkzNzg2NGMxZTJjZWI0NzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iZDljNDE3YmQzYTY0NWU5ODliNTQ3MWIxZWM5Yjk4YS5iaW5kUG9wdXAocG9wdXBfZTc2ZmNiZWJhYjIwNGU0ODllZGVlYTU2MzQ3MDkwMDMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83MTI3OGNmM2VlZmE0ODA4ODZhODFjNmM4YTRhMmY5OSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjUzMjY1NywtMTA1Ljk5NDEyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ODgxNDAyOTliYjk0YjZlYjc0MjgxNzdjYjNiM2Q2MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MGZiMjY2NGU5NjE0OTYwOWQwYzk4MTc2MjJlZDU2YSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOTBmYjI2NjRlOTYxNDk2MDlkMGM5ODE3NjIyZWQ1NmEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENDRkEgU2FsaWRhIEZhcm1lcnMgTWFya2V0IDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ODgxNDAyOTliYjk0YjZlYjc0MjgxNzdjYjNiM2Q2MC5zZXRDb250ZW50KGh0bWxfOTBmYjI2NjRlOTYxNDk2MDlkMGM5ODE3NjIyZWQ1NmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83MTI3OGNmM2VlZmE0ODA4ODZhODFjNmM4YTRhMmY5OS5iaW5kUG9wdXAocG9wdXBfNTg4MTQwMjk5YmI5NGI2ZWI3NDI4MTc3Y2IzYjNkNjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kNDczZTg4MzI1OTg0NGQxYWQyOTU0OTc4YmU2ODQ2MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjkyODQzLC0xMDUuMDg5OTMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ODZjYWZkMDk3ZGY0MGM5OWVjZDE5OTE3N2VkN2M3NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMDRjODY1ZWMwYTI0OTQwODhjMWNmZWM1ZGY1NzBhYiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZjA0Yzg2NWVjMGEyNDk0MDg4YzFjZmVjNWRmNTcwYWIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEJyb29tZmllbGQgRmFybWVycyYjMzk7IE1hcmtldCBhdCBIb2x5IENvbWZvcnRlciBFcGlzY29wYWwgQ2h1cmNoPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc4NmNhZmQwOTdkZjQwYzk5ZWNkMTk5MTc3ZWQ3Yzc3LnNldENvbnRlbnQoaHRtbF9mMDRjODY1ZWMwYTI0OTQwODhjMWNmZWM1ZGY1NzBhYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Q0NzNlODgzMjU5ODQ0ZDFhZDI5NTQ5NzhiZTY4NDYxLmJpbmRQb3B1cChwb3B1cF83ODZjYWZkMDk3ZGY0MGM5OWVjZDE5OTE3N2VkN2M3Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2I2OGJhZWQzOTFjNzQ5NzQ4ZTRmOTMxZGFmODBiM2FlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuOTI1MDA1MiwtMTA1Ljc4NjQ3NjhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I1NmFlYTNhZGM5OTQ0YThhZjkyM2U0ODU2MDQ5MGE4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NlZWFiZGEwNWFmODRkOWRiYWI0YTBlZTdmMjg5YjRhID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jZWVhYmRhMDVhZjg0ZDlkYmFiNGEwZWU3ZjI4OWI0YSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgV2ludGVyIFBhcmsgRmFybWVycyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjU2YWVhM2FkYzk5NDRhOGFmOTIzZTQ4NTYwNDkwYTguc2V0Q29udGVudChodG1sX2NlZWFiZGEwNWFmODRkOWRiYWI0YTBlZTdmMjg5YjRhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjY4YmFlZDM5MWM3NDk3NDhlNGY5MzFkYWY4MGIzYWUuYmluZFBvcHVwKHBvcHVwX2I1NmFlYTNhZGM5OTQ0YThhZjkyM2U0ODU2MDQ5MGE4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTM1ZTYxM2I0MGE3NDQ1Mjk2YTI3Njk0MDQxZjA5ZGIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi4wNjUzNywtMTA0LjE4NDM5NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWFmYWRmNjdjMWNlNGFjZTg0M2EzOTJkZTkwYjYyNDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDZiYjEwNGEzMzdiNDE5MWJmZTQwNmM0ODIzMzgyNTggPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzQ2YmIxMDRhMzM3YjQxOTFiZmU0MDZjNDgyMzM4MjU4IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBUb3JyaW5ndG9uIEZhcm1lciYjMzk7cyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWFmYWRmNjdjMWNlNGFjZTg0M2EzOTJkZTkwYjYyNDguc2V0Q29udGVudChodG1sXzQ2YmIxMDRhMzM3YjQxOTFiZmU0MDZjNDgyMzM4MjU4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTM1ZTYxM2I0MGE3NDQ1Mjk2YTI3Njk0MDQxZjA5ZGIuYmluZFBvcHVwKHBvcHVwXzVhZmFkZjY3YzFjZTRhY2U4NDNhMzkyZGU5MGI2MjQ4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMmY2M2JhOTJkMDc2NDM4M2FkNjUxZTVmNDhkNDNiMjQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOS44ODkxNTUsLTEwNC45OTExODJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJlNTYwNWRlN2JjYTRhZjE5NDY3MjhjNmJkMDYyOWViID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVjMWFjZjNiYTdmMjRiYzE4ZjgxZGE3MWRhNzQ5YWI5ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF81YzFhY2YzYmE3ZjI0YmMxOGY4MWRhNzFkYTc0OWFiOSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgTm9ydGhnbGVubiBNYWxsIEZhcm1lcnMgbWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJlNTYwNWRlN2JjYTRhZjE5NDY3MjhjNmJkMDYyOWViLnNldENvbnRlbnQoaHRtbF81YzFhY2YzYmE3ZjI0YmMxOGY4MWRhNzFkYTc0OWFiOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzJmNjNiYTkyZDA3NjQzODNhZDY1MWU1ZjQ4ZDQzYjI0LmJpbmRQb3B1cChwb3B1cF8yZTU2MDVkZTdiY2E0YWYxOTQ2NzI4YzZiZDA2MjllYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzlmNzNjMGMwNWExMjQ4MzFiZTdlZTI0NmEyNWNlYWZiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNjAxODQ3LC0xMDQuOTU4MDc3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZDFlMjU1MzE0OTk0NDQ1OTExYmNhZTdlMTJiZTU2MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMzA5NmFiYWMwYjI0NTI5OTBiZTUzMDk0YzdlMTNlOSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZDMwOTZhYmFjMGIyNDUyOTkwYmU1MzA5NGM3ZTEzZTkiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFRoZSBWaWN0b3J5IE1hcmtldCBvbiBTb3V0aCBVbml2ZXJzaXR5IDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZDFlMjU1MzE0OTk0NDQ1OTExYmNhZTdlMTJiZTU2MC5zZXRDb250ZW50KGh0bWxfZDMwOTZhYmFjMGIyNDUyOTkwYmU1MzA5NGM3ZTEzZTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85ZjczYzBjMDVhMTI0ODMxYmU3ZWUyNDZhMjVjZWFmYi5iaW5kUG9wdXAocG9wdXBfNGQxZTI1NTMxNDk5NDQ0NTkxMWJjYWU3ZTEyYmU1NjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hNzNlN2ZjMGRlMDc0ZDU2ODBhM2I3NTJlYjk3MTA2NyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjA4NDksLTEwNS45MzddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U4YWY4OGE3NjUzMTQ1MTZiNzM1NzNiY2VkMzQ2NjE1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZhMTc5Yzc3ZDlhZDRlNzk4YTI0NzQ0OTk5YjAwMzhkID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF82YTE3OWM3N2Q5YWQ0ZTc5OGEyNDc0NDk5OWIwMDM4ZCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR3JhbmJ5IEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U4YWY4OGE3NjUzMTQ1MTZiNzM1NzNiY2VkMzQ2NjE1LnNldENvbnRlbnQoaHRtbF82YTE3OWM3N2Q5YWQ0ZTc5OGEyNDc0NDk5OWIwMDM4ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2E3M2U3ZmMwZGUwNzRkNTY4MGEzYjc1MmViOTcxMDY3LmJpbmRQb3B1cChwb3B1cF9lOGFmODhhNzY1MzE0NTE2YjczNTczYmNlZDM0NjYxNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzdjMDQ2MzdlYTQ2NTRiNDFhNjQ3ZGFmYjE3YTY0ZjAyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNTE4NiwtMTA0Ljc2MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTllMTBmMDBiM2IzNDYzZTk5YzhiYWFjYzkyZjg0ZDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGI5YTViMThkZjIzNDc3NmJjZTY5OWRiZWM0MzkyMTQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzRiOWE1YjE4ZGYyMzQ3NzZiY2U2OTlkYmVjNDM5MjE0IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBQYXJrZXJmZXN0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk5ZTEwZjAwYjNiMzQ2M2U5OWM4YmFhY2M5MmY4NGQ4LnNldENvbnRlbnQoaHRtbF80YjlhNWIxOGRmMjM0Nzc2YmNlNjk5ZGJlYzQzOTIxNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzdjMDQ2MzdlYTQ2NTRiNDFhNjQ3ZGFmYjE3YTY0ZjAyLmJpbmRQb3B1cChwb3B1cF85OWUxMGYwMGIzYjM0NjNlOTljOGJhYWNjOTJmODRkOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2M2OTgxZjI2ZTkzYTRjOWI5OGQ2YzdkMDc0ZjYyZDBiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNTQ1MzgzLC0xMDUuNTczMTg0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MWFhODZkOTk5NDU0MGNkODYwNGUyZWJmMzdkNTRlYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYThlMzA3NzU5MGU0YTZjOTgxMzhiYTIzOTI5NjAyMCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYWE4ZTMwNzc1OTBlNGE2Yzk4MTM4YmEyMzkyOTYwMjAiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhcGl0YW4gRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MWFhODZkOTk5NDU0MGNkODYwNGUyZWJmMzdkNTRlYy5zZXRDb250ZW50KGh0bWxfYWE4ZTMwNzc1OTBlNGE2Yzk4MTM4YmEyMzkyOTYwMjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jNjk4MWYyNmU5M2E0YzliOThkNmM3ZDA3NGY2MmQwYi5iaW5kUG9wdXAocG9wdXBfODFhYTg2ZDk5OTQ1NDBjZDg2MDRlMmViZjM3ZDU0ZWMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82ZDdhN2ZjODMwMmE0NDBhYjY4MDkyZDcyMzg3MGNiYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjI2OCwtMTA0LjYxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMWQ2NWNhZTRhYWM0ZTMwYWNjOTc0YmYzNWRlNDllZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMjlkZmJjYmRjODU0N2M0OTk2YjgxY2IwMGE3N2E2MSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZDI5ZGZiY2JkYzg1NDdjNDk5NmI4MWNiMDBhNzdhNjEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFRoZSBNYWluIEV2ZW50IGFuZCBGYXJtZXJzJiMzOTsgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAxZDY1Y2FlNGFhYzRlMzBhY2M5NzRiZjM1ZGU0OWVmLnNldENvbnRlbnQoaHRtbF9kMjlkZmJjYmRjODU0N2M0OTk2YjgxY2IwMGE3N2E2MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzZkN2E3ZmM4MzAyYTQ0MGFiNjgwOTJkNzIzODcwY2JiLmJpbmRQb3B1cChwb3B1cF8wMWQ2NWNhZTRhYWM0ZTMwYWNjOTc0YmYzNWRlNDllZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZiZTMyZmRmMTc0MTQyMTI4NDRhMDRlMGE5ODk5NzE0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODMwNTQzLC0xMDQuODIyMzA5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZjgyMzAyMmY4NDc0MWIyOTVkZTdhMzM5YTIyM2UzZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85N2M1MDRlMGQzZDI0OWE1OGZlOTdhOWQ0NzMxOTc4OSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOTdjNTA0ZTBkM2QyNDlhNThmZTk3YTlkNDczMTk3ODkiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENvbG9yYWRvIEZhcm0gYW5kIEFydCBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWY4MjMwMjJmODQ3NDFiMjk1ZGU3YTMzOWEyMjNlM2Quc2V0Q29udGVudChodG1sXzk3YzUwNGUwZDNkMjQ5YTU4ZmU5N2E5ZDQ3MzE5Nzg5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNmJlMzJmZGYxNzQxNDIxMjg0NGEwNGUwYTk4OTk3MTQuYmluZFBvcHVwKHBvcHVwX2VmODIzMDIyZjg0NzQxYjI5NWRlN2EzMzlhMjIzZTNkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzJhNDM5M2Q5Mjk1NDJmYmFjNGNkNGE4MzVjMjhiMzUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOS41NTQ3LC0xMDQuODg1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83M2MyZTA4OWRmNGM0MjNhOWM4NmM3Y2E1M2YxNjc2NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZmJmYTBkNThkMmE0NDA1YjZhYTBlNmQyY2M3Yjk3ZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMmZiZmEwZDU4ZDJhNDQwNWI2YWEwZTZkMmNjN2I5N2YiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIExvbmV0cmVlIEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzczYzJlMDg5ZGY0YzQyM2E5Yzg2YzdjYTUzZjE2NzY3LnNldENvbnRlbnQoaHRtbF8yZmJmYTBkNThkMmE0NDA1YjZhYTBlNmQyY2M3Yjk3Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzcyYTQzOTNkOTI5NTQyZmJhYzRjZDRhODM1YzI4YjM1LmJpbmRQb3B1cChwb3B1cF83M2MyZTA4OWRmNGM0MjNhOWM4NmM3Y2E1M2YxNjc2Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzBhMDUwMTViNDY3YTQ3NzI5NjIwZWM5ZDQ4NDk1YmNlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNTM1NSwtMTA0Ljc4NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2I2MzcwMDhkMDBkNGZkMmFhMGYzMGNiOTI5Y2FiYjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2UwMGI0YjFkMmQ1NGZiMWEzZDQ4NTk4MTMwYzVhYzEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2NlMDBiNGIxZDJkNTRmYjFhM2Q0ODU5ODEzMGM1YWMxIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBQYXJrZXIgRmFybWVycyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2I2MzcwMDhkMDBkNGZkMmFhMGYzMGNiOTI5Y2FiYjkuc2V0Q29udGVudChodG1sX2NlMDBiNGIxZDJkNTRmYjFhM2Q0ODU5ODEzMGM1YWMxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMGEwNTAxNWI0NjdhNDc3Mjk2MjBlYzlkNDg0OTViY2UuYmluZFBvcHVwKHBvcHVwXzNiNjM3MDA4ZDAwZDRmZDJhYTBmMzBjYjkyOWNhYmI5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDM2MzhjMTgzYjdjNGZiOTkxMzFjZTA1N2RjZTNiMDggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45Mzc3MTYsLTEwNC44MTQ2ODhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFlYzg5MzA4M2QzNjQ3Y2Y5Y2U5YzU3ZTk1MGFhZDA2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IyY2RmZTdkNTVmNjQxZmJiNmU0OTZmMmZiNDA1OGNjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9iMmNkZmU3ZDU1ZjY0MWZiYjZlNDk2ZjJmYjQwNThjYyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ29sb3JhZG8gRmFybSBhbmQgQXJ0IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZWM4OTMwODNkMzY0N2NmOWNlOWM1N2U5NTBhYWQwNi5zZXRDb250ZW50KGh0bWxfYjJjZGZlN2Q1NWY2NDFmYmI2ZTQ5NmYyZmI0MDU4Y2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80MzYzOGMxODNiN2M0ZmI5OTEzMWNlMDU3ZGNlM2IwOC5iaW5kUG9wdXAocG9wdXBfMWVjODkzMDgzZDM2NDdjZjljZTljNTdlOTUwYWFkMDYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85ZWZkZGNiNGFjNTI0ZTdjODE4OTM5NzNlOTFlMWIzZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjU0NzA4MiwtMTA0Ljk5OTY0OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGZkNzI4OWQ4MDYwNDgxNWIyOGYxODc2Mjc2N2M5N2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmM5MTIwMmJhMWI5NDM0OGE0MDUzNWI5ODdjNmM0YTIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzJjOTEyMDJiYTFiOTQzNDhhNDA1MzViOTg3YzZjNGEyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBIaWdobGFuZHMgUmFuY2ggRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZmQ3Mjg5ZDgwNjA0ODE1YjI4ZjE4NzYyNzY3Yzk3Yy5zZXRDb250ZW50KGh0bWxfMmM5MTIwMmJhMWI5NDM0OGE0MDUzNWI5ODdjNmM0YTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85ZWZkZGNiNGFjNTI0ZTdjODE4OTM5NzNlOTFlMWIzZi5iaW5kUG9wdXAocG9wdXBfZGZkNzI4OWQ4MDYwNDgxNWIyOGYxODc2Mjc2N2M5N2MpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wZmRmMjBjY2YxYzA0Y2ZiODNhMmY0N2JmODhmMzhmOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjYxMDg1NiwtMTA1LjA5MjY3MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGEwY2E3MGVmMDZiNDU0NDlhOTBjNzcxMTJmYTM0OTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjliOWZjODNkM2E2NDUwNWE5MjQ4ODExZTM0NGU1Y2MgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2Y5YjlmYzgzZDNhNjQ1MDVhOTI0ODgxMWUzNDRlNWNjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTb3V0aHdlc3QgUGxhemEgRmFybWVycyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGEwY2E3MGVmMDZiNDU0NDlhOTBjNzcxMTJmYTM0OTIuc2V0Q29udGVudChodG1sX2Y5YjlmYzgzZDNhNjQ1MDVhOTI0ODgxMWUzNDRlNWNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMGZkZjIwY2NmMWMwNGNmYjgzYTJmNDdiZjg4ZjM4ZjkuYmluZFBvcHVwKHBvcHVwXzBhMGNhNzBlZjA2YjQ1NDQ5YTkwYzc3MTEyZmEzNDkyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTlhOThjMGRiZmJlNDgyZWIwMWI0MGQxMTUzNWM5MmIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOS43MDY5LC0xMDUuNjk3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZWNkNzRiNzQ2ZDk0MWJkYjNjYTU1YTJkOGFjZmU0ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wZDEyNWYzNDM2Yjc0YTc4OWEyOTI3YTI1NmQ3ZDE0OCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMGQxMjVmMzQzNmI3NGE3ODlhMjkyN2EyNTZkN2QxNDgiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlb3JnZXRvd24gRmFybWVycyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGVjZDc0Yjc0NmQ5NDFiZGIzY2E1NWEyZDhhY2ZlNGQuc2V0Q29udGVudChodG1sXzBkMTI1ZjM0MzZiNzRhNzg5YTI5MjdhMjU2ZDdkMTQ4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTlhOThjMGRiZmJlNDgyZWIwMWI0MGQxMTUzNWM5MmIuYmluZFBvcHVwKHBvcHVwXzBlY2Q3NGI3NDZkOTQxYmRiM2NhNTVhMmQ4YWNmZTRkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTNjMTY0Mzg4OTI4NDk2Y2I2NTkzOGE1YmU3YWNlOTIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOS43MzI4LC0xMDUuMDA2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZGFmYTIzMGZhYmQ0MmUzOTI2YmJkYWZmMmU2ODFhNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNWE0OTgzOTQyYzA0ZmRjYmEzOTk5ODE0ZjM0ZjVlYSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMDVhNDk4Mzk0MmMwNGZkY2JhMzk5OTgxNGYzNGY1ZWEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFRoZSBPc2FnZSBNZXJjYWRvPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NkYWZhMjMwZmFiZDQyZTM5MjZiYmRhZmYyZTY4MWE2LnNldENvbnRlbnQoaHRtbF8wNWE0OTgzOTQyYzA0ZmRjYmEzOTk5ODE0ZjM0ZjVlYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2EzYzE2NDM4ODkyODQ5NmNiNjU5MzhhNWJlN2FjZTkyLmJpbmRQb3B1cChwb3B1cF9jZGFmYTIzMGZhYmQ0MmUzOTI2YmJkYWZmMmU2ODFhNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzAxMTBiMWRjYmVlMzQ5MDdhOGNjM2VhZDM3NmI0MmU4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNzExMTAwNywtMTA1LjA4MTM1NTJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdjMmFhN2RmY2JmMzQwOTM4MTBkMTBiNWRiMGI5N2EyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNjYzQ4MTY1MDJiODQwNGZiMjRhZjE2ZDkxMWQwMjVjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8zY2M0ODE2NTAyYjg0MDRmYjI0YWYxNmQ5MTFkMDI1YyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQmVsbWFyIEZyZXNoIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83YzJhYTdkZmNiZjM0MDkzODEwZDEwYjVkYjBiOTdhMi5zZXRDb250ZW50KGh0bWxfM2NjNDgxNjUwMmI4NDA0ZmIyNGFmMTZkOTExZDAyNWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wMTEwYjFkY2JlZTM0OTA3YThjYzNlYWQzNzZiNDJlOC5iaW5kUG9wdXAocG9wdXBfN2MyYWE3ZGZjYmYzNDA5MzgxMGQxMGI1ZGIwYjk3YTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80MDQyNmQwMjYzNjc0ZjhmYmFlMjNiOTRlMzc2OThiMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5Ljc2OTkwNCwtMTA1LjA3NTI0NzFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRkMzFlYmZmZGM3ODQyNzQ4MjM2NmY5YWVjMGFlY2EyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E3YmJhYjUwNDg4YzQwYzNiMTdjNjdiMjNlYzY0Y2UxID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9hN2JiYWI1MDQ4OGM0MGMzYjE3YzY3YjIzZWM2NGNlMSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRm91ciBTZWFzb25zIEZhcm1lcnMgYW5kIEFydGlzYW5zIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZDMxZWJmZmRjNzg0Mjc0ODIzNjZmOWFlYzBhZWNhMi5zZXRDb250ZW50KGh0bWxfYTdiYmFiNTA0ODhjNDBjM2IxN2M2N2IyM2VjNjRjZTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80MDQyNmQwMjYzNjc0ZjhmYmFlMjNiOTRlMzc2OThiMS5iaW5kUG9wdXAocG9wdXBfNGQzMWViZmZkYzc4NDI3NDgyMzY2ZjlhZWMwYWVjYTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85MzJhOGEyNDIwMDk0YWYxOTJiMTQwYWQyZDI0ZDgwZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjc1ODg4LC0xMDUuMzg0NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzUzMzlkODAwYjQ2NDJmMGJkZjgwN2NiNmIxODI1NDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWRjZTBkOWExNDA3NGYzYzhkZThhNTg4YzZiZmQ2ZTkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2VkY2UwZDlhMTQwNzRmM2M4ZGU4YTU4OGM2YmZkNmU5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBKYWNrYWxvcGUgU3F1YXJlIEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc1MzM5ZDgwMGI0NjQyZjBiZGY4MDdjYjZiMTgyNTQ2LnNldENvbnRlbnQoaHRtbF9lZGNlMGQ5YTE0MDc0ZjNjOGRlOGE1ODhjNmJmZDZlOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzkzMmE4YTI0MjAwOTRhZjE5MmIxNDBhZDJkMjRkODBlLmJpbmRQb3B1cChwb3B1cF83NTMzOWQ4MDBiNDY0MmYwYmRmODA3Y2I2YjE4MjU0Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzgzZGU5OTRjMTI3YjRhYzg4M2ZmZGZlNTI4MjFhMmE3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzYxMTk1LC0xMDQuNTk1NTUxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80YjQ1NDkwZjY1ZGM0ODFmOWM1NWNjNDRlMDI4OWRlOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kYTUzMTQ2ZGE4ODI0Mzc3OGQ1NTYyZGY0MjliYTc1YiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZGE1MzE0NmRhODgyNDM3NzhkNTU2MmRmNDI5YmE3NWIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEVsaXphYmV0aCBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80YjQ1NDkwZjY1ZGM0ODFmOWM1NWNjNDRlMDI4OWRlOC5zZXRDb250ZW50KGh0bWxfZGE1MzE0NmRhODgyNDM3NzhkNTU2MmRmNDI5YmE3NWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84M2RlOTk0YzEyN2I0YWM4ODNmZmRmZTUyODIxYTJhNy5iaW5kUG9wdXAocG9wdXBfNGI0NTQ5MGY2NWRjNDgxZjljNTVjYzQ0ZTAyODlkZTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82NjZhNzQ5OTAyNzk0MjUzYjFhMGI2ZDM0ODY3NGJhNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM1LjU5MzAxMywtMTA1LjIyNzU0Ml0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjgwMWE3OWNmOTk4NGQ4YWJhZDZiMWNlN2UyNzI0ZjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODJmZjUyZjAzMDZkNDI3OWIwNWIwNmU4NTZhYzQ3ZTIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzgyZmY1MmYwMzA2ZDQyNzliMDViMDZlODU2YWM0N2UyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBMYXMgVmVnYXM6IFRyaS1Db3VudHkgRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iODAxYTc5Y2Y5OTg0ZDhhYmFkNmIxY2U3ZTI3MjRmNi5zZXRDb250ZW50KGh0bWxfODJmZjUyZjAzMDZkNDI3OWIwNWIwNmU4NTZhYzQ3ZTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82NjZhNzQ5OTAyNzk0MjUzYjFhMGI2ZDM0ODY3NGJhNS5iaW5kUG9wdXAocG9wdXBfYjgwMWE3OWNmOTk4NGQ4YWJhZDZiMWNlN2UyNzI0ZjYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80ZTQyMmM5NzRiODg0Yzk4OTYxZmU2MjJjNTM1ZThlMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjM5NjY5NCwtMTA0LjUyMTM5NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmQ3Mjc0MmY2NDQxNDRmYzhkZGYxZDk4MTdkZDBmYzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTBhMmNhMjhhNjY2NGU3MThmNjIyNWE1Mzc0NWM4NzggPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2UwYTJjYTI4YTY2NjRlNzE4ZjYyMjVhNTM3NDVjODc4IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBNYWluIFN0cmVldCBSb3N3ZWxsIEZhcm1lcnMmIzM5OyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmQ3Mjc0MmY2NDQxNDRmYzhkZGYxZDk4MTdkZDBmYzQuc2V0Q29udGVudChodG1sX2UwYTJjYTI4YTY2NjRlNzE4ZjYyMjVhNTM3NDVjODc4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNGU0MjJjOTc0Yjg4NGM5ODk2MWZlNjIyYzUzNWU4ZTIuYmluZFBvcHVwKHBvcHVwX2JkNzI3NDJmNjQ0MTQ0ZmM4ZGRmMWQ5ODE3ZGQwZmM0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMGJkODZjMTZkNjY4NDQwZDkzZDM1OWY0Y2FhMTEyMWEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNi41NTI3NDEsLTEwNS4yNzExNjhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M4ZTAwM2I3ZjY2NDQzZDE4ZDdhNDEwMTUxZDc2YmY1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUzOWZkYTZhMzgyZDQ0ZjQ4NzVlMTkwMmY3OGUzM2FhID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF81MzlmZGE2YTM4MmQ0NGY0ODc1ZTE5MDJmNzhlMzNhYSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgTW9yZW5vIFZhbGxleSBGYXJtZXJzJiMzOTsgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M4ZTAwM2I3ZjY2NDQzZDE4ZDdhNDEwMTUxZDc2YmY1LnNldENvbnRlbnQoaHRtbF81MzlmZGE2YTM4MmQ0NGY0ODc1ZTE5MDJmNzhlMzNhYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzBiZDg2YzE2ZDY2ODQ0MGQ5M2QzNTlmNGNhYTExMjFhLmJpbmRQb3B1cChwb3B1cF9jOGUwMDNiN2Y2NjQ0M2QxOGQ3YTQxMDE1MWQ3NmJmNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2E4N2ZmYjc0MTkwNTRjYjRiNWZhMGZmMjJiN2UyYmY5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuMDQ5MTc0MSwtMTA1LjA0NzQyMDFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YwZTgzMTE5YjU3MzQ1NzRhYzIwNTFlZDlmN2ZkY2IwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ1NjRlOWQxNDNiYTQxNmE5MGUyOGI0NmU3YWQ1ODg3ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF80NTY0ZTlkMTQzYmE0MTZhOTBlMjhiNDZlN2FkNTg4NyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRXJpZSBGYXJtZXJzJiMzOTsgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YwZTgzMTE5YjU3MzQ1NzRhYzIwNTFlZDlmN2ZkY2IwLnNldENvbnRlbnQoaHRtbF80NTY0ZTlkMTQzYmE0MTZhOTBlMjhiNDZlN2FkNTg4Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2E4N2ZmYjc0MTkwNTRjYjRiNWZhMGZmMjJiN2UyYmY5LmJpbmRQb3B1cChwb3B1cF9mMGU4MzExOWI1NzM0NTc0YWMyMDUxZWQ5ZjdmZGNiMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzJjYjJiMmM3YjkyYjQ2YzE4NWZiNzcxMTE4YmE5N2U4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzIuOTI2NDksLTEwNS45NjA2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jODY1Nzk2ZWFjMjc0OTY2OWQ4MzkyODE2MzM1NzkxMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNzYwYmJlZWIzZmU0NzMwODg1MjJkMWQzNjc0YWZlYyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZDc2MGJiZWViM2ZlNDczMDg4NTIyZDFkMzY3NGFmZWMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEFsYW1vZ29yZG8gT3Rlcm8gQ291bnR5IEZhcm1lcnMmIzM5OyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzg2NTc5NmVhYzI3NDk2NjlkODM5MjgxNjMzNTc5MTIuc2V0Q29udGVudChodG1sX2Q3NjBiYmVlYjNmZTQ3MzA4ODUyMmQxZDM2NzRhZmVjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMmNiMmIyYzdiOTJiNDZjMTg1ZmI3NzExMThiYTk3ZTguYmluZFBvcHVwKHBvcHVwX2M4NjU3OTZlYWMyNzQ5NjY5ZDgzOTI4MTYzMzU3OTEyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZGQ4ZWY0YzU1NDcyNDc1N2JmNDhmZjM4MWQ1MTA0ZjQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC4xMDExLC0xMDUuMTY5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMWVmZWFkZGE5ZjY0ODY3YmQ5YTZkNGU5ZGM1ODhlNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZGZjYTdhMDBjZTU0MDljODk3ZjEyOTBmMjdiNzRkZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMWRmY2E3YTAwY2U1NDA5Yzg5N2YxMjkwZjI3Yjc0ZGYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIE5pd290IEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IxZWZlYWRkYTlmNjQ4NjdiZDlhNmQ0ZTlkYzU4OGU0LnNldENvbnRlbnQoaHRtbF8xZGZjYTdhMDBjZTU0MDljODk3ZjEyOTBmMjdiNzRkZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2RkOGVmNGM1NTQ3MjQ3NTdiZjQ4ZmYzODFkNTEwNGY0LmJpbmRQb3B1cChwb3B1cF9iMWVmZWFkZGE5ZjY0ODY3YmQ5YTZkNGU5ZGM1ODhlNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2FiODNjZjg5MWM5YTQwNDE4ZDE3NGNlMGYxMmUyYjNkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzYuNDA3MTUyLC0xMDUuNTc0NjA2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZjY3MGUzMTk3NjQ0NmI0YWRjNWY2NGE5NzAyZWY2ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZDQ5NzBkZjk4ZTE0NzVhYmRhZTQxNDdmMjMxNzBjMyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOWQ0OTcwZGY5OGUxNDc1YWJkYWU0MTQ3ZjIzMTcwYzMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFRhb3MgRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZjY3MGUzMTk3NjQ0NmI0YWRjNWY2NGE5NzAyZWY2ZS5zZXRDb250ZW50KGh0bWxfOWQ0OTcwZGY5OGUxNDc1YWJkYWU0MTQ3ZjIzMTcwYzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hYjgzY2Y4OTFjOWE0MDQxOGQxNzRjZTBmMTJlMmIzZC5iaW5kUG9wdXAocG9wdXBfZWY2NzBlMzE5NzY0NDZiNGFkYzVmNjRhOTcwMmVmNmUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hYzAzYjdkOGUzYTI0YTA0ODcwNTg3YzlhMzJhZTM1NiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjIzNzI5MywtMTA0Ljk5OTQ4OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzc4NTRiMTA1YmQ5NDE5MDk3YTZmY2M5Nzc3ODUyYmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWMyMjBjMWIwYWZlNDliMWE3NmNmNTE5ZGY1YThmZGUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2VjMjIwYzFiMGFmZTQ5YjFhNzZjZjUxOWRmNWE4ZmRlIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBEb3dudG93biBNZWFkIEZhcm1lcnMmIzM5OyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzc4NTRiMTA1YmQ5NDE5MDk3YTZmY2M5Nzc3ODUyYmMuc2V0Q29udGVudChodG1sX2VjMjIwYzFiMGFmZTQ5YjFhNzZjZjUxOWRmNWE4ZmRlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYWMwM2I3ZDhlM2EyNGEwNDg3MDU4N2M5YTMyYWUzNTYuYmluZFBvcHVwKHBvcHVwXzM3ODU0YjEwNWJkOTQxOTA5N2E2ZmNjOTc3Nzg1MmJjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzkwNjNlNjE1NjVhNDRiNmFiNTVlOWJiNzNlYTUxNzMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC40MjMxMzgsLTEwNC42ODg1NDddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM5NGQxNGRmNjZmYTQxNGY5ZTBiMDIzZWY0ODgzM2I2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc3YWJlZjU0OTQyMTQ1YmQ5MTdlNjBhMDU1ZDQ2MGQ0ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83N2FiZWY1NDk0MjE0NWJkOTE3ZTYwYTA1NWQ0NjBkNCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR3JlZWxleSBGYXJtZXJzIE1hcmtldCA8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzk0ZDE0ZGY2NmZhNDE0ZjllMGIwMjNlZjQ4ODMzYjYuc2V0Q29udGVudChodG1sXzc3YWJlZjU0OTQyMTQ1YmQ5MTdlNjBhMDU1ZDQ2MGQ0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzkwNjNlNjE1NjVhNDRiNmFiNTVlOWJiNzNlYTUxNzMuYmluZFBvcHVwKHBvcHVwXzM5NGQxNGRmNjZmYTQxNGY5ZTBiMDIzZWY0ODgzM2I2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjk4YWIyNzkyYjRiNGY0MGIyN2RjNDE5NjY4ZThkNDYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44NTgzMjIsLTEwNC45MTI4MTNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JmNzRjMzhkMThlZjQ5ZWJhN2I3MzhjNmM3MWU0NjNlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RjZTcxYmQxYTNlMzQ3NTc4ZTgzNjA5NDA1ZTEwMzJiID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kY2U3MWJkMWEzZTM0NzU3OGU4MzYwOTQwNWUxMDMyYiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgTWFuaXRvdSBDb21tdW5pdHkgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JmNzRjMzhkMThlZjQ5ZWJhN2I3MzhjNmM3MWU0NjNlLnNldENvbnRlbnQoaHRtbF9kY2U3MWJkMWEzZTM0NzU3OGU4MzYwOTQwNWUxMDMyYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Y5OGFiMjc5MmI0YjRmNDBiMjdkYzQxOTY2OGU4ZDQ2LmJpbmRQb3B1cChwb3B1cF9iZjc0YzM4ZDE4ZWY0OWViYTdiNzM4YzZjNzFlNDYzZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzE3ZTdmM2RlYTQ5YzQ1M2M5ZjJhNjYyMzAzNGE1OWMyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNjMzMzIxMywtMTA1LjMxNzIxNDZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU2MjNmNzM0ZTMzZjQ3ZmRhNDQ4MGIzMTUzNmEzNTM4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBhZjQ5Yjc0YmE0ODRlYmViNzJlNDEyM2Q5NmViYzM3ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8wYWY0OWI3NGJhNDg0ZWJlYjcyZTQxMjNkOTZlYmMzNyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRXZlcmdyZWVuIEZhcm1lcnMgTWFya2V0IGF0IEJlcmdlbiBWaWxsYWdlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU2MjNmNzM0ZTMzZjQ3ZmRhNDQ4MGIzMTUzNmEzNTM4LnNldENvbnRlbnQoaHRtbF8wYWY0OWI3NGJhNDg0ZWJlYjcyZTQxMjNkOTZlYmMzNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzE3ZTdmM2RlYTQ5YzQ1M2M5ZjJhNjYyMzAzNGE1OWMyLmJpbmRQb3B1cChwb3B1cF81NjIzZjczNGUzM2Y0N2ZkYTQ0ODBiMzE1MzZhMzUzOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzJiNTU4M2Y5YjgzNTRiMDM4NTA5YWZjMzYwYWJkNmVmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuMDU1OTUzLC0xMDQuOTUzNzk4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMGVmY2E0Mzc4ZWQ0MjA0YjllOGEyMDQzNjVhYWRmZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80OTE5NmNhOGZlZTI0MDQ3YmI1MTk4MWM0YTM4YmM5NyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNDkxOTZjYThmZWUyNDA0N2JiNTE5ODFjNGEzOGJjOTciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFBsYXR0ZSBDb3VudHkgRmFybWVycyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjBlZmNhNDM3OGVkNDIwNGI5ZThhMjA0MzY1YWFkZmUuc2V0Q29udGVudChodG1sXzQ5MTk2Y2E4ZmVlMjQwNDdiYjUxOTgxYzRhMzhiYzk3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMmI1NTgzZjliODM1NGIwMzg1MDlhZmMzNjBhYmQ2ZWYuYmluZFBvcHVwKHBvcHVwX2IwZWZjYTQzNzhlZDQyMDRiOWU4YTIwNDM2NWFhZGZlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDdjMzgxZmE0OWQ5NDZkZGFmOGI0MjQ3ZGJhMDE0Y2EgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41MjIzMDksLTEwNS4wNTk2OTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QwZjAxZDMwOTc2ODRhNzA5OWQ3NTBiMzk3ZTYzMmMyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY4OGNhOTVhN2M1NDQ5MjA5YTdkMGQwNjAxNDExYzM5ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF82ODhjYTk1YTdjNTQ0OTIwOWE3ZDBkMDYwMTQxMWMzOSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRm9ydCBDb2xsaW5zIEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QwZjAxZDMwOTc2ODRhNzA5OWQ3NTBiMzk3ZTYzMmMyLnNldENvbnRlbnQoaHRtbF82ODhjYTk1YTdjNTQ0OTIwOWE3ZDBkMDYwMTQxMWMzOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Q3YzM4MWZhNDlkOTQ2ZGRhZjhiNDI0N2RiYTAxNGNhLmJpbmRQb3B1cChwb3B1cF9kMGYwMWQzMDk3Njg0YTcwOTlkNzUwYjM5N2U2MzJjMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA0ZDk1YjdhZjcyZjRlMGJhMjhmNmNiODBiNzk5MWIzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNDI1MjY2OCwtMTA1LjA3OTIyNDVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IxNzg2MzgwMWRmYTRiNzRiNjczOTVhZWFkZTBmNmJlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU4OTQ1Zjc0YjlmYjRjOTNhYjU3MGEzMTg5YTRmNWViID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF81ODk0NWY3NGI5ZmI0YzkzYWI1NzBhMzE4OWE0ZjVlYiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgTG92ZWxhbmQgRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMTc4NjM4MDFkZmE0Yjc0YjY3Mzk1YWVhZGUwZjZiZS5zZXRDb250ZW50KGh0bWxfNTg5NDVmNzRiOWZiNGM5M2FiNTcwYTMxODlhNGY1ZWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wNGQ5NWI3YWY3MmY0ZTBiYTI4ZjZjYjgwYjc5OTFiMy5iaW5kUG9wdXAocG9wdXBfYjE3ODYzODAxZGZhNGI3NGI2NzM5NWFlYWRlMGY2YmUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wYjdhZmQ3NTJjYWY0ZmNjOTEzNDUxNDA2YTk1OTc4NCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjI3MjEsLTEwNC42MjFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ViNDIyZjdmYmVjNDQzNjZhM2YyMTcxMmZkNDQ0ODk4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U1MmFlZjVjMzNhZjRhZTNhZjkyODU0YmEyZTA5YWI2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9lNTJhZWY1YzMzYWY0YWUzYWY5Mjg1NGJhMmUwOWFiNiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRmFybWVycyBNYXJrZXQgb2YgUHVlYmxvPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ViNDIyZjdmYmVjNDQzNjZhM2YyMTcxMmZkNDQ0ODk4LnNldENvbnRlbnQoaHRtbF9lNTJhZWY1YzMzYWY0YWUzYWY5Mjg1NGJhMmUwOWFiNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzBiN2FmZDc1MmNhZjRmY2M5MTM0NTE0MDZhOTU5Nzg0LmJpbmRQb3B1cChwb3B1cF9lYjQyMmY3ZmJlYzQ0MzY2YTNmMjE3MTJmZDQ0NDg5OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2YwYzY4ZjI0ZmIyYzRjYzA5ZWI3YmVkMmJhNTEzZTYwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNzg5NywtMTA1LjFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkxYTNlMmI2MjUxNjQxZTU5MDkwMTlmOTMzMmQzYjA4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhmM2QwNTFmZmU4NDQwNGJiYzdhYjdhYmNhYTQxNmMzID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF84ZjNkMDUxZmZlODQ0MDRiYmM3YWI3YWJjYWE0MTZjMyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgTWFya2V0IGF0IEVjaHRlcuKAmXMgR2FyZGVuIENlbnRlcjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MWEzZTJiNjI1MTY0MWU1OTA5MDE5ZjkzMzJkM2IwOC5zZXRDb250ZW50KGh0bWxfOGYzZDA1MWZmZTg0NDA0YmJjN2FiN2FiY2FhNDE2YzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mMGM2OGYyNGZiMmM0Y2MwOWViN2JlZDJiYTUxM2U2MC5iaW5kUG9wdXAocG9wdXBfOTFhM2UyYjYyNTE2NDFlNTkwOTAxOWY5MzMyZDNiMDgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jMjBkYWUzYjM3YjU0NzFkYWRiMGNiZjY4NDFhOGMyMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM1Ljk3MzkyMiwtMTA1LjMzMDIxOF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTMyMWJkMmQ1YTNhNDNmMTg2NzY1YzczNjMwMzNjZDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzAyY2VkYjgzMmRmNDE4MmE0ZDFjMDY2YTM0OWRiMjUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzMwMmNlZGI4MzJkZjQxODJhNGQxYzA2NmEzNDlkYjI1IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBNb3JhIFZhbGxleSBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMzIxYmQyZDVhM2E0M2YxODY3NjVjNzM2MzAzM2NkMi5zZXRDb250ZW50KGh0bWxfMzAyY2VkYjgzMmRmNDE4MmE0ZDFjMDY2YTM0OWRiMjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jMjBkYWUzYjM3YjU0NzFkYWRiMGNiZjY4NDFhOGMyMS5iaW5kUG9wdXAocG9wdXBfZTMyMWJkMmQ1YTNhNDNmMTg2NzY1YzczNjMwMzNjZDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82Zjc2YzU2ZDI4Mjc0Y2E5OWEzZjNiYWRlZDFhYjc3OCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjUzMDEsLTEwNC43MTJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhkY2MzNTdhZDlhMTQ1ZGM4NTkwYTM5ZGRmYzI3ZjNiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I0NTNiY2VhZDQ4MTQ4NDhiNTg4YTQxMzg3MTVmYjUwID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9iNDUzYmNlYWQ0ODE0ODQ4YjU4OGE0MTM4NzE1ZmI1MCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2FyZGVuIG9mIEVhdG9uIEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhkY2MzNTdhZDlhMTQ1ZGM4NTkwYTM5ZGRmYzI3ZjNiLnNldENvbnRlbnQoaHRtbF9iNDUzYmNlYWQ0ODE0ODQ4YjU4OGE0MTM4NzE1ZmI1MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzZmNzZjNTZkMjgyNzRjYTk5YTNmM2JhZGVkMWFiNzc4LmJpbmRQb3B1cChwb3B1cF84ZGNjMzU3YWQ5YTE0NWRjODU5MGEzOWRkZmMyN2YzYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzAxYTVjMzk4YjQyMjQ3NTNiNzEyMzczNmE0YWM1YzA3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNzU1NCwtMTA1LjIyNl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjE0YWYwMWQzMmU1NDM5M2FlZThlNWM3M2MwMDJlZDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjM2NDlmNTMxZTk2NGJlMThhMzJmMzcyMjhiMjI3NWEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2IzNjQ5ZjUzMWU5NjRiZTE4YTMyZjM3MjI4YjIyNzVhIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHb2xkZW4gRmFybWVycyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjE0YWYwMWQzMmU1NDM5M2FlZThlNWM3M2MwMDJlZDYuc2V0Q29udGVudChodG1sX2IzNjQ5ZjUzMWU5NjRiZTE4YTMyZjM3MjI4YjIyNzVhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDFhNWMzOThiNDIyNDc1M2I3MTIzNzM2YTRhYzVjMDcuYmluZFBvcHVwKHBvcHVwXzIxNGFmMDFkMzJlNTQzOTNhZWU4ZTVjNzNjMDAyZWQ2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODNjYzZkNWI2ZDUzNDA0ZWEzZDhlNjFiOTdjMzExOTAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODMzMzk3LC0xMDUuMTY1NTU0Ml0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2ViZWJlMjI4OWQzNDdmNWIxMzRmMmU4NmVlZmI2OTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzZmNWUxNzMxOGY1NDY0NWE1OTQ5N2RjOWMyZmQ4ZjkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2M2ZjVlMTczMThmNTQ2NDVhNTk0OTdkYzljMmZkOGY5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHYXJkbmVyIEZhcm1lciAmYW1wOyBDcmFmdCBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2ViZWJlMjI4OWQzNDdmNWIxMzRmMmU4NmVlZmI2OTguc2V0Q29udGVudChodG1sX2M2ZjVlMTczMThmNTQ2NDVhNTk0OTdkYzljMmZkOGY5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODNjYzZkNWI2ZDUzNDA0ZWEzZDhlNjFiOTdjMzExOTAuYmluZFBvcHVwKHBvcHVwX2NlYmViZTIyODlkMzQ3ZjViMTM0ZjJlODZlZWZiNjk4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYmRmNzdhOTk0ODEwNDA2OWFmYTdlZDA2OThhYmQ3OGQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45NDU0LC0xMDQuNzk2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYTgzODc3MzUyOTM0MzJhOTk4MWY4OTcxZjk3OGQ0ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84OGUwZjIyYWQwNzA0M2NlYjViODcwOWFhNjMwZmQ2ZCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfODhlMGYyMmFkMDcwNDNjZWI1Yjg3MDlhYTYzMGZkNmQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENoYXBlbCBIaWxsIE1hbGwgRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYTgzODc3MzUyOTM0MzJhOTk4MWY4OTcxZjk3OGQ0ZC5zZXRDb250ZW50KGh0bWxfODhlMGYyMmFkMDcwNDNjZWI1Yjg3MDlhYTYzMGZkNmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iZGY3N2E5OTQ4MTA0MDY5YWZhN2VkMDY5OGFiZDc4ZC5iaW5kUG9wdXAocG9wdXBfZGE4Mzg3NzM1MjkzNDMyYTk5ODFmODk3MWY5NzhkNGQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84YTEzY2E5NTRkYzQ0NTkwYjMwZDRkYmFhZDA0ODQyNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5Ljk4NjksLTEwNS4wOTRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc2Y2IwZGYwZWRhNzRlMTI4MDAwMzQ4ZDU1NjAzZjhjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhmNDhjOTg5MGMzMTQyNTM4NTdiYTlmZTYxNDhmNzBkID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF84ZjQ4Yzk4OTBjMzE0MjUzODU3YmE5ZmU2MTQ4ZjcwZCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgSmF4IEZhcm1lciYjMzk7cyBNYXJrZXQgaW4gTGFmYXlldHRlIDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NmNiMGRmMGVkYTc0ZTEyODAwMDM0OGQ1NTYwM2Y4Yy5zZXRDb250ZW50KGh0bWxfOGY0OGM5ODkwYzMxNDI1Mzg1N2JhOWZlNjE0OGY3MGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84YTEzY2E5NTRkYzQ0NTkwYjMwZDRkYmFhZDA0ODQyNC5iaW5kUG9wdXAocG9wdXBfNzZjYjBkZjBlZGE3NGUxMjgwMDAzNDhkNTU2MDNmOGMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81NmU3NDQ4YjVjYTU0MmY3YjQ4NGEwOTMxYTBhYzE4ZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjM3MjgsLTEwNS42ODJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQwZjdiOTY0NGYxYjQ3Mjg4MTYwYTAxZTQyMTdlMjE3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I1ODk5MmZiNDViMTQ4NWViZWNmMGU1NTM0ZGExMDMyID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9iNTg5OTJmYjQ1YjE0ODVlYmVjZjBlNTUzNGRhMTAzMiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ290b3BheGkgRmFybWVycyBNYXJrZXQgPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQwZjdiOTY0NGYxYjQ3Mjg4MTYwYTAxZTQyMTdlMjE3LnNldENvbnRlbnQoaHRtbF9iNTg5OTJmYjQ1YjE0ODVlYmVjZjBlNTUzNGRhMTAzMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzU2ZTc0NDhiNWNhNTQyZjdiNDg0YTA5MzFhMGFjMThlLmJpbmRQb3B1cChwb3B1cF80MGY3Yjk2NDRmMWI0NzI4ODE2MGEwMWU0MjE3ZTIxNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzlhNjZkMjVmMmIwOTQzNmNhOWRiNThiMzcxZTRhY2Y0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuODQ4OCwtMTA1LjE1NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWViNjM4M2Y3Y2UxNGNjZDgzYjQ1ZDI5OWUyNWE2YjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDgzMDczZDM3NGIzNDA3MDg3YzNkZGVmMDlhNzkyOWYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzQ4MzA3M2QzNzRiMzQwNzA4N2MzZGRlZjA5YTc5MjlmIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBBcnZhZGEgRml2ZSBQYXJrcyBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZWI2MzgzZjdjZTE0Y2NkODNiNDVkMjk5ZTI1YTZiNS5zZXRDb250ZW50KGh0bWxfNDgzMDczZDM3NGIzNDA3MDg3YzNkZGVmMDlhNzkyOWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85YTY2ZDI1ZjJiMDk0MzZjYTlkYjU4YjM3MWU0YWNmNC5iaW5kUG9wdXAocG9wdXBfNWViNjM4M2Y3Y2UxNGNjZDgzYjQ1ZDI5OWUyNWE2YjUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83MmY3Mzg4OWFlY2M0Y2YyODFiMzE4MGUwOGExNjc5OSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjM4NzUzNiwtMTA1LjA3ODQ5MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODQzMGZlMTUyZjA5NDczZjg4MWU3YzMzZjNiODRmYWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzNjMTY1MTIyNTBlNDhjN2EzNDQxZTkyNDllYjk5OTMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzMzYzE2NTEyMjUwZTQ4YzdhMzQ0MWU5MjQ5ZWI5OTkzIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDaXR5IG9mIExvdmVsYW5kIEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg0MzBmZTE1MmYwOTQ3M2Y4ODFlN2MzM2YzYjg0ZmFkLnNldENvbnRlbnQoaHRtbF8zM2MxNjUxMjI1MGU0OGM3YTM0NDFlOTI0OWViOTk5Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzcyZjczODg5YWVjYzRjZjI4MWIzMTgwZTA4YTE2Nzk5LmJpbmRQb3B1cChwb3B1cF84NDMwZmUxNTJmMDk0NzNmODgxZTdjMzNmM2I4NGZhZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzNjMTRlNDFmYTVlNDQ0OTViMDk0YTkyNzIyODc0OGE0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMTM2MDU0LC0xMDUuNDY3MDI3NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjBhNzM2NTRkZTQ3NGExNmJjNTQzOWFlZGU0OGU3NTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDY4ZDdkZjQwMzU5NGMxMThmYWVhMjRjYTA4ZGY1MWIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzQ2OGQ3ZGY0MDM1OTRjMTE4ZmFlYTI0Y2EwOGRmNTFiIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBXZXN0Y2xpZmZlIEZhcm1lcnMmIzM5OyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjBhNzM2NTRkZTQ3NGExNmJjNTQzOWFlZGU0OGU3NTEuc2V0Q29udGVudChodG1sXzQ2OGQ3ZGY0MDM1OTRjMTE4ZmFlYTI0Y2EwOGRmNTFiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfM2MxNGU0MWZhNWU0NDQ5NWIwOTRhOTI3MjI4NzQ4YTQuYmluZFBvcHVwKHBvcHVwXzYwYTczNjU0ZGU0NzRhMTZiYzU0MzlhZWRlNDhlNzUxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzkxZTNjYTVjOWU5NDZmZWExZDQxZWJlNTBlYWQyMmQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOS43MzQxNDcsLTEwNS4wMjE1ODNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU4MjQ4OTNiMzA2MTQ5YjI5Y2ExNjMyOTJjYmZjMjUyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U1OWNjYmI2OTRjMTQwMTViMDMzNDY5MjYxY2ExYjk4ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9lNTljY2JiNjk0YzE0MDE1YjAzMzQ2OTI2MWNhMWI5OCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRmFpcnZpZXcgRWxlbWVudGFyeSBZb3V0aCBGYXJtZXJzJiMzOTsgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU4MjQ4OTNiMzA2MTQ5YjI5Y2ExNjMyOTJjYmZjMjUyLnNldENvbnRlbnQoaHRtbF9lNTljY2JiNjk0YzE0MDE1YjAzMzQ2OTI2MWNhMWI5OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzc5MWUzY2E1YzllOTQ2ZmVhMWQ0MWViZTUwZWFkMjJkLmJpbmRQb3B1cChwb3B1cF81ODI0ODkzYjMwNjE0OWIyOWNhMTYzMjkyY2JmYzI1Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzBjN2UyYWQyOTQ5ZjQzZDRiZWM1N2I0MDNiYTlhNTAxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNzE5NTQ5LC0xMDQuOTk4Mjg3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNjg4NmY4YmRmN2M0Yzc4YmIzMjVhMjhjYjFkY2I4OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MjQxNWFhZDUzNWQ0YTU4YTUwZGNjMDM4NTA3NDBhMyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOTI0MTVhYWQ1MzVkNGE1OGE1MGRjYzAzODUwNzQwYTMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIERlbnZlciBVcmJhbiBIb21lc3RlYWRpbmcgRmFybWVycyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTY4ODZmOGJkZjdjNGM3OGJiMzI1YTI4Y2IxZGNiODkuc2V0Q29udGVudChodG1sXzkyNDE1YWFkNTM1ZDRhNThhNTBkY2MwMzg1MDc0MGEzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMGM3ZTJhZDI5NDlmNDNkNGJlYzU3YjQwM2JhOWE1MDEuYmluZFBvcHVwKHBvcHVwXzE2ODg2ZjhiZGY3YzRjNzhiYjMyNWEyOGNiMWRjYjg5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYWIyMGZjM2RhMjA3NDUzYmJkZDc1NDNiOGQ2Y2ZiZDggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC4zNzE2LC0xMDUuNTAyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hZGM2ODI1YWNlOTY0NzI1YTcwOTM2Zjg0YzI0NGMxMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MTQ1OWMxNjRkOWI0ODdmYjQ3OWFjMDVlYjFmZDljNyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfODE0NTljMTY0ZDliNDg3ZmI0NzlhYzA1ZWIxZmQ5YzciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEVzdGVzIFZhbGxleSBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hZGM2ODI1YWNlOTY0NzI1YTcwOTM2Zjg0YzI0NGMxMi5zZXRDb250ZW50KGh0bWxfODE0NTljMTY0ZDliNDg3ZmI0NzlhYzA1ZWIxZmQ5YzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hYjIwZmMzZGEyMDc0NTNiYmRkNzU0M2I4ZDZjZmJkOC5iaW5kUG9wdXAocG9wdXBfYWRjNjgyNWFjZTk2NDcyNWE3MDkzNmY4NGMyNDRjMTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jOWMyNTZjYTg3OGE0NjE3YjMzNzYxMDhjMzlkOTZlYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5Ljc0MDIsLTEwNC45MDNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAzNmE2NDVlZTQzZTQyZjM4NDc1NTZiOWYzMTRlOThlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MwY2YzOTJiODJjNDQ5NDlhYzJmMDIwN2MwYTU2MDM1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jMGNmMzkyYjgyYzQ0OTQ5YWMyZjAyMDdjMGE1NjAzNSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgTm9ydGhmaWVsZCBGYXJtZXJzJiMzOTsgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAzNmE2NDVlZTQzZTQyZjM4NDc1NTZiOWYzMTRlOThlLnNldENvbnRlbnQoaHRtbF9jMGNmMzkyYjgyYzQ0OTQ5YWMyZjAyMDdjMGE1NjAzNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2M5YzI1NmNhODc4YTQ2MTdiMzM3NjEwOGMzOWQ5NmViLmJpbmRQb3B1cChwb3B1cF8wMzZhNjQ1ZWU0M2U0MmYzODQ3NTU2YjlmMzE0ZTk4ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzg3N2MzZTNmYmU4YzQ1ODg5ZWJhZWYzMzg4YmYzY2ViID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuOTU2OSwtMTA0Ljk5Ml0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWQ4ZjFkOTM1YTY5NGM2YmEwODM2ODhkNDA2NjNiYjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmU2OTMyMDNjZWY4NGZjMjgwYTkwYmMyOTBlZWVhZjIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2JlNjkzMjAzY2VmODRmYzI4MGE5MGJjMjkwZWVlYWYyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBUaGUgT3JjaGFyZHMgRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZDhmMWQ5MzVhNjk0YzZiYTA4MzY4OGQ0MDY2M2JiMC5zZXRDb250ZW50KGh0bWxfYmU2OTMyMDNjZWY4NGZjMjgwYTkwYmMyOTBlZWVhZjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84NzdjM2UzZmJlOGM0NTg4OWViYWVmMzM4OGJmM2NlYi5iaW5kUG9wdXAocG9wdXBfNWQ4ZjFkOTM1YTY5NGM2YmEwODM2ODhkNDA2NjNiYjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iZmM2Y2JmMDYyZTA0MmZlYjE5ODgxNzVjMmFlYzhkZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU1Mjk4OCwtMTA1LjA5MTA0NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTdhOThiOGU2NTQ0NDZhOTkzYmYwZTc5MDViNGYyZjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2JiOTI4NTExMDhjNDU1NGJiYmMxZjI5MmU3ZWVlZGMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzNiYjkyODUxMTA4YzQ1NTRiYmJjMWYyOTJlN2VlZWRjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBEcmFrZSBSb2FkIEZhcm1lcnMmIzM5OyBNYXJrZXQsIExMQzwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lN2E5OGI4ZTY1NDQ0NmE5OTNiZjBlNzkwNWI0ZjJmMC5zZXRDb250ZW50KGh0bWxfM2JiOTI4NTExMDhjNDU1NGJiYmMxZjI5MmU3ZWVlZGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iZmM2Y2JmMDYyZTA0MmZlYjE5ODgxNzVjMmFlYzhkZC5iaW5kUG9wdXAocG9wdXBfZTdhOThiOGU2NTQ0NDZhOTkzYmYwZTc5MDViNGYyZjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hZGZiMTE5NmY4ZDk0OWI1YTY0NWY0M2U4ZjUxYWRmNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjM5NTQsLTEwNS4wNzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZkNzYyOTE5ZDg2NDRmODdiNDVlODllZWZiZWI2OWMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBmMGY4ZDAzODRhNjQwYmNhOWJiOWZhYzRjMTYzYWIxID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8wZjBmOGQwMzg0YTY0MGJjYTliYjlmYWM0YzE2M2FiMSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgNHRoIFN0cmVldCBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZDc2MjkxOWQ4NjQ0Zjg3YjQ1ZTg5ZWVmYmViNjljMy5zZXRDb250ZW50KGh0bWxfMGYwZjhkMDM4NGE2NDBiY2E5YmI5ZmFjNGMxNjNhYjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hZGZiMTE5NmY4ZDk0OWI1YTY0NWY0M2U4ZjUxYWRmNS5iaW5kUG9wdXAocG9wdXBfZmQ3NjI5MTlkODY0NGY4N2I0NWU4OWVlZmJlYjY5YzMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jYmYxZWYyZDZjYzE0YWI5OTljMTQ2ZTFhMjBhZjk5NyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjA3OTU5OCwtMTA0LjIyMzQ5NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmM5NzE4ZWE5ZjJlNGRhMTg3YzhkZmRmOGQ4MDdhZWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDhiOGE0MzdlM2RlNGZiYWEzYzAzMjE3MTY4NjdjZTAgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzA4YjhhNDM3ZTNkZTRmYmFhM2MwMzIxNzE2ODY3Y2UwIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBUb3JyaW5ndG9uIEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZjOTcxOGVhOWYyZTRkYTE4N2M4ZGZkZjhkODA3YWVhLnNldENvbnRlbnQoaHRtbF8wOGI4YTQzN2UzZGU0ZmJhYTNjMDMyMTcxNjg2N2NlMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2NiZjFlZjJkNmNjMTRhYjk5OWMxNDZlMWEyMGFmOTk3LmJpbmRQb3B1cChwb3B1cF82Yzk3MThlYTlmMmU0ZGExODdjOGRmZGY4ZDgwN2FlYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzU0MTY1ODJlYTAxYjQ0MDE4MmY0NzVlZDkzZWYyMWZlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuMTMyMjE3LC0xMDQuODE0NDMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YjQ4ODMyNDM2OWY0MjYwODM2MTk3MDE0ZTFiZjhlYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMjU0ZDBhNDM3MjY0ZjlmOTRmNzI4ZjhkZWUwZWY3YyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMjI1NGQwYTQzNzI2NGY5Zjk0ZjcyOGY4ZGVlMGVmN2MiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENoZXllbm5lIEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzViNDg4MzI0MzY5ZjQyNjA4MzYxOTcwMTRlMWJmOGViLnNldENvbnRlbnQoaHRtbF8yMjU0ZDBhNDM3MjY0ZjlmOTRmNzI4ZjhkZWUwZWY3Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzU0MTY1ODJlYTAxYjQ0MDE4MmY0NzVlZDkzZWYyMWZlLmJpbmRQb3B1cChwb3B1cF81YjQ4ODMyNDM2OWY0MjYwODM2MTk3MDE0ZTFiZjhlYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzE1MGJiMTQ5NTA1OTRjZWI4M2M2MzhjZmEzYjA4YTVkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuODU4OSwtMTA0LjkwNDQ5NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWVjNzU2NDg0MTE4NDkyNmJkMzdkZDc1MmVjY2I0MjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmNjZGNiMjUyZmNhNDU0NDhmNGViMmFkM2VlYjMwYjUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzZjY2RjYjI1MmZjYTQ1NDQ4ZjRlYjJhZDNlZWIzMGI1IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBNaWxlIEhpZ2ggRmxlYSBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWVjNzU2NDg0MTE4NDkyNmJkMzdkZDc1MmVjY2I0Mjcuc2V0Q29udGVudChodG1sXzZjY2RjYjI1MmZjYTQ1NDQ4ZjRlYjJhZDNlZWIzMGI1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTUwYmIxNDk1MDU5NGNlYjgzYzYzOGNmYTNiMDhhNWQuYmluZFBvcHVwKHBvcHVwXzllYzc1NjQ4NDExODQ5MjZiZDM3ZGQ3NTJlY2NiNDI3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjY1OTdkYTMyNzgzNGFmYWEzNGE1MjI0ZTliNDQ4OWMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC4wMTUyNDUsLTEwNS4yNzc2MzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRkYjc4ZWFhYzNkZDQxMDBiM2EzNWU4NDFlZGEyODY3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAzM2JjMmE2MmJhZDRjMGViNGQ3MmRmNzdhNzRjMDA3ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8wMzNiYzJhNjJiYWQ0YzBlYjRkNzJkZjc3YTc0YzAwNyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQm91bGRlciBGYXJtZXJzIE1hcmtldCA8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGRiNzhlYWFjM2RkNDEwMGIzYTM1ZTg0MWVkYTI4Njcuc2V0Q29udGVudChodG1sXzAzM2JjMmE2MmJhZDRjMGViNGQ3MmRmNzdhNzRjMDA3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjY1OTdkYTMyNzgzNGFmYWEzNGE1MjI0ZTliNDQ4OWMuYmluZFBvcHVwKHBvcHVwXzRkYjc4ZWFhYzNkZDQxMDBiM2EzNWU4NDFlZGEyODY3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDIxZGI5ZTg0YWFmNDVmMDhlOTFhMzBkZTI1NjBjZDkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMi45NTczNTYsLTEwNS43NDA1OTVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U2OWY5MWUzYWUxNTRhNGU5NWRhYzJhY2Y0YzhlZTRkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBiMmI2OWE1YTA1NDQ3MTY4NDlkMDFiZWQ2ZjE3ZDkyID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8wYjJiNjlhNWEwNTQ0NzE2ODQ5ZDAxYmVkNmYxN2Q5MiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2xvdWRjcm9mdCBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNjlmOTFlM2FlMTU0YTRlOTVkYWMyYWNmNGM4ZWU0ZC5zZXRDb250ZW50KGh0bWxfMGIyYjY5YTVhMDU0NDcxNjg0OWQwMWJlZDZmMTdkOTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80MjFkYjllODRhYWY0NWYwOGU5MWEzMGRlMjU2MGNkOS5iaW5kUG9wdXAocG9wdXBfZTY5ZjkxZTNhZTE1NGE0ZTk1ZGFjMmFjZjRjOGVlNGQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85ZGZhYTMzMzNjYTA0YmU1OGY1NTk2MmU3ZjlmNmQ3ZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljk5NzcsLTEwNC43MDFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNkZGY0Y2JiZWUyODRiZGFiMzA1N2MxMmMzM2UxZTQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RhYTMyZTRlMGE5YzRhODlhZWNlNmE4YmU1N2I0MDU1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kYWEzMmU0ZTBhOWM0YTg5YWVjZTZhOGJlNTdiNDA1NSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQmxhY2sgRm9yZXN0IEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNkZGY0Y2JiZWUyODRiZGFiMzA1N2MxMmMzM2UxZTQ3LnNldENvbnRlbnQoaHRtbF9kYWEzMmU0ZTBhOWM0YTg5YWVjZTZhOGJlNTdiNDA1NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzlkZmFhMzMzM2NhMDRiZTU4ZjU1OTYyZTdmOWY2ZDdlLmJpbmRQb3B1cChwb3B1cF8zZGRmNGNiYmVlMjg0YmRhYjMwNTdjMTJjMzNlMWU0Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQwM2FjYTU3MzA5ZjRkYWQ5ZGViMTFmYTBlMGIwMTBlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNTg3OCwtMTA1LjA3OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmZjNjVkYmEwNjdiNGJmNzg2NWM0MDExZjEwMWY1ODggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmY1MjYzMTg1ZWY5NDVjMzg4MjEyZTNmOThiMzc2YzcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzZmNTI2MzE4NWVmOTQ1YzM4ODIxMmUzZjk4YjM3NmM3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBCZSBMb2NhbCBXaW50ZXIgRmFybWVyJiMzOTtzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZmM2NWRiYTA2N2I0YmY3ODY1YzQwMTFmMTAxZjU4OC5zZXRDb250ZW50KGh0bWxfNmY1MjYzMTg1ZWY5NDVjMzg4MjEyZTNmOThiMzc2YzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80MDNhY2E1NzMwOWY0ZGFkOWRlYjExZmEwZTBiMDEwZS5iaW5kUG9wdXAocG9wdXBfYmZjNjVkYmEwNjdiNGJmNzg2NWM0MDExZjEwMWY1ODgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jZTBkMGYxMDAzNTY0NDY3OTcyYWEzM2MyODU3OGRmOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjU0NDU2MjQsLTEwNS4yODcyNDM1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xOGFjZmMyYTk3MGI0NjM2YTAwOTVmMGU0OGY2MjY4YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZWZhZGYwZDBmNmU0NDFkYWQ0MmYwNzNiZTlhNzYwYSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZWVmYWRmMGQwZjZlNDQxZGFkNDJmMDczYmU5YTc2MGEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENvbmlmZXIgRmFybWVycyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMThhY2ZjMmE5NzBiNDYzNmEwMDk1ZjBlNDhmNjI2OGMuc2V0Q29udGVudChodG1sX2VlZmFkZjBkMGY2ZTQ0MWRhZDQyZjA3M2JlOWE3NjBhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2UwZDBmMTAwMzU2NDQ2Nzk3MmFhMzNjMjg1NzhkZjkuYmluZFBvcHVwKHBvcHVwXzE4YWNmYzJhOTcwYjQ2MzZhMDA5NWYwZTQ4ZjYyNjhjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYmFhMjA2ZjZjZTA1NGVkMGJkYjIwYTJkNTc5ZWMwOWIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MS4zMDQxNDg2LC0xMDUuNTg5MDUxOF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjhmNDkyNjc4MDEyNGI3Yjk2NmNiYmYwYTcyZDllNzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2Y5OWEyMjc0OWUzNDlhOGEwYjc4ZmUyNjJiNzIxNzIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2NmOTlhMjI3NDllMzQ5YThhMGI3OGZlMjYyYjcyMTcyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBMYXJhbWllIExvY2FsIENvbW11bml0eSBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjhmNDkyNjc4MDEyNGI3Yjk2NmNiYmYwYTcyZDllNzYuc2V0Q29udGVudChodG1sX2NmOTlhMjI3NDllMzQ5YThhMGI3OGZlMjYyYjcyMTcyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYmFhMjA2ZjZjZTA1NGVkMGJkYjIwYTJkNTc5ZWMwOWIuYmluZFBvcHVwKHBvcHVwX2I4ZjQ5MjY3ODAxMjRiN2I5NjZjYmJmMGE3MmQ5ZTc2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTA4MDg3NTliMTNlNGE3N2JkMGRiMzRhMTE1M2JlNzMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDQ2ODUsLTEwNS4wMDQ4MzFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg3ZTdkMjgxZGY5ZTQzMzE5ZjVmN2M2MzM2YTZhMjk2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM4MTFhNDEyM2EzNjRhZDc5MjJmMTdjODNmYzU0MGM2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8zODExYTQxMjNhMzY0YWQ3OTIyZjE3YzgzZmM1NDBjNiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgV2VsbGluZ3RvbiBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84N2U3ZDI4MWRmOWU0MzMxOWY1ZjdjNjMzNmE2YTI5Ni5zZXRDb250ZW50KGh0bWxfMzgxMWE0MTIzYTM2NGFkNzkyMmYxN2M4M2ZjNTQwYzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81MDgwODc1OWIxM2U0YTc3YmQwZGIzNGExMTUzYmU3My5iaW5kUG9wdXAocG9wdXBfODdlN2QyODFkZjllNDMzMTlmNWY3YzYzMzZhNmEyOTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kZDUzZGMxMDllNGE0ZTEzYTNkYWE3YWJkMTIzNDkwOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMyLjg5MDE0NSwtMTA1LjQ3NzkxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MzRiOWJiOTJlYzc0ZmYxYjY4ZjA0MTA0N2EzN2Y2NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZTJhNDY1OWU0Yzc0NjM0ODk5NGE2MWVlMTllMzRiZCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNWUyYTQ2NTllNGM3NDYzNDg5OTRhNjFlZTE5ZTM0YmQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIE1heWhpbGwgRmFybWVycyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTM0YjliYjkyZWM3NGZmMWI2OGYwNDEwNDdhMzdmNjUuc2V0Q29udGVudChodG1sXzVlMmE0NjU5ZTRjNzQ2MzQ4OTk0YTYxZWUxOWUzNGJkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZGQ1M2RjMTA5ZTRhNGUxM2EzZGFhN2FiZDEyMzQ5MDguYmluZFBvcHVwKHBvcHVwXzUzNGI5YmI5MmVjNzRmZjFiNjhmMDQxMDQ3YTM3ZjY1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODViZTI5YjBlNjc1NGRiZThlZWFlZTI3MjFmNDgzMzggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41ODU3OCwtMTA1LjA3OThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ5ZGZiMjJiOThiNTRmYTg5NGRkNTAwZjkwYWQzYmIwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NlZmE2ZTZkYmFiYjQzOThiZWQzYmRhM2E5OTNiNTBkID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jZWZhNmU2ZGJhYmI0Mzk4YmVkM2JkYTNhOTkzYjUwZCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgTGFyaW1lciBDb3VudHkgRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80OWRmYjIyYjk4YjU0ZmE4OTRkZDUwMGY5MGFkM2JiMC5zZXRDb250ZW50KGh0bWxfY2VmYTZlNmRiYWJiNDM5OGJlZDNiZGEzYTk5M2I1MGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84NWJlMjliMGU2NzU0ZGJlOGVlYWVlMjcyMWY0ODMzOC5iaW5kUG9wdXAocG9wdXBfNDlkZmIyMmI5OGI1NGZhODk0ZGQ1MDBmOTBhZDNiYjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84Y2FiNzMzOTE3M2I0MWFiODQ3OWQ4YTEzMDI3YmIxMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjcyMjYsLTEwNC45ODNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E5YTg4OWYxYWJhNzRiNTI5NTY2YzM0NzNlM2E5ZjEzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JiMWYwNzg5ZjE4OTQxNzhiZjYwMGI2ZmQyYjgzMzExID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9iYjFmMDc4OWYxODk0MTc4YmY2MDBiNmZkMmI4MzMxMSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgVk5BIEZhcm1lcnMmIzM5OyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTlhODg5ZjFhYmE3NGI1Mjk1NjZjMzQ3M2UzYTlmMTMuc2V0Q29udGVudChodG1sX2JiMWYwNzg5ZjE4OTQxNzhiZjYwMGI2ZmQyYjgzMzExKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOGNhYjczMzkxNzNiNDFhYjg0NzlkOGExMzAyN2JiMTMuYmluZFBvcHVwKHBvcHVwX2E5YTg4OWYxYWJhNzRiNTI5NTY2YzM0NzNlM2E5ZjEzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjBmYjgwODlkYzkyNDVkZTg3NzlkNjYyNDJiY2VkYWMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC4zNzYzNzAxLC0xMDQuNjkyMTg3NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjNhNGY3MTAzZmU1NGRmMWJlNWEwYjRjZDAzNzI5ZGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGI2MGY4YTc1OGMxNGJjZWEzZjc4ZGI4MDA2YWIwZjcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzRiNjBmOGE3NThjMTRiY2VhM2Y3OGRiODAwNmFiMGY3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDaXR5IG9mIEV2YW5zIEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IzYTRmNzEwM2ZlNTRkZjFiZTVhMGI0Y2QwMzcyOWRiLnNldENvbnRlbnQoaHRtbF80YjYwZjhhNzU4YzE0YmNlYTNmNzhkYjgwMDZhYjBmNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzYwZmI4MDg5ZGM5MjQ1ZGU4Nzc5ZDY2MjQyYmNlZGFjLmJpbmRQb3B1cChwb3B1cF9iM2E0ZjcxMDNmZTU0ZGYxYmU1YTBiNGNkMDM3MjlkYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2UwNmEzZTBlNzdhYTQ2M2M4ZTU2ZWZlYTE1YmM5MDllID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuNzYxOSwtMTA0LjQ1M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmI3MTE3NzYyN2YyNGFkYjk3ZmIyZDA4N2QyZjU3NzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNThiMDc3ODMzZGE1NGJiZTg2ZTY1YzZhYmM3NzIyZjQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzU4YjA3NzgzM2RhNTRiYmU4NmU2NWM2YWJjNzcyMmY0IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBMdXNrIEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JiNzExNzc2MjdmMjRhZGI5N2ZiMmQwODdkMmY1Nzc4LnNldENvbnRlbnQoaHRtbF81OGIwNzc4MzNkYTU0YmJlODZlNjVjNmFiYzc3MjJmNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2UwNmEzZTBlNzdhYTQ2M2M4ZTU2ZWZlYTE1YmM5MDllLmJpbmRQb3B1cChwb3B1cF9iYjcxMTc3NjI3ZjI0YWRiOTdmYjJkMDg3ZDJmNTc3OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzM4ZmM3ZjU3NGYzYjQ1NzI4ZTI1YjczMmYzZjI5ZTBjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODgwNjM5LC0xMDQuNzE4OTEzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNzZjM2ZlMGQ4ZTI0Yjk4OWZjYjhiMDYyNTRmMzg3ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMzFiMzZjYTYyZTc0YWQwYmYyMjA2OWVhNGVmYWFiNyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYzMxYjM2Y2E2MmU3NGFkMGJmMjIwNjllYTRlZmFhYjciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEZpcnN0ICZhbXA7IE1haW4gVG93biBDZW50ZXIgTWFsbCBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNzZjM2ZlMGQ4ZTI0Yjk4OWZjYjhiMDYyNTRmMzg3ZC5zZXRDb250ZW50KGh0bWxfYzMxYjM2Y2E2MmU3NGFkMGJmMjIwNjllYTRlZmFhYjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zOGZjN2Y1NzRmM2I0NTcyOGUyNWI3MzJmM2YyOWUwYy5iaW5kUG9wdXAocG9wdXBfMTc2YzNmZTBkOGUyNGI5ODlmY2I4YjA2MjU0ZjM4N2QpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wZmVhMGRkNzZmNDY0NDlmODY2N2M3NjdmZDJiZmY2NiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjcyMiwtMTA0Ljg5N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTM3MjhhNWY3ZTkyNDgzMGJmMDU1Njc5ZDk3ODllNmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWY2NGM5OGRlNWMzNDViYzkyOWMwZGEwNTFiMDlkNzAgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2FmNjRjOThkZTVjMzQ1YmM5MjljMGRhMDUxYjA5ZDcwIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBMb3dlcnkgSGFuZ2VyIDIgRmFybWVycyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTM3MjhhNWY3ZTkyNDgzMGJmMDU1Njc5ZDk3ODllNmQuc2V0Q29udGVudChodG1sX2FmNjRjOThkZTVjMzQ1YmM5MjljMGRhMDUxYjA5ZDcwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMGZlYTBkZDc2ZjQ2NDQ5Zjg2NjdjNzY3ZmQyYmZmNjYuYmluZFBvcHVwKHBvcHVwXzUzNzI4YTVmN2U5MjQ4MzBiZjA1NTY3OWQ5Nzg5ZTZkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMWY2MzFkZWY4MWIzNGEyZjhlMGExOGE1OGE3OTZhM2UgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC4zMzAxMzIyLC0xMDQuODU0NDg1N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjNlYmQ3Njc2MDA4NGRhODhiZTkyMWU0OTFlYzk0NTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzVkYTJhN2RkODc4NGFmZWIwZTFkZGIzNzkwZjk3ZDUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzc1ZGEyYTdkZDg3ODRhZmViMGUxZGRiMzc5MGY5N2Q1IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBKb2huc3Rvd24gTWlsbGlrZW4gRmFybWVyJiMzOTtzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82M2ViZDc2NzYwMDg0ZGE4OGJlOTIxZTQ5MWVjOTQ1NS5zZXRDb250ZW50KGh0bWxfNzVkYTJhN2RkODc4NGFmZWIwZTFkZGIzNzkwZjk3ZDUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xZjYzMWRlZjgxYjM0YTJmOGUwYTE4YTU4YTc5NmEzZS5iaW5kUG9wdXAocG9wdXBfNjNlYmQ3Njc2MDA4NGRhODhiZTkyMWU0OTFlYzk0NTUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zOGMyYWIzMzY0OWQ0YjBlYWQ0MzlhNjNiMjY1YTNiOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljg0NjMsLTEwNC44NjFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MxOTA5NDUzYTg5NzRlYjZiN2MyZGM0MDlhZjRhY2FmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzExY2QyMDI5M2MzNjQ3NTQ4Y2UzYzYyOTYyYTRiNzFkID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8xMWNkMjAyOTNjMzY0NzU0OGNlM2M2Mjk2MmE0YjcxZCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgT2xkIENvbG9yYWRvIENpdHkgRmFybWVycyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzE5MDk0NTNhODk3NGViNmI3YzJkYzQwOWFmNGFjYWYuc2V0Q29udGVudChodG1sXzExY2QyMDI5M2MzNjQ3NTQ4Y2UzYzYyOTYyYTRiNzFkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzhjMmFiMzM2NDlkNGIwZWFkNDM5YTYzYjI2NWEzYjkuYmluZFBvcHVwKHBvcHVwX2MxOTA5NDUzYTg5NzRlYjZiN2MyZGM0MDlhZjRhY2FmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOGE3MjhlNDdjZjJhNDQ1MWE2NGRiYmVmMmM2ZDllY2MgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44MzMsLTEwNC43OTVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzljYjYyMThkNWQ0NjQwNzc5MzUzNjlmY2JkZGQzODM5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY5ZWFmMzYxMDNjODQxYmQ4NTMzNGZmYzU5Y2ZjZWUwID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF82OWVhZjM2MTAzYzg0MWJkODUzMzRmZmM1OWNmY2VlMCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgTWVtb3JpYWwgUGFyayBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85Y2I2MjE4ZDVkNDY0MDc3OTM1MzY5ZmNiZGRkMzgzOS5zZXRDb250ZW50KGh0bWxfNjllYWYzNjEwM2M4NDFiZDg1MzM0ZmZjNTljZmNlZTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84YTcyOGU0N2NmMmE0NDUxYTY0ZGJiZWYyYzZkOWVjYy5iaW5kUG9wdXAocG9wdXBfOWNiNjIxOGQ1ZDQ2NDA3NzkzNTM2OWZjYmRkZDM4MzkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84ZjZmOTliODgzMzY0NWMyODA2NDM5NTA4NDE5YTQyNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljg5NDYsLTEwNC43NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE2NzE4ODUzYzEzOTQ4YTc5MDY2YzYzMzliZWE1ZGM1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ3ZjJjNDBjNjBhZjQyYzhhNDExYTFlOTIwOWQ1NDI2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF80N2YyYzQwYzYwYWY0MmM4YTQxMWExZTkyMDlkNTQyNiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRG9oZXJ0eSBIaWdoIFNjaG9vbCBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNjcxODg1M2MxMzk0OGE3OTA2NmM2MzM5YmVhNWRjNS5zZXRDb250ZW50KGh0bWxfNDdmMmM0MGM2MGFmNDJjOGE0MTFhMWU5MjA5ZDU0MjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84ZjZmOTliODgzMzY0NWMyODA2NDM5NTA4NDE5YTQyNS5iaW5kUG9wdXAocG9wdXBfMTY3MTg4NTNjMTM5NDhhNzkwNjZjNjMzOWJlYTVkYzUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xYWYyODlhZjBiOTU0YWMwYTU1MjViMmJlMGUzZTM0MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjMzMTQwNywtMTA1LjU5MDk2NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjNhMmI1NTk4MGZmNGJjYTgyMzYwOTcwMWZhY2ZkMGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWUyZGIzOTZlNTkyNDI5OWI3YmFhMjE2YzIwZWU1MGMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzllMmRiMzk2ZTU5MjQyOTliN2JhYTIxNmMyMGVlNTBjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBSdWlkb3NvIERvd25zIEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYzYTJiNTU5ODBmZjRiY2E4MjM2MDk3MDFmYWNmZDBlLnNldENvbnRlbnQoaHRtbF85ZTJkYjM5NmU1OTI0Mjk5YjdiYWEyMTZjMjBlZTUwYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzFhZjI4OWFmMGI5NTRhYzBhNTUyNWIyYmUwZTNlMzQxLmJpbmRQb3B1cChwb3B1cF82M2EyYjU1OTgwZmY0YmNhODIzNjA5NzAxZmFjZmQwZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2I5MTU4YTAxYjc5NjRiNjg4MjkxM2VlZTllYmZiN2U3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNjk4OSwtMTA0Ljk4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85Mzg0OGQyNTE5ZTI0MzAwYmVkOTQ0YTgwZDVhOWRkZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNWViNzUyNTFkZmM0YWFlYWEyY2VlNzNkYWU1NGIyYSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZTVlYjc1MjUxZGZjNGFhZWFhMmNlZTczZGFlNTRiMmEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEhpZ2hsYW5kIFVuaXRlZCBOZWlnaGJvcnMgRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85Mzg0OGQyNTE5ZTI0MzAwYmVkOTQ0YTgwZDVhOWRkZC5zZXRDb250ZW50KGh0bWxfZTVlYjc1MjUxZGZjNGFhZWFhMmNlZTczZGFlNTRiMmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iOTE1OGEwMWI3OTY0YjY4ODI5MTNlZWU5ZWJmYjdlNy5iaW5kUG9wdXAocG9wdXBfOTM4NDhkMjUxOWUyNDMwMGJlZDk0NGE4MGQ1YTlkZGQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iY2IzZTRjMDMxNzQ0YjliOTExZDExNWUwZDcyZWI0NCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjY4MjcsLTEwNC43MDAzNjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FmMTUyZmZhNDNhMDQ5MzY5MTJlNmU3MjAwNjc1Njc2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJkMTdmZjczNjQ2ZDRjMmY4MWM2N2I3ODgyNzNjYWFiID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8yZDE3ZmY3MzY0NmQ0YzJmODFjNjdiNzg4MjczY2FhYiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRm91bnRhaW4gRmFybWVycyBNYXJrZXQgLSBDaXR5IEhhbGw8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWYxNTJmZmE0M2EwNDkzNjkxMmU2ZTcyMDA2NzU2NzYuc2V0Q29udGVudChodG1sXzJkMTdmZjczNjQ2ZDRjMmY4MWM2N2I3ODgyNzNjYWFiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYmNiM2U0YzAzMTc0NGI5YjkxMWQxMTVlMGQ3MmViNDQuYmluZFBvcHVwKHBvcHVwX2FmMTUyZmZhNDNhMDQ5MzY5MTJlNmU3MjAwNjc1Njc2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzAwNmZjZmE5ZTE2NDRmNDg1NTkyMmE3MDg0ZjFhNjEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MS4xNjE2MTIsLTEwNC44MDg1N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWY5NGU3MDRiOWRkNDU1OGEzM2FiMmM2MWVjMTgzZTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDhiM2U5Y2I5YjMzNDVkZDhlYWQ0ZjdmMTc3OTQzNDEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2Q4YjNlOWNiOWIzMzQ1ZGQ4ZWFkNGY3ZjE3Nzk0MzQxIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDaGV5ZW5uZSBUdWVzZGF5IEZhcm1lcnMmIzM5OyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWY5NGU3MDRiOWRkNDU1OGEzM2FiMmM2MWVjMTgzZTAuc2V0Q29udGVudChodG1sX2Q4YjNlOWNiOWIzMzQ1ZGQ4ZWFkNGY3ZjE3Nzk0MzQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzAwNmZjZmE5ZTE2NDRmNDg1NTkyMmE3MDg0ZjFhNjEuYmluZFBvcHVwKHBvcHVwX2FmOTRlNzA0YjlkZDQ1NThhMzNhYjJjNjFlYzE4M2UwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTIwM2I2Zjk3NmU0NDZlMGJmMzg0NzEwNWE5Y2MzODIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOC40MzY5MTcsLTEwNS4yNDMxNDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc1NzYyZDAyNTljMzRkYTRiMWVlNDI4ZGE3NzFjZTQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg0NzM1NWM5NTExNDQxY2E5ZTMzNTczZGQxMWM2ZmVjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF84NDczNTVjOTUxMTQ0MWNhOWUzMzU3M2RkMTFjNmZlYyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2Fub24gQ2l0eSBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NTc2MmQwMjU5YzM0ZGE0YjFlZTQyOGRhNzcxY2U0MC5zZXRDb250ZW50KGh0bWxfODQ3MzU1Yzk1MTE0NDFjYTllMzM1NzNkZDExYzZmZWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85MjAzYjZmOTc2ZTQ0NmUwYmYzODQ3MTA1YTljYzM4Mi5iaW5kUG9wdXAocG9wdXBfNzU3NjJkMDI1OWMzNGRhNGIxZWU0MjhkYTc3MWNlNDApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82NjNhMmEzOWU3MTU0M2M0YWE0YTE3ZGVhMzA4NmI1OSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5Ljc0NDMsLTEwNC45OTJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NiNTYwNWRkZDY5NjQ0Mjg4NmZkNDhkNTU4ZmU0NGE4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc5ZWU0MThmMmY3NjQyN2ZiNDM3YWQxNjk4N2UxZDY4ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83OWVlNDE4ZjJmNzY0MjdmYjQzN2FkMTY5ODdlMWQ2OCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgVGlyaSYjMzk7cyBHYXJkZW4gRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYjU2MDVkZGQ2OTY0NDI4ODZmZDQ4ZDU1OGZlNDRhOC5zZXRDb250ZW50KGh0bWxfNzllZTQxOGYyZjc2NDI3ZmI0MzdhZDE2OTg3ZTFkNjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82NjNhMmEzOWU3MTU0M2M0YWE0YTE3ZGVhMzA4NmI1OS5iaW5kUG9wdXAocG9wdXBfY2I1NjA1ZGRkNjk2NDQyODg2ZmQ0OGQ1NThmZTQ0YTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kY2U3NzhlMmNkMzM0YjQxYTdjOWUxMjQzZmRjYmNjZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjE2NTY5NDUsLTEwNC41MDQ3NjE0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMDg4OGEzMjllNTc0ZDFkOGJmMmVhZjM5NTA4N2NlMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MzIyY2I0YTQ5MDM0MDBhODAzNzU5YmU1OWJkYTcxYiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNDMyMmNiNGE0OTAzNDAwYTgwMzc1OWJlNTliZGE3MWIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFRyaW5pZGFkIENvbW11bml0eSBGYXJtZXJzIE1hcmtldCA8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDA4ODhhMzI5ZTU3NGQxZDhiZjJlYWYzOTUwODdjZTEuc2V0Q29udGVudChodG1sXzQzMjJjYjRhNDkwMzQwMGE4MDM3NTliZTU5YmRhNzFiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZGNlNzc4ZTJjZDMzNGI0MWE3YzllMTI0M2ZkY2JjY2UuYmluZFBvcHVwKHBvcHVwX2QwODg4YTMyOWU1NzRkMWQ4YmYyZWFmMzk1MDg3Y2UxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzQ2ZmIzNjBiYzczNDExMzg0NmNkYTc5OGU2ZTg5ZmYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45OTczLC0xMDUuNTQ4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NmY5MWVjZDUwODM0YTQxYjRkYzBlM2Q2ZDFmMTZjMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMGNkM2YwNDQ4MTA0ODYzYTdjNjdmZjIyZjVmZmQzNyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZjBjZDNmMDQ0ODEwNDg2M2E3YzY3ZmYyMmY1ZmZkMzciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIERpbGxvbiBGYXJtZXJzJiMzOTsgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY2ZjkxZWNkNTA4MzRhNDFiNGRjMGUzZDZkMWYxNmMwLnNldENvbnRlbnQoaHRtbF9mMGNkM2YwNDQ4MTA0ODYzYTdjNjdmZjIyZjVmZmQzNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzM0NmZiMzYwYmM3MzQxMTM4NDZjZGE3OThlNmU4OWZmLmJpbmRQb3B1cChwb3B1cF82NmY5MWVjZDUwODM0YTQxYjRkYzBlM2Q2ZDFmMTZjMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzJhNzQzZTJkY2E0NTQzODI4NTllN2VkMDgzZjYzMjEyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNTg1NTA1LC0xMDUuMDI1MjE5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZDBjMTFhYzk5ODk0OGQxYjYwZjYxNTlmNDYxNDRiMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMmM0Zjg4MDc5NTA0ZWYyOTBlNTMwYzNhYTM2OWZjNSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZjJjNGY4ODA3OTUwNGVmMjkwZTUzMGMzYWEzNjlmYzUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEFzcGVuIEdyb3ZlIEZhcm1lcnMmIzM5OyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGQwYzExYWM5OTg5NDhkMWI2MGY2MTU5ZjQ2MTQ0YjEuc2V0Q29udGVudChodG1sX2YyYzRmODgwNzk1MDRlZjI5MGU1MzBjM2FhMzY5ZmM1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMmE3NDNlMmRjYTQ1NDM4Mjg1OWU3ZWQwODNmNjMyMTIuYmluZFBvcHVwKHBvcHVwXzRkMGMxMWFjOTk4OTQ4ZDFiNjBmNjE1OWY0NjE0NGIxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMGQ3MGUyNzRmMjQ1NDZjY2FjMmQxNjNiODIwMWY3ZjMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOS43NDI4LC0xMDUuNTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzlmNWFlY2JmOTNjNTRhMmM5ZDg3ZTg3NzZkZDNhNTZkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNhYTI4ZjNhNTM1ODQ0NWM4MWFhZGEwYjdiMDgzZjUyID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8zYWEyOGYzYTUzNTg0NDVjODFhYWRhMGI3YjA4M2Y1MiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgSWRhaG8gU3ByaW5ncyBDaGFtYmVyIE9mIENvbW1lcmNlIEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzlmNWFlY2JmOTNjNTRhMmM5ZDg3ZTg3NzZkZDNhNTZkLnNldENvbnRlbnQoaHRtbF8zYWEyOGYzYTUzNTg0NDVjODFhYWRhMGI3YjA4M2Y1Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzBkNzBlMjc0ZjI0NTQ2Y2NhYzJkMTYzYjgyMDFmN2YzLmJpbmRQb3B1cChwb3B1cF85ZjVhZWNiZjkzYzU0YTJjOWQ4N2U4Nzc2ZGQzYTU2ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzcyNDJkMjA5YzZjMjQ1OWI4NDU1MDFhODg3NzY4NjMxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuMzExMDc2NCwtMTA1LjU5NDQxNTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY3NmEyODIyYmVkYTRjMjY5OWI0NjVjZDk5ZWU4OTE2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzViZWQ4YzZlZGFlZjRiNzVhZWNjMmExMjE3NzU4OGM0ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF81YmVkOGM2ZWRhZWY0Yjc1YWVjYzJhMTIxNzc1ODhjNCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRG93bnRvd24gTGFyYW1pZSBGYXJtZXImIzM5O3MgbWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY3NmEyODIyYmVkYTRjMjY5OWI0NjVjZDk5ZWU4OTE2LnNldENvbnRlbnQoaHRtbF81YmVkOGM2ZWRhZWY0Yjc1YWVjYzJhMTIxNzc1ODhjNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzcyNDJkMjA5YzZjMjQ1OWI4NDU1MDFhODg3NzY4NjMxLmJpbmRQb3B1cChwb3B1cF82NzZhMjgyMmJlZGE0YzI2OTliNDY1Y2Q5OWVlODkxNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzJmMzNkZDM1NmY4ODQwYTNiZDJhM2YxYjYwM2RlNDMyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuMDk4NjY1MywtMTA0Ljk0MTI4MTNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RiOTU1ZDIzMDc2MTQ5NmZhN2ExZTNmOTQ4NzkwZDNiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZhMDk4YzM4OTQ0MjQzYjlhODI4MjhlNTIzNTQyMDRkID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9mYTA5OGMzODk0NDI0M2I5YTgyODI4ZTUyMzU0MjA0ZCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRnJlZGVyaWNrIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYjk1NWQyMzA3NjE0OTZmYTdhMWUzZjk0ODc5MGQzYi5zZXRDb250ZW50KGh0bWxfZmEwOThjMzg5NDQyNDNiOWE4MjgyOGU1MjM1NDIwNGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yZjMzZGQzNTZmODg0MGEzYmQyYTNmMWI2MDNkZTQzMi5iaW5kUG9wdXAocG9wdXBfZGI5NTVkMjMwNzYxNDk2ZmE3YTFlM2Y5NDg3OTBkM2IpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lYmMwZGY1OWJhNTc0ODQ2YmIyYjllMTQ1Mzg4YmU1OCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjMzMDEzMjIsLTEwNC44NTQ0ODU3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMjZiNjgyMzQ2NzE0NThlYjkzYmU4N2MzZTQwMjQ0ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYTdiNWEwNWYyZmM0Y2E2YTcwOWJkYTA0ODUyZWZmZSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfY2E3YjVhMDVmMmZjNGNhNmE3MDliZGEwNDg1MmVmZmUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEpvaG5zdG93biBNaWxsaWtlbiBGYXJtZXImIzM5O3MgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMyNmI2ODIzNDY3MTQ1OGViOTNiZTg3YzNlNDAyNDRlLnNldENvbnRlbnQoaHRtbF9jYTdiNWEwNWYyZmM0Y2E2YTcwOWJkYTA0ODUyZWZmZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ViYzBkZjU5YmE1NzQ4NDZiYjJiOWUxNDUzODhiZTU4LmJpbmRQb3B1cChwb3B1cF8zMjZiNjgyMzQ2NzE0NThlYjkzYmU4N2MzZTQwMjQ0ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2QzYmEzOWUxZGJmMDQyNjdhMGI4MmY2N2NkNzJiOTMyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzUuNjgyMTMzOCwtMTA1Ljk0OTA5MDhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZhMzBkNTc2OTZmMDRhZWRiMDgyOWJkMzI5Mjk5YzZjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE1NzBlYzVmYjA1NjRkYjhhZGY2YTNlZWYyYzE1YTllID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8xNTcwZWM1ZmIwNTY0ZGI4YWRmNmEzZWVmMmMxNWE5ZSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU2FudGEgRmUgRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82YTMwZDU3Njk2ZjA0YWVkYjA4MjliZDMyOTI5OWM2Yy5zZXRDb250ZW50KGh0bWxfMTU3MGVjNWZiMDU2NGRiOGFkZjZhM2VlZjJjMTVhOWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kM2JhMzllMWRiZjA0MjY3YTBiODJmNjdjZDcyYjkzMi5iaW5kUG9wdXAocG9wdXBfNmEzMGQ1NzY5NmYwNGFlZGIwODI5YmQzMjkyOTljNmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zMWMyNzczYjYwZWM0NjA5YmIwYjU3MTIwZjEwOGU1MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM2LjM5NzUsLTEwNS41NzRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc4MDllM2E5YTNiNjRmNzhhY2IwNTJkYzE5ZWM3N2ZkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU5OWE4YzRkZGYxYjQ0NzI4ZDMwNzRlYjExY2JlNDVjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF81OTlhOGM0ZGRmMWI0NDcyOGQzMDc0ZWIxMWNiZTQ1YyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgVGFvcyBQdWVibG8gLSBSZWQgV2lsbG93IEZhcm1lcnMmIzM5OyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzgwOWUzYTlhM2I2NGY3OGFjYjA1MmRjMTllYzc3ZmQuc2V0Q29udGVudChodG1sXzU5OWE4YzRkZGYxYjQ0NzI4ZDMwNzRlYjExY2JlNDVjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzFjMjc3M2I2MGVjNDYwOWJiMGI1NzEyMGYxMDhlNTEuYmluZFBvcHVwKHBvcHVwXzc4MDllM2E5YTNiNjRmNzhhY2IwNTJkYzE5ZWM3N2ZkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZWE0OGRlZGI5NzgxNDY3NmI1MTIxOTI4NjE0ZGU5MjggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4wOTcsLTEwNC44NjFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU5M2U2YTM3NGZhNTRiNmQ4Yjg2OTgwNzE0MWY3YTc2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y5MjU4YzFlOTNlYTQ1NzRiM2EwZjE3MzZkZTk1OWE5ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9mOTI1OGMxZTkzZWE0NTc0YjNhMGYxNzM2ZGU5NTlhOSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgVGhlIE1hcmtldCBhdCBTdW5kYW5jZSBNb3VudGFpbiBMb2RnZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81OTNlNmEzNzRmYTU0YjZkOGI4Njk4MDcxNDFmN2E3Ni5zZXRDb250ZW50KGh0bWxfZjkyNThjMWU5M2VhNDU3NGIzYTBmMTczNmRlOTU5YTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lYTQ4ZGVkYjk3ODE0Njc2YjUxMjE5Mjg2MTRkZTkyOC5iaW5kUG9wdXAocG9wdXBfNTkzZTZhMzc0ZmE1NGI2ZDhiODY5ODA3MTQxZjdhNzYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hNGZhYjUxMjUzYTc0YTJkYjg5NjdiOTNjMjllZjJlMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjA5OTMsLTEwNC44NzddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JiMWJjMTY0NjFmMTQzZWZhMDkzMDYwYTg4OWYxOTJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkyMTY4MDgzZWYwZDQzZTU5MTdiODI2NGY5NDg5ZDM3ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF85MjE2ODA4M2VmMGQ0M2U1OTE3YjgyNjRmOTQ4OWQzNyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgUGFsbWVyIExha2UgRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYjFiYzE2NDYxZjE0M2VmYTA5MzA2MGE4ODlmMTkyYS5zZXRDb250ZW50KGh0bWxfOTIxNjgwODNlZjBkNDNlNTkxN2I4MjY0Zjk0ODlkMzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hNGZhYjUxMjUzYTc0YTJkYjg5NjdiOTNjMjllZjJlMS5iaW5kUG9wdXAocG9wdXBfYmIxYmMxNjQ2MWYxNDNlZmEwOTMwNjBhODg5ZjE5MmEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83ZDRlNDY5ZDkxZGE0MWQyOTVkN2FjZTQ5ZTJhNjgwZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjAwNDQsLTEwNC43OTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI2NDNlMmEwYzYyMzQ1NTg5OWMxZTdmOGZiMWZiNTE1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M3ZTk4NGI2MTQxZDRmMDdhYjMxNGFkZjZjMDQ1YzdjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jN2U5ODRiNjE0MWQ0ZjA3YWIzMTRhZGY2YzA0NWM3YyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgTGliZXJ0eSBIZWlnaHRzIEZhcm1lcnMmIzM5OyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjY0M2UyYTBjNjIzNDU1ODk5YzFlN2Y4ZmIxZmI1MTUuc2V0Q29udGVudChodG1sX2M3ZTk4NGI2MTQxZDRmMDdhYjMxNGFkZjZjMDQ1YzdjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfN2Q0ZTQ2OWQ5MWRhNDFkMjk1ZDdhY2U0OWUyYTY4MGUuYmluZFBvcHVwKHBvcHVwXzI2NDNlMmEwYzYyMzQ1NTg5OWMxZTdmOGZiMWZiNTE1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjlkMWIyNmIyYTU3NDI0YjgzOTI5YmIwZTMzODBjMDAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOC4zOTI0ODEsLTEwNS4xMTY1NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M5NmQxYmJlMjRiYTRhYTc4ZDE4OTkzOTc3ODc5ZDA3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U3NmQ4OWJiYzFjNjQ2YTI4OTE2YjM3MTg0YmYwMWFjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9lNzZkODliYmMxYzY0NmEyODkxNmIzNzE4NGJmMDFhYyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRmxvcmVuY2UgRmFybWVycyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzk2ZDFiYmUyNGJhNGFhNzhkMTg5OTM5Nzc4NzlkMDcuc2V0Q29udGVudChodG1sX2U3NmQ4OWJiYzFjNjQ2YTI4OTE2YjM3MTg0YmYwMWFjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjlkMWIyNmIyYTU3NDI0YjgzOTI5YmIwZTMzODBjMDAuYmluZFBvcHVwKHBvcHVwX2M5NmQxYmJlMjRiYTRhYTc4ZDE4OTkzOTc3ODc5ZDA3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNGMxMDE3NGU2ZGMwNDVlNGJjMDI3OWI5YzlkYTgwNjMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOC4yNjUxLC0xMDQuNjEzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMTM2Y2I3NGIzMTI0MjFhODc5ZTUwMjk1ZWI3MTQxNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZDQ2MGU0ZjgzNWY0ODRiODdjZTBkYmYyOGUzN2UwNiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfN2Q0NjBlNGY4MzVmNDg0Yjg3Y2UwZGJmMjhlMzdlMDYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEV2ZW5pbmcgRmFybWVyJiMzOTtzIE1hcmtldCBvbiB0aGUgUml2ZXJ3YWxrPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IxMzZjYjc0YjMxMjQyMWE4NzllNTAyOTVlYjcxNDE1LnNldENvbnRlbnQoaHRtbF83ZDQ2MGU0ZjgzNWY0ODRiODdjZTBkYmYyOGUzN2UwNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzRjMTAxNzRlNmRjMDQ1ZTRiYzAyNzliOWM5ZGE4MDYzLmJpbmRQb3B1cChwb3B1cF9iMTM2Y2I3NGIzMTI0MjFhODc5ZTUwMjk1ZWI3MTQxNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZkOTYyMDAyY2U5YTQ4M2VhZmY3MTkxNGQ1MGVhZTUyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguNzk0NjEyNiwtMTA0LjgzMzYxODZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk0NzRjNGZkOGRmZDRkOWU4OTgwMWU4OWQ2ZDhmYjI5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBiNDNlY2JhYWNkNTQyMDY4N2UzMWI4ZDJiZDIxMmFiID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8wYjQzZWNiYWFjZDU0MjA2ODdlMzFiOGQyYmQyMTJhYiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQnJvYWRtb29yIEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk0NzRjNGZkOGRmZDRkOWU4OTgwMWU4OWQ2ZDhmYjI5LnNldENvbnRlbnQoaHRtbF8wYjQzZWNiYWFjZDU0MjA2ODdlMzFiOGQyYmQyMTJhYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzZkOTYyMDAyY2U5YTQ4M2VhZmY3MTkxNGQ1MGVhZTUyLmJpbmRQb3B1cChwb3B1cF85NDc0YzRmZDhkZmQ0ZDllODk4MDFlODlkNmQ4ZmIyOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2MyYWVkZGYzNjhiYzQ2NzI5ODVlYjE0MjRkMmUyYmZlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODI0NjczLC0xMDQuODQwODU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYmNlMDU5MGNjN2Y0OTkyOTdiMzY3MDEwNzYwZWFiYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYTUxMjM2ZTI5ZmE0MWM5YmI4NDA0OTdhYzczMzU2ZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYWE1MTIzNmUyOWZhNDFjOWJiODQwNDk3YWM3MzM1NmYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEJyaWFyZ2F0ZSBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYmNlMDU5MGNjN2Y0OTkyOTdiMzY3MDEwNzYwZWFiYS5zZXRDb250ZW50KGh0bWxfYWE1MTIzNmUyOWZhNDFjOWJiODQwNDk3YWM3MzM1NmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jMmFlZGRmMzY4YmM0NjcyOTg1ZWIxNDI0ZDJlMmJmZS5iaW5kUG9wdXAocG9wdXBfMWJjZTA1OTBjYzdmNDk5Mjk3YjM2NzAxMDc2MGVhYmEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84NGZiZjg3Y2Q2NjM0ZjNlYjYwODlmOTBiMjNjYjVhZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjgyNDY3MywtMTA0Ljg0MDg1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTZlMDJjNWE0Yjc2NGQyOTg0MTE3NjFmZWQwZWJjZTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTY1Mjc3ZjNlZmRjNDk3NzlkZGZhYTJhMjgyZGJkYzcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzE2NTI3N2YzZWZkYzQ5Nzc5ZGRmYWEyYTI4MmRiZGM3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBNb251bWVudCBIaWxsIEZhcm1lcnMmIzM5OyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTZlMDJjNWE0Yjc2NGQyOTg0MTE3NjFmZWQwZWJjZTYuc2V0Q29udGVudChodG1sXzE2NTI3N2YzZWZkYzQ5Nzc5ZGRmYWEyYTI4MmRiZGM3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODRmYmY4N2NkNjYzNGYzZWI2MDg5ZjkwYjIzY2I1YWYuYmluZFBvcHVwKHBvcHVwXzE2ZTAyYzVhNGI3NjRkMjk4NDExNzYxZmVkMGViY2U2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOWY4MzA1YmU2OGY4NDhjZjg4MDc0NzNiMTgxZTBhMTEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNi45MDIwNDgyLC0xMDQuNDM4MjI4MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjBkNWIyZTM0MWJlNGZkNGE2YzhjYzRiMTBkMGQwMzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzZkMWRhZWM5MzE4NGJmOGE2MmJjNWRmZDU1YmU1YzAgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzM2ZDFkYWVjOTMxODRiZjhhNjJiYzVkZmQ1NWJlNWMwIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBGaXJzdCBTdHJlZXQgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YwZDViMmUzNDFiZTRmZDRhNmM4Y2M0YjEwZDBkMDMzLnNldENvbnRlbnQoaHRtbF8zNmQxZGFlYzkzMTg0YmY4YTYyYmM1ZGZkNTViZTVjMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzlmODMwNWJlNjhmODQ4Y2Y4ODA3NDczYjE4MWUwYTExLmJpbmRQb3B1cChwb3B1cF9mMGQ1YjJlMzQxYmU0ZmQ0YTZjOGNjNGIxMGQwZDAzMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzRiNzRlMWVmNWU4NjRlMDA5MzljMjUzNTRjMmJiOThjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzUuMzc0MTI3LC0xMDUuNDUwMTI1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NjhkYzU3NDZiOTc0YmRmOWY4NDUyODlkMWFkZGMyOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZDM2OTNlYTkwZTY0ZjU1YjA4OGY3OWQ5NGYyYzAwYSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYmQzNjkzZWE5MGU2NGY1NWIwODhmNzlkOTRmMmMwMGEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEVsIFZhbGxlIEZhcm1lcnMmIzM5OyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTY4ZGM1NzQ2Yjk3NGJkZjlmODQ1Mjg5ZDFhZGRjMjkuc2V0Q29udGVudChodG1sX2JkMzY5M2VhOTBlNjRmNTViMDg4Zjc5ZDk0ZjJjMDBhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNGI3NGUxZWY1ZTg2NGUwMDkzOWMyNTM1NGMyYmI5OGMuYmluZFBvcHVwKHBvcHVwXzk2OGRjNTc0NmI5NzRiZGY5Zjg0NTI4OWQxYWRkYzI5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjU0NmNiODJhNGJhNDk4ZGFlMmFjNTQxNGY0ODNmNDQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOS45ODc5LC0xMDQuODIxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYzMyYjU3OWY3M2U0ZDE2OWZjMWMxNjRlNTBkMzE5OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMDg4YTgwMjczZmY0NGNlOGM2NDM2YmExZTcxMzE4NyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMjA4OGE4MDI3M2ZmNDRjZThjNjQzNmJhMWU3MTMxODciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEJyaWdodG9uIERvd250b3duIFNhdHVyZGF5IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYzMyYjU3OWY3M2U0ZDE2OWZjMWMxNjRlNTBkMzE5OC5zZXRDb250ZW50KGh0bWxfMjA4OGE4MDI3M2ZmNDRjZThjNjQzNmJhMWU3MTMxODcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yNTQ2Y2I4MmE0YmE0OThkYWUyYWM1NDE0ZjQ4M2Y0NC5iaW5kUG9wdXAocG9wdXBfZGMzMmI1NzlmNzNlNGQxNjlmYzFjMTY0ZTUwZDMxOTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zNTZmY2QyMDNmZTE0NTgxOTVhMTdmODNlZmFhMTk5MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjkwNjE2MywtMTA0LjgxNzI3NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDI5NWNhMDI0NTcxNDk4NWJlZDRmY2Y3NTlhMmRlMGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWYwNjg5ZjQ3NzdjNDM0YmJlNWM1YzM1YTk1N2FiOTMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2FmMDY4OWY0Nzc3YzQzNGJiZTVjNWMzNWE5NTdhYjkzIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBVbml2ZXJzaXR5IFZpbGxhZ2UgQ29sb3JhZG8gRmFybWVycyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDI5NWNhMDI0NTcxNDk4NWJlZDRmY2Y3NTlhMmRlMGMuc2V0Q29udGVudChodG1sX2FmMDY4OWY0Nzc3YzQzNGJiZTVjNWMzNWE5NTdhYjkzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzU2ZmNkMjAzZmUxNDU4MTk1YTE3ZjgzZWZhYTE5OTEuYmluZFBvcHVwKHBvcHVwXzQyOTVjYTAyNDU3MTQ5ODViZWQ0ZmNmNzU5YTJkZTBjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzcxZmIwMzNlMjRkNGUzNmI5ZTcxYTVmNjgzNWU0MTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOS43MTkwMjY5LC0xMDQuODk2OTUzNF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWYwY2RmYzJkMTRjNDU5MDllNmZlNGVlM2VkOWE3ZDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2EwZmEyOGQyYmQzNGI2ODhkNTM1OTRjOTg0Y2Y4ZWYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzdhMGZhMjhkMmJkMzRiNjg4ZDUzNTk0Yzk4NGNmOGVmIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBMb3dyeSBGYXJtZXJzJiMzOTsgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFmMGNkZmMyZDE0YzQ1OTA5ZTZmZTRlZTNlZDlhN2QwLnNldENvbnRlbnQoaHRtbF83YTBmYTI4ZDJiZDM0YjY4OGQ1MzU5NGM5ODRjZjhlZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzM3MWZiMDMzZTI0ZDRlMzZiOWU3MWE1ZjY4MzVlNDEzLmJpbmRQb3B1cChwb3B1cF8xZjBjZGZjMmQxNGM0NTkwOWU2ZmU0ZWUzZWQ5YTdkMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzIxNWExNjgyYTNlMjQxOWRhNTNkYzAyZWRjYWUwNDA2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNjE4NSwtMTA0Ljc3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YzZmNTM4ZWQ0NjA0ODljOGI1YzJlNDMzYWI0MDUwNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMDkxZjc5ZDBkMjE0NTc5YWIwMzBmMzQxMTE3NzNmNiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMDA5MWY3OWQwZDIxNDU3OWFiMDMwZjM0MTExNzczZjYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNvdXRobGFuZHMgRmFybWVyJiMzOTtzIE1hcmtldCA8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2M2ZjUzOGVkNDYwNDg5YzhiNWMyZTQzM2FiNDA1MDQuc2V0Q29udGVudChodG1sXzAwOTFmNzlkMGQyMTQ1NzlhYjAzMGYzNDExMTc3M2Y2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjE1YTE2ODJhM2UyNDE5ZGE1M2RjMDJlZGNhZTA0MDYuYmluZFBvcHVwKHBvcHVwXzdjNmY1MzhlZDQ2MDQ4OWM4YjVjMmU0MzNhYjQwNTA0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2ViYzZmZmUxYmIxNDBmNzlmMjJjN2ZiMzFkN2Q5MDUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43NDc5LC0xMDUuNzM2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NGExMTQwZmM0MjM0N2U2Yjg0OGM2MDg1ZWFjZGExNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMmNkZWEyMTc5ZTI0NTdjYWZjY2RlODQzZjlmNWYxMCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZDJjZGVhMjE3OWUyNDU3Y2FmY2NkZTg0M2Y5ZjVmMTAiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFJhc2NhbCBGYWlyL1doaXRlIE9ha3MgQ29tbXVuaXR5IE1hcmtldCA8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDRhMTE0MGZjNDIzNDdlNmI4NDhjNjA4NWVhY2RhMTUuc2V0Q29udGVudChodG1sX2QyY2RlYTIxNzllMjQ1N2NhZmNjZGU4NDNmOWY1ZjEwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2ViYzZmZmUxYmIxNDBmNzlmMjJjN2ZiMzFkN2Q5MDUuYmluZFBvcHVwKHBvcHVwXzQ0YTExNDBmYzQyMzQ3ZTZiODQ4YzYwODVlYWNkYTE1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjdiODAyZWM2MDIwNGMwMTgwMGQwMmZhODgxNjAzZjQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy41NDU1LC0xMDUuNTczXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNjNmMjczY2EwZTA0Yzk0YTk1MTI4ODIwM2E3M2Q0MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xODg1YjllZGE2ZDI0ZThmOWI5ZjkxMGMyNDcxZTNmZSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMTg4NWI5ZWRhNmQyNGU4ZjliOWY5MTBjMjQ3MWUzZmUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEFUQUNzIENhcGl0YW4gRmFybWVycyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDYzZjI3M2NhMGUwNGM5NGE5NTEyODgyMDNhNzNkNDIuc2V0Q29udGVudChodG1sXzE4ODViOWVkYTZkMjRlOGY5YjlmOTEwYzI0NzFlM2ZlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjdiODAyZWM2MDIwNGMwMTgwMGQwMmZhODgxNjAzZjQuYmluZFBvcHVwKHBvcHVwXzA2M2YyNzNjYTBlMDRjOTRhOTUxMjg4MjAzYTczZDQyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjg5Zjk0ZjNkZTUyNDhhOWJkMDI3NGJhMGRhYWZmM2YgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zNzIyNzU1LC0xMDQuODYwMDI5OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjM3NTBiNDI3ZWUyNDc1MjgxZmM3NGU2YTg0M2FkOTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzBiMDBiNzAzYWM5NGMwZDljZGEyNjhkZmQzYzgzZWUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzMwYjAwYjcwM2FjOTRjMGQ5Y2RhMjY4ZGZkM2M4M2VlIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYXN0bGUgUm9jayBGYXJtZXJzIE1hcmtldCwgYWthIFBsdW0gQ3JlZWsgVmFsbGV5IEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YzNzUwYjQyN2VlMjQ3NTI4MWZjNzRlNmE4NDNhZDkyLnNldENvbnRlbnQoaHRtbF8zMGIwMGI3MDNhYzk0YzBkOWNkYTI2OGRmZDNjODNlZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzI4OWY5NGYzZGU1MjQ4YTliZDAyNzRiYTBkYWFmZjNmLmJpbmRQb3B1cChwb3B1cF9mMzc1MGI0MjdlZTI0NzUyODFmYzc0ZTZhODQzYWQ5Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2QyMTdmNjBhMGY3NTRkYTI5NzcxOGJjMTQyYzZjZWY1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzYuMTk3NDg3LC0xMDUuODg3MzQzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMDdiZmMwYzZmMGI0YmIxOWNlZjBlNTFkZjQ1MzM5NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jOTA1ZjYwOGM1MDU0OWIzOGEyNWEwYzUxNzMyOTRhYyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYzkwNWY2MDhjNTA1NDliMzhhMjVhMGM1MTczMjk0YWMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIERpeG9uIEZhcm1lcnMmIzM5OyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTA3YmZjMGM2ZjBiNGJiMTljZWYwZTUxZGY0NTMzOTQuc2V0Q29udGVudChodG1sX2M5MDVmNjA4YzUwNTQ5YjM4YTI1YTBjNTE3MzI5NGFjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDIxN2Y2MGEwZjc1NGRhMjk3NzE4YmMxNDJjNmNlZjUuYmluZFBvcHVwKHBvcHVwX2UwN2JmYzBjNmYwYjRiYjE5Y2VmMGU1MWRmNDUzMzk0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2VlM2QyMDg0YThiNDNkN2FkMWU4Nzg0YzBhNDRjMjggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMi40MjAyMzUsLTEwNC4yMjg0NTRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk1N2YwYzg5MmY3NDQ3NzM5NjA4ZTBkNGU1MWZjM2EyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQxNWViNTU4ZGQ5ZTQxZTJiZGU4OTY0OTY3NjE2MjNlID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF80MTVlYjU1OGRkOWU0MWUyYmRlODk2NDk2NzYxNjIzZSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FybHNiYWQgRG93bnRvd24gRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85NTdmMGM4OTJmNzQ0NzczOTYwOGUwZDRlNTFmYzNhMi5zZXRDb250ZW50KGh0bWxfNDE1ZWI1NThkZDllNDFlMmJkZTg5NjQ5Njc2MTYyM2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jZWUzZDIwODRhOGI0M2Q3YWQxZTg3ODRjMGE0NGMyOC5iaW5kUG9wdXAocG9wdXBfOTU3ZjBjODkyZjc0NDc3Mzk2MDhlMGQ0ZTUxZmMzYTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wNjA0MTZhYzI0ZGY0YWRmYjQ3MjI2ODZjNWJjYmQ5NCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM1LjUzNjEyLC0xMDUuODkwNV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmU5ZGRiY2RmOTdkNGUyNzk1OWNhMjFlMWU0YWVlMzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjhiNWVjNjQ5YmU1NDQ2M2E3ZWE5MDcxMTQwYzgwYjkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzI4YjVlYzY0OWJlNTQ0NjNhN2VhOTA3MTE0MGM4MGI5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBFbGRvcmFkbyBGYXJtZXJzJiMzOTsgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJlOWRkYmNkZjk3ZDRlMjc5NTljYTIxZTFlNGFlZTMzLnNldENvbnRlbnQoaHRtbF8yOGI1ZWM2NDliZTU0NDYzYTdlYTkwNzExNDBjODBiOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA2MDQxNmFjMjRkZjRhZGZiNDcyMjY4NmM1YmNiZDk0LmJpbmRQb3B1cChwb3B1cF8yZTlkZGJjZGY5N2Q0ZTI3OTU5Y2EyMWUxZTRhZWUzMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzEyNjg2YjRhNGM0NzQ5YWE4MmFhYzAxZjFjMjZlYWU4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTkzNDgzLC0xMDUuMDU2OTE2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mODY2Mzk4MDIwZjY0Mjc5YjI3ZGIwZmVkZTY5ZGJhMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMzhjYmYyNWJlMzI0MGJhYTkyNzI3NTM5OTE3M2IyYiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZTM4Y2JmMjViZTMyNDBiYWE5MjcyNzUzOTkxNzNiMmIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFdvb2RsYW5kIFBhcmsgRmFybWVycyYjMzk7IE1hcmtldCAtIFN1bW1lcjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mODY2Mzk4MDIwZjY0Mjc5YjI3ZGIwZmVkZTY5ZGJhMi5zZXRDb250ZW50KGh0bWxfZTM4Y2JmMjViZTMyNDBiYWE5MjcyNzUzOTkxNzNiMmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xMjY4NmI0YTRjNDc0OWFhODJhYWMwMWYxYzI2ZWFlOC5iaW5kUG9wdXAocG9wdXBfZjg2NjM5ODAyMGY2NDI3OWIyN2RiMGZlZGU2OWRiYTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82MzUxYTI3MjMwMTE0NmQ1YjQ5NzdlN2VlMjk5ZGY3NSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjQyMjcxNSwtMTA0LjY4OTkyN10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGJiODY4ZTA4NTgyNDc1MzgxZGI3N2I4OGIzNzIxOTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGY5OGJmNWNiYjVkNDFlZWEzNTg4MTAwOWNiZTdlNWEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzBmOThiZjVjYmI1ZDQxZWVhMzU4ODEwMDljYmU3ZTVhIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHcmVlbGV5IFdpbnRlciBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGJiODY4ZTA4NTgyNDc1MzgxZGI3N2I4OGIzNzIxOTEuc2V0Q29udGVudChodG1sXzBmOThiZjVjYmI1ZDQxZWVhMzU4ODEwMDljYmU3ZTVhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjM1MWEyNzIzMDExNDZkNWI0OTc3ZTdlZTI5OWRmNzUuYmluZFBvcHVwKHBvcHVwXzRiYjg2OGUwODU4MjQ3NTM4MWRiNzdiODhiMzcyMTkxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzI3ODM2ZjliYTNhNGFmYWEyNWZiZTM5Yzg3NmRmMTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNi40Mzg2LC0xMDUuNTQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMGZjMWQzYTA4YWI0ZjNhYTA1Yzg4YmRmZTQzM2Y5YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNTJhMTI3ZmRhYzY0NTgxOWM0MmYwNjM4YzVhOTc4NiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZTUyYTEyN2ZkYWM2NDU4MTljNDJmMDYzOGM1YTk3ODYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFJlZCBXaWxsb3cgRmFybWVycyBNYXJrZXQgPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IwZmMxZDNhMDhhYjRmM2FhMDVjODhiZGZlNDMzZjliLnNldENvbnRlbnQoaHRtbF9lNTJhMTI3ZmRhYzY0NTgxOWM0MmYwNjM4YzVhOTc4Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzcyNzgzNmY5YmEzYTRhZmFhMjVmYmUzOWM4NzZkZjE2LmJpbmRQb3B1cChwb3B1cF9iMGZjMWQzYTA4YWI0ZjNhYTA1Yzg4YmRmZTQzM2Y5Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2E1YWU2OTg5MjE4OTQ5OTg5NjRlN2E0NTkyZWJlNjJlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuMzA1MzI5LC0xMDUuMDgyNjM2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NjhmZGMwNWMwZGU0MTFkODgwOTJiZjdlMzYxNDVmNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yYzgwN2JkMmJhOWI0NDMyODNlYmNkOTgwYzI1YzE1ZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMmM4MDdiZDJiYTliNDQzMjgzZWJjZDk4MGMyNWMxNWYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEJlcnRob3VkIExvY2FsIEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU2OGZkYzA1YzBkZTQxMWQ4ODA5MmJmN2UzNjE0NWY3LnNldENvbnRlbnQoaHRtbF8yYzgwN2JkMmJhOWI0NDMyODNlYmNkOTgwYzI1YzE1Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2E1YWU2OTg5MjE4OTQ5OTg5NjRlN2E0NTkyZWJlNjJlLmJpbmRQb3B1cChwb3B1cF81NjhmZGMwNWMwZGU0MTFkODgwOTJiZjdlMzYxNDVmNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzNiMWM3ZGQ1MWVkYjRjYWE4OTlhZTYzNmU2MWQ0ZDBjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTk0NzMzLC0xMDUuMDUxNTUxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZDhjOGUzYjQwNTg0YWNlOTI3OTg0MDc4NTZkYjc4ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85OWE1N2NkM2FjNDA0YTU3ODExYmY0YWY5NDkwNTk5YiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOTlhNTdjZDNhYzQwNGE1NzgxMWJmNGFmOTQ5MDU5OWIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFdvb2RsYW5kIFBhcmsgRmFybWVycyYjMzk7IE1hcmtldCAtIFdpbnRlcjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZDhjOGUzYjQwNTg0YWNlOTI3OTg0MDc4NTZkYjc4ZC5zZXRDb250ZW50KGh0bWxfOTlhNTdjZDNhYzQwNGE1NzgxMWJmNGFmOTQ5MDU5OWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zYjFjN2RkNTFlZGI0Y2FhODk5YWU2MzZlNjFkNGQwYy5iaW5kUG9wdXAocG9wdXBfNWQ4YzhlM2I0MDU4NGFjZTkyNzk4NDA3ODU2ZGI3OGQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81MTk0NDZmMDNiZWI0YjUyYjUwMmVhNDdkMTVkOThiNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjgwMDEzOCwtMTA1LjA4MTQ1NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWZmZDc1NWEzMjY5NGRiMjgyZGYxYmQ0ZDZmZWZkMGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDU0ZDM4ZmJiODJiNDIyN2I0NmE1MDJmYTc3M2JkMGIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2Q1NGQzOGZiYjgyYjQyMjdiNDZhNTAyZmE3NzNiZDBiIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBBcnZhZGEgRmFybWVycyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWZmZDc1NWEzMjY5NGRiMjgyZGYxYmQ0ZDZmZWZkMGUuc2V0Q29udGVudChodG1sX2Q1NGQzOGZiYjgyYjQyMjdiNDZhNTAyZmE3NzNiZDBiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTE5NDQ2ZjAzYmViNGI1MmI1MDJlYTQ3ZDE1ZDk4YjcuYmluZFBvcHVwKHBvcHVwXzlmZmQ3NTVhMzI2OTRkYjI4MmRmMWJkNGQ2ZmVmZDBlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODhlZTBmNDJiMDcwNDgwY2FlNzRkMTgwZTExZjVkZmYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOS45MzAxLC0xMDUuNzldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUwZjU1Y2I1ZjZlZjQ1OGQ5NDhjYWJhN2ZkZTdkODFkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JhOTBlODZlZjNlZDQzZWJiZGIyYzA0NmM1NGI2MDlkID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9iYTkwZTg2ZWYzZWQ0M2ViYmRiMmMwNDZjNTRiNjA5ZCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR3JhbmQgUGFyayBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MGY1NWNiNWY2ZWY0NThkOTQ4Y2FiYTdmZGU3ZDgxZC5zZXRDb250ZW50KGh0bWxfYmE5MGU4NmVmM2VkNDNlYmJkYjJjMDQ2YzU0YjYwOWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84OGVlMGY0MmIwNzA0ODBjYWU3NGQxODBlMTFmNWRmZi5iaW5kUG9wdXAocG9wdXBfNTBmNTVjYjVmNmVmNDU4ZDk0OGNhYmE3ZmRlN2Q4MWQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xN2Y2MWU0NzYwMDI0MzQ0OTAzMjA0ZGE0YmVjMTRjZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjcxMTQyOSwtMTA1LjA5OTQ5Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjE4MDM3YTY2MmFmNDM1YTg2NWU1MjQyMjg1NjQ0NTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODAxZmU1ZTZlY2NjNDljZGEwMzhjNGRkMjBhODI3M2EgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzgwMWZlNWU2ZWNjYzQ5Y2RhMDM4YzRkZDIwYTgyNzNhIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBMYWtld29vZCBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMTgwMzdhNjYyYWY0MzVhODY1ZTUyNDIyODU2NDQ1NS5zZXRDb250ZW50KGh0bWxfODAxZmU1ZTZlY2NjNDljZGEwMzhjNGRkMjBhODI3M2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xN2Y2MWU0NzYwMDI0MzQ0OTAzMjA0ZGE0YmVjMTRjZC5iaW5kUG9wdXAocG9wdXBfZjE4MDM3YTY2MmFmNDM1YTg2NWU1MjQyMjg1NjQ0NTUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80MjhhZmVhNzM4MTg0YjUyODBiMjM2Y2Y4NDZmMTYwYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjcxNzcwOCwtMTA0Ljk1ODgyN10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjBmNTJmMjgwYzczNDM2YTliZGUzNDNkYzdjM2IwMGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGVlZGNlZDc5YjQ0NGY1YWE3YjY4MTY2MjYyMmY4ZjEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2RlZWRjZWQ3OWI0NDRmNWFhN2I2ODE2NjI2MjJmOGYxIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDaGVycnkgQ3JlZWsgRnJlc2ggTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIwZjUyZjI4MGM3MzQzNmE5YmRlMzQzZGM3YzNiMDBhLnNldENvbnRlbnQoaHRtbF9kZWVkY2VkNzliNDQ0ZjVhYTdiNjgxNjYyNjIyZjhmMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQyOGFmZWE3MzgxODRiNTI4MGIyMzZjZjg0NmYxNjBjLmJpbmRQb3B1cChwb3B1cF8yMGY1MmYyODBjNzM0MzZhOWJkZTM0M2RjN2MzYjAwYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzg1MGRhMTFlYzU1YjQ2MjRhYjkwMTE3MjNiYTUxODE3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuMTMxOTc4LC0xMDQuODE0MjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZjMDgyOWNhYjI2MzQzZTI5NjIxNGYyNDI2OGY4NjE1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NjNjEyNTJhZGNhMDQwYjI5NTIxZGI1MDk3NjBhNDRkID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jYzYxMjUyYWRjYTA0MGIyOTUyMWRiNTA5NzYwYTQ0ZCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2hleWVubmUgV2ludGVyIEZhcm1lcnMmIzM5OyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmMwODI5Y2FiMjYzNDNlMjk2MjE0ZjI0MjY4Zjg2MTUuc2V0Q29udGVudChodG1sX2NjNjEyNTJhZGNhMDQwYjI5NTIxZGI1MDk3NjBhNDRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODUwZGExMWVjNTViNDYyNGFiOTAxMTcyM2JhNTE4MTcuYmluZFBvcHVwKHBvcHVwXzZjMDgyOWNhYjI2MzQzZTI5NjIxNGYyNDI2OGY4NjE1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDEyN2Y3ZGUwYjc3NDZlMDlmOTQzMmVhOWZmZWM2ZGEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy40NjgzNTksLTEwNS44NjUyMzZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VhYWQ4YTE3NDMwNDQ1Mzc5YjJkZmMwMjQzMzQ2YWJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FjZWEwZTQ5ZmQ0ZjRhMzI5YTJkNjVkMDI4ZmY0ZWQzID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9hY2VhMGU0OWZkNGY0YTMyOWEyZDY1ZDAyOGZmNGVkMyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQWxhbW9zYSBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lYWFkOGExNzQzMDQ0NTM3OWIyZGZjMDI0MzM0NmFiYS5zZXRDb250ZW50KGh0bWxfYWNlYTBlNDlmZDRmNGEzMjlhMmQ2NWQwMjhmZjRlZDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wMTI3ZjdkZTBiNzc0NmUwOWY5NDMyZWE5ZmZlYzZkYS5iaW5kUG9wdXAocG9wdXBfZWFhZDhhMTc0MzA0NDUzNzliMmRmYzAyNDMzNDZhYmEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82NTc3YjBmMTNlNTM0MTM5OTExY2U4NzY5YzY2YTg4MCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5Ljg2OCwtMTA0Ljk3Ml0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDZiY2VjM2VkMTgwNGFhNDlkMzUzNWZlMTQ5MGVhNTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzdhYTdjZTM4YzM1NGI4ZmI4ZjE4ZDQ0MjcwZTEwZWEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2M3YWE3Y2UzOGMzNTRiOGZiOGYxOGQ0NDI3MGUxMGVhIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBMYXJrcmlkZ2UgRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNmJjZWMzZWQxODA0YWE0OWQzNTM1ZmUxNDkwZWE1Ni5zZXRDb250ZW50KGh0bWxfYzdhYTdjZTM4YzM1NGI4ZmI4ZjE4ZDQ0MjcwZTEwZWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82NTc3YjBmMTNlNTM0MTM5OTExY2U4NzY5YzY2YTg4MC5iaW5kUG9wdXAocG9wdXBfZDZiY2VjM2VkMTgwNGFhNDlkMzUzNWZlMTQ5MGVhNTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgPC9zY3JpcHQ+CiAgICAgICAg" style="position:absolute;width:100%;height:100%;left:0;top:0;"></iframe></div></div>
  12908. </div>
  12909. </div>
  12910. </div>
  12911. </div>
  12912. </div></section></section><section><section>
  12913. <div class="cell border-box-sizing text_cell rendered">
  12914. <div class="prompt input_prompt">
  12915. </div>
  12916. <div class="inner_cell">
  12917. <div class="text_cell_render border-box-sizing rendered_html">
  12918. <h1 id="7.-The-community-...">7. The community ...<a class="anchor-link" href="#7.-The-community-...">&#182;</a></h1><p><img src="assets/pycommunity.png"/></p>
  12919. </div>
  12920. </div>
  12921. </div></section></section><section><section>
  12922. <div class="cell border-box-sizing text_cell rendered">
  12923. <div class="prompt input_prompt">
  12924. </div>
  12925. <div class="inner_cell">
  12926. <div class="text_cell_render border-box-sizing rendered_html">
  12927. <h1 id="Now-go-play-...">Now go play ...<a class="anchor-link" href="#Now-go-play-...">&#182;</a></h1><p><img src="assets/8569018622_93efb5cd7e_z.jpg"/>
  12928. <!-- https://www.flickr.com/photos/46990836@N03/8569018622/in/photolist-e4dsGo-e4drbm-ag5WKD-4caGzy-7eTkzp-e4drTN-6kZ1AA-67Fq7C-4qvUeL-dFvk86-dFvkLz-p8N5aV-dx8z1d-62VbU4-dFALqN-4u1EWE-dFvmhk-dFALQS-dFALm5-hUL8ph-7cLTsy-9dGKeF-dFvkuP-dFALJ9-avVtdr-dFvjAv-dtR8k8-5QLb27-dFvkTe-8fpxyQ-4hTwhD-pMuBbQ-9qVf2B-9hgixi-peV9SM-ikEv1x-j1bLt-7u5Hi4-6mPrUi-aq5Hkg-dFAK8y-bSyrsR-dFAKML-7cLTsC-54ruRw-o2iGon-4jQBiE-5W7z2-ooTY-b9sTqZ --></p>
  12929. </div>
  12930. </div>
  12931. </div></section></section>
  12932. </div>
  12933. </div>
  12934. <script>
  12935. require(
  12936. {
  12937. // it makes sense to wait a little bit when you are loading
  12938. // reveal from a cdn in a slow connection environment
  12939. waitSeconds: 15
  12940. },
  12941. [
  12942. "http://cdn.jsdelivr.net/reveal.js/3.0.0/lib/js/head.min.js",
  12943. "http://cdn.jsdelivr.net/reveal.js/3.0.0/js/reveal.js"
  12944. ],
  12945. function(head, Reveal){
  12946. // Full list of configuration options available here: https://github.com/hakimel/reveal.js#configuration
  12947. Reveal.initialize({
  12948. controls: true,
  12949. progress: true,
  12950. history: true,
  12951. theme: Reveal.getQueryHash().theme, // available themes are in /css/theme
  12952. transition: Reveal.getQueryHash().transition || 'linear', // default/cube/page/concave/zoom/linear/none
  12953. // Optional libraries used to extend on reveal.js
  12954. dependencies: [
  12955. { src: "http://cdn.jsdelivr.net/reveal.js/3.0.0/lib/js/classList.js",
  12956. condition: function() { return !document.body.classList; } },
  12957. { src: "http://cdn.jsdelivr.net/reveal.js/3.0.0/plugin/notes/notes.js",
  12958. async: true,
  12959. condition: function() { return !!document.body.classList; } }
  12960. ]
  12961. });
  12962. var update = function(event){
  12963. if(MathJax.Hub.getAllJax(Reveal.getCurrentSlide())){
  12964. MathJax.Hub.Rerender(Reveal.getCurrentSlide());
  12965. }
  12966. };
  12967. Reveal.addEventListener('slidechanged', update);
  12968. var update_scroll = function(event){
  12969. $(".reveal").scrollTop(0);
  12970. };
  12971. Reveal.addEventListener('slidechanged', update_scroll);
  12972. }
  12973. );
  12974. </script>
  12975. </body>
  12976. </html>