diff --git a/404.html b/404.html new file mode 100644 index 0000000..b29e96b --- /dev/null +++ b/404.html @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+
+

Document not found (404)

+

This URL is invalid, sorry. Please use the navigation bar or search to continue.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..7610255 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +book.cosmwasm.com diff --git a/FontAwesome/css/font-awesome.css b/FontAwesome/css/font-awesome.css new file mode 100644 index 0000000..540440c --- /dev/null +++ b/FontAwesome/css/font-awesome.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} diff --git a/FontAwesome/fonts/FontAwesome.ttf b/FontAwesome/fonts/FontAwesome.ttf new file mode 100644 index 0000000..35acda2 Binary files /dev/null and b/FontAwesome/fonts/FontAwesome.ttf differ diff --git a/FontAwesome/fonts/fontawesome-webfont.eot b/FontAwesome/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000..e9f60ca Binary files /dev/null and b/FontAwesome/fonts/fontawesome-webfont.eot differ diff --git a/FontAwesome/fonts/fontawesome-webfont.svg b/FontAwesome/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000..855c845 --- /dev/null +++ b/FontAwesome/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FontAwesome/fonts/fontawesome-webfont.ttf b/FontAwesome/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000..35acda2 Binary files /dev/null and b/FontAwesome/fonts/fontawesome-webfont.ttf differ diff --git a/FontAwesome/fonts/fontawesome-webfont.woff b/FontAwesome/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000..400014a Binary files /dev/null and b/FontAwesome/fonts/fontawesome-webfont.woff differ diff --git a/FontAwesome/fonts/fontawesome-webfont.woff2 b/FontAwesome/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000..4d13fc6 Binary files /dev/null and b/FontAwesome/fonts/fontawesome-webfont.woff2 differ diff --git a/actor-model.html b/actor-model.html new file mode 100644 index 0000000..082bb39 --- /dev/null +++ b/actor-model.html @@ -0,0 +1,183 @@ + + + + + + The Actor Model - CosmWasm book + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+
+

Actor model

+

This section describes the fundaments of CosmWasm smart contracts architecture, which determines how do they communicate +with each other. I want to go through this before teaching step by step how to create multiple contracts relating to each +other, to give you a grasp of what to expect. Don't worry if it will not be clear after the first read - I suggest going +through this chapter once now and maybe giving it another take in the future when you know the practical part of this.

+

The whole thing described here is officially documented in the +SEMANTICS.md, of the cosmwasm repository.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + diff --git a/actor-model/actors-in-blockchain.html b/actor-model/actors-in-blockchain.html new file mode 100644 index 0000000..e82b79e --- /dev/null +++ b/actor-model/actors-in-blockchain.html @@ -0,0 +1,424 @@ + + + + + + Actors in the blockchain - CosmWasm book + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+
+

Actors in blockchain

+

Previously we were talking about actors mostly in the abstraction of any +blockchain-specific terms. However, before we would dive into the code, we need +to establish some common language, and to do so we would look at contracts from +the perspective of external users, instead of their implementation.

+

In this part, I would use the wasmd binary to communicate with the malaga +testnet. To properly set it up, check the Quick start with +wasmd.

+

Blockchain as a database

+

It is kind of starting from the end, but I would start with the state part of +the actor model. Relating to traditional systems, there is one particular thing +I like to compare blockchain with - it is a database.

+

Going back to the previous section we learned that the most important part of +a contract is its state. Manipulating the state is the only way to persistently +manifest work performed to the world. But What is the thing which purpose is to +keep the state? It is a database!

+

So here is my (as a contract developer) point of view on contracts: it is a distributed +database, with some magical mechanisms to make it democratic. Those "magical +mechanisms" are crucial for BC's existence and they make they are reasons why even +use blockchain, but they are not relevant from the contract creator's point of +view - for us, everything that matters is the state.

+

But you can say: what about the financial part?! Isn't blockchain (wasmd in particular) +the currency implementation? With all of those gas costs, sending funds seems +very much like a money transfer, not database updates. And yes, you are kind of right, +but I have a solution for that too. Just imagine, that for every native token (by +"native tokens" we meant tokens handled directly by blockchain, in contradiction +to for example cw20 tokens) there is a special database bucket (or table if you prefer) +with mapping of address to how much of a token the address possesses. You can query +this table (querying for token balance), but you cannot modify it directly. To modify +it you just send a message to a special build-in bank contract. And everything +is still a database.

+

But if blockchain is a database, then where are smart contracts stored? +Obviously - in the database itself! So now imagine another special table - this +one would contain a single table of code-ids mapped to blobs of wasm binaries. And +again - to operate on this table, you use "special contract" which is not accessible +from another contract, but you can use it via wasmd binary.

+

Now there is a question - why do I even care about BC being a DB? So the reason +is that it makes reasoning about everything in blockchain very natural. Do you +remember that every message in the actor model is transactional? It perfectly +matches traditional database transactions (meaning: every message starts a new +transaction)! Also, when we later talk about migrations, it would turn out, that +migrations in CosmWasm are very much equivalents of schema migrations in +traditional databases.

+

So, the thing to remember - blockchain is very similar to a database, having some +specially reserved tables (like native tokens, code repository), with a special +bucket created for every contract. A contract can look at every table in every +bucket in the whole blockchain, but it can modify the only one he created.

+

Compile the contract

+

I will not go into the code for now, but to start with something we need compiled +contract binary. The cw4-group contract from +cw-plus is simple enough to work with, for +now, so we will start with compiling it. Start with cloning the repository:

+
$ git clone git@github.com:CosmWasm/cw-plus.git
+
+

Then go to cw4-group contract and build it:

+
$ cd cw-plus/contracts/cw4-group
+$ docker run --rm -v "$(pwd)":/code \
+  --mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target \
+  --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \
+  cosmwasm/workspace-optimizer:0.12.6
+
+

Your final binary should be located in the +cw-plus/artifacts folder (cw-plus being where you cloned your repository).

+

Contract code

+

When the contract binary is built, the first interaction with CosmWasm is uploading +it to the blockchain (assuming you have your wasm binary in the working directory):

+
$ wasmd tx wasm store ./cw4-group.wasm --from wallet $TXFLAG -y -b block
+
+

As a result of such an operation you would get json output like this:

+
..
+logs:
+..
+- events:
+  ..
+  - attributes:
+    - key: code_id
+      value: "1069"
+    type: store_code
+
+

I ignored most of not fields as they are not relevant for now - what we care +about is the event emitted by blockchain with information about code_id of +stored contract - in my case the contract code was stored in blockchain under +the id of 1069. I can now look at the code by querying for it:

+
$ wasmd query wasm code 1069 code.wasm
+
+

And now the important thing - the contract code is not an actor. So, what is a +contract code? I think that the easiest way to think about that is a class or +a type in programming. It defines some stuff about what can be done, but the +class itself is in most cases not very useful unless we create an instance +of a type, on which we can call class methods. So now let's move forward to +instances of such contract classes.

+

Contract instance

+

Now we have a contract code, but what we want is an actual contract itself. +To create it, we need to instantiate it. Relating to analogy to programming, +instantiation is calling a constructor. To do that, I would send an +instantiate message to my contract:

+
$ wasmd tx wasm instantiate 1069 '{"members": []}' --from wallet --label "Group 1" --no-admin $TXFLAG -y
+
+

What I do here is create a new contract and immediately call the Instantiate +message on it. The structure of such a message is different for every contract +code. In particular, the cw4-group Instantiate message contains two fields:

+
    +
  • members field which is the list of initial group members optional admin
  • +
  • field which defines an address of who can add or remove +a group member
  • +
+

In this case, I created an empty group with no admin - so which could never +change! It may seem like a not very useful contract, but it serves us as a +contract example.

+

As the result of instantiating, I got the result:

+
..
+logs:
+..
+- events:
+  ..
+  - attributes:
+    - key: _contract_address
+      value: wasm1u0grxl65reu6spujnf20ngcpz3jvjfsp5rs7lkavud3rhppnyhmqqnkcx6
+    - key: code_id
+      value: "1069"
+    type: instantiate
+
+

As you can see, we again look at logs[].events[] field, looking for +interesting event and extracting information from it - it is the common case. +I will talk about events and their attributes in the future but in general, +it is a way to notify the world that something happened. Do you remember the +KFC example? If a waiter is serving our dish, he would put a tray on the bar, +and she would yell (or put on the screen) the order number - this would be +announcing an event, so you know some summary of operation, so you can go and +do something useful with it.

+

So, what use can we do with the contract? We obviously can call it! But first +I want to tell you about addresses.

+

Addresses in CosmWasm

+

Address in CosmWasm is a way to refer to entities in the blockchain. There are +two types of addresses: contract addresses, and non-contracts. The difference +is that you can send messages to contract addresses, as there is some smart +contract code associated with them, and non-contracts are just users of the +system. In an actor model, contract addresses represent actors, and +non-contracts represent clients of the system.

+

When operating with blockchain using wasmd, you also have an address - you +got one when you added the key to wasmd:

+
# add wallets for testing
+$ wasmd keys add wallet3
+- name: wallet3
+  type: local
+  address: wasm1dk6sq0786m6ayg9kd0ylgugykxe0n6h0ts7d8t
+  pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"Ap5zuScYVRr5Clz7QLzu0CJNTg07+7GdAAh3uwgdig2X"}'
+  mnemonic: ""
+
+

You can always check your address:

+
$ wasmd keys show wallet
+- name: wallet
+  type: local
+  address: wasm1um59mldkdj8ayl5gknp9pnrdlw33v40sh5l4nx
+  pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"A5bBdhYS/4qouAfLUH9h9+ndRJKvK0co31w4lS4p5cTE"}'
+  mnemonic: ""
+
+

Having an address is very important because it is a requirement for being able +to call anything. When we send a message to a contract it always knows the +address which sends this message so it can identify it - not to mention that +this sender is an address that would play a gas cost.

+

Querying the contract

+

So, we have our contract, let's try to do something with it - query would be the +easiest thing to do. Let's do it:

+
$ wasmd query wasm contract-state smart wasm1u0grxl65reu6spujnf20ngcpz3jvjfsp5rs7lkavud3rhppnyhmqqnkcx6 '{ "list_members": {} }'
+data:
+  members: []
+
+

The wasm... string is the contract address, and you have to substitute it with +your contract address. { "list_members": {} } is query message we send to +contract. Typically, CW smart contract queries are in the form of a single JSON +object, with one field: the query name (list_members in our case). The value +of this field is another object, being query parameters - if there are any. +list_members query handles two parameters: limit, and start_after, which +are both optional and which support result pagination. However, in our case of +an empty group they don't matter.

+

The query result we got is in human-readable text form (if we want to get the +JSON from - for example, to process it further with jq, just pass the +-o json flag). As you can see response contains one field: members which is +an empty array.

+

So, can we do anything more with this contract? Not much. But let's try to do +something with a new one!

+

Executions to perform some actions

+

The problem with our previous contract is that for the cw4-group contract, +the only one who can perform executions on it is an admin, but our contract +doesn't have one. This is not true for every smart contract, but it is the +nature of this one.

+

So, let's make a new group contract, but this time we would +make ourselves an admin. First, check our wallet address:

+
$ wasmd keys show wallet
+
+

And instantiate a new group contract - this time with proper admin:

+
$ wasmd tx wasm instantiate 1069 '{"members": [], "admin": "wasm1um59mldkdj8ayl5gknp9pnrdlw33v40sh5l4nx"}' --from wallet --label "Group 1" --no-admin $TXFLAG -y
+..
+logs:
+- events:
+  ..
+  - attributes:
+    - key: _contract_address
+      value: wasm1n5x8hmstlzdzy5jxd70273tuptr4zsclrwx0nsqv7qns5gm4vraqeam24u
+    - key: code_id
+      value: "1069"
+    type: instantiate
+
+

You may ask, why do we pass some kind of --no-admin flag, if we just said, we +want to set an admin to the contract? The answer is sad and confusing, but... +it is a different admin. The admin we want to set is one checked by the +contract itself and managed by him. The admin which is declined with +--no-admin flag, is a wasmd-level admin, which can migrate the contract. You +don't need to worry about the second one at least until you learn about +contract migrations - until then you can always pass the --no-admin flag to +the contract.

+

Now let's query our new contract for the member's list:

+
$ wasmd query wasm contract-state smart wasm1n5x8hmstlzdzy5jxd70273tuptr4zsclrwx0nsqv7qns5gm4vraqeam24u '{ "list_members": {} }'
+data:
+  members: []
+
+

Just like before - no members initially. Now check an admin:

+
$ wasmd query wasm contract-state smart wasm1n5x8hmstlzdzy5jxd70273tuptr4zsclrwx0nsqv7qns5gm4vraqeam24u '{ "admin": {} }'
+data:
+  admin: wasm1um59mldkdj8ayl5gknp9pnrdlw33v40sh5l4nx
+
+

So, there is an admin, it seems like the one we wanted to have there. So now we +would add someone to the group - maybe ourselves?

+
wasmd tx wasm execute wasm1n5x8hmstlzdzy5jxd70273tuptr4zsclrwx0nsqv7qns5gm4vraqeam24u '{ "update_members": { "add": [{ "addr": "wasm1um59mldkdj8ayl5gkn
+p9pnrdlw33v40sh5l4nx", "weight": 1 }], "remove": [] } }' --from wallet $TXFLAG -y
+
+

The message for modifying the members is update_members and it has two +fields: members to remove, and members to add. Members to remove are +just addresses. Members to add have a bit more complex structure: they +are records with two fields: address and weight. Weight is not relevant +for us now, it is just metadata stored with every group member - for +us, it would always be 1.

+

Let's query the contract again to check if our message changed anything:

+
$ wasmd query wasm contract-state smart wasm1n5x8hmstlzdzy5jxd70273tuptr4zsclrwx0nsqv7qns5gm4vraqeam24u '{ "list_members": {} }'
+data:
+  members:
+  - addr: wasm1um59mldkdj8ayl5gknp9pnrdlw33v40sh5l4nx
+    weight: 1
+
+

As you can see, the contract updated its state. This is basically how +it works - sending messages to contracts causes them to update the state, +and the state can be queried at any time. For now, to keep things simple +we were just interacting with the contract directly by wasmd, but as described +before - contracts can communicate with each other. However, to investigate +this we need to understand how to write contracts. Next time we will look +at the contract structure and we will map it part by part to what we have learned +until now.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + diff --git a/actor-model/contract-as-actor.html b/actor-model/contract-as-actor.html new file mode 100644 index 0000000..5688665 --- /dev/null +++ b/actor-model/contract-as-actor.html @@ -0,0 +1,547 @@ + + + + + + Contract as an actor - CosmWasm book + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+
+

Smart contract as an actor

+

In previous chapters, we talked about the actor model and how it is implemented +in the blockchain. Now it is time to look closer into the typical contract +structure to understand how different features of the actor model are mapped to +it.

+

This will not be a step-by-step guide on contract creation, as it is a topic +for the series itself. It would be going through contract elements roughly to +visualize how to handle architecture in the actor model.

+

The state

+

As before we would start with the state. Previously we were working with +the cw4-group contract, so let's start by looking at its code. Go to +cw-plus/contracts/cw4-group/src. The folder structure should look like +this:

+
  src
+├──  contract.rs
+├──  error.rs
+├──  helpers.rs
+├──  lib.rs
+├──  msg.rs
+└──  state.rs
+
+

As you may already figure out, we want to check the state.rs first.

+

The most important thing here is a couple of constants: ADMIN, HOOKS, +TOTAL, and MEMBERS. Every one of such constants represents a single portion +of the contract state - as tables in databases. The types of those constants +represent what kind of table this is. The most basic ones are Item<T>, which +keeps zero or one element of a given type, and Map<K, T> which is a key-value +map.

+

You can see Item is used to keep an admin and some other data: HOOKS, and +TOTAL. HOOKS is used by the cw4-group to allow subscription to any +changes to a group - a contract can be added as a hook, so when the group +changes, a message is sent to it. The TOTAL is just a sum of all members' +weights.

+

The MEMBERS in the group contract is the SnapshotMap - as you can imagine, +it is a Map, with some steroids - this particular one, gives us access to the +state of the map at some point in history, accessing it by the blockchain +height. height is the count of blocks created since the beggining of +blockchain, and it is the most atomic time representation in smart contracts. +There is a way to access the clock time in them, but everything happening in a +single block is considered happening in the same moment.

+

Other types of storage objects not used in group contracts are:

+
    +
  • IndexedMap - another map type, that allows accessing values +by a variety of keys
  • +
  • IndexedSnapshotMap - IndexedMap and SnapshotMap married
  • +
+

What is very important - every state type in the contract is accessed using +some name. All of those types are not containers, just accessors to the state. +Do you remember that I told you before that blockchain is our database? And +that is correct! All those types are just ORM to this database - when we use +them to get actual data from it, we pass a special State object to them, so +they can retrieve items from it.

+

You may ask - why all that data for a contract are not auto-fetched by +whatever is running it. That is a good question. The reason is that we want +contracts to be lazy with fetching. Copying data is a very expensive operation, +and for everything happening on it, someone has to pay - it is realized by gas +cost. I told you before, that as a contract developer you don't need to worry +about gas at all, but it was only partially true. You don't need to know +exactly how gas is calculated, but by lowering your gas cost, you would may +execution of your contracts cheaper which is typically a good thing. One good +practice to achieve that is to avoid fetching data you will not use in a +particular call.

+

Messages

+

In a blockchain, contracts communicate with each other by some JSON +messages. They are defined in most contracts in the msg.rs file. Take +a look at it.

+

There are three types on it, let's go through them one by one. +The first one is an InstantiateMsg. This is the one, that is sent +on contract instantiation. It typically contains some data which +is needed to properly initialize it. In most cases, it is just a +simple structure.

+

Then there are two enums: ExecuteMsg, and QueryMsg. They are +enums because every single variant of them represents a different +message which can be sent. For example, the ExecuteMsg::UpdateAdmin +corresponds to the update_admin message we were sending previously.

+

Note, that all the messages are attributed with +#[derive(Serialize, Deserialize)], and +#[serde(rename_all="snake_case")]. Those attributes come from +the serde crate, and they help us with +deserialization of them (and serialization in case of sending +them to other contracts). The second one is not required, +but it allows us to keep a camel-case style in our Rust code, +and yet still have JSONs encoded with a snake-case style more +typical to this format.

+

I encourage you to take a closer look at the serde documentation, +like everything there, can be used with the messages.

+

One important thing to notice - empty variants of those enums, +tend to use the empty brackets, like Admin {} instead of +more Rusty Admin. It is on purpose, to make JSONs cleaner, +and it is related to how serde serializes enum.

+

Also worth noting is that those message types are not set in stone, +they can be anything. This is just a convention, but sometimes +you would see things like ExecuteCw4Msg, or similar. Just keep +in mind, to keep your message name obvious in terms of their +purpose - sticking to ExecuteMsg/QueryMsg is generally a good +idea.

+

Entry points

+

So now, when we have our contract message, we need a way to handle +them. They are sent to our contract via entry points. There are +three entry points in the cw4-group contract:

+

+#![allow(unused)]
+fn main() {
+#[cfg_attr(not(feature = "library"), entry_point)]
+pub fn instantiate(
+    deps: DepsMut,
+    env: Env,
+    _info: MessageInfo,
+    msg: InstantiateMsg,
+) -> Result<Response, ContractError> {
+    // ...
+}
+#[cfg_attr(not(feature = "library"), entry_point)]
+pub fn execute(
+    deps: DepsMut,
+    env: Env,
+    info: MessageInfo,
+    msg: ExecuteMsg,
+) -> Result<Response, ContractError> {
+    // ..
+}
+#[cfg_attr(not(feature = "library"), entry_point)]
+pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    // ..
+}
+}
+
+

Those functions are called by the CosmWasm virtual machine when +a message is to be handled by contract. You can think about them +as the main function of normal programs, except they have a signature +that better describes the blockchain itself.

+

What is very important is that the names of those entry points (similarly to +the main function) are fixed - it is relevant, so the virtual machine knows +exactly what to call.

+

So, let's start with the first line. Every entry point is attributed with +#[cfg_attr(not(feature = "library"), entry_point)]. It may look a bit +scary, but it is just a conditional equivalent of #[entry_point] - +the attribute would be there if and only if the "library" feature is not set. +We do this to be able to use our contracts as dependencies for other +contracts - the final binary can contain only one copy of each entry point, +so we make sure, that only the top-level one is compiled without this +feature.

+

The entry_point attribute is a macro that generates some boilerplate. +As the binary is run by WASM virtual machine, it doesn't know much about +Rust types - the actual entry point signatures are very inconvenient to +use. To overcome this issue, there is a macro created, which generates +entry points for us, and those entry points are just calling our functions.

+

Now take a look at functions arguments. Every single entry point takes as +the last argument a message which triggered the execution of it (except for +reply - I will explain it later). In addition to that, there are +additional arguments provided by blockchain:

+
    +
  • Deps or DepsMut object is the gateway to the world outside the smart contract context. It allows +accessing the contract state, as well as querying other contracts, and +also delivers an Api object with a couple of useful utility functions. +The difference is that DepsMut allows updating state, while Deps +allows only to look at it.
  • +
  • Env object delivers information about the blockchain state at the +moment of execution - its height, the timestamp of execution and information +about the executing contract itself.
  • +
  • MessageInfo object is information about the contract call - it +contains the address which sends the message, and the funds sent with the +message.
  • +
+

Keep in mind, that the signatures of those functions are fixed (except +the messages type), so you cannot interchange Deps with DepsMut to +update the contract state in the query call.

+

The last portion of entry points is the return type. Every entry point returns +a Result type, with any error which can be turned into a string - in case of +contract failure, the returned error is just logged. In most cases, the error +type is defined for a contract itself, typically using a +thiserror crate. Thiserror is +not required here, but is strongly recommended - using it makes the error +definition very straightforward, and also improves the testability of the +contract.

+

The important thing is the Ok part of Result. Let's start with the +query because this one is the simplest. The query always returns the Binary +object on the Ok case, which would contain just serialized response. +The common way to create it is just calling a to_binary method +on an object implementing serde::Serialize, and they are typically +defined in msg.rs next to message types.

+

Slightly more complex is the return type returned by any other entry +point - the cosmwasm_std::Response type. This one keep everything +needed to complete contract execution. There are three chunks of +information in that.

+

The first one is an events field. It contains all events, which would +be emitted to the blockchain as a result of the execution. Events have +a really simple structure: they have a type, which is just a string, +and a list of attributes which are just string-string key-value pairs.

+

You can notice that there is another attributes field on the Response. +This is just for convenience - most executions would return +only a single event, and to make it a bit easier to operate one, there +is a set of attributes directly on response. All of them would be converted +to a single wasm event which would be emitted. Because of that, I consider +events and attributes to be the same chunk of data.

+

Then we have the messages field, of SubMsg type. This one is the clue +of cross-contact communication. Those messages would be sent to the +contracts after processing. What is important - the whole execution is +not finished, unless the processing of all sub-messages scheduled by the contract +finishes. So, if the group contract sends some messages as a result of +update_members execution, the execution would be considered done only if +all the messages sent by it would also be handled (even if they failed).

+

So, when all the sub-messages sent by contract are processed, then all the +attributes generated by all sub-calls and top-level calls are collected and +reported to the blockchain. But there is one additional piece of information - +the data. So, this is another Binary field, just like the result of a query +call, and just like it, it typically contains serialized JSON. Every contract +call can return some additional information in any format. You may ask - in +this case, why do we even bother returning attributes? It is because of a +completely different way of emitting events and data. Any attributes emitted by +the contract would be visible on blockchain eventually (unless the whole +message handling fails). So, if your contract emitted some event as a result of +being sub-call of some bigger use case, the event would always be there visible +to everyone. This is not true for data. Every contract call would return only +a single data chunk, and it has to decide if it would just forward the data +field of one of the sub-calls, or maybe it would construct something by itself. +I would explain it in a bit more detail in a while.

+

Sending submessages

+

I don't want to go into details of the Response API, as it can be read +directly from documentation, but I want to take a bit closer look at the part +about sending messages.

+

The first function to use here is add_message, which takes as an argument the +CosmosMsg (or rather anything convertible to it). A message added to response +this way would be sent and processed, and its execution would not affect the +result of the contract at all.

+

The other function to use is add_submessage, taking a SubMsg argument. It +doesn't differ much from add_message - SubMsg just wraps the CosmosMsg, +adding some info to it: the id field, and reply_on. There is also a +gas_limit thing, but it is not so important - it just causes sub-message +processing to fail early if the gas threshold is reached.

+

The simple thing is reply_on - it describes if the reply message should be +sent on processing success, on failure, or both.

+

The id field is an equivalent of the order id in our KFC example from the +very beginning. If you send multiple different sub-messages, it would be +impossible to distinguish them without that field. It would not even be +possible to figure out what type of original message reply handling is! This is +why the id field is there - sending a sub-message you can set it to any +value, and then on the reply, you can figure out what is happening based on +this field.

+

An important note here - you don't need to worry about some sophisticated way +of generating ids. Remember, that the whole processing is atomic, and only one +execution can be in progress at once. In most cases, your contract sends a +fixed number of sub-messages on very concrete executions. Because of that, you +can hardcode most of those ids while sending (preferably using some constant).

+

To easily create submessages, instead of setting all the fields separately, +you would typically use helper constructors: SubMsg::reply_on_success, +SubMsg::reply_on_error and SubMsg::reply_always.

+

CosmosMsg

+

If you took a look at the CosmosMsg type, you could be very surprised - there +are so many variants of them, and it is not obvious how they relate to +communication with other contracts.

+

The message you are looking for is the WasmMsg (CosmosMsg::Wasm variant). +This one is very much similar to what we already know - it has a couple of +variants of operation to be performed by contracts: Execute, but also +Instantiate (so we can create new contracts in contract executions), and also +Migrate, UpdateAdmin, and ClearAdmin - those are used to manage +migrations (will tell a bit about them at the end of this chapter).

+

Another interesting message is the BankMsg (CosmosMsg::Bank). This one +allows a contract to transfer native tokens to other contracts (or burn them - +equivalent to transferring them to some black whole contract). I like to think +about it as sending a message to a very special contract responsible for handling +native tokens - this is not a true contract, as it is handled by the blockchain +itself, but at least to me it simplifies things.

+

Other variants of CosmosMsg are not very interesting for now. The Custom +one is there to allow other CosmWasm-based blockchains to add some +blockchain-handled variant of the message. This is a reason why most +message-related types in CosmWasm are generic over some T - this is just a +blockchain-specific type of message. We will never use it in the wasmd. All +other messages are related to advanced CosmWasm features, and I will not +describe them here.

+

Reply handling

+

So now that we know how to send a submessage, it is time to talk about +handling the reply. When sub-message processing is finished, and it is +requested to reply, the contract is called with an entry point:

+

+#![allow(unused)]
+fn main() {
+#[cfg_attr(not(feature = "library"), entry_point)]
+pub fn reply(deps: DepsMut, env: Env, msg: Reply) -> Result<Response, ContractError> {
+    // ...
+}
+}
+
+

The DepsMut, and Env arguments are already familiar, but there is a new +one, substituting the typical message argument: the cosmwasm_std::Reply.

+

This is a type representing the execution status of the sub-message. It is +slightly processed cosmwasm_std::Response. The first important thing it contains +is an id - the same, which you set sending sub-message, so now you can +identify your response. The other one is the ContractResult, which is very +similar to the Rust Result<T, String> type, except it is there for +serialization purposes. You can easily convert it into a Result with an +into_result function.

+

In the error case of ContracResult, there is a string - as I mentioned +before, errors are converted to strings right after execution. The Ok case +contains SubMsgExecutionResponse with two fields: events emitted by +sub-call, and the data field embedded on response.

+

As said before, you never need to worry about forwarding events - CosmWasm +would do it anyway. The data however, is another story. As mentioned before, +every call would return only a single data object. In the case of sending +sub-messages and not capturing a reply, it would always be whatever is returned +by the top-level message. But it is not the case when reply is called. If a +a reply is called, then it is a function deciding about the final data. It can +decide to either forward the data from the sub-message (by returning None) or +to overwrite it. It cannot choose, to return data from the original execution +processing - if the contract sends sub-messages waiting for replies, it is +supposed to not return any data, unless replies are called.

+

But what happens if multiple sub-messages are sent? What would the final +data contain? The rule is - the last non-None. All sub-messages are always +called in the order of adding them to the Response. As the order is +deterministic and well defined, it is always easy to predict which reply would +be used.

+

Migrations

+

I mentioned migrations earlier when describing the WasmMsg. So, migration +is another action possible to be performed by contracts, which is kind +of similar to instantiate. In software engineering, it is a common thing to +release an updated version of applications. It is also a case in the blockchain - +SmartContract can be updated with some new features. In such cases, a new +code is uploaded, and the contract is migrated - so it knows that from +this point, its messages are handled by another, updated contract code.

+

However, it may be that the contract state used by the older version of the +contract differs from the new one. It is not a problem if some info was +added (for example some additional map - it would be just empty right +after migration). But the problem is, when the state changes, +for example, the field is renamed. In such a case, every contract execution +would fail because of (de)serialization problems. Or even more subtle +cases, like adding a map, but one which should be synchronized with the whole +contract state, not empty.

+

This is the purpose of the migration entry point. It looks like this:

+

+#![allow(unused)]
+fn main() {
+#[cfg_attr(not(feature = "library"), entry_point)]
+pub fn migrate(deps: DepsMut, env: Env, msg: MigrateMsg) -> Result<Response<T>, ContracError> {
+    // ..
+}
+}
+
+

MigrateMsg is the type defined by the contract in msg.rs. +The migrate entry point would be called at the moment of performing +the migration, and it is responsible for making sure the state is correct +after the migration. It is very similar to schema migrations in traditional +database applications. And it is also kind of difficult, because of version +management involved - you can never assume, that you are migrating a contract +from the previous version - it can be migrated from any version, released +anytime - even later than that version we are migrating to!

+

It is worth bringing back one issue from the past - the contract admin. Do you +remember the --no-admin flag we set previously on every contract +instantiation? It made our contract unmigrateable. Migrations can be performed +only by contract admin. To be able to use it, you should pass --admin address +flag instead, with the address being the address that would be able to +perform migrations.

+

Sudo

+

Sudo is the last basic entry point in CosmWasm, and it is the one we would +never use in wasmd. It is equivalent to CosmosMsg::Custom, but instead of +being a special blockchain-specific message to be sent and handled by a +blockchain itself, it is now a special blockchain-specific message sent by the +blockchain to contract in some conditions. There are many uses for those, but I +will not cover them, because would not be related to CosmWasm itself. The +signature of sudo looks like this:

+

+#![allow(unused)]
+fn main() {
+#[cfg_attr(not(feature = "library"), entry_point)]
+pub fn sudo(deps: DepsMut, env: Env, msg: SudoMsg) -> Result<Response, ContractError> {
+    // ..
+}
+}
+
+

The important difference is that because sudo messages are blockchain +specific, the SudoMsg type is typically defined by some blockchain helper +crate, not the contract itself.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + diff --git a/actor-model/idea.html b/actor-model/idea.html new file mode 100644 index 0000000..01bd234 --- /dev/null +++ b/actor-model/idea.html @@ -0,0 +1,447 @@ + + + + + + The idea - CosmWasm book + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+
+

Idea behind an Actor Model

+

The actor model is the solution to the problem of communication between smart +contracts. Let's take a look at the reasons why this particular solution is +chosen in CosmWasm, and what are the consequences of that.

+

The problem

+

Smart contracts can be imagined as sandboxed microservices. Due to +SOLID principles, it is valuable to +split responsibilities between entities. However, to split the work between +contracts themselves, there is a need to communicate between them, so if one +contract is responsible for managing group membership, it is possible to call +its functionality from another contract.

+

The traditional way to solve this problem in SW engineering is to model +services as functions that would be called with some RPC mechanism, and return +its result as a response. Even though this approach looks nice, it creates sort +of problems, in particular with shared state consistency.

+

The other approach which is far more popular in business-level modeling is to +treat entities as actors, which can perform some tasks, but without +interrupting it with calls to other contracts. Any calls to other contracts can +only be called after the whole execution is performed. When "subcall" is +finished, it will call the original contract back.

+

This solution may feel unnatural, and it requires different kinds of design +solutions, but it turns out to work pretty well for smart contract execution. +I will try to explain how to reason about it, and how it maps to contract +structure step by step.

+

The Actor

+

The most important thing in the whole model is an Actor itself. So, what is +this? The Actor is a single instantiation of a contract, which can perform +several actions. When the actor finishes his job, he prepares a summary of it, +which includes the list of things that have to be done, to complete the whole +scheduled task.

+

An example of an actor is the Seller in the KFC restaurant. The first thing you +do is order your BSmart, so you are requesting action from him. So, from the +system user, you can think about this task as "sell and prepare my meal", but +the action performed by the seller is just "Charge payment and create order". +The first part of this operation is to create a bill and charge you for it, and +then it requests the Sandwich and Fries to be prepared by other actors, +probably chefs. Then when the chef is done with his part of the meal, he checks +if all meals are ready. If so, it calls the last actor, the waiter, to deliver +the food to you. At this point, you can receive your delivery, and the task is +considered complete.

+

The above-described workflow is kind of simplified. In particular - in a +typical restaurant, a waiter would observe the kitchen instead of being +triggered by a chef, but in the Actor model, it is not possible. Here, entities +of the system are passive and cannot observe the environment actively - they +only react to messages from other system participants. Also in KFC, the seller +would not schedule subtasks for particular chefs; instead, he would leave tasks +to be taken by them, when they are free. It is not the case, because as before - +chefs cannot actively listen to the environment. However, it would be possible +to create a contract for being a chef's dispatcher which would collect all +orders from sellers, and balance them across chefs for some reason.

+

The Action

+

Actors are the model entities, but to properly communicate with them, we need +some kind of protocol. Every actor is capable of performing several actions. In +my previous KFC example, the only action seller can do is "Charge payment and +create order". However, it is not always the case - our chefs were proficient +at performing both "Prepare fries" and "Prepare Sandwich" actions - and also +many more.

+

So, when we want to do something in an actor system, we schedule some action to +the actor being the closest to us, very often with some additional parameters +(as we can pick if we want to exchange fries with salad).

+

However, naming the action after the exact thing which happened in the very +contract would be misleading. Take a look at the KFC example once again. As I +mentioned, the action performed by a seller is "Charge payment and create +order". The problem is, that for the client who schedules this action, it +doesn't matter what exactly is the responsibility of the actor himself - what +the client is scheduling is "Prepare Meal" with some description of what +exactly to prepare. So, we can say, that the action is the thing performed by +the contract itself, plus all the sub-actions it schedules.

+

Multi-stage Actions

+

So as the whole idea makes some sense, there is the problem created by the +actor model: what if I want to perform some action in my contract, but to +completely finalize some steps, the contract has to make sure that some +sub-action he scheduled are finished?

+

Imagine that in the previous KFC situation, there is no dedicated Waiter. +Instead the Seller was serving you a meal when the Chefs finished their job.

+

This kind of pattern is so important and common that in CosmWasm, we developed +a special way to handle it, which is dedicated Reply action.

+

So when Seller is scheduling actions for chefs, he assigns some number to this +action (like order id) and passes it to chefs. He also remembers how many +actions he scheduled for every order id. Now every time chef is finished with +his action; he would call the special Reply action on Seller, in which he +would pass back the order id. Then, Seller would decrease the number of actions +left for this order, and if it reached zero, he would serve a meal.

+

Now you can say, that the Reply action is completely not needed, as Chefs +could just schedule any arbitrary action on Seller, like Serve, why is there +the special Reply for? The reason is abstraction and reusability. The Chefs +task is to prepare a meal, and that is all. There is no reason for him to know +why he is even preparing Fries - if it is part of the bigger task (like order +for a client), or the seller is just hungry. It is possible that not only the +seller is eligible to call the chef for food - possibly any restaurant employee +can do that just for themselves. Therefore, we need a way to be able to react +to an actor finishing his job in some universal way, to handle this situation +properly in any context.

+

It is worth noting that the Reply can contain some additional data. The id +assigned previously is the only required information in the Reply call, but +the actor can pass some additional data - events emitted, which are mostly +metadata (to be observed by non-blockchain applications mostly), and any +arbitrary data it wants to pass.

+

State

+

Up until this point, we were considering actors as entities performing some +job, like preparing the meal. If we are considering computer programs, such a +job would be to show something on the screen, maybe print something. This is +not the case with Smart Contracts. The only thing which can be affected by the +Smart Contract is their internal state. So, the state is arbitrary data that is +kept by the contract. Previously in the KFC example I mentioned, the Seller is +keeping in mind how many actions he scheduled for chefs are not yet finished - +this number is part of the Seller's state.

+

To give a more realistic example of a contract state, let's think about a more +real-life Smart Contract than the restaurant. Let's imagine we want to create +our currency - maybe we want to create some smart contracts-based market for +some MMORPG game. So, we need some way to be able to at least transfer currency +between players. We can do that, by creating the contract we would call +MmoCurrency, which would support the Transfer action to transfer money to +another player. Then what would be the state of such a contract? It would be +just a table mapping player names to the amount of currency they own. The +contract we just invited exists in CosmWasm examples, and it is called the +cw20-base +contract +(it is a bit more complicated, but it is its core idea).

+

And now there is a question - how is this helpful to transfer currency if I +cannot check how much of it do I own? It is a very good question, and the +answer to that is simple - the whole state of every contract in our system is +public. It is not universal for every Actor model, but it is how it works in +CosmWasm, and it is kind of forced by the nature of blockchain. Everything +happening in blockchain has to be public, and if some information should be +hidden, it has to be stored indirectly.

+

There is one very important thing about the state in CosmWasm, and it is the +state being transactional. Any updates to the state are not applied +immediately, but only when the whole action succeeds. It is very important, as +it guarantees that if something goes wrong in the contract, it is always left +in some proper state. Let's consider our MmoCurrency case. Imagine, that in +the Transfer action we first increase the receiver currency amount (by +updating the state), and only then do we decrease the sender amount. However, +before decreasing it, we need to check if a sender possesses enough funds to +perform the transaction. In case we realize that we cannot do it, we don't need +to do any rolling back by hand - we would just return a failure from the action +execution, and the state would not be updated. So, when in the contract state +is updated, it is just a local copy of this state being altered, but the +partial changes would never be visible by other contracts.

+

Queries

+

There is one building block in the CosmWasm approach to the Actor model, which +I haven't yet cover. As I said, the whole state of every contract is public and +available for everyone to look at. The problem is that this way of looking at +state is not very convenient - it requires users of contracts to know its +internal structure, which kind of violates the SOLID rules (Liskov substitution +principle in particular). If, for example a contract is updated and its state +structure changes a bit, another contract looking at its state would just +nevermore work. Also, it is often the case, that the contract state is kind of +simplified, and information that is relevant to the observer would be +calculated from the state.

+

This is where queries come into play. Queries are the type of messages to +contract, which does not perform any actions, so do not update any state, but +can return an answer immediately.

+

In our KFC comparison, the query would be if Seller goes to Chef to ask "Do we +still have pickles available for our cheeseburgers"? It can be done while +operating, and response can be used in it. It is possible because queries can +never update their state, so they do not need to be handled in a transactional +manner.

+

However, the existence of queries doesn't mean that we cannot look at the +contract's state directly - the state is still public, and the technique of +looking at them directly is called Raw Queries. For clarity, non-raw queries +are sometimes denoted as Smart Queries.

+

Wrapping everything together - transactional call flow

+

So, we touched on many things here, and I know it may be kind of confusing. +Because of that, I would like to go through some more complicated calls to the +CosmWasm contract to visualize what the "transactional state" means.

+

Let's imagine two contracts:

+
    +
  1. The MmoCurrency contract mentioned before, which can perform the +Transfer action, allows transferring some amount of currency to some +receiver.
  2. +
  3. The WarriorNpc contract, which would have some amount of our currency, and +he would be used by our MMO engine to pay the reward out for some quest +player could perform. It would be triggered by Payout action, which can be +called only by a specific client (which would be our game engine).
  4. +
+

Now here is an interesting thing - this model forces us to make our MMO more +realistic in terms of the economy that we traditionally see - it is because +WarriorNpc has some amount of currency, and cannot create more out of +anything. It is not always the case (the previously mentioned cw20 has a +notion of Minting for this case), but for the sake of simplicity let's assume this +is what we want.

+

To make the quest reasonable for longer, we would make a reward for it to be +always between 1 mmo and 100 mmo, but it would be ideally 15% of what +Warrior owns. This means that the quest reward decreases for every subsequent +player, until Warrior would be broke, left with nothing, and will no longer be +able to payout players.

+

So, what would the flow look like? The first game would send a Payout message +to the WarriorNpc contract, with info on who should get the reward. Warrior +would keep track of players who fulfilled the quest, to not pay out the same +person twice - there would be a list of players in his state. First, he would +check the list looking for players to pay out - if he is there, he will finish +the transaction with an error.

+

However, in most cases the player would not be on the list - so then +WarriorNpc would add him to the list. Now the Warrior would finish his part +of the task, and schedule the Transfer action to be performed by +MmoCurrency.

+

But there is the important thing - because Transfer action is actually part +of the bigger Payout flow, it would not be executed on the original +blockchain state, but on the local copy of it, to which the player's list is +already applied to. So if the MmoCurrency would for any reason takes a look +at WarriorNpc internal list, it would be already updated.

+

Now MmoCurrency is doing its job, updating the state of Warrior and player +balance (note, that our Warrior is here just treated as another player!). When +it finishes, two things may happen:

+
    +
  1. There was an error - possibly Warrior is out of cash, and it can nevermore +pay for the task. In such case, none of the changes - neither updating the +list of players succeeding, nor balance changes are not applied to the +original blockchain storage, so they are like they never happened. In the +database world, it is denoted as rolling back the transaction.
  2. +
  3. Operation succeed - all changes on the state are now applied to the +blockchain, and any further observation of MmoCurrency or WarriorNpc by +the external world would see updated data.
  4. +
+

There is one problem - in this model, our list is not a list of players who +fulfilled the quest (as we wanted it to be), but the list of players who paid +out (as in transfer failure, the list is not updated). We can do better.

+

Different ways of handling responses

+

Note that we didn't mention a Reply operation at all. So why was it not +called by MmoCurrency on WarriorNpc? The reason is that this operation is +optional. When scheduling sub-actions on another contract we may choose when +Reply how the result should be handled:

+
    +
  1. Never call Reply, action fails if sub-message fails
  2. +
  3. Call Reply on success
  4. +
  5. Call Reply on failure
  6. +
  7. Always call Reply
  8. +
+

So, if we do not request Reply to be called by subsequent contract, it will +not happen. In such a case if a sub-call fails, the whole transaction is rolled +back - sub-message failure transitively causes the original message failure. It +is probably a bit complicated for now, but I promise it would be simple if you +would did some practice with that.

+

When handling the reply, it is important to remember, that although changes are +not yet applied to the blockchain (the transaction still can be failed), the +reply handler is already working on the copy of the state with all changes made +by sub-message so far applied. In most cases, it would be a good thing, but it +has a tricky consequence - if the contract is calling itself recursively, it is +possible that subsequent call overwrote things set up in the original message. +It rarely happens, but may need special treatment in some cases - for now I +don't want to go deeply into details, but I want you to remember about what to +expect after state in the actor's flow.

+

Now let's take a look at handling results with 2-4 options. It is actually +interesting, that using 2, even if the transaction is performed by sub-call +succeed, we may now take a look at the data it returned with Reply, and on +its final state after it finished, and we can still decide, that act as a +whole is a failure, in which case everything would be rolled back - even +currency transfer performed by external contract.

+

In our case, an interesting option is 3. So, if the contract would call +Reply on failure, we can decide to claim success, and commit a transaction on +the state if the sub call failed. Why may it be relevant for us? Possibly +because our internal list was supposed to keep the list of players succeeding +with the quest, not paid out! So, if we have no more currency, we still want to +update the list!

+

The most common way to use the replies (option 2 in particular) is to +instantiate another contract, managed by the one called. The idea is that in +those use cases, the creator contract wants to keep the address of the created +contract in its state. To do so it has to create an Instantiate sub-message, +and subscribe for its success response, which contains the address of the freshly +created contract.

+

In the end, you can see that performing actions in CosmWasm is built with +hierarchical state change transactions. The sub-transaction can be applied to +the blockchain only if everything succeeds, but in case that sub-transaction +failed, only its part may be rolled back, end other changes may be applied. It +is very similar to how most database systems work.

+

Conclusion

+

Now you have seen the power of the actor model to avoid reentrancy, properly +handle errors, and safely sandbox contracts. This helps us provide the solid +security guarantees of the CosmWasm platform. Let’s get started playing around +with real contracts in the wasmd blockchain.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + diff --git a/ayu-highlight.css b/ayu-highlight.css new file mode 100644 index 0000000..0c45c6f --- /dev/null +++ b/ayu-highlight.css @@ -0,0 +1,79 @@ +/* +Based off of the Ayu theme +Original by Dempfi (https://github.com/dempfi/ayu) +*/ + +.hljs { + display: block; + overflow-x: auto; + background: #191f26; + color: #e6e1cf; + padding: 0.5em; +} + +.hljs-comment, +.hljs-quote { + color: #5c6773; + font-style: italic; +} + +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-attr, +.hljs-regexp, +.hljs-link, +.hljs-selector-id, +.hljs-selector-class { + color: #ff7733; +} + +.hljs-number, +.hljs-meta, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #ffee99; +} + +.hljs-string, +.hljs-bullet { + color: #b8cc52; +} + +.hljs-title, +.hljs-built_in, +.hljs-section { + color: #ffb454; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-symbol { + color: #ff7733; +} + +.hljs-name { + color: #36a3d9; +} + +.hljs-tag { + color: #00568d; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} + +.hljs-addition { + color: #91b362; +} + +.hljs-deletion { + color: #d96c75; +} diff --git a/basics.html b/basics.html new file mode 100644 index 0000000..b88839b --- /dev/null +++ b/basics.html @@ -0,0 +1,179 @@ + + + + + + Basics - CosmWasm book + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+
+

Basics

+

In this chapter, we will go through creating basic smart contracts step by step. +I will try to explain the core ideas behind CosmWasm and the typical contract structure.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + diff --git a/basics/building-contract.html b/basics/building-contract.html new file mode 100644 index 0000000..f5c3999 --- /dev/null +++ b/basics/building-contract.html @@ -0,0 +1,216 @@ + + + + + + Building the contract - CosmWasm book + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+
+

Building the contract

+

Now it is time to build our contract. We can use a traditional cargo build +pipeline for local testing purposes: cargo build for compiling it and cargo test for running all tests (which we don't have yet, but we will work on that +soon).

+

However, we need to create a wasm binary to upload the contract to blockchain. +We can do it by passing an additional argument to the build command:

+
$ cargo build --target wasm32-unknown-unknown --release
+
+

The --target argument tells cargo to perform cross-compilation for a given target instead of +building a native binary for an OS it is running on - in this case, wasm32-unknown-unknown, +which is a fancy name for Wasm target.

+

Additionally, I passed the --release argument to the command - it is not +required, but in most cases, debug information is not very useful while running +on-chain. It is crucial to reduce the uploaded binary size for gas cost +minimization. It is worth knowing that there is a CosmWasm Rust +Optimizer tool that takes care of +building even smaller binaries. For production, all the contracts should be +compiled using this tool, but for learning purposes, it is not an essential +thing to do.

+

Aliasing build command

+

Now I can see you are disappointed in building your contracts with some overcomplicated command +instead of simple cargo build. Fortunately, it is not the case. The common practice is to alias +the building command to make it as simple as building a native app.

+

Let's create the .cargo/config file in your contract project directory with the following content:

+
[alias]
+wasm = "build --target wasm32-unknown-unknown --release"
+wasm-debug = "build --target wasm32-unknown-unknown"
+
+

Now, building your Wasm binary is as easy as executing cargo wasm. We also added the additional +wasm-debug command for rare cases when we want to build the wasm binary, including debug information.

+

Checking contract validity

+

When the contract is built, the last step is to ensure it is a valid CosmWasm contract is to call +cosmwasm-check on it:

+
$ cargo wasm
+...
+$ cosmwasm-check ./target/wasm32-unknown-unknown/release/contract.wasm
+Available capabilities: {"cosmwasm_1_1", "staking", "stargate", "iterator", "cosmwasm_1_2"}
+
+./target/wasm32-unknown-unknown/release/contract.wasm: pass
+
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + diff --git a/basics/entry-points.html b/basics/entry-points.html new file mode 100644 index 0000000..3af4321 --- /dev/null +++ b/basics/entry-points.html @@ -0,0 +1,245 @@ + + + + + + Entry points - CosmWasm book + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+
+

Entry points

+

Typical Rust application starts with the fn main() function called by the operating system. +Smart contracts are not significantly different. When the message is sent to the contract, a +function called "entry point" is called. Unlike native applications, which have only a single +main entry point, smart contracts have a couple corresponding to different message types: +instantiate, execute, query, sudo, migrate and more.

+

To start, we will go with three basic entry points:

+
    +
  • instantiate which is called once per smart contract lifetime - you can think about it as +a constructor or initializer of a contract.
  • +
  • execute for handling messages which are able to modify contract state - they are used to +perform some actual actions.
  • +
  • query for handling messages requesting some information from a contract; unlike execute, +they can never affect any contract state, and are used just like database queries.
  • +
+

Go to your src/lib.rs file, and start with an instantiate entry point:

+
use cosmwasm_std::{
+    entry_point, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,
+};
+
+#[entry_point]
+pub fn instantiate(
+    _deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    _msg: Empty,
+) -> StdResult<Response> {
+    Ok(Response::new())
+}
+
+

In fact, instantiate is the only entry point required for a smart contract to be valid. It is not +very useful in this form, but it is a start. Let's take a closer look at the entry point structure.

+

First, we start with importing couple of types just for more consistent usage. Then we define our +entry point. The instantiate takes four arguments:

+
    +
  • deps: DepsMut +is a utility type for communicating with the outer world - it allows querying +and updating the contract state, querying other contracts state, and gives access to an Api +object with a couple of helper functions for dealing with CW addresses.
  • +
  • env: Env +is an object representing the blockchains state when executing the message - the +chain height and id, current timestamp, and the called contract address.
  • +
  • info: MessageInfo +contains metainformation about the message which triggered an execution - +an address that sends the message, and chain native tokens sent with the message.
  • +
  • msg: Empty +is the message triggering execution itself - for now, it is Empty type that +represents {} JSON, but the type of this argument can be anything that is deserializable, +and we will pass more complex types here in the future.
  • +
+

If you are new to the blockchain, those arguments may not have much sense to you, but while +progressing with this guide, I will explain their usage one by one.

+

Notice an essential attribute decorating our entry point +#[entry_point]. Its purpose is to +wrap the whole entry point to the form Wasm runtime understands. The proper Wasm entry points +can use only basic types supported natively by Wasm specification, and Rust structures and enums +are not in this set. Working with such entry points would be rather overcomplicated, so CosmWasm +creators delivered the entry_point macro. It creates the raw Wasm entry point, calling the +decorated function internally and doing all the magic required to build our high-level Rust arguments +from arguments passed by Wasm runtime.

+

The next thing to look at is the return type. I used +StdResult<Response> for this simple example, +which is an alias for Result<Response, StdError>. The return entry point type would always be a +Result type, with some error type implementing +ToString trait and a well-defined type for success +case. For most entry points, an "Ok" case would be the +Response type that allows fitting the contract +into our actor model, which we will discuss very soon.

+

The body of the entry point is as simple as it could be - it always succeeds with a trivial empty response.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + diff --git a/basics/events.html b/basics/events.html new file mode 100644 index 0000000..edc44bc --- /dev/null +++ b/basics/events.html @@ -0,0 +1,765 @@ + + + + + + Events, attributes and data - CosmWasm book + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+
+

Events attributes and data

+

The only way our contract can communicate to the world, for now, is by queries. +Smart contracts are passive - they cannot invoke any action by themselves. They +can do it only as a reaction to a call. But if you tried playing with wasmd, +you know that execution on the blockchain can return some metadata.

+

There are two things the contract can return to the caller: events and data. +Events are something produced by almost every real-life smart contract. In +contrast, data is rarely used, designed for contract-to-contract communication.

+

Returning events

+

As an example, we would add an event admin_added emitted by our contract on the execution of +AddMembers:

+
use crate::error::ContractError;
+use crate::msg::{AdminsListResp, ExecuteMsg, GreetResp, InstantiateMsg, QueryMsg};
+use crate::state::ADMINS;
+use cosmwasm_std::{
+    to_binary, Binary, Deps, DepsMut, Env, Event, MessageInfo, Response, StdResult,
+};
+ 
+pub fn instantiate(
+    deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    let admins: StdResult<Vec<_>> = msg
+        .admins
+        .map(|addr| deps.api.addr_validate(&addr))
+        .collect();
+    ADMINS.save(deps.storage, &admins?)?;
+
+    Ok(Response::new())
+}
+
+pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+        AdminsList {} => to_binary(&query::admins_list(deps)?),
+    }
+}
+
+pub fn execute(
+    deps: DepsMut,
+    _env: Env,
+    info: MessageInfo,
+    msg: ExecuteMsg,
+) -> Result<Response, ContractError> {
+    use ExecuteMsg::*;
+
+    match msg {
+        AddMembers { admins } => exec::add_members(deps, info, admins),
+        Leave {} => exec::leave(deps, info).map_err(Into::into),
+    }
+}
+
+mod exec {
+    use super::*;
+
+    pub fn add_members(
+        deps: DepsMut,
+        info: MessageInfo,
+        admins: Vec<String>,
+    ) -> Result<Response, ContractError> {
+        let mut curr_admins = ADMINS.load(deps.storage)?;
+        if !curr_admins.contains(&info.sender) {
+            return Err(ContractError::Unauthorized {
+                sender: info.sender,
+            });
+        }
+
+        let events = admins
+            .iter()
+            .map(|admin| Event::new("admin_added").add_attribute("addr", admin));
+        let resp = Response::new()
+            .add_events(events)
+            .add_attribute("action", "add_members")
+            .add_attribute("added_count", admins.len().to_string());
+
+        let admins: StdResult<Vec<_>> = admins
+            .into_iter()
+            .map(|addr| deps.api.addr_validate(&addr))
+            .collect();
+
+        curr_admins.append(&mut admins?);
+        ADMINS.save(deps.storage, &curr_admins)?;
+
+        Ok(resp)
+    }
+
+    pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult<Response> {
+        ADMINS.update(deps.storage, move |admins| -> StdResult<_> {
+            let admins = admins
+                .into_iter()
+                .filter(|admin| *admin != info.sender)
+                .collect();
+            Ok(admins)
+        })?;
+
+        Ok(Response::new())
+    }
+}
+
+mod query {
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+
+    pub fn admins_list(deps: Deps) -> StdResult<AdminsListResp> {
+        let admins = ADMINS.load(deps.storage)?;
+        let resp = AdminsListResp { admins };
+        Ok(resp)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use cosmwasm_std::Addr;
+    use cw_multi_test::{App, ContractWrapper, Executor};
+
+    use crate::msg::AdminsListResp;
+
+    use super::*;
+
+    #[test]
+    fn instantiation() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(resp, AdminsListResp { admins: vec![] });
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec!["admin1".to_owned(), "admin2".to_owned()],
+                },
+                &[],
+                "Contract 2",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            AdminsListResp {
+                admins: vec![Addr::unchecked("admin1"), Addr::unchecked("admin2")],
+            }
+        );
+    }
+
+    #[test]
+    fn greet_query() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: GreetResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::Greet {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            GreetResp {
+                message: "Hello World".to_owned()
+            }
+        );
+    }
+
+    #[test]
+    fn unauthorized() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let err = app
+            .execute_contract(
+                Addr::unchecked("user"),
+                addr,
+                &ExecuteMsg::AddMembers {
+                    admins: vec!["user".to_owned()],
+                },
+                &[],
+            )
+            .unwrap_err();
+
+        assert_eq!(
+            ContractError::Unauthorized {
+                sender: Addr::unchecked("user")
+            },
+            err.downcast().unwrap()
+        );
+    }
+}
+
+

An event is built from two things: an event type provided in the +new function and attributes. +Attributes are added to an event with +the add_attributes +or the add_attribute +call. Attributes are key-value pairs. Because an event cannot contain any list, to achieve reporting +multiple similar actions taking place, we need to emit multiple small events instead of a collective one.

+

Events are emitted by adding them to the response with +add_event or +add_events call. +Additionally, there is a possibility to add attributes directly to the response. It is just sugar. By default, +every execution emits a standard "wasm" event. Adding attributes to the result adds them to the default event.

+

We can check if events are properly emitted by contract. It is not always done, as it is much of boilerplate in +test, but events are, generally, more like logs - not necessarily considered main contract logic. Let's now write +single test checking if execution emits events:

+
use crate::error::ContractError;
+use crate::msg::{AdminsListResp, ExecuteMsg, GreetResp, InstantiateMsg, QueryMsg};
+use crate::state::ADMINS;
+use cosmwasm_std::{
+    to_binary, Binary, Deps, DepsMut, Env, Event, MessageInfo, Response, StdResult,
+};
+
+pub fn instantiate(
+    deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    let admins: StdResult<Vec<_>> = msg
+        .admins
+        .into_iter()
+        .map(|addr| deps.api.addr_validate(&addr))
+        .collect();
+    ADMINS.save(deps.storage, &admins?)?;
+
+    Ok(Response::new())
+}
+
+pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+        AdminsList {} => to_binary(&query::admins_list(deps)?),
+    }
+}
+
+pub fn execute(
+    deps: DepsMut,
+    _env: Env,
+    info: MessageInfo,
+    msg: ExecuteMsg,
+) -> Result<Response, ContractError> {
+    use ExecuteMsg::*;
+
+    match msg {
+        AddMembers { admins } => exec::add_members(deps, info, admins),
+        Leave {} => exec::leave(deps, info).map_err(Into::into),
+    }
+}
+
+mod exec {
+    use super::*;
+
+    pub fn add_members(
+        deps: DepsMut,
+        info: MessageInfo,
+        admins: Vec<String>,
+    ) -> Result<Response, ContractError> {
+        let mut curr_admins = ADMINS.load(deps.storage)?;
+        if !curr_admins.contains(&info.sender) {
+            return Err(ContractError::Unauthorized {
+                sender: info.sender,
+            });
+        }
+
+        let events = admins
+            .iter()
+            .map(|admin| Event::new("admin_added").add_attribute("addr", admin));
+        let resp = Response::new()
+            .add_events(events)
+            .add_attribute("action", "add_members")
+            .add_attribute("added_count", admins.len().to_string());
+
+        let admins: StdResult<Vec<_>> = admins
+            .into_iter()
+            .map(|addr| deps.api.addr_validate(&addr))
+            .collect();
+
+        curr_admins.append(&mut admins?);
+        ADMINS.save(deps.storage, &curr_admins)?;
+
+        Ok(resp)
+    }
+
+    pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult<Response> {
+        ADMINS.update(deps.storage, move |admins| -> StdResult<_> {
+            let admins = admins
+                .into_iter()
+                .filter(|admin| *admin != info.sender)
+                .collect();
+            Ok(admins)
+        })?;
+
+        Ok(Response::new())
+    }
+}
+
+mod query {
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+
+    pub fn admins_list(deps: Deps) -> StdResult<AdminsListResp> {
+        let admins = ADMINS.load(deps.storage)?;
+        let resp = AdminsListResp { admins };
+        Ok(resp)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use cosmwasm_std::Addr;
+    use cw_multi_test::{App, ContractWrapper, Executor};
+
+    use crate::msg::AdminsListResp;
+
+    use super::*;
+
+    #[test]
+    fn instantiation() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(resp, AdminsListResp { admins: vec![] });
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec!["admin1".to_owned(), "admin2".to_owned()],
+                },
+                &[],
+                "Contract 2",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            AdminsListResp {
+                admins: vec![Addr::unchecked("admin1"), Addr::unchecked("admin2")],
+            }
+        );
+    }
+
+    #[test]
+    fn greet_query() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: GreetResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::Greet {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            GreetResp {
+                message: "Hello World".to_owned()
+            }
+        );
+    }
+
+    #[test]
+    fn unauthorized() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let err = app
+            .execute_contract(
+                Addr::unchecked("user"),
+                addr,
+                &ExecuteMsg::AddMembers {
+                    admins: vec!["user".to_owned()],
+                },
+                &[],
+            )
+            .unwrap_err();
+
+        assert_eq!(
+            ContractError::Unauthorized {
+                sender: Addr::unchecked("user")
+            },
+            err.downcast().unwrap()
+        );
+    }
+
+    #[test]
+    fn add_members() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec!["owner".to_owned()],
+                },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp = app
+            .execute_contract(
+                Addr::unchecked("owner"),
+                addr,
+                &ExecuteMsg::AddMembers {
+                    admins: vec!["user".to_owned()],
+                },
+                &[],
+            )
+            .unwrap();
+
+        let wasm = resp.events.iter().find(|ev| ev.ty == "wasm").unwrap();
+        assert_eq!(
+            wasm.attributes
+                .iter()
+                .find(|attr| attr.key == "action")
+                .unwrap()
+                .value,
+            "add_members"
+        );
+        assert_eq!(
+            wasm.attributes
+                .iter()
+                .find(|attr| attr.key == "added_count")
+                .unwrap()
+                .value,
+            "1"
+        );
+
+        let admin_added: Vec<_> = resp
+            .events
+            .iter()
+            .filter(|ev| ev.ty == "wasm-admin_added")
+            .collect();
+        assert_eq!(admin_added.len(), 1);
+
+        assert_eq!(
+            admin_added[0]
+                .attributes
+                .iter()
+                .find(|attr| attr.key == "addr")
+                .unwrap()
+                .value,
+            "user"
+        );
+    }
+}
+
+

As you can see, testing events on a simple test made it clunky. First of all, +every string is heavily string-based - a lack of type control makes writing +such tests difficult. Also, even types are prefixed with "wasm-" - it may not +be a huge problem, but it doesn't clarify verification. But the problem is, how +layered events structure are, which makes verifying them tricky. Also, the +"wasm" event is particularly tricky, as it contains an implied attribute - +_contract_addr containing an address called a contract. My general rule is - +do not test emitted events unless some logic depends on them.

+

Data

+

Besides events, any smart contract execution may produce a data object. In contrast to events, data +can be structured. It makes it a way better choice to perform any communication logic relies on. On the +other hand, it turns out it is very rarely helpful outside of contract-to-contract communication. Data +is always only one single object on the response, which is set using the +set_data function. +Because of its low usefulness in a single contract environment, we will not spend time on it right now - an +example of it will be covered later when contract-to-contract communication will be discussed. Until then, +it is just helpful to know such an entity exists.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + diff --git a/basics/execute.html b/basics/execute.html new file mode 100644 index 0000000..53c8192 --- /dev/null +++ b/basics/execute.html @@ -0,0 +1,1018 @@ + + + + + + Execution messages - CosmWasm book + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+
+

Execution messages

+

We went through instantiate and query messages. It is finally time to introduce the last basic entry point - +the execute messages. It is similar to what we have done so far that I expect this to be just chilling and +revisiting our knowledge. I encourage you to try implementing what I am describing here on your own as an +exercise - without checking out the source code.

+

The idea of the contract will be easy - every contract admin would be eligible to call two execute messages:

+
    +
  • AddMembers message would allow the admin to add another address to the admin's list
  • +
  • Leave would allow and admin to remove himself from the list
  • +
+

Not too complicated. Let's go coding. Start with defining messages:

+
use cosmwasm_std::Addr;
+use serde::{Deserialize, Serialize};
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub struct InstantiateMsg {
+    pub admins: Vec<String>,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub enum ExecuteMsg {
+    AddMembers { admins: Vec<String> },
+    Leave {},
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub struct GreetResp {
+    pub message: String,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub struct AdminsListResp {
+    pub admins: Vec<Addr>,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub enum QueryMsg {
+    Greet {},
+    AdminsList {},
+}
+
+

And implement entry point:

+
use crate::msg::{AdminsListResp, ExecuteMsg, GreetResp, InstantiateMsg, QueryMsg};
+use crate::state::ADMINS;
+use cosmwasm_std::{to_binary, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};
+
+pub fn instantiate(
+    deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    let admins: StdResult<Vec<_>> = msg
+        .admins
+        .into_iter()
+        .map(|addr| deps.api.addr_validate(&addr))
+        .collect();
+    ADMINS.save(deps.storage, &admins?)?;
+
+    Ok(Response::new())
+}
+
+pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+        AdminsList {} => to_binary(&query::admins_list(deps)?),
+    }
+}
+ 
+#[allow(dead_code)]
+pub fn execute(
+    deps: DepsMut,
+    _env: Env,
+    info: MessageInfo,
+    msg: ExecuteMsg,
+) -> StdResult<Response> {
+    use ExecuteMsg::*;
+
+    match msg {
+        AddMembers { admins } => exec::add_members(deps, info, admins),
+        Leave {} => exec::leave(deps, info),
+    }
+}
+
+mod exec {
+    use cosmwasm_std::StdError;
+
+    use super::*;
+
+    pub fn add_members(
+        deps: DepsMut,
+        info: MessageInfo,
+        admins: Vec<String>,
+    ) -> StdResult<Response> {
+        let mut curr_admins = ADMINS.load(deps.storage)?;
+        if !curr_admins.contains(&info.sender) {
+            return Err(StdError::generic_err("Unauthorised access"));
+        }
+
+        let admins: StdResult<Vec<_>> = admins
+            .into_iter()
+            .map(|addr| deps.api.addr_validate(&addr))
+            .collect();
+
+        curr_admins.append(&mut admins?);
+        ADMINS.save(deps.storage, &curr_admins)?;
+
+        Ok(Response::new())
+    }
+
+    pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult<Response> {
+        ADMINS.update(deps.storage, move |admins| -> StdResult<_> {
+            let admins = admins
+                .into_iter()
+                .filter(|admin| *admin != info.sender)
+                .collect();
+            Ok(admins)
+        })?;
+
+        Ok(Response::new())
+    }
+}
+
+mod query {
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+
+    pub fn admins_list(deps: Deps) -> StdResult<AdminsListResp> {
+        let admins = ADMINS.load(deps.storage)?;
+        let resp = AdminsListResp { admins };
+        Ok(resp)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use cosmwasm_std::Addr;
+    use cw_multi_test::{App, ContractWrapper, Executor};
+
+    use crate::msg::AdminsListResp;
+
+    use super::*;
+
+    #[test]
+    fn instantiation() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(resp, AdminsListResp { admins: vec![] });
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec!["admin1".to_owned(), "admin2".to_owned()],
+                },
+                &[],
+                "Contract 2",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            AdminsListResp {
+                admins: vec![Addr::unchecked("admin1"), Addr::unchecked("admin2")],
+            }
+        );
+    }
+
+    #[test]
+    fn greet_query() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: GreetResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::Greet {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            GreetResp {
+                message: "Hello World".to_owned()
+            }
+        );
+    }
+}
+
+

The entry point itself also has to be created in src/lib.rs:

+
use cosmwasm_std::{entry_point, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};
+use msg::{ExecuteMsg, InstantiateMsg, QueryMsg};
+
+mod contract;
+mod msg;
+mod state;
+
+#[entry_point]
+pub fn instantiate(
+    deps: DepsMut,
+    env: Env,
+    info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    contract::instantiate(deps, env, info, msg)
+}
+
+#[entry_point]
+pub fn execute(deps: DepsMut, env: Env, info: MessageInfo, msg: ExecuteMsg) -> StdResult<Response> {
+    contract::execute(deps, env, info, msg)
+}
+
+#[entry_point]
+pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    contract::query(deps, env, msg)
+}
+
+

There are a couple of new things, but nothing significant. First is how do I reach the message sender +to verify he is an admin or remove him from the list - I used the info.sender field of MessageInfo, +which is how it looks like - the member. As the message is always sent from the proper address, the +sender is already of the Addr type - no need to validate it. Another new thing is the +update +function on an Item - it makes a read and update of an entity potentially more efficient. It is +possible to do it by reading admins first, then updating and storing the result.

+

You probably noticed that when working with Item, we always assume something +is there. But nothing forces us to initialize the ADMINS value on +instantiation! So what happens there? Well, both load and update functions +would return an error. But there is a +may_load +function, which returns StdResult<Option<T>> - it would return Ok(None) in +case of empty storage. There is even a possibility to remove an existing item +from storage with the +remove +function.

+

One thing to improve is error handling. While validating the sender to be admin, we are returning +some arbitrary string as an error. We can do better.

+

Error handling

+

In our contract, we now have an error situation when a user tries to execute AddMembers not being +an admin himself. There is no proper error case in +StdError to report this +situation, so we have to return a generic error with a message. It is not the best approach.

+

For error reporting, we encourage using thiserror +crate. Start with updating your dependencies:

+
[package]
+name = "contract"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib"]
+
+[dependencies]
+cosmwasm-std = { version = "1.0.0-beta8", features = ["staking"] }
+serde = { version = "1.0.103", default-features = false, features = ["derive"] }
+cw-storage-plus = "0.13.4"
+thiserror = "1"
+
+[dev-dependencies]
+cw-multi-test = "0.13.4"
+
+

Now we define an error type in src/error.rs:

+
use cosmwasm_std::{Addr, StdError};
+use thiserror::Error;
+
+#[derive(Error, Debug, PartialEq)]
+pub enum ContractError {
+    #[error("{0}")]
+    StdError(#[from] StdError),
+    #[error("{sender} is not contract admin")]
+    Unauthorized { sender: Addr },
+}
+
+

We also need to add the new module to src/lib.rs:

+
use cosmwasm_std::{entry_point, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};
+use msg::{ExecuteMsg, InstantiateMsg, QueryMsg};
+
+mod contract;
+mod error;
+mod msg;
+mod state;
+
+#[entry_point]
+pub fn instantiate(
+    deps: DepsMut,
+    env: Env,
+    info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    contract::instantiate(deps, env, info, msg)
+}
+
+#[entry_point]
+pub fn execute(deps: DepsMut, env: Env, info: MessageInfo, msg: ExecuteMsg) -> StdResult<Response> {
+    contract::execute(deps, env, info, msg)
+}
+
+#[entry_point]
+pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    contract::query(deps, env, msg)
+}
+
+

Using thiserror we define errors like a simple enum, and the crate ensures +that the type implements +std::error::Error +trait. A very nice feature of this crate is the inline definition of +Display trait by an +#[error] attribute. Also, another helpful thing is the #[from] attribute, +which automatically generates proper +From implementation, +so it is easy to use ? operator with thiserror types.

+

Now update the execute endpoint to use our new error type:

+
use crate::error::ContractError;
+use crate::msg::{AdminsListResp, ExecuteMsg, GreetResp, InstantiateMsg, QueryMsg};
+use crate::state::ADMINS;
+use cosmwasm_std::{to_binary, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};
+
+pub fn instantiate(
+    deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    let admins: StdResult<Vec<_>> = msg
+        .admins
+        .into_iter()
+        .map(|addr| deps.api.addr_validate(&addr))
+        .collect();
+    ADMINS.save(deps.storage, &admins?)?;
+
+    Ok(Response::new())
+}
+
+pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+        AdminsList {} => to_binary(&query::admins_list(deps)?),
+    }
+}
+ 
+pub fn execute(
+    deps: DepsMut,
+    _env: Env,
+    info: MessageInfo,
+    msg: ExecuteMsg,
+) -> Result<Response, ContractError> {
+    use ExecuteMsg::*;
+
+    match msg {
+        AddMembers { admins } => exec::add_members(deps, info, admins),
+        Leave {} => exec::leave(deps, info).map_err(Into::into),
+    }
+}
+
+mod exec {
+    use super::*;
+
+    pub fn add_members(
+        deps: DepsMut,
+        info: MessageInfo,
+        admins: Vec<String>,
+    ) -> Result<Response, ContractError> {
+        let mut curr_admins = ADMINS.load(deps.storage)?;
+        if !curr_admins.contains(&info.sender) {
+            return Err(ContractError::Unauthorized {
+                sender: info.sender,
+            });
+        }
+
+        let admins: StdResult<Vec<_>> = admins
+            .into_iter()
+            .map(|addr| deps.api.addr_validate(&addr))
+            .collect();
+
+        curr_admins.append(&mut admins?);
+        ADMINS.save(deps.storage, &curr_admins)?;
+
+        Ok(Response::new())
+    }
+
+    pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult<Response> {
+        ADMINS.update(deps.storage, move |admins| -> StdResult<_> {
+            let admins = admins
+                .into_iter()
+                .filter(|admin| *admin != info.sender)
+                .collect();
+            Ok(admins)
+        })?;
+
+        Ok(Response::new())
+    }
+}
+
+mod query {
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+
+    pub fn admins_list(deps: Deps) -> StdResult<AdminsListResp> {
+        let admins = ADMINS.load(deps.storage)?;
+        let resp = AdminsListResp { admins };
+        Ok(resp)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use cosmwasm_std::Addr;
+    use cw_multi_test::{App, ContractWrapper, Executor};
+
+    use crate::msg::AdminsListResp;
+
+    use super::*;
+
+    #[test]
+    fn instantiation() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(resp, AdminsListResp { admins: vec![] });
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec!["admin1".to_owned(), "admin2".to_owned()],
+                },
+                &[],
+                "Contract 2",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            AdminsListResp {
+                admins: vec![Addr::unchecked("admin1"), Addr::unchecked("admin2")],
+            }
+        );
+    }
+
+    #[test]
+    fn greet_query() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: GreetResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::Greet {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            GreetResp {
+                message: "Hello World".to_owned()
+            }
+        );
+    }
+}
+
+

The entry point return type also has to be updated:

+
use cosmwasm_std::{entry_point, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};
+use error::ContractError;
+use msg::{ExecuteMsg, InstantiateMsg, QueryMsg};
+
+mod contract;
+mod error;
+mod msg;
+mod state;
+
+#[entry_point]
+pub fn instantiate(
+    deps: DepsMut,
+    env: Env,
+    info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    contract::instantiate(deps, env, info, msg)
+}
+
+#[entry_point]
+pub fn execute(
+    deps: DepsMut,
+    env: Env,
+    info: MessageInfo,
+    msg: ExecuteMsg,
+) -> Result<Response, ContractError> {
+    contract::execute(deps, env, info, msg)
+}
+
+#[entry_point]
+pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    contract::query(deps, env, msg)
+}
+
+

Custom error and multi-test

+

Using proper custom error type has one nice upside - multi-test is maintaining error type using +the anyhow crate. It is a sibling of thiserror, designed +to implement type-erased errors in a way that allows getting the original error back.

+

Let's write a test that verifies that a non-admin cannot add himself to a list:

+
use crate::error::ContractError;
+use crate::msg::{AdminsListResp, ExecuteMsg, GreetResp, InstantiateMsg, QueryMsg};
+use crate::state::ADMINS;
+use cosmwasm_std::{to_binary, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};
+
+pub fn instantiate(
+    deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    let admins: StdResult<Vec<_>> = msg
+        .admins
+        .into_iter()
+        .map(|addr| deps.api.addr_validate(&addr))
+        .collect();
+    ADMINS.save(deps.storage, &admins?)?;
+
+    Ok(Response::new())
+}
+
+pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+        AdminsList {} => to_binary(&query::admins_list(deps)?),
+    }
+}
+
+pub fn execute(
+    deps: DepsMut,
+    _env: Env,
+    info: MessageInfo,
+    msg: ExecuteMsg,
+) -> Result<Response, ContractError> {
+    use ExecuteMsg::*;
+
+    match msg {
+        AddMembers { admins } => exec::add_members(deps, info, admins),
+        Leave {} => exec::leave(deps, info).map_err(Into::into),
+    }
+}
+
+mod exec {
+    use super::*;
+
+    pub fn add_members(
+        deps: DepsMut,
+        info: MessageInfo,
+        admins: Vec<String>,
+    ) -> Result<Response, ContractError> {
+        let mut curr_admins = ADMINS.load(deps.storage)?;
+        if !curr_admins.contains(&info.sender) {
+            return Err(ContractError::Unauthorized {
+                sender: info.sender,
+            });
+        }
+
+        let admins: StdResult<Vec<_>> = admins
+            .into_iter()
+            .map(|addr| deps.api.addr_validate(&addr))
+            .collect();
+
+        curr_admins.append(&mut admins?);
+        ADMINS.save(deps.storage, &curr_admins)?;
+
+        Ok(Response::new())
+    }
+
+    pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult<Response> {
+        ADMINS.update(deps.storage, move |admins| -> StdResult<_> {
+            let admins = admins
+                .into_iter()
+                .filter(|admin| *admin != info.sender)
+                .collect();
+            Ok(admins)
+        })?;
+
+        Ok(Response::new())
+    }
+}
+
+mod query {
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+
+    pub fn admins_list(deps: Deps) -> StdResult<AdminsListResp> {
+        let admins = ADMINS.load(deps.storage)?;
+        let resp = AdminsListResp { admins };
+        Ok(resp)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use cosmwasm_std::Addr;
+    use cw_multi_test::{App, ContractWrapper, Executor};
+
+    use crate::msg::AdminsListResp;
+
+    use super::*;
+
+    #[test]
+    fn instantiation() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(resp, AdminsListResp { admins: vec![] });
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec!["admin1".to_owned(), "admin2".to_owned()],
+                },
+                &[],
+                "Contract 2",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            AdminsListResp {
+                admins: vec![Addr::unchecked("admin1"), Addr::unchecked("admin2")],
+            }
+        );
+    }
+
+    #[test]
+    fn greet_query() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: GreetResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::Greet {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            GreetResp {
+                message: "Hello World".to_owned()
+            }
+        );
+    }
+
+    #[test]
+    fn unauthorized() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let err = app
+            .execute_contract(
+                Addr::unchecked("user"),
+                addr,
+                &ExecuteMsg::AddMembers {
+                    admins: vec!["user".to_owned()],
+                },
+                &[],
+            )
+            .unwrap_err();
+
+        assert_eq!(
+            ContractError::Unauthorized {
+                sender: Addr::unchecked("user")
+            },
+            err.downcast().unwrap()
+        );
+    }
+}
+
+

Executing a contract is very similar to any other call - we use an +execute_contract +function. As the execution may fail, we get an error type out of this call, but +instead of calling unwrap to extract a value out of it, we expect an error to +occur - this is the purpose of the +unwrap_err +call. Now, as we have an error value, we can check if it matches what we +expected with an assert_eq!. There is a slight complication - the error +returned from execute_contract is an +anyhow::Error +error, but we expect it to be a ContractError. Fortunately, as I said before, +anyhow errors can recover their original type using the +downcast +function. The unwrap right after it is needed because downcasting may fail. +The reason is that downcast doesn't magically know the type kept in the +underlying error. It deduces it by some context - here, it knows we expect it +to be a ContractError, because of being compared to it - type elision +miracles. But if the underlying error would not be a ContractError, then +unwrap would panic.

+

We just created a simple failure test for execution, but it is not enough to claim the contract is production-ready. +All reasonable ok-cases should be covered for that. I encourage you to create some tests and experiment with them as +an exercise after this chapter.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + diff --git a/basics/fp-types.html b/basics/fp-types.html new file mode 100644 index 0000000..9ac136c --- /dev/null +++ b/basics/fp-types.html @@ -0,0 +1,193 @@ + + + + + + Floating point types - CosmWasm book + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+
+

Floating point types

+

Now you are ready to create smart contracts on your own. It is time to discuss an important limitation of CosmWasm +smart contracts - floating-point numbers.

+

The story is short: you cannot use floating-point types in smart contracts. Never. CosmWasm virtual machine on purpose +does not implement floating-point Wasm instructions, even such basics as F32Load. The reasoning is simple: they are +not safe to work with in the blockchain world.

+

The biggest problem is that contract will compile, but uploading it to the blockchain would fail with an error message claiming there is a floating-point operation in the contract. A tool that verifies if the contract is valid (it does not contain any fp operations but also has all needed entry points and so on) is called cosmwasm-check utility.

+

This limitation has two implications. First, you always have to use decimal of fixed-point arithmetic in your contracts. +It is not a problem, considering that cosmwasm-std provides you with the +Decimal and +Decimal256 types.

+

The other implication is tricky - you must be careful with the crates you use. In particular, one gotcha in the serde +crate - deserialization of usize type is using floating-point operations. That means you can never use usize (or isize) +types in your deserialized messages in the contract.

+

Another thing that will not work with serde is untagged enums deserialization. The workaround is to create custom +deserialization of such enums using serde-cw-value crate. It is a fork of +serde-value crate which avoids generating floating-point instructions.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + diff --git a/basics/funds.html b/basics/funds.html new file mode 100644 index 0000000..188e0c8 --- /dev/null +++ b/basics/funds.html @@ -0,0 +1,1399 @@ + + + + + + Dealing with funds - CosmWasm book + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+
+

Dealing with funds

+

When you hear smart contracts, you think blockchain. When you hear blockchain, +you often think of cryptocurrencies. It is not the same, but crypto assets, or +as we often call them: tokens, are very closely connected to the blockchain. +CosmWasm has a notion of a native token. Native tokens are assets managed by +the blockchain core instead of smart contracts. Often such assets have some +special meaning, like being used for paying gas +fees or +staking for consensus +algorithm, but can be just arbitrary assets.

+

Native tokens are assigned to their owners but can be transferred by their +nature. Everything had an address in the blockchain is eligible to have its +native tokens. As a consequence - tokens can be assigned to smart contracts! +Every message sent to the smart contract can have some funds sent with it. In +this chapter, we will take advantage of that and create a way to reward hard +work performed by admins. We will create a new message - Donate, which will be +used by anyone to donate some funds to admins, divided equally.

+

Preparing messages

+

Traditionally we need to prepare our messages. We need to create a new +ExecuteMsg variant, but we will also modify the Instantiate message a bit - +we need to have some way of defining the name of a native token we would use +for donations. It would be possible to allow users to send any tokens they +want, but we want to simplify things for now.

+
use cosmwasm_std::Addr;
+use serde::{Deserialize, Serialize};
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub struct InstantiateMsg {
+    pub admins: Vec<String>,
+    pub donation_denom: String,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub enum ExecuteMsg {
+    AddMembers { admins: Vec<String> },
+    Leave {},
+    Donate {},
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub struct GreetResp {
+    pub message: String,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub struct AdminsListResp {
+    pub admins: Vec<Addr>,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub enum QueryMsg {
+    Greet {},
+    AdminsList {},
+}
+
+

We also need to add a new state part, to keep the donation_denom:

+
use cosmwasm_std::Addr;
+use cw_storage_plus::Item;
+
+pub const ADMINS: Item<Vec<Addr>> = Item::new("admins");
+pub const DONATION_DENOM: Item<String> = Item::new("donation_denom");
+
+

And instantiate it properly:

+
use crate::error::ContractError;
+use crate::msg::{AdminsListResp, ExecuteMsg, GreetResp, InstantiateMsg, QueryMsg};
+use crate::state::{ADMINS, DONATION_DENOM};
+use cosmwasm_std::{
+    to_binary, Binary, Deps, DepsMut, Env, Event, MessageInfo, Response, StdResult,
+};
+
+pub fn instantiate(
+    deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    let admins: StdResult<Vec<_>> = msg
+        .admins
+        .into_iter()
+        .map(|addr| deps.api.addr_validate(&addr))
+        .collect();
+    ADMINS.save(deps.storage, &admins?)?;
+    DONATION_DENOM.save(deps.storage, &msg.donation_denom)?;
+
+    Ok(Response::new())
+}
+
+pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+        AdminsList {} => to_binary(&query::admins_list(deps)?),
+    }
+}
+
+pub fn execute(
+    deps: DepsMut,
+    _env: Env,
+    info: MessageInfo,
+    msg: ExecuteMsg,
+) -> Result<Response, ContractError> {
+    use ExecuteMsg::*;
+
+    match msg {
+        AddMembers { admins } => exec::add_members(deps, info, admins),
+        Leave {} => exec::leave(deps, info).map_err(Into::into),
+    }
+}
+
+mod exec {
+    use super::*;
+
+    pub fn add_members(
+        deps: DepsMut,
+        info: MessageInfo,
+        admins: Vec<String>,
+    ) -> Result<Response, ContractError> {
+        let mut curr_admins = ADMINS.load(deps.storage)?;
+        if !curr_admins.contains(&info.sender) {
+            return Err(ContractError::Unauthorized {
+                sender: info.sender,
+            });
+        }
+
+        let events = admins
+            .iter()
+            .map(|admin| Event::new("admin_added").add_attribute("addr", admin));
+        let resp = Response::new()
+            .add_events(events)
+            .add_attribute("action", "add_members")
+            .add_attribute("added_count", admins.len().to_string());
+
+        let admins: StdResult<Vec<_>> = admins
+            .into_iter()
+            .map(|addr| deps.api.addr_validate(&addr))
+            .collect();
+
+        curr_admins.append(&mut admins?);
+        ADMINS.save(deps.storage, &curr_admins)?;
+
+        Ok(resp)
+    }
+
+    pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult<Response> {
+        ADMINS.update(deps.storage, move |admins| -> StdResult<_> {
+            let admins = admins
+                .into_iter()
+                .filter(|admin| *admin != info.sender)
+                .collect();
+            Ok(admins)
+        })?;
+
+        Ok(Response::new())
+    }
+}
+
+mod query {
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+
+    pub fn admins_list(deps: Deps) -> StdResult<AdminsListResp> {
+        let admins = ADMINS.load(deps.storage)?;
+        let resp = AdminsListResp { admins };
+        Ok(resp)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use cosmwasm_std::Addr;
+    use cw_multi_test::{App, ContractWrapper, Executor};
+
+    use crate::msg::AdminsListResp;
+
+    use super::*;
+
+    #[test]
+    fn instantiation() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(resp, AdminsListResp { admins: vec![] });
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec!["admin1".to_owned(), "admin2".to_owned()],
+                },
+                &[],
+                "Contract 2",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            AdminsListResp {
+                admins: vec![Addr::unchecked("admin1"), Addr::unchecked("admin2")],
+            }
+        );
+    }
+
+    #[test]
+    fn greet_query() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: GreetResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::Greet {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            GreetResp {
+                message: "Hello World".to_owned()
+            }
+        );
+    }
+
+    #[test]
+    fn unauthorized() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let err = app
+            .execute_contract(
+                Addr::unchecked("user"),
+                addr,
+                &ExecuteMsg::AddMembers {
+                    admins: vec!["user".to_owned()],
+                },
+                &[],
+            )
+            .unwrap_err();
+
+        assert_eq!(
+            ContractError::Unauthorized {
+                sender: Addr::unchecked("user")
+            },
+            err.downcast().unwrap()
+        );
+    }
+
+    #[test]
+    fn add_members() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec!["owner".to_owned()],
+                },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp = app
+            .execute_contract(
+                Addr::unchecked("owner"),
+                addr,
+                &ExecuteMsg::AddMembers {
+                    admins: vec!["user".to_owned()],
+                },
+                &[],
+            )
+            .unwrap();
+
+        let wasm = resp.events.iter().find(|ev| ev.ty == "wasm").unwrap();
+        assert_eq!(
+            wasm.attributes
+                .iter()
+                .find(|attr| attr.key == "action")
+                .unwrap()
+                .value,
+            "add_members"
+        );
+        assert_eq!(
+            wasm.attributes
+                .iter()
+                .find(|attr| attr.key == "added_count")
+                .unwrap()
+                .value,
+            "1"
+        );
+
+        let admin_added: Vec<_> = resp
+            .events
+            .iter()
+            .filter(|ev| ev.ty == "wasm-admin_added")
+            .collect();
+        assert_eq!(admin_added.len(), 1);
+
+        assert_eq!(
+            admin_added[0]
+                .attributes
+                .iter()
+                .find(|attr| attr.key == "addr")
+                .unwrap()
+                .value,
+            "user"
+        );
+    }
+}
+
+

What also needs some corrections are tests - instantiate messages have a new field. I leave it to you as an exercise. +Now we have everything we need to implement donating funds to admins. First, a minor update to the Cargo.toml - we +will use an additional utility crate:

+
[package]
+name = "contract"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib", "rlib"]
+
+[features]
+library = []
+
+[dependencies]
+cosmwasm-std = { version = "1.0.0-beta8", features = ["staking"] }
+serde = { version = "1.0.103", default-features = false, features = ["derive"] }
+cw-storage-plus = "0.13.4"
+thiserror = "1"
+schemars = "0.8.1"
+cw-utils = "0.13"
+
+[dev-dependencies]
+cw-multi-test = "0.13.4"
+cosmwasm-schema = { version = "1.0.0" }
+
+

Then we can implement the donate handler:

+
use crate::error::ContractError;
+use crate::msg::{AdminsListResp, ExecuteMsg, GreetResp, InstantiateMsg, QueryMsg};
+use crate::state::{ADMINS, DONATION_DENOM};
+use cosmwasm_std::{
+    coins, to_binary, BankMsg, Binary, Deps, DepsMut, Env, Event, MessageInfo,
+    Response, StdResult,
+};
+ 
+pub fn instantiate(
+    deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    let admins: StdResult<Vec<_>> = msg
+        .admins
+        .into_iter()
+        .map(|addr| deps.api.addr_validate(&addr))
+        .collect();
+    ADMINS.save(deps.storage, &admins?)?;
+    DONATION_DENOM.save(deps.storage, &msg.donation_denom)?;
+
+    Ok(Response::new())
+}
+
+pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+        AdminsList {} => to_binary(&query::admins_list(deps)?),
+    }
+}
+
+pub fn execute(
+    deps: DepsMut,
+    _env: Env,
+    info: MessageInfo,
+    msg: ExecuteMsg,
+) -> Result<Response, ContractError> {
+    use ExecuteMsg::*;
+
+    match msg {
+        AddMembers { admins } => exec::add_members(deps, info, admins),
+        Leave {} => exec::leave(deps, info).map_err(Into::into),
+        Donate {} => exec::donate(deps, info),
+    }
+}
+
+mod exec {
+    use super::*;
+
+    pub fn add_members(
+        deps: DepsMut,
+        info: MessageInfo,
+        admins: Vec<String>,
+    ) -> Result<Response, ContractError> {
+        let mut curr_admins = ADMINS.load(deps.storage)?;
+        if !curr_admins.contains(&info.sender) {
+            return Err(ContractError::Unauthorized {
+                sender: info.sender,
+            });
+        }
+
+        let events = admins
+            .iter()
+            .map(|admin| Event::new("admin_added").add_attribute("addr", admin));
+        let resp = Response::new()
+            .add_events(events)
+            .add_attribute("action", "add_members")
+            .add_attribute("added_count", admins.len().to_string());
+
+        let admins: StdResult<Vec<_>> = admins
+            .into_iter()
+            .map(|addr| deps.api.addr_validate(&addr))
+            .collect();
+
+        curr_admins.append(&mut admins?);
+        ADMINS.save(deps.storage, &curr_admins)?;
+
+        Ok(resp)
+    }
+
+    pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult<Response> {
+        ADMINS.update(deps.storage, move |admins| -> StdResult<_> {
+            let admins = admins
+                .into_iter()
+                .filter(|admin| *admin != info.sender)
+                .collect();
+            Ok(admins)
+        })?;
+
+        Ok(Response::new())
+    }
+
+    pub fn donate(deps: DepsMut, info: MessageInfo) -> Result<Response, ContractError> {
+        let denom = DONATION_DENOM.load(deps.storage)?;
+        let admins = ADMINS.load(deps.storage)?;
+
+        let donation = cw_utils::must_pay(&info, &denom)?.u128();
+
+        let donation_per_admin = donation / (admins.len() as u128);
+
+        let messages = admins.into_iter().map(|admin| BankMsg::Send {
+            to_address: admin.to_string(),
+            amount: coins(donation_per_admin, &denom),
+        });
+
+        let resp = Response::new()
+            .add_messages(messages)
+            .add_attribute("action", "donate")
+            .add_attribute("amount", donation.to_string())
+            .add_attribute("per_admin", donation_per_admin.to_string());
+
+        Ok(resp)
+    }
+}
+
+mod query {
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+
+    pub fn admins_list(deps: Deps) -> StdResult<AdminsListResp> {
+        let admins = ADMINS.load(deps.storage)?;
+        let resp = AdminsListResp { admins };
+        Ok(resp)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use cosmwasm_std::Addr;
+    use cw_multi_test::{App, ContractWrapper, Executor};
+
+    use crate::msg::AdminsListResp;
+
+    use super::*;
+
+    #[test]
+    fn instantiation() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec![],
+                    donation_denom: "eth".to_owned(),
+                },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(resp, AdminsListResp { admins: vec![] });
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec!["admin1".to_owned(), "admin2".to_owned()],
+                    donation_denom: "eth".to_owned(),
+                },
+                &[],
+                "Contract 2",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            AdminsListResp {
+                admins: vec![Addr::unchecked("admin1"), Addr::unchecked("admin2")],
+            }
+        );
+    }
+
+    #[test]
+    fn greet_query() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec![],
+                    donation_denom: "eth".to_owned(),
+                },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: GreetResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::Greet {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            GreetResp {
+                message: "Hello World".to_owned()
+            }
+        );
+    }
+
+    #[test]
+    fn unauthorized() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec![],
+                    donation_denom: "eth".to_owned(),
+                },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let err = app
+            .execute_contract(
+                Addr::unchecked("user"),
+                addr,
+                &ExecuteMsg::AddMembers {
+                    admins: vec!["user".to_owned()],
+                },
+                &[],
+            )
+            .unwrap_err();
+
+        assert_eq!(
+            ContractError::Unauthorized {
+                sender: Addr::unchecked("user")
+            },
+            err.downcast().unwrap()
+        );
+    }
+
+    #[test]
+    fn add_members() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec!["owner".to_owned()],
+                    donation_denom: "eth".to_owned(),
+                },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp = app
+            .execute_contract(
+                Addr::unchecked("owner"),
+                addr,
+                &ExecuteMsg::AddMembers {
+                    admins: vec!["user".to_owned()],
+                },
+                &[],
+            )
+            .unwrap();
+
+        let wasm = resp.events.iter().find(|ev| ev.ty == "wasm").unwrap();
+        assert_eq!(
+            wasm.attributes
+                .iter()
+                .find(|attr| attr.key == "action")
+                .unwrap()
+                .value,
+            "add_members"
+        );
+        assert_eq!(
+            wasm.attributes
+                .iter()
+                .find(|attr| attr.key == "added_count")
+                .unwrap()
+                .value,
+            "1"
+        );
+
+        let admin_added: Vec<_> = resp
+            .events
+            .iter()
+            .filter(|ev| ev.ty == "wasm-admin_added")
+            .collect();
+        assert_eq!(admin_added.len(), 1);
+
+        assert_eq!(
+            admin_added[0]
+                .attributes
+                .iter()
+                .find(|attr| attr.key == "addr")
+                .unwrap()
+                .value,
+            "user"
+        );
+    }
+}
+
+

Sending the funds to another contract is performed by adding bank messages to +the response. The blockchain would expect any message which is returned in +contract response as a part of an execution. This design is related to an actor +model implemented by CosmWasm. The whole actor model will be described in +detail later. For now, you can assume this is a way to handle token transfers. +Before sending tokens to admins, we have to calculate the amount of donation +per admin. It is done by searching funds for an entry describing our donation +token and dividing the number of tokens sent by the number of admins. Note that +because the integral division is always rounding down.

+

As a consequence, it is possible that not all tokens sent as a donation would +end up with no admins accounts. Any leftover would be left on our contract +account forever. There are plenty of ways of dealing with this issue - figuring +out one of them would be a great exercise.

+

The last missing part is updating the ContractError - the must_pay call +returns a cw_utils::PaymentError which we can't convert to our error type +yet:

+
use cosmwasm_std::{Addr, StdError};
+use cw_utils::PaymentError;
+use thiserror::Error;
+
+#[derive(Error, Debug, PartialEq)]
+pub enum ContractError {
+    #[error("{0}")]
+    StdError(#[from] StdError),
+    #[error("{sender} is not contract admin")]
+    Unauthorized { sender: Addr },
+    #[error("Payment error: {0}")]
+    Payment(#[from] PaymentError),
+}
+
+

As you can see, to handle incoming funds, I used the utility function - I +encourage you to take a look at its +implementation - +this would give you a good understanding of how incoming funds are structured +in MessageInfo.

+

Now it's time to check if the funds are distributed correctly. The way for that +is to write a test.

+
use crate::error::ContractError;
+use crate::msg::{AdminsListResp, ExecuteMsg, GreetResp, InstantiateMsg, QueryMsg};
+use crate::state::{ADMINS, DONATION_DENOM};
+use cosmwasm_std::{
+    coins, to_binary, BankMsg, Binary, Deps, DepsMut, Env, Event, MessageInfo, Response, StdResult,
+};
+
+pub fn instantiate(
+    deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    let admins: StdResult<Vec<_>> = msg
+        .admins
+        .into_iter()
+        .map(|addr| deps.api.addr_validate(&addr))
+        .collect();
+    ADMINS.save(deps.storage, &admins?)?;
+    DONATION_DENOM.save(deps.storage, &msg.donation_denom)?;
+
+    Ok(Response::new())
+}
+
+pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+        AdminsList {} => to_binary(&query::admins_list(deps)?),
+    }
+}
+
+pub fn execute(
+    deps: DepsMut,
+    _env: Env,
+    info: MessageInfo,
+    msg: ExecuteMsg,
+) -> Result<Response, ContractError> {
+    use ExecuteMsg::*;
+
+    match msg {
+        AddMembers { admins } => exec::add_members(deps, info, admins),
+        Leave {} => exec::leave(deps, info).map_err(Into::into),
+        Donate {} => exec::donate(deps, info),
+    }
+}
+
+mod exec {
+    use super::*;
+
+    pub fn add_members(
+        deps: DepsMut,
+        info: MessageInfo,
+        admins: Vec<String>,
+    ) -> Result<Response, ContractError> {
+        let mut curr_admins = ADMINS.load(deps.storage)?;
+        if !curr_admins.contains(&info.sender) {
+            return Err(ContractError::Unauthorized {
+                sender: info.sender,
+            });
+        }
+
+        let events = admins
+            .iter()
+            .map(|admin| Event::new("admin_added").add_attribute("addr", admin));
+        let resp = Response::new()
+            .add_events(events)
+            .add_attribute("action", "add_members")
+            .add_attribute("added_count", admins.len().to_string());
+
+        let admins: StdResult<Vec<_>> = admins
+            .into_iter()
+            .map(|addr| deps.api.addr_validate(&addr))
+            .collect();
+
+        curr_admins.append(&mut admins?);
+        ADMINS.save(deps.storage, &curr_admins)?;
+
+        Ok(resp)
+    }
+
+    pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult<Response> {
+        ADMINS.update(deps.storage, move |admins| -> StdResult<_> {
+            let admins = admins
+                .into_iter()
+                .filter(|admin| *admin != info.sender)
+                .collect();
+            Ok(admins)
+        })?;
+
+        Ok(Response::new())
+    }
+
+    pub fn donate(deps: DepsMut, info: MessageInfo) -> Result<Response, ContractError> {
+        let denom = DONATION_DENOM.load(deps.storage)?;
+        let admins = ADMINS.load(deps.storage)?;
+
+        let donation = cw_utils::must_pay(&info, &denom)
+            .map_err(|err| StdError::generic_err(err.to_string()))?
+            .u128();
+
+        let donation_per_admin = donation / (admins.len() as u128);
+
+        let messages = admins.into_iter().map(|admin| BankMsg::Send {
+            to_address: admin.to_string(),
+            amount: coins(donation_per_admin, &denom),
+        });
+
+        let resp = Response::new()
+            .add_messages(messages)
+            .add_attribute("action", "donate")
+            .add_attribute("amount", donation.to_string())
+            .add_attribute("per_admin", donation_per_admin.to_string());
+
+        Ok(resp)
+    }
+}
+
+mod query {
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+
+    pub fn admins_list(deps: Deps) -> StdResult<AdminsListResp> {
+        let admins = ADMINS.load(deps.storage)?;
+        let resp = AdminsListResp { admins };
+        Ok(resp)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use cosmwasm_std::Addr;
+    use cw_multi_test::{App, ContractWrapper, Executor};
+
+    use crate::msg::AdminsListResp;
+
+    use super::*;
+
+    #[test]
+    fn instantiation() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec![],
+                    donation_denom: "eth".to_owned(),
+                },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(resp, AdminsListResp { admins: vec![] });
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec!["admin1".to_owned(), "admin2".to_owned()],
+                    donation_denom: "eth".to_owned(),
+                },
+                &[],
+                "Contract 2",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            AdminsListResp {
+                admins: vec![Addr::unchecked("admin1"), Addr::unchecked("admin2")],
+            }
+        );
+    }
+
+    #[test]
+    fn greet_query() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec![],
+                    donation_denom: "eth".to_owned(),
+                },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: GreetResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::Greet {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            GreetResp {
+                message: "Hello World".to_owned()
+            }
+        );
+    }
+
+    #[test]
+    fn unauthorized() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec![],
+                    donation_denom: "eth".to_owned(),
+                },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let err = app
+            .execute_contract(
+                Addr::unchecked("user"),
+                addr,
+                &ExecuteMsg::AddMembers {
+                    admins: vec!["user".to_owned()],
+                },
+                &[],
+            )
+            .unwrap_err();
+
+        assert_eq!(
+            ContractError::Unauthorized {
+                sender: Addr::unchecked("user")
+            },
+            err.downcast().unwrap()
+        );
+    }
+
+    #[test]
+    fn add_members() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec!["owner".to_owned()],
+                    donation_denom: "eth".to_owned(),
+                },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp = app
+            .execute_contract(
+                Addr::unchecked("owner"),
+                addr,
+                &ExecuteMsg::AddMembers {
+                    admins: vec!["user".to_owned()],
+                },
+                &[],
+            )
+            .unwrap();
+
+        let wasm = resp.events.iter().find(|ev| ev.ty == "wasm").unwrap();
+        assert_eq!(
+            wasm.attributes
+                .iter()
+                .find(|attr| attr.key == "action")
+                .unwrap()
+                .value,
+            "add_members"
+        );
+        assert_eq!(
+            wasm.attributes
+                .iter()
+                .find(|attr| attr.key == "added_count")
+                .unwrap()
+                .value,
+            "1"
+        );
+
+        let admin_added: Vec<_> = resp
+            .events
+            .iter()
+            .filter(|ev| ev.ty == "wasm-admin_added")
+            .collect();
+        assert_eq!(admin_added.len(), 1);
+
+        assert_eq!(
+            admin_added[0]
+                .attributes
+                .iter()
+                .find(|attr| attr.key == "addr")
+                .unwrap()
+                .value,
+            "user"
+        );
+    }
+
+    #[test]
+    fn donations() {
+        let mut app = App::new(|router, _, storage| {
+            router
+                .bank
+                .init_balance(storage, &Addr::unchecked("user"), coins(5, "eth"))
+                .unwrap()
+        });
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec!["admin1".to_owned(), "admin2".to_owned()],
+                    donation_denom: "eth".to_owned(),
+                },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        app.execute_contract(
+            Addr::unchecked("user"),
+            addr.clone(),
+            &ExecuteMsg::Donate {},
+            &coins(5, "eth"),
+        )
+        .unwrap();
+
+        assert_eq!(
+            app.wrap()
+                .query_balance("user", "eth")
+                .unwrap()
+                .amount
+                .u128(),
+            0
+        );
+
+        assert_eq!(
+            app.wrap()
+                .query_balance(&addr, "eth")
+                .unwrap()
+                .amount
+                .u128(),
+            1
+        );
+
+        assert_eq!(
+            app.wrap()
+                .query_balance("admin1", "eth")
+                .unwrap()
+                .amount
+                .u128(),
+            2
+        );
+
+        assert_eq!(
+            app.wrap()
+                .query_balance("admin2", "eth")
+                .unwrap()
+                .amount
+                .u128(),
+            2
+        );
+    }
+}
+
+

Fairly simple. I don't particularly appreciate that every balance check is +eight lines of code, but it can be improved by enclosing this assertion into a +separate function, probably with the +#[track_caller] +attribute.

+

The critical thing to talk about is how app creation changed. Because we need +some initial tokens on a user account, instead of using the default +constructor, we have to provide it with an initializer function. Unfortunately, +new +documentation is not easy to follow - even if a function is not very +complicated. What it takes as an argument is a closure with three arguments - +the +Router +with all modules supported by multi-test, the API object, and the state. This +function is called once during contract instantiation. The router object +contains some generic fields - we are interested in bank in particular. It +has a type of +BankKeeper, +where the +init_balance +function sits.

+

Plot Twist!

+

As we covered most of the important basics about building Rust smart contracts, I have a serious exercise for you.

+

The contract we built has an exploitable bug. All donations are distributed equally across admins. However, every +admin is eligible to add another admin. And nothing is preventing the admin from adding himself to the list and +receiving twice as many rewards as others!

+

Try to write a test that detects such a bug, then fix it and ensure the bug nevermore occurs.

+

Even if the admin cannot add the same address to the list, he can always create new accounts and add them, but this +is something unpreventable on the contract level, so do not prevent that. Handling this kind of case is done by +properly designing whole applications, which is out of this chapter's scope.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + diff --git a/basics/good-practices.html b/basics/good-practices.html new file mode 100644 index 0000000..bf92a67 --- /dev/null +++ b/basics/good-practices.html @@ -0,0 +1,493 @@ + + + + + + Good practices - CosmWasm book + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+
+

Good practices

+

All the relevant basics are covered. Now let's talk about some good practices.

+

JSON renaming

+

Due to Rust style, all our message variants are spelled in a +camel-case. It is standard practice, +but it has a drawback - all messages are serialized and deserialized by serde +using those variant names. The problem is that it is more common to use snake +cases for field names in the JSON +world. Fortunately, there is an effortless way to tell serde, to change the names +casing for serialization purposes. Let's update our messages with a #[serde] +attribute:

+
use cosmwasm_std::Addr;
+use serde::{Deserialize, Serialize};
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+#[serde(rename_all = "snake_case")]
+pub struct InstantiateMsg {
+    pub admins: Vec<String>,
+    pub donation_denom: String,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+#[serde(rename_all = "snake_case")]
+pub enum ExecuteMsg {
+    AddMembers { admins: Vec<String> },
+    Leave {},
+    Donate {},
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+#[serde(rename_all = "snake_case")]
+pub struct GreetResp {
+    pub message: String,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+#[serde(rename_all = "snake_case")]
+pub struct AdminsListResp {
+    pub admins: Vec<Addr>,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+#[serde(rename_all = "snake_case")]
+pub enum QueryMsg {
+    Greet {},
+    AdminsList {},
+}
+
+

JSON schema

+

Talking about JSON API, it is worth mentioning JSON Schema. It is a way of defining a shape for JSON messages. +It is good practice to provide a way to generate schemas for contract API. The problem is that writing JSON +schemas by hand is a pain. The good news is that there is a crate that would help us with that. Go to the Cargo.toml:

+
[package]
+name = "contract"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib", "rlib"]
+
+[dependencies]
+cosmwasm-std = { version = "1.1.4", features = ["staking"] }
+serde = { version = "1.0.103", default-features = false, features = ["derive"] }
+cw-storage-plus = "0.15.1"
+thiserror = "1"
+schemars = "0.8.1"
+cosmwasm-schema = "1.1.4"
+
+[dev-dependencies]
+cw-multi-test = "0.13.4"
+
+

There is one additional change in this file - in crate-type I added "rlib". "cdylib" crates cannot be used as typical +Rust dependencies. As a consequence, it is impossible to create examples for such crates.

+

Now go back to src/msg.rs and add a new derive for all messages:

+
use cosmwasm_std::Addr;
+use schemars::JsonSchema;
+use serde::{Deserialize, Serialize};
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
+#[serde(rename_all = "snake_case")]
+pub struct InstantiateMsg {
+    pub admins: Vec<String>,
+    pub donation_denom: String,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
+#[serde(rename_all = "snake_case")]
+pub enum ExecuteMsg {
+    AddMembers { admins: Vec<String> },
+    Leave {},
+    Donate {},
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
+#[serde(rename_all = "snake_case")]
+pub struct GreetResp {
+    pub message: String,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
+#[serde(rename_all = "snake_case")]
+pub struct AdminsListResp {
+    pub admins: Vec<Addr>,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
+#[serde(rename_all = "snake_case")]
+pub enum QueryMsg {
+    Greet {},
+    AdminsList {},
+}
+
+

You may argue that all those derives look slightly clunky, and I agree. +Fortunately, the +cosmwasm-schema +crate delivers a utility cw_serde macro, which we can use to reduce a +boilerplate:

+
use cosmwasm_std::Addr;
+use cosmwasm_schema::cw_serde
+
+#[cw_serde]
+pub struct InstantiateMsg {
+    pub admins: Vec<String>,
+    pub donation_denom: String,
+}
+
+#[cw_serde]
+pub enum ExecuteMsg {
+    AddMembers { admins: Vec<String> },
+    Leave {},
+    Donate {},
+}
+
+#[cw_serde]
+pub struct GreetResp {
+    pub message: String,
+}
+
+#[cw_serde]
+pub struct AdminsListResp {
+    pub admins: Vec<Addr>,
+}
+
+#[cw_serde]
+pub enum QueryMsg {
+    Greet {},
+    AdminsList {},
+}
+
+

Additionally, we have to derive the additional QueryResponses trait for our +query message to correlate the message variants with responses we would +generate for them:

+
use cosmwasm_std::Addr;
+use cosmwasm_schema::{cw_serde, QueryResponses}
+
+#[cw_serde]
+pub struct InstantiateMsg {
+    pub admins: Vec<String>,
+    pub donation_denom: String,
+}
+
+#[cw_serde]
+pub enum ExecuteMsg {
+    AddMembers { admins: Vec<String> },
+    Leave {},
+    Donate {},
+}
+
+#[cw_serde]
+pub struct GreetResp {
+    pub message: String,
+}
+
+#[cw_serde]
+pub struct AdminsListResp {
+    pub admins: Vec<Addr>,
+}
+
+#[cw_serde]
+#[derive(QueryResponses)]
+pub enum QueryMsg {
+    #[returns(GreetResp)]
+    Greet {},
+    #[returns(AdminsListResp)]
+    AdminsList {},
+}
+
+

The QueryResponses is a trait that requires the #[returns(...)] attribute +to all your query variants to generate additional information about the +query-response relationship.

+

Now, we want to make the msg module public and accessible by crates depending +on our contract (in this case - for schema example). Update a src/lib.rs:

+
use cosmwasm_std::{entry_point, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};
+use error::ContractError;
+use msg::{ExecuteMsg, InstantiateMsg, QueryMsg};
+
+pub mod contract;
+pub mod error;
+pub mod msg;
+pub mod state;
+
+#[entry_point]
+pub fn instantiate(
+    deps: DepsMut,
+    env: Env,
+    info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    contract::instantiate(deps, env, info, msg)
+}
+
+#[entry_point]
+pub fn execute(
+    deps: DepsMut,
+    env: Env,
+    info: MessageInfo,
+    msg: ExecuteMsg,
+) -> Result<Response, ContractError> {
+    contract::execute(deps, env, info, msg)
+}
+
+#[entry_point]
+pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    contract::query(deps, env, msg)
+}
+
+

I changed the visibility of all modules - as our crate can now be used as a dependency. +If someone would like to do so, he may need access to handlers or state.

+

The next step is to create a tool generating actual schemas. We will do it by creating +an binary in our crate. Create a new bin/schema.rs file:

+
use contract::msg::{ExecuteMsg, InstantiateMsg, QueryMsg};
+use cosmwasm_schema::write_api;
+
+fn main() {
+    write_api! {
+        instantiate: InstantiateMsg,
+        execute: ExecuteMsg,
+        query: QueryMsg
+    }
+}
+
+

Cargo is smart enough to recognize files in src/bin directory as utility +binaries for the crate. Now we can generate our schemas:

+
$ cargo run schema
+    Finished dev [unoptimized + debuginfo] target(s) in 0.52s
+     Running `target/debug/schema schema`
+Removing "/home/hashed/confio/git/book/examples/03-basics/schema/contract.json" …
+Exported the full API as /home/hashed/confio/git/book/examples/03-basics/schema/contract.json
+
+

I encourage you to go to generated file to see what the schema looks like.

+

The problem is that, unfortunately, creating this binary makes our project fail +to compile on the Wasm target - which is, in the end, the most important one. +Fortunately, we don't need to build the schema binary for the Wasm target - let's +align the .cargo/config file:

+
[alias]
+wasm = "build --target wasm32-unknown-unknown --release --lib"
+wasm-debug = "build --target wasm32-unknown-unknown --lib"
+schema = "run schema"
+
+

The --lib flag added to wasm cargo aliases tells the toolchain to build +only the library target - it would skip building any binaries. Additionally, I +added the convenience schema alias so that one can generate schema calling +simply cargo schema.

+

Disabling entry points for libraries

+

Since we added the "rlib" target for the contract, it is, as mentioned before, useable as a dependency. +The problem is that the contract depended on ours would have Wasm entry points generated twice - once +in the dependency and once in the final contract. We can work this around by disabling generating Wasm +entry points for the contract if the crate is used as a dependency. We would use +feature flags for that.

+

Start with updating Cargo.toml:

+
[features]
+library = []
+
+

This way, we created a new feature for our crate. Now we want to disable the entry_point attribute on +entry points - we will do it by a slight update of src/lib.rs:

+
use cosmwasm_std::{entry_point, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};
+use error::ContractError;
+use msg::{ExecuteMsg, InstantiateMsg, QueryMsg};
+
+pub mod contract;
+pub mod error;
+pub mod msg;
+pub mod state;
+
+#[cfg_attr(not(feature = "library"), entry_point)]
+pub fn instantiate(
+    deps: DepsMut,
+    env: Env,
+    info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    contract::instantiate(deps, env, info, msg)
+}
+
+#[cfg_attr(not(feature = "library"), entry_point)]
+pub fn execute(
+    deps: DepsMut,
+    env: Env,
+    info: MessageInfo,
+    msg: ExecuteMsg,
+) -> Result<Response, ContractError> {
+    contract::execute(deps, env, info, msg)
+}
+
+#[cfg_attr(not(feature = "library"), entry_point)]
+pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    contract::query(deps, env, msg)
+}
+
+

The cfg_attr attribute is +a conditional compilation attribute, similar to the cfg we used before for the test. It expands to the given attribute if +the condition expands to true. In our case - it would expand to nothing if the feature "library" is enabled, or it +would expand just to #[entry_point] in another case.

+

Since now to add this contract as a dependency, don't forget to enable the feature like this:

+
[dependencies]
+my_contract = { version = "0.1", features = ["library"] }
+
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + diff --git a/basics/multitest-intro.html b/basics/multitest-intro.html new file mode 100644 index 0000000..0900267 --- /dev/null +++ b/basics/multitest-intro.html @@ -0,0 +1,320 @@ + + + + + + Introducing multitest - CosmWasm book + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+
+

Introducing multitest

+

Let me introduce the multitest - +library for creating tests for smart contracts in Rust.

+

The core idea of multitest is abstracting an entity of contract and +simulating the blockchain environment for testing purposes. The purpose of this +is to be able to test communication between smart contracts. It does its job +well, but it is also an excellent tool for testing single-contract scenarios.

+

First, we need to add a multitest to our Cargo.toml.

+
[package]
+name = "contract"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib"]
+
+[dependencies]
+cosmwasm-std = { version = "1.0.0-beta8", features = ["staking"] }
+serde = { version = "1.0.103", default-features = false, features = ["derive"] }
+
+[dev-dependencies]
+cw-multi-test = "0.13.4"
+
+

I added a new +[dev-dependencies] +section with dependencies not used by the final binary +but which may be used by tools around the development process - for example, tests.

+

When we have the dependency ready, update our test to use the framework:

+
use crate::msg::{GreetResp, QueryMsg};
+use cosmwasm_std::{
+    to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,
+};
+
+pub fn instantiate(
+    _deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    _msg: Empty,
+) -> StdResult<Response> {
+    Ok(Response::new())
+}
+
+pub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+    }
+}
+
+#[allow(dead_code)]
+pub fn execute(
+    _deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    _msg: Empty
+) -> StdResult<Response> {
+    unimplemented!()
+}
+
+mod query {
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use cosmwasm_std::Addr;
+    use cw_multi_test::{App, ContractWrapper, Executor};
+
+    use super::*;
+
+    #[test]
+    fn greet_query() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &Empty {},
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: GreetResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::Greet {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            GreetResp {
+                message: "Hello World".to_owned()
+            }
+        );
+    }
+}
+
+

You probably notice that I added the function for an execute entry point. I didn't add the entry point +itself or the function's implementation, but for the multitest purposes contract has to contain at least +instantiate, query, and execute handlers. I attributed the function as +#[allow(dead_code)], +so, cargo will not complain about it not being used anywhere. Enabling it for tests only with #[cfg(test)] +would also be a way.

+

Then at the beginning of the test, I created the +App +object. It is a core multitest entity representing the virtual blockchain on +which we will run our contracts. As you can see, we can call functions on it +just like we would interact with blockchain using wasmd!

+

Right after creating app, I prepared the representation of the code, which +would be "uploaded" to the blockchain. As multitests are just native Rust +tests, they do not involve any Wasm binaries, but this name matches well what +happens in a real-life scenario. We store this object in the blockchain with +the store_code +function, and as a result, we are getting the code id - we would need it to +instantiate a contract.

+

Instantiation is the next step. In a single +instantiate_contract +call, we provide everything we would provide via wasmd - the contract code id, the address which performs instantiation,

+

the message triggering it, and any funds sent with the message (again - empty for now). We are adding the contract label +and its admin for migrations - None, as we don't need it yet.

+

And after the contract is online, we can query it. The +wrap function is an accessor +for querying Api (queries are handled a bit differently than other calls), and the +query_wasm_smart +queries are given a contract with the message. Also, we don't need to care about query results as Binary - multitest +assumes that we would like to deserialize them to some response type, so it takes advantage of Rust type elision to +provide us with a nice Api.

+

Now it's time to rerun the test. It should still pass, but now we nicely abstracted the testing contract as a whole, +not some internal functions. The next thing we should probably cover is making the contract more interesting +by adding some state.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + diff --git a/basics/query-testing.html b/basics/query-testing.html new file mode 100644 index 0000000..ce70314 --- /dev/null +++ b/basics/query-testing.html @@ -0,0 +1,432 @@ + + + + + + Testing a query - CosmWasm book + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+
+

Testing a query

+

Last time we created a new query, now it is time to test it out. We will start with the basics - +the unit test. This approach is simple and doesn't require knowledge besides Rust. Go to the +src/contract.rs and add a test in its module:

+
use crate::msg::{GreetResp, QueryMsg};
+use cosmwasm_std::{
+    to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,
+};
+
+pub fn instantiate(
+    _deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    _msg: Empty,
+) -> StdResult<Response> {
+    Ok(Response::new())
+}
+
+pub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+    }
+}
+
+mod query {
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    #[test]
+    fn greet_query() {
+        let resp = query::greet().unwrap();
+        assert_eq!(
+            resp,
+            GreetResp {
+                message: "Hello World".to_owned()
+            }
+        );
+    }
+}
+
+

If you ever wrote a unit test in Rust, nothing should surprise you here. Just a +simple test-only module contains local function unit tests. The problem is - this +test doesn't build yet. We need to tweak our message types a bit. Update the src/msg.rs:

+
use serde::{Deserialize, Serialize};
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub struct GreetResp {
+    pub message: String,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub enum QueryMsg {
+    Greet {},
+}
+
+

I added three new derives to both message types. PartialEq +is required to allow comparing types +for equality - so we can check if they are equal. The Debug +is a trait generating debug-printing +utilities. It is used by assert_eq! to +display information about mismatch if an assertion +fails. Note that because we are not testing the QueryMsg in any way, the additional trait derives +are optional. Still, it is a good practice to make all messages both PartialEq and Debug for +testability and consistency. +The last one, Clone is not needed for now yet, +but it is also good practice to allow messages to be cloned around. We will also require that +later, so I added it already not to go back and forth.

+

Now we are ready to run our test:

+
$ cargo test
+
+...
+running 1 test
+test contract::tests::greet_query ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+

Yay! Test passed!

+

Contract as a black box

+

Now let's go a step further. The Rust testing utility is a friendly tool for building even higher-level +tests. We are currently testing smart contract internals, but if you think about how your smart contract +is visible from the outside world. It is a single entity that is triggered by some input messages. We can +create tests that treat the whole contract as a black box by testing it via our query function. Let's +update our test:

+
use crate::msg::{GreetResp, QueryMsg};
+use cosmwasm_std::{
+    to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,
+};
+
+pub fn instantiate(
+    _deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    _msg: Empty,
+) -> StdResult<Response> {
+    Ok(Response::new())
+}
+
+pub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+    }
+}
+
+mod query {
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use cosmwasm_std::from_binary;
+    use cosmwasm_std::testing::{mock_dependencies, mock_env};
+
+    use super::*;
+
+    #[test]
+    fn greet_query() {
+        let resp = query(
+            mock_dependencies().as_ref(),
+            mock_env(),
+            QueryMsg::Greet {}
+        ).unwrap();
+        let resp: GreetResp = from_binary(&resp).unwrap();
+
+        assert_eq!(
+            resp,
+            GreetResp {
+                message: "Hello World".to_owned()
+            }
+        );
+    }
+}
+
+

We needed to produce two entities for the query functions: the deps and env instances. +Fortunately, cosmwasm-std provides utilities for testing those - +mock_dependencies +and mock_env +functions.

+

You may notice the dependencies mock of a type +OwnedDeps instead +of Deps, which we need here - this is why the +as_ref +function is called on it. If we looked for a DepsMut object, we would use +as_mut +instead.

+

We can rerun the test, and it should still pass. But when we think about that test reflecting +the actual use case, it is inaccurate. The contract is queried, but it was never instantiated! +In software engineering, it is equivalent to calling a getter without constructing an object - +taking it out of nowhere. It is a lousy testing approach. We can do better:

+

+use crate::msg::{GreetResp, QueryMsg};
+use cosmwasm_std::{
+    to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,
+};
+
+pub fn instantiate(
+    _deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    _msg: Empty,
+) -> StdResult<Response> {
+    Ok(Response::new())
+}
+
+pub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+    }
+}
+
+mod query {
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use cosmwasm_std::from_binary;
+    use cosmwasm_std::testing::{mock_dependencies, mock_env, mock_info};
+
+    use super::*;
+
+    #[test]
+    fn greet_query() {
+        let mut deps = mock_dependencies();
+        let env = mock_env();
+
+        instantiate(
+            deps.as_mut(),
+            env.clone(),
+            mock_info("sender", &[]),
+            Empty {},
+        )
+        .unwrap();
+
+        let resp = query(deps.as_ref(), env, QueryMsg::Greet {}).unwrap();
+        let resp: GreetResp = from_binary(&resp).unwrap();
+        assert_eq!(
+            resp,
+            GreetResp {
+                message: "Hello World".to_owned()
+            }
+        );
+    }
+}
+
+

A couple of new things here. First, I extracted the deps and env variables to their variables +and passed them to calls. The idea is that those variables represent some blockchain persistent state, +and we don't want to create them for every call. We want any changes to the contract state occurring +in instantiate to be visible in the query. Also, we want to control how the environment differs +on the query and instantiation.

+

The info argument is another story. The message info is unique for each message sent. To create the +info mock, we must pass two arguments to the +mock_info function.

+

First is the address performing a call. It may look strange to pass sender as an address instead of some +mysterious wasm followed by hash, but it is a valid address. For testing purposes, such addresses are +typically better, as they are way more verbose in case of failing tests.

+

The second argument is funds sent with the message. For now, we leave it as an empty slice, as I don't want +to talk about token transfers yet - we will cover it later.

+

So now it is more a real-case scenario. I see just one problem. I say that the contract is a single black +box. But here, nothing connects the instantiate call to the corresponding query. It seems that we assume +there is some global contract. But it seems that if we would like to have two contracts instantiated differently +in a single test case, it would become a mess. If only there would be some tool to abstract this for us, wouldn't +it be nice?

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + diff --git a/basics/query.html b/basics/query.html new file mode 100644 index 0000000..b28ee56 --- /dev/null +++ b/basics/query.html @@ -0,0 +1,468 @@ + + + + + + Creating a query - CosmWasm book + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+
+

Creating a query

+

We have already created a simple contract reacting to an empty instantiate message. Unfortunately, it +is not very useful. Let's make it a bit reactive.

+

First, we need to add serde crate to our dependencies. It would help us with the serialization and +deserialization of query messages. Update the Cargo.toml:

+
[package]
+name = "contract"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib"]
+
+[dependencies]
+cosmwasm-std = { version = "1.0.0-beta8", features = ["staking"] }
+serde = { version = "1.0.103", default-features = false, features = ["derive"] }
+
+[dev-dependencies]
+cw-multi-test = "0.13.4"
+
+

Now go to your src/lib.rs file, and add a new query entry point:

+
use cosmwasm_std::{
+    entry_point, to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo,
+    Response, StdResult,
+};
+use serde::{Deserialize, Serialize};
+
+#[derive(Serialize, Deserialize)]
+struct QueryResp {
+    message: String,
+}
+
+#[entry_point]
+pub fn instantiate(
+    _deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    _msg: Empty,
+) -> StdResult<Response> {
+    Ok(Response::new())
+}
+
+#[entry_point]
+pub fn query(_deps: Deps, _env: Env, _msg: Empty) -> StdResult<Binary> {
+    let resp = QueryResp {
+        message: "Hello World".to_owned(),
+    };
+
+    to_binary(&resp)
+}
+
+

Note that I omitted the previously created instantiate endpoint for simplicity - +not to overload you with code, I will always only show lines that changed in the code.

+

We first need a structure we will return from our query. We always want to return something +which is serializable. We are just deriving the +Serialize and +Deserialize traits from serde crate.

+

Then we need to implement our entry point. It is very similar to the instantiate one. The +first significant difference is a type of deps argument. For instantiate, it was a DepMut, +but here we went with a Deps +object. That is because the query can never alter the smart +contract's internal state. It can only read the state. It comes with some consequences - for example, +it is impossible to implement caching for future queries (as it would require some data cache to write +to).

+

The other difference is the lack of the info argument. The reason here is that the entry point which +performs actions (like instantiation or execution) can differ how an action is performed based on the +message metadata - for example, they can limit who can perform an action (and do so by checking the +message sender). It is not a case for queries. Queries are supposed just purely to return some +transformed contract state. It can be calculated based on some chain metadata (so the state can +"automatically" change after some time), but not on message info.

+

Note that our entry point still has the same Empty type for its msg argument - it means that the +query message we would send to the contract is still an empty JSON: {}

+

The last thing that changed is the return type. Instead of returning the Response type on the success +case, we return an arbitrary serializable object. This is because queries are not using a typical actor +model message flow - they cannot trigger any actions nor communicate with other contracts in ways different +than querying them (which is handled by the deps argument). The query always returns plain data, which +should be presented directly to the querier.

+

Now take a look at the implementation. Nothing complicated happens there - we create an object we want +to return and encode it to the Binary +type using the to_binary function.

+

Improving the message

+

We have a query, but there is a problem with the query message. It is always an empty JSON. It is terrible - +if we would like to add another query in the future, it would be difficult to have any reasonable distinction +between query variants.

+

In practice, we address this by using a non-empty query message type. Improve our contract:

+
use cosmwasm_std::{
+    entry_point, to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,
+};
+use serde::{Deserialize, Serialize};
+
+#[derive(Serialize, Deserialize)]
+struct QueryResp {
+    message: String,
+}
+
+#[derive(Serialize, Deserialize)]
+pub enum QueryMsg {
+    Greet {},
+}
+
+#[entry_point]
+pub fn instantiate(
+    _deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    _msg: Empty,
+) -> StdResult<Response> {
+    Ok(Response::new())
+}
+
+#[entry_point]
+pub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => {
+            let resp = QueryResp {
+                message: "Hello World".to_owned(),
+            };
+
+            to_binary(&resp)
+        }
+    }
+}
+
+

Now we introduced a proper message type for the query message. It is an +enum, and by +default, it would serialize to a JSON with a single field - the name of the field +will be an enum variant (in our case - always "greet" - at least for now), and the +value of this field would be an object assigned to this enum variant.

+

Note that our enum has no type assigned to the only Greet variant. Typically +in Rust, we create such variants without additional {} after the variant name. Here the +curly braces have a purpose - without them, the variant would serialize to just a string +type - so instead of { "greet": {} }, the JSON representation of this variant would be +"greet". This behavior brings inconsistency in the message schema. It is, generally, +a good habit to always add the {} to serde serializable empty enum variants - for better +JSON representation.

+

But now, we can still improve the code further. Right now, the query function has two +responsibilities. The first is obvious - handling the query itself. It was the first +assumption, and it is still there. But there is a new thing happening there - the query +message dispatching. It may not be obvious, as there is a single variant, but the query +function is an excellent way to become a massive unreadable match statement. To make +the code more SOLID, we will refactor it and +take out handling the greet message to a +separate function.

+
use cosmwasm_std::{
+    entry_point, to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,
+};
+use serde::{Deserialize, Serialize};
+
+#[derive(Serialize, Deserialize)]
+pub struct GreetResp {
+    message: String,
+}
+
+#[derive(Serialize, Deserialize)]
+pub enum QueryMsg {
+    Greet {},
+}
+
+#[entry_point]
+pub fn instantiate(
+    _deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    _msg: Empty,
+) -> StdResult<Response> {
+    Ok(Response::new())
+}
+
+#[entry_point]
+pub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+    }
+}
+
+mod query {
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+}
+
+

Now it looks much better. Note there are a couple of additional improvements. I +renamed the query-response type GreetResp as I may have different responses +for different queries. I want the name to relate only to the variant, not the +whole message.

+

Next is enclosing my new function in the module query. It makes it easier to +avoid name collisions - I can have the same variant for queries and execution +messages in the future, and their handlers would lie in separate namespaces.

+

A questionable decision may be returning StdResult instead of GreetResp +from greet function, as it would never return an error. It is a matter of +style, but I prefer consistency over the message handler, and the majority of +them would have failure cases - e.g. when reading the state.

+

Also, you might pass deps and env arguments to all your query handlers for +consistency. I'm not too fond of this, as it introduces unnecessary boilerplate +which doesn't read well, but I also agree with the consistency argument - I +leave it to your judgment.

+

Structuring the contract

+

You can see that our contract is becoming a bit bigger now. About 50 lines are maybe +not so much, but there are many different entities in a single file, and I think we +can do better. I can already distinguish three different types of entities in the code: +entry points, messages, and handlers. In most contracts, we would divide them across +three files. Start with extracting all the messages to src/msg.rs:

+
use serde::{Deserialize, Serialize};
+
+#[derive(Serialize, Deserialize)]
+pub struct GreetResp {
+    pub message: String,
+}
+
+#[derive(Serialize, Deserialize)]
+pub enum QueryMsg {
+    Greet {},
+}
+
+

You probably noticed that I made my GreetResp fields public. It is because they have +to be now accessed from a different module. Now move forward to the src/contract.rs file:

+
use crate::msg::{GreetResp, QueryMsg};
+use cosmwasm_std::{
+    to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,
+};
+
+pub fn instantiate(
+    _deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    _msg: Empty,
+) -> StdResult<Response> {
+    Ok(Response::new())
+}
+
+pub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+    }
+}
+
+mod query {
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+}
+
+

I moved most of the logic here, so my src/lib.rs is just a very thin library entry with nothing +else but module definitions and entry points definition. I removed the #[entry_point] attribute +from my query function in src/contract.rs. I will have a function with this attribute. +Still, I wanted to split functions' responsibility further - not the contract::query function is +the top-level query handler responsible for dispatching the query message. The query function on +crate-level is only an entry point. It is a subtle distinction, but it will make sense in the future +when we would like not to generate the entry points but to keep the dispatching functions. I introduced +the split now to show you the typical contract structure.

+

Now the last part, the src/lib.rs file:

+
use cosmwasm_std::{
+    entry_point, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,
+};
+
+mod contract;
+mod msg;
+
+#[entry_point]
+pub fn instantiate(deps: DepsMut, env: Env, info: MessageInfo, msg: Empty)
+  -> StdResult<Response>
+{
+    contract::instantiate(deps, env, info, msg)
+}
+
+#[entry_point]
+pub fn query(deps: Deps, env: Env, msg: msg::QueryMsg)
+  -> StdResult<Binary>
+{
+    contract::query(deps, env, msg)
+}
+
+

Straightforward top-level module. Definition of submodules and entry points, nothing more.

+

Now, when we have the contract ready to do something, let's go and test it.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + diff --git a/basics/rust-project.html b/basics/rust-project.html new file mode 100644 index 0000000..1609bb5 --- /dev/null +++ b/basics/rust-project.html @@ -0,0 +1,202 @@ + + + + + + Create a Rust project - CosmWasm book + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+
+

Create a Rust project

+

As smart contracts are Rust library crates, we will start with creating one:

+
$ cargo new --lib ./empty-contract
+
+

You created a simple Rust library, but it is not yet ready to be a smart contract. The first thing +to do is to update the Cargo.toml file:

+
[package]
+name = "contract"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib"]
+
+[dependencies]
+cosmwasm-std = { version = "1.0.0-beta8", features = ["staking"] }
+
+
+

As you can see, I added a crate-type field for the library section. Generating the cdylib is +required to create a proper web assembly binary. The downside of this is that such a library cannot +be used as a dependency for other Rust crates - for now, it is not needed, but later we will show +how to approach reusing contracts as dependencies.

+

Additionally, there is one core dependency for smart contracts: the cosmwasm-std. This crate is a +standard library for smart contracts. It provides essential utilities for communication with the +outside world and a couple of helper functions and types. Every smart contract we will build will +use this dependency.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + diff --git a/basics/state.html b/basics/state.html new file mode 100644 index 0000000..c4a7ba5 --- /dev/null +++ b/basics/state.html @@ -0,0 +1,790 @@ + + + + + + Contract state - CosmWasm book + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+
+

Contract state

+

The contract we are working on already has some behavior that can answer a query. Unfortunately, it is +very predictable with its answers, and it has nothing to alter them. In this chapter, I introduce the +notion of state, which would allow us to bring true life to a smart contract.

+

The state would still be static for now - it would be initialized on contract instantiation. The state +would contain a list of admins who would be eligible to execute messages in the future.

+

The first thing to do is to update Cargo.toml with yet another dependency - the +storage-plus crate with high-level bindings for CosmWasm +smart contracts state management:

+
[package]
+name = "contract"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib"]
+
+[dependencies]
+cosmwasm-std = { version = "1.0.0-beta8", features = ["staking"] }
+serde = { version = "1.0.103", default-features = false, features = ["derive"] }
+cw-storage-plus = "0.13.4"
+
+[dev-dependencies]
+cw-multi-test = "0.13.4"
+
+

Now create a new file where you will keep a state for the contract - we typically call it src/state.rs:

+
use cosmwasm_std::Addr;
+use cw_storage_plus::Item;
+
+pub const ADMINS: Item<Vec<Addr>> = Item::new("admins");
+
+

And make sure we declare the module in src/lib.rs:

+
use cosmwasm_std::{
+    entry_point, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,
+};
+
+mod contract;
+mod msg;
+mod state;
+
+#[entry_point]
+pub fn instantiate(deps: DepsMut, env: Env, info: MessageInfo, msg: Empty)
+  -> StdResult<Response>
+{
+    contract::instantiate(deps, env, info, msg)
+}
+
+#[entry_point]
+pub fn query(deps: Deps, env: Env, msg: msg::QueryMsg)
+  -> StdResult<Binary>
+{
+    contract::query(deps, env, msg)
+}
+
+

The new thing we have here is the ADMINS constant of type Item<Vec<Addr>>. You could ask an excellent +question here - how is the state constant? How do I modify it if it is a constant value?

+

The answer is tricky - this constant is not keeping the state itself. The state is stored in the +blockchain and is accessed via the deps argument passed to entry points. The storage-plus constants +are just accessor utilities helping us access this state in a structured way.

+

In CosmWasm, the blockchain state is just massive key-value storage. The keys are prefixed with metainformation +pointing to the contract which owns them (so no other contract can alter them in any way), but even after +removing the prefixes, the single contract state is a smaller key-value pair.

+

storage-plus handles more complex state structures by additionally prefixing items keys intelligently. For now, +we just used the simplest storage entity - an +Item<_>, which holds a single optional +value of a given type - +Vec<Addr> in this case. And what would be a key to this item in the storage? It doesn't matter to us - it would +be figured out to be unique, based on a unique string passed to the +new function.

+

Before we would go into initializing our state, we need some better instantiate message. Go to src/msg.rs and create one:

+
use cosmwasm_std::Addr;
+use serde::{Deserialize, Serialize};
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub struct InstantiateMsg {
+    pub admins: Vec<String>,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub struct GreetResp {
+    pub message: String,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub enum QueryMsg {
+    Greet {},
+}
+
+

Now go forward to instantiate the entry point in src/contract.rs, and initialize our state to whatever we got in the instantiation message:

+
use crate::msg::{GreetResp, InstantiateMsg, QueryMsg};
+use crate::state::ADMINS;
+// --snip--
+use cosmwasm_std::{
+    to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,
+};
+
+pub fn instantiate(
+    deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    let admins: StdResult<Vec<_>> = msg
+        .admins
+        .into_iter()
+        .map(|addr| deps.api.addr_validate(&addr))
+        .collect();
+    ADMINS.save(deps.storage, &admins?)?;
+
+    Ok(Response::new())
+}
+
+pub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+    }
+}
+
+#[allow(dead_code)]
+pub fn execute(_deps: DepsMut, _env: Env, _info: MessageInfo, _msg: Empty) -> StdResult<Response> {
+    unimplemented!()
+}
+
+mod query {
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use cosmwasm_std::Addr;
+    use cw_multi_test::{App, ContractWrapper, Executor};
+
+    use super::*;
+
+    #[test]
+    fn greet_query() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &Empty {},
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: GreetResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::Greet {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            GreetResp {
+                message: "Hello World".to_owned()
+            }
+        );
+    }
+}
+
+

We also need to update the message type on entry point in src/lib.rs:

+
use cosmwasm_std::{entry_point, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};
+use msg::InstantiateMsg;
+// --snip--
+
+mod contract;
+mod msg;
+mod state;
+
+#[entry_point]
+pub fn instantiate(
+    deps: DepsMut,
+    env: Env,
+    info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    contract::instantiate(deps, env, info, msg)
+}
+
+#[entry_point]
+pub fn query(deps: Deps, env: Env, msg: msg::QueryMsg) -> StdResult<Binary> {
+    contract::query(deps, env, msg)
+}
+
+

Voila, that's all that is needed to update the state!

+

First, we need to transform the vector of strings into the vector of addresses to be stored. We cannot take +addresses as a message argument because not every string is a valid address. It might be a bit confusing when +we were working on tests. Any string could be used in the place of address. Let me explain.

+

Every string can be technically considered an address. However, not every string is an actual existing blockchain +address. When we keep anything of type Addr in the contract, we assume it is a proper address in the blockchain. +That is why the addr_validate +function exits - to check this precondition.

+

Having data to store, we use the save +function to write it into the contract state. Note that the first argument of save is +&mut Storage, which is actual blockchain +storage. As emphasized, the Item object stores nothing and is just an accessor. It determines how to store the data +in the storage given to it. The second argument is the serializable data to be stored.

+

It is a good time to check if the regression we have passes - try running our tests:

+
> cargo test
+
+...
+
+running 1 test
+test contract::tests::greet_query ... FAILED
+
+failures:
+
+---- contract::tests::greet_query stdout ----
+thread 'contract::tests::greet_query' panicked at 'called `Result::unwrap()` on an `Err` value: error executing WasmMsg:
+sender: owner
+Instantiate { admin: None, code_id: 1, msg: Binary(7b7d), funds: [], label: "Contract" }
+
+Caused by:
+    Error parsing into type contract::msg::InstantiateMsg: missing field `admins`', src/contract.rs:80:14
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+
+
+failures:
+    contract::tests::greet_query
+
+test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+error: test failed, to rerun pass '--lib'
+
+

Damn, we broke something! But be calm. Let's start with carefully reading an error message:

+
+

Error parsing into type contract::msg::InstantiateMsg: missing field admins', src/contract.rs:80:14

+
+

The problem is that in the test, we send an empty instantiation message in our test, but right now, our endpoint expects +to have an admin field. Multi-test framework tests contract from the entry point to results, so sending messages using MT +functions first serializes them. Then the contract deserializes them on the entry. But now it tries to deserialize the +empty JSON to some non-empty message! We can quickly fix it by updating the test:

+
use crate::msg::{GreetResp, InstantiateMsg, QueryMsg};
+use crate::state::ADMINS;
+use cosmwasm_std::{
+    to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,
+};
+
+pub fn instantiate(
+    deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    let admins: StdResult<Vec<_>> = msg
+        .admins
+        .into_iter()
+        .map(|addr| deps.api.addr_validate(&addr))
+        .collect();
+    ADMINS.save(deps.storage, &admins?)?;
+
+    Ok(Response::new())
+}
+
+pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+        AdminsList {} => to_binary(&query::admins_list(deps)?),
+    }
+}
+
+#[allow(dead_code)]
+pub fn execute(_deps: DepsMut, _env: Env, _info: MessageInfo, _msg: Empty) -> StdResult<Response> {
+    unimplemented!()
+}
+
+mod query {
+    use crate::msg::AdminsListResp;
+
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+
+    pub fn admins_list(deps: Deps) -> StdResult<AdminsListResp> {
+        let admins = ADMINS.load(deps.storage)?;
+        let resp = AdminsListResp { admins };
+        Ok(resp)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use cosmwasm_std::Addr;
+    use cw_multi_test::{App, ContractWrapper, Executor};
+
+    use super::*;
+
+    #[test]
+    fn greet_query() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: GreetResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::Greet {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            GreetResp {
+                message: "Hello World".to_owned()
+            }
+        );
+    }
+}
+
+

Testing state

+

When the state is initialized, we want a way to test it. We want to provide a +query to check if the instantiation affects the state. Just create a simple one +listing all admins. Start with adding a variant for query message and a corresponding response message in src/msg.rs. We'll call the variant AdminsList, the response AdminsListResp, and have it return a vector of cosmwasm_std::Addr:

+
use cosmwasm_std::Addr;
+use serde::{Deserialize, Serialize};
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub struct InstantiateMsg {
+    pub admins: Vec<Addr>,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub struct GreetResp {
+    pub message: String,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub struct AdminsListResp  {
+    pub admins: Vec<Addr>,
+}
+
+[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub enum QueryMsg {
+    Greet {},
+    AdminsList {},
+}
+
+

And implement it in src/contract.rs:

+
use crate::msg::{AdminsListResp, GreetResp, InstantiateMsg, QueryMsg};
+use crate::state::ADMINS;
+use cosmwasm_std::{
+    to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,
+};
+
+pub fn instantiate(
+    deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    let admins: StdResult<Vec<_>> = msg
+        .admins
+        .into_iter()
+        .map(|addr| deps.api.addr_validate(&addr))
+        .collect();
+    ADMINS.save(deps.storage, &admins?)?;
+
+    Ok(Response::new())
+}
+
+pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+        AdminsList {} => to_binary(&query::admins_list(deps)?),
+    }
+}
+ 
+#[allow(dead_code)]
+pub fn execute(_deps: DepsMut, _env: Env, _info: MessageInfo, _msg: Empty) -> StdResult<Response> {
+    unimplemented!()
+}
+
+mod query {
+   use super::*;
+
+   pub fn greet() -> StdResult<GreetResp> {
+       let resp = GreetResp {
+           message: "Hello World".to_owned(),
+       };
+
+       Ok(resp)
+   }
+
+    pub fn admins_list(deps: Deps) -> StdResult<AdminsListResp> {
+        let admins = ADMINS.load(deps.storage)?;
+        let resp = AdminsListResp { admins };
+        Ok(resp)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use cosmwasm_std::Addr;
+    use cw_multi_test::{App, ContractWrapper, Executor};
+
+    use super::*;
+
+    #[test]
+    fn greet_query() {
+       let mut app = App::default();
+
+       let code = ContractWrapper::new(execute, instantiate, query);
+       let code_id = app.store_code(Box::new(code));
+
+       let addr = app
+           .instantiate_contract(
+               code_id,
+               Addr::unchecked("owner"),
+               &InstantiateMsg { admins: vec![] },
+               &[],
+               "Contract",
+               None,
+           )
+           .unwrap();
+
+       let resp: GreetResp = app
+           .wrap()
+           .query_wasm_smart(addr, &QueryMsg::Greet {})
+           .unwrap();
+
+       assert_eq!(
+           resp,
+           GreetResp {
+               message: "Hello World".to_owned()
+           }
+       );
+    }
+}
+
+

Now when we have the tools to test the instantiation, let's write a test case:

+
use crate::msg::{AdminsListResp, GreetResp, InstantiateMsg, QueryMsg};
+use crate::state::ADMINS;
+use cosmwasm_std::{
+    to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,
+};
+
+pub fn instantiate(
+    deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    let admins: StdResult<Vec<_>> = msg
+        .admins
+        .into_iter()
+        .map(|addr| deps.api.addr_validate(&addr))
+        .collect();
+    ADMINS.save(deps.storage, &admins?)?;
+
+    Ok(Response::new())
+}
+
+pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+        AdminsList {} => to_binary(&query::admins_list(deps)?),
+    }
+}
+
+#[allow(dead_code)]
+pub fn execute(_deps: DepsMut, _env: Env, _info: MessageInfo, _msg: Empty) -> StdResult<Response> {
+    unimplemented!()
+}
+
+mod query {
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+
+    pub fn admins_list(deps: Deps) -> StdResult<AdminsListResp> {
+        let admins = ADMINS.load(deps.storage)?;
+        let resp = AdminsListResp { admins };
+        Ok(resp)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use cosmwasm_std::Addr;
+    use cw_multi_test::{App, ContractWrapper, Executor};
+
+    use super::*;
+
+    #[test]
+    fn instantiation() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(resp, AdminsListResp { admins: vec![] });
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec!["admin1".to_owned(), "admin2".to_owned()],
+                },
+                &[],
+                "Contract 2",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            AdminsListResp {
+                admins: vec![Addr::unchecked("admin1"), Addr::unchecked("admin2")],
+            }
+        );
+    }
+
+    #[test]
+    fn greet_query() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: GreetResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::Greet {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            GreetResp {
+                message: "Hello World".to_owned()
+            }
+        );
+    }
+}
+
+

The test is simple - instantiate the contract twice with different initial admins, and ensure the query result +is proper each time. This is often the way we test our contract - we execute bunch o messages on the contract, +and then we query it for some data, verifying if query responses are like expected.

+

We are doing a pretty good job developing our contract. Now it is time to use the state and allow for some executions.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + diff --git a/book.js b/book.js new file mode 100644 index 0000000..d40440c --- /dev/null +++ b/book.js @@ -0,0 +1,679 @@ +"use strict"; + +// Fix back button cache problem +window.onunload = function () { }; + +// Global variable, shared between modules +function playground_text(playground) { + let code_block = playground.querySelector("code"); + + if (window.ace && code_block.classList.contains("editable")) { + let editor = window.ace.edit(code_block); + return editor.getValue(); + } else { + return code_block.textContent; + } +} + +(function codeSnippets() { + function fetch_with_timeout(url, options, timeout = 6000) { + return Promise.race([ + fetch(url, options), + new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), timeout)) + ]); + } + + var playgrounds = Array.from(document.querySelectorAll(".playground")); + if (playgrounds.length > 0) { + fetch_with_timeout("https://play.rust-lang.org/meta/crates", { + headers: { + 'Content-Type': "application/json", + }, + method: 'POST', + mode: 'cors', + }) + .then(response => response.json()) + .then(response => { + // get list of crates available in the rust playground + let playground_crates = response.crates.map(item => item["id"]); + playgrounds.forEach(block => handle_crate_list_update(block, playground_crates)); + }); + } + + function handle_crate_list_update(playground_block, playground_crates) { + // update the play buttons after receiving the response + update_play_button(playground_block, playground_crates); + + // and install on change listener to dynamically update ACE editors + if (window.ace) { + let code_block = playground_block.querySelector("code"); + if (code_block.classList.contains("editable")) { + let editor = window.ace.edit(code_block); + editor.addEventListener("change", function (e) { + update_play_button(playground_block, playground_crates); + }); + // add Ctrl-Enter command to execute rust code + editor.commands.addCommand({ + name: "run", + bindKey: { + win: "Ctrl-Enter", + mac: "Ctrl-Enter" + }, + exec: _editor => run_rust_code(playground_block) + }); + } + } + } + + // updates the visibility of play button based on `no_run` class and + // used crates vs ones available on http://play.rust-lang.org + function update_play_button(pre_block, playground_crates) { + var play_button = pre_block.querySelector(".play-button"); + + // skip if code is `no_run` + if (pre_block.querySelector('code').classList.contains("no_run")) { + play_button.classList.add("hidden"); + return; + } + + // get list of `extern crate`'s from snippet + var txt = playground_text(pre_block); + var re = /extern\s+crate\s+([a-zA-Z_0-9]+)\s*;/g; + var snippet_crates = []; + var item; + while (item = re.exec(txt)) { + snippet_crates.push(item[1]); + } + + // check if all used crates are available on play.rust-lang.org + var all_available = snippet_crates.every(function (elem) { + return playground_crates.indexOf(elem) > -1; + }); + + if (all_available) { + play_button.classList.remove("hidden"); + } else { + play_button.classList.add("hidden"); + } + } + + function run_rust_code(code_block) { + var result_block = code_block.querySelector(".result"); + if (!result_block) { + result_block = document.createElement('code'); + result_block.className = 'result hljs language-bash'; + + code_block.append(result_block); + } + + let text = playground_text(code_block); + let classes = code_block.querySelector('code').classList; + let edition = "2015"; + if(classes.contains("edition2018")) { + edition = "2018"; + } else if(classes.contains("edition2021")) { + edition = "2021"; + } + var params = { + version: "stable", + optimize: "0", + code: text, + edition: edition + }; + + if (text.indexOf("#![feature") !== -1) { + params.version = "nightly"; + } + + result_block.innerText = "Running..."; + + fetch_with_timeout("https://play.rust-lang.org/evaluate.json", { + headers: { + 'Content-Type': "application/json", + }, + method: 'POST', + mode: 'cors', + body: JSON.stringify(params) + }) + .then(response => response.json()) + .then(response => { + if (response.result.trim() === '') { + result_block.innerText = "No output"; + result_block.classList.add("result-no-output"); + } else { + result_block.innerText = response.result; + result_block.classList.remove("result-no-output"); + } + }) + .catch(error => result_block.innerText = "Playground Communication: " + error.message); + } + + // Syntax highlighting Configuration + hljs.configure({ + tabReplace: ' ', // 4 spaces + languages: [], // Languages used for auto-detection + }); + + let code_nodes = Array + .from(document.querySelectorAll('code')) + // Don't highlight `inline code` blocks in headers. + .filter(function (node) {return !node.parentElement.classList.contains("header"); }); + + if (window.ace) { + // language-rust class needs to be removed for editable + // blocks or highlightjs will capture events + code_nodes + .filter(function (node) {return node.classList.contains("editable"); }) + .forEach(function (block) { block.classList.remove('language-rust'); }); + + Array + code_nodes + .filter(function (node) {return !node.classList.contains("editable"); }) + .forEach(function (block) { hljs.highlightBlock(block); }); + } else { + code_nodes.forEach(function (block) { hljs.highlightBlock(block); }); + } + + // Adding the hljs class gives code blocks the color css + // even if highlighting doesn't apply + code_nodes.forEach(function (block) { block.classList.add('hljs'); }); + + Array.from(document.querySelectorAll("code.language-rust")).forEach(function (block) { + + var lines = Array.from(block.querySelectorAll('.boring')); + // If no lines were hidden, return + if (!lines.length) { return; } + block.classList.add("hide-boring"); + + var buttons = document.createElement('div'); + buttons.className = 'buttons'; + buttons.innerHTML = ""; + + // add expand button + var pre_block = block.parentNode; + pre_block.insertBefore(buttons, pre_block.firstChild); + + pre_block.querySelector('.buttons').addEventListener('click', function (e) { + if (e.target.classList.contains('fa-eye')) { + e.target.classList.remove('fa-eye'); + e.target.classList.add('fa-eye-slash'); + e.target.title = 'Hide lines'; + e.target.setAttribute('aria-label', e.target.title); + + block.classList.remove('hide-boring'); + } else if (e.target.classList.contains('fa-eye-slash')) { + e.target.classList.remove('fa-eye-slash'); + e.target.classList.add('fa-eye'); + e.target.title = 'Show hidden lines'; + e.target.setAttribute('aria-label', e.target.title); + + block.classList.add('hide-boring'); + } + }); + }); + + if (window.playground_copyable) { + Array.from(document.querySelectorAll('pre code')).forEach(function (block) { + var pre_block = block.parentNode; + if (!pre_block.classList.contains('playground')) { + var buttons = pre_block.querySelector(".buttons"); + if (!buttons) { + buttons = document.createElement('div'); + buttons.className = 'buttons'; + pre_block.insertBefore(buttons, pre_block.firstChild); + } + + var clipButton = document.createElement('button'); + clipButton.className = 'fa fa-copy clip-button'; + clipButton.title = 'Copy to clipboard'; + clipButton.setAttribute('aria-label', clipButton.title); + clipButton.innerHTML = ''; + + buttons.insertBefore(clipButton, buttons.firstChild); + } + }); + } + + // Process playground code blocks + Array.from(document.querySelectorAll(".playground")).forEach(function (pre_block) { + // Add play button + var buttons = pre_block.querySelector(".buttons"); + if (!buttons) { + buttons = document.createElement('div'); + buttons.className = 'buttons'; + pre_block.insertBefore(buttons, pre_block.firstChild); + } + + var runCodeButton = document.createElement('button'); + runCodeButton.className = 'fa fa-play play-button'; + runCodeButton.hidden = true; + runCodeButton.title = 'Run this code'; + runCodeButton.setAttribute('aria-label', runCodeButton.title); + + buttons.insertBefore(runCodeButton, buttons.firstChild); + runCodeButton.addEventListener('click', function (e) { + run_rust_code(pre_block); + }); + + if (window.playground_copyable) { + var copyCodeClipboardButton = document.createElement('button'); + copyCodeClipboardButton.className = 'fa fa-copy clip-button'; + copyCodeClipboardButton.innerHTML = ''; + copyCodeClipboardButton.title = 'Copy to clipboard'; + copyCodeClipboardButton.setAttribute('aria-label', copyCodeClipboardButton.title); + + buttons.insertBefore(copyCodeClipboardButton, buttons.firstChild); + } + + let code_block = pre_block.querySelector("code"); + if (window.ace && code_block.classList.contains("editable")) { + var undoChangesButton = document.createElement('button'); + undoChangesButton.className = 'fa fa-history reset-button'; + undoChangesButton.title = 'Undo changes'; + undoChangesButton.setAttribute('aria-label', undoChangesButton.title); + + buttons.insertBefore(undoChangesButton, buttons.firstChild); + + undoChangesButton.addEventListener('click', function () { + let editor = window.ace.edit(code_block); + editor.setValue(editor.originalCode); + editor.clearSelection(); + }); + } + }); +})(); + +(function themes() { + var html = document.querySelector('html'); + var themeToggleButton = document.getElementById('theme-toggle'); + var themePopup = document.getElementById('theme-list'); + var themeColorMetaTag = document.querySelector('meta[name="theme-color"]'); + var stylesheets = { + ayuHighlight: document.querySelector("[href$='ayu-highlight.css']"), + tomorrowNight: document.querySelector("[href$='tomorrow-night.css']"), + highlight: document.querySelector("[href$='highlight.css']"), + }; + + function showThemes() { + themePopup.style.display = 'block'; + themeToggleButton.setAttribute('aria-expanded', true); + themePopup.querySelector("button#" + get_theme()).focus(); + } + + function hideThemes() { + themePopup.style.display = 'none'; + themeToggleButton.setAttribute('aria-expanded', false); + themeToggleButton.focus(); + } + + function get_theme() { + var theme; + try { theme = localStorage.getItem('mdbook-theme'); } catch (e) { } + if (theme === null || theme === undefined) { + return default_theme; + } else { + return theme; + } + } + + function set_theme(theme, store = true) { + let ace_theme; + + if (theme == 'coal' || theme == 'navy') { + stylesheets.ayuHighlight.disabled = true; + stylesheets.tomorrowNight.disabled = false; + stylesheets.highlight.disabled = true; + + ace_theme = "ace/theme/tomorrow_night"; + } else if (theme == 'ayu') { + stylesheets.ayuHighlight.disabled = false; + stylesheets.tomorrowNight.disabled = true; + stylesheets.highlight.disabled = true; + ace_theme = "ace/theme/tomorrow_night"; + } else { + stylesheets.ayuHighlight.disabled = true; + stylesheets.tomorrowNight.disabled = true; + stylesheets.highlight.disabled = false; + ace_theme = "ace/theme/dawn"; + } + + setTimeout(function () { + themeColorMetaTag.content = getComputedStyle(document.body).backgroundColor; + }, 1); + + if (window.ace && window.editors) { + window.editors.forEach(function (editor) { + editor.setTheme(ace_theme); + }); + } + + var previousTheme = get_theme(); + + if (store) { + try { localStorage.setItem('mdbook-theme', theme); } catch (e) { } + } + + html.classList.remove(previousTheme); + html.classList.add(theme); + } + + // Set theme + var theme = get_theme(); + + set_theme(theme, false); + + themeToggleButton.addEventListener('click', function () { + if (themePopup.style.display === 'block') { + hideThemes(); + } else { + showThemes(); + } + }); + + themePopup.addEventListener('click', function (e) { + var theme; + if (e.target.className === "theme") { + theme = e.target.id; + } else if (e.target.parentElement.className === "theme") { + theme = e.target.parentElement.id; + } else { + return; + } + set_theme(theme); + }); + + themePopup.addEventListener('focusout', function(e) { + // e.relatedTarget is null in Safari and Firefox on macOS (see workaround below) + if (!!e.relatedTarget && !themeToggleButton.contains(e.relatedTarget) && !themePopup.contains(e.relatedTarget)) { + hideThemes(); + } + }); + + // Should not be needed, but it works around an issue on macOS & iOS: https://github.com/rust-lang/mdBook/issues/628 + document.addEventListener('click', function(e) { + if (themePopup.style.display === 'block' && !themeToggleButton.contains(e.target) && !themePopup.contains(e.target)) { + hideThemes(); + } + }); + + document.addEventListener('keydown', function (e) { + if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) { return; } + if (!themePopup.contains(e.target)) { return; } + + switch (e.key) { + case 'Escape': + e.preventDefault(); + hideThemes(); + break; + case 'ArrowUp': + e.preventDefault(); + var li = document.activeElement.parentElement; + if (li && li.previousElementSibling) { + li.previousElementSibling.querySelector('button').focus(); + } + break; + case 'ArrowDown': + e.preventDefault(); + var li = document.activeElement.parentElement; + if (li && li.nextElementSibling) { + li.nextElementSibling.querySelector('button').focus(); + } + break; + case 'Home': + e.preventDefault(); + themePopup.querySelector('li:first-child button').focus(); + break; + case 'End': + e.preventDefault(); + themePopup.querySelector('li:last-child button').focus(); + break; + } + }); +})(); + +(function sidebar() { + var html = document.querySelector("html"); + var sidebar = document.getElementById("sidebar"); + var sidebarLinks = document.querySelectorAll('#sidebar a'); + var sidebarToggleButton = document.getElementById("sidebar-toggle"); + var sidebarResizeHandle = document.getElementById("sidebar-resize-handle"); + var firstContact = null; + + function showSidebar() { + html.classList.remove('sidebar-hidden') + html.classList.add('sidebar-visible'); + Array.from(sidebarLinks).forEach(function (link) { + link.setAttribute('tabIndex', 0); + }); + sidebarToggleButton.setAttribute('aria-expanded', true); + sidebar.setAttribute('aria-hidden', false); + try { localStorage.setItem('mdbook-sidebar', 'visible'); } catch (e) { } + } + + + var sidebarAnchorToggles = document.querySelectorAll('#sidebar a.toggle'); + + function toggleSection(ev) { + ev.currentTarget.parentElement.classList.toggle('expanded'); + } + + Array.from(sidebarAnchorToggles).forEach(function (el) { + el.addEventListener('click', toggleSection); + }); + + function hideSidebar() { + html.classList.remove('sidebar-visible') + html.classList.add('sidebar-hidden'); + Array.from(sidebarLinks).forEach(function (link) { + link.setAttribute('tabIndex', -1); + }); + sidebarToggleButton.setAttribute('aria-expanded', false); + sidebar.setAttribute('aria-hidden', true); + try { localStorage.setItem('mdbook-sidebar', 'hidden'); } catch (e) { } + } + + // Toggle sidebar + sidebarToggleButton.addEventListener('click', function sidebarToggle() { + if (html.classList.contains("sidebar-hidden")) { + var current_width = parseInt( + document.documentElement.style.getPropertyValue('--sidebar-width'), 10); + if (current_width < 150) { + document.documentElement.style.setProperty('--sidebar-width', '150px'); + } + showSidebar(); + } else if (html.classList.contains("sidebar-visible")) { + hideSidebar(); + } else { + if (getComputedStyle(sidebar)['transform'] === 'none') { + hideSidebar(); + } else { + showSidebar(); + } + } + }); + + sidebarResizeHandle.addEventListener('mousedown', initResize, false); + + function initResize(e) { + window.addEventListener('mousemove', resize, false); + window.addEventListener('mouseup', stopResize, false); + html.classList.add('sidebar-resizing'); + } + function resize(e) { + var pos = (e.clientX - sidebar.offsetLeft); + if (pos < 20) { + hideSidebar(); + } else { + if (html.classList.contains("sidebar-hidden")) { + showSidebar(); + } + pos = Math.min(pos, window.innerWidth - 100); + document.documentElement.style.setProperty('--sidebar-width', pos + 'px'); + } + } + //on mouseup remove windows functions mousemove & mouseup + function stopResize(e) { + html.classList.remove('sidebar-resizing'); + window.removeEventListener('mousemove', resize, false); + window.removeEventListener('mouseup', stopResize, false); + } + + document.addEventListener('touchstart', function (e) { + firstContact = { + x: e.touches[0].clientX, + time: Date.now() + }; + }, { passive: true }); + + document.addEventListener('touchmove', function (e) { + if (!firstContact) + return; + + var curX = e.touches[0].clientX; + var xDiff = curX - firstContact.x, + tDiff = Date.now() - firstContact.time; + + if (tDiff < 250 && Math.abs(xDiff) >= 150) { + if (xDiff >= 0 && firstContact.x < Math.min(document.body.clientWidth * 0.25, 300)) + showSidebar(); + else if (xDiff < 0 && curX < 300) + hideSidebar(); + + firstContact = null; + } + }, { passive: true }); + + // Scroll sidebar to current active section + var activeSection = document.getElementById("sidebar").querySelector(".active"); + if (activeSection) { + // https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView + activeSection.scrollIntoView({ block: 'center' }); + } +})(); + +(function chapterNavigation() { + document.addEventListener('keydown', function (e) { + if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) { return; } + if (window.search && window.search.hasFocus()) { return; } + + switch (e.key) { + case 'ArrowRight': + e.preventDefault(); + var nextButton = document.querySelector('.nav-chapters.next'); + if (nextButton) { + window.location.href = nextButton.href; + } + break; + case 'ArrowLeft': + e.preventDefault(); + var previousButton = document.querySelector('.nav-chapters.previous'); + if (previousButton) { + window.location.href = previousButton.href; + } + break; + } + }); +})(); + +(function clipboard() { + var clipButtons = document.querySelectorAll('.clip-button'); + + function hideTooltip(elem) { + elem.firstChild.innerText = ""; + elem.className = 'fa fa-copy clip-button'; + } + + function showTooltip(elem, msg) { + elem.firstChild.innerText = msg; + elem.className = 'fa fa-copy tooltipped'; + } + + var clipboardSnippets = new ClipboardJS('.clip-button', { + text: function (trigger) { + hideTooltip(trigger); + let playground = trigger.closest("pre"); + return playground_text(playground); + } + }); + + Array.from(clipButtons).forEach(function (clipButton) { + clipButton.addEventListener('mouseout', function (e) { + hideTooltip(e.currentTarget); + }); + }); + + clipboardSnippets.on('success', function (e) { + e.clearSelection(); + showTooltip(e.trigger, "Copied!"); + }); + + clipboardSnippets.on('error', function (e) { + showTooltip(e.trigger, "Clipboard error!"); + }); +})(); + +(function scrollToTop () { + var menuTitle = document.querySelector('.menu-title'); + + menuTitle.addEventListener('click', function () { + document.scrollingElement.scrollTo({ top: 0, behavior: 'smooth' }); + }); +})(); + +(function controllMenu() { + var menu = document.getElementById('menu-bar'); + + (function controllPosition() { + var scrollTop = document.scrollingElement.scrollTop; + var prevScrollTop = scrollTop; + var minMenuY = -menu.clientHeight - 50; + // When the script loads, the page can be at any scroll (e.g. if you reforesh it). + menu.style.top = scrollTop + 'px'; + // Same as parseInt(menu.style.top.slice(0, -2), but faster + var topCache = menu.style.top.slice(0, -2); + menu.classList.remove('sticky'); + var stickyCache = false; // Same as menu.classList.contains('sticky'), but faster + document.addEventListener('scroll', function () { + scrollTop = Math.max(document.scrollingElement.scrollTop, 0); + // `null` means that it doesn't need to be updated + var nextSticky = null; + var nextTop = null; + var scrollDown = scrollTop > prevScrollTop; + var menuPosAbsoluteY = topCache - scrollTop; + if (scrollDown) { + nextSticky = false; + if (menuPosAbsoluteY > 0) { + nextTop = prevScrollTop; + } + } else { + if (menuPosAbsoluteY > 0) { + nextSticky = true; + } else if (menuPosAbsoluteY < minMenuY) { + nextTop = prevScrollTop + minMenuY; + } + } + if (nextSticky === true && stickyCache === false) { + menu.classList.add('sticky'); + stickyCache = true; + } else if (nextSticky === false && stickyCache === true) { + menu.classList.remove('sticky'); + stickyCache = false; + } + if (nextTop !== null) { + menu.style.top = nextTop + 'px'; + topCache = nextTop; + } + prevScrollTop = scrollTop; + }, { passive: true }); + })(); + (function controllBorder() { + menu.classList.remove('bordered'); + document.addEventListener('scroll', function () { + if (menu.offsetTop === 0) { + menu.classList.remove('bordered'); + } else { + menu.classList.add('bordered'); + } + }, { passive: true }); + })(); +})(); diff --git a/clipboard.min.js b/clipboard.min.js new file mode 100644 index 0000000..02c549e --- /dev/null +++ b/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.4 + * https://zenorocha.github.io/clipboard.js + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return function(n){var o={};function r(t){if(o[t])return o[t].exports;var e=o[t]={i:t,l:!1,exports:{}};return n[t].call(e.exports,e,e.exports,r),e.l=!0,e.exports}return r.m=n,r.c=o,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=0)}([function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function o(t,e){for(var n=0;n + + + + + Cross contract communication - CosmWasm book + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+
+

Cross contract communication

+

We already covered creating a single isolating contract. However, SOLID principles tell us that +entities should be as small as reasonably possible - such as they have a +single responsibility. Entities +we are focusing on now are smart contracts, and we want to make sure that every smart contract has +a sole responsibility it takes care of.

+

But we also want to build complex systems using smart contracts. To do so, we need to be able to +communicate between them. We already talked about what such communication looks like using an actor +model. Now it's time to use this knowledge in practice.

+

In this chapter, we will improve the previously created administration group model to solve the problem +I brought - the possibility of adding own multiple addresses by a single admin to take bigger donation parts.

+

We would also give admins some work to do besides being admins.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + diff --git a/cross-contract/design.html b/cross-contract/design.html new file mode 100644 index 0000000..38db4c4 --- /dev/null +++ b/cross-contract/design.html @@ -0,0 +1,215 @@ + + + + + + Design - CosmWasm book + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+
+

Design

+

This time we will start discussing the design of our system a bit. Building multi-contract systems tend to +be a bit more complicated than just isolated contracts, so I want to give you some anchor on what we are +building in this chapter. If you feel lost with a design, don't worry - it will get clear while implementing +contracts. For now, go through it to get a general idea.

+

First, let's think about the problem we want to solve. Our admins are a vector of addresses. Anyone already +an admin can add anyone he wants to the list. But this "anyone" can be a second instance of the same admin +account, so he counts twice for donations!

+

This issue is relatively simple to fix, but there is another problem - as we already learned, the admin could +create a smart contract which he and only he can withdraw tokens from and register as another admin in the +group! Instantiating it multiple times, he can achieve his goal even if we prevent adding the same address +multiple times. There would be many distinct addresses that the same person owns.

+

It looks like an unpleasant situation, but there are ways to manage it. The one we would implement is voting. +Instead of being able to add another admin to the list, admins would be allowed to propose their colleagues +as new admins. It would start a voting process - everyone who was an admin at the time of the proposal creation +would be able to support it. If more than half admins would support the new candidate, he would immediately +become an admin.

+

It is not the most convoluted voting process, but it would be enough for our purposes.

+

Voting process

+

To achieve this goal, we would create two smart contracts. First, one would be reused contract from the +Basics chapter - it would be an admin contract. Additionally, we would add a voting contract. +It would be responsible for managing a single voting process. It would be instantiated by an admin contract +whenever an admin wants to add his friend to a list. Here is a diagram of the contracts relationship:

+

+

Here is adding an admin flowchart - assuming there are 5 admins on the contract already, but 2 of them did nothing:

+

+

I already put some hints about contracts implementation, but I will not go into them yet.

+

Messages forwarding

+

There is one other thing we want to add - some way to give admins work. The admin contract would behave like +a proxy to call another contract. That means that some other external contract would just set our admin instance +as a specific address that can perform executions on it, and admins would perform actions this way. The external +contract would see execution as the admin contract would do it. Here is an updated contracts diagram:

+

+

And calling external contract flowchart:

+

+

Note that the msg on execute admin contract message is some arbitrary message just forwarded +to the external contract. It would be a base64-encoded message in the real world, but it is +just an implementation detail.

+

Ultimately, we will create a simple example of an external contract to understand how to use such a pattern.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + diff --git a/cross-contract/fixing-admin.html b/cross-contract/fixing-admin.html new file mode 100644 index 0000000..04db764 --- /dev/null +++ b/cross-contract/fixing-admin.html @@ -0,0 +1,311 @@ + + + + + + Fixing admin contract - CosmWasm book + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+
+

Fixing admin contract

+

Now that we know what we want to achieve, we can start by aligning the +contract we already have to become an admin contract. It is primarily +fine at this point, but we want to do a cleanup.

+

Cleaning up queries

+

The first thing to do is to get rid of the Greet query - it was good as a +starter query example, but it has no practical purpose and only generates noise.

+

We want to remove the unnecessary variant from the query enum:

+

+#![allow(unused)]
+fn main() {
+use cosmwasm_schema::{cw_serde, QueryResponses};
+use cosmwasm_std::Addr;
+
+#[cw_serde]
+pub struct InstantiateMsg {
+    pub admins: Vec<String>,
+    pub donation_denom: String,
+}
+
+#[cw_serde]
+pub enum ExecuteMsg {
+    Leave {},
+    Donate {},
+}
+
+#[cw_serde]
+pub struct AdminsListResp {
+    pub admins: Vec<Addr>,
+}
+
+#[cw_serde]
+#[derive(QueryResponses)]
+pub enum QueryMsg {
+    #[returns(AdminsListResp)]
+    AdminsList {},
+}
+}
+
+

Then we also remove the invalid path in the query dispatcher:

+

+#![allow(unused)]
+fn main() {
+pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        AdminsList {} => to_binary(&query::admins_list(deps)?),
+    }
+}
+}
+
+

Finally, we remove the irrelevant handler from the contract::query module. +We also need to make sure all references to it are gone (eg. if there are any +in the tests).

+

Generating the library output

+

At the very beginning of the book, we set the crate-type in Cargo.toml as +"cdylib". It was required to generate the wasm output, but it comes with a +drawback - the dynamic libraries, as this cannot be used as dependencies in +other crates. It was not a problem before, but in practice we often want to +depend contract on others to get access to some types of them - for example, +defined messages.

+

Good for us. It is easy to fix. You might notice that the crate-type is an array, +not a single string. The reason for that is that our project can emit several +targets - in particular, we can add there the default "rlib" crate type to +make it generate a "rust library" output - which is what we need to use as a +dependency. Let's update our Cargo.toml:

+
[package]
+name = "admin"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib", "rlib"]
+# 
+# [features]
+# library = []
+# 
+# [dependencies]
+# cosmwasm-std = { version = "1.1.4", features = ["staking"] }
+# serde = { version = "1.0.103", default-features = false, features = ["derive"] }
+# cw-storage-plus = "0.15.1"
+# thiserror = "1"
+# schemars = "0.8.1"
+# cw-utils = "0.15.1"
+# cosmwasm-schema = "1.1.4"
+# 
+# [dev-dependencies]
+# cw-multi-test = "0.15.1"
+
+

Also, note I changed the contract name - "contract" is not very descriptive, so +I updated it to "admin".

+

Project structure

+

Last but not least - we want to better structure our project. So far, we have +only one contract, so we just worked on it as a whole project. Now we want some +directory tree that reflects relations between contracts we create.

+

First, create a directory for the project. Then we want to create a "contracts" +subdirectory in it. It is not technically required from Rust's POV, but there +are tools in our environment, like the workspace optimizer, which would assume +it is where it should look for a contract. It is a common pattern you will see +in CosmWasm contracts repos.

+

Then we copy the whole project directory from the previous chapter into the +contracts, renaming it to admin.

+

Finally, we want to couple all our projects (for now, it is just one, but we know +there will be more there). To do so, we create the workspace-level Cargo.toml +file in the top-level project directory:

+
[workspace]
+members = ["contracts/*"]
+resolver = "2"
+
+

This Cargo.toml differs slightly from the typical project-level one - it +defines the workspace. The most important field here is the members - it +defines projects being part of the workspace.

+

The other field is the resolver. It is something to remember to add - it +instructs cargo to use version 2 of the dependency resolver. This has been the +default for non-workspaces since Rust 2021, but because of compatibility reasons, +the default couldn't be changed for workspaces - but it is advised to add it to +every single newly created workspace.

+

The last field which might be useful for workspaces is exclude - it allows to +create projects in the workspace directory tree, which is not a part of this +workspace - we will not use it, but it is good to know about it.

+

Now just for clarity, let's see the top-level directory structure:

+
.
+├── Cargo.lock
+├── Cargo.toml
+├── contracts
+│  └── admin
+└── target
+   ├── CACHEDIR.TAG
+   └── debug
+
+

You can see the target directory and Cargo.lock files existing in the tree - it is +because I already built and ran tests for the admin contract - in Rust workspaces, +`cargo`` knows to build everything in the top level, even if it would be built from +the inner directory.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + diff --git a/cross-contract/map-storage.html b/cross-contract/map-storage.html new file mode 100644 index 0000000..a8e7783 --- /dev/null +++ b/cross-contract/map-storage.html @@ -0,0 +1,500 @@ + + + + + + Map storage - CosmWasm book + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+
+

Map storage

+

There is one thing to be immediately improved in the admin contract. Let's +check the contract state:

+

+#![allow(unused)]
+fn main() {
+use cosmwasm_std::Addr;
+use cw_storage_plus::Item;
+
+pub const ADMINS: Item<Vec<Addr>> = Item::new("admins");
+pub const DONATION_DENOM: Item<String> = Item::new("donation_denom");
+}
+
+

Note that we keep our admin list as a single vector. However, in the whole +contract, in most cases, we access only a single element of this vector.

+

This is not ideal, as now, whenever we want to access the single admin entry, +we have first to deserialize the list containing all of them and then iterate +over them until we find the interesting one. This might consume a serious +amount of gas and is completely unnecessary overhead - we can avoid that using +the Map +storage accessor.

+

The Map storage

+

First, let's define a map - in this context, it would be a set of keys with values +assigned to them, just like a HashMap in Rust or dictionaries in many languages. +We define it as similar to an Item, but this time we need two types - the key type +and the value type:

+

+#![allow(unused)]
+fn main() {
+use cw_storage_plus::Map;
+
+pub const STR_TO_INT_MAP: Map<String, u64> = Map::new("str_to_int_map");
+}
+
+

Then to store some items on the Map, +we use a +save +method - same as for an Item:

+

+#![allow(unused)]
+fn main() {
+STR_TO_INT_MAP.save(deps.storage, "ten".to_owned(), 10);
+STR_TO_INT_MAP.save(deps.storage, "one".to_owned(), 1);
+}
+
+

Accessing entries in the map is also as easy as reading an item:

+

+#![allow(unused)]
+fn main() {
+let ten = STR_TO_INT_MAP.load(deps.storage, "ten".to_owned())?;
+assert_eq!(ten, 10);
+
+let two = STR_TO_INT_MAP.may_load(deps.storage, "two".to_owned())?;
+assert_eq!(two, None);
+}
+
+

Obviously, if the element is missing in the map, the +load +function will result in an error - just like for an item. On the other hand - +may_load +returns a Some variant when element exits.

+

Another very useful accessor that is specific to the map is the +has +function, which checks for the existence of the key in the map:

+

+#![allow(unused)]
+fn main() {
+let contains = STR_TO_INT_MAP.has(deps.storage, "three".to_owned())?;
+assert!(!contains);
+}
+
+

Finally, we can iterate over elements of the maps - either its keys or key-value +pairs:

+

+#![allow(unused)]
+fn main() {
+use cosmwasm_std::Order;
+
+for k in STR_TO_INT_MAP.keys(deps.storage, None, None, Order::Ascending) {
+    let _addr = deps.api.addr_validate(k?);
+}
+
+for item in STR_TO_INT_MAP.range(deps.storage, None, None, Order::Ascending) {
+    let (_key, _value) = item?;
+}
+}
+
+

First, you might wonder about extra values passed to +keys +and +range - +those are in order: lower and higher bounds of iterated elements, and the order +elements should be traversed.

+

While working with typical Rust iterators, you would probably first create an +iterator over all the elements and then somehow skip those you are not +interested in. After that, you will stop after the last interesting element.

+

It would more often than not require accessing elements you filter out, and +this is the problem - it requires reading the element from the storage. And +reading it from the storage is the expensive part of working with data, which +we try to avoid as much as possible. One way to do it is to instruct the Map +where to start and stop deserializing elements from storage so it never reaches +those outside the range.

+

Another critical thing to notice is that the iterator returned by both keys and +range functions are not iterators over elements - they are iterators over Results. +It is a thing because, as it is rare, it might be that item is supposed to exist, +but there is some error while reading from storage - maybe the stored value is +serialized in a way we didn't expect, and deserialization fails. This is actually +a real thing that happened in one of the contracts I worked on in the past - we +changed the value type of the Map, and then forgot to migrate it, which caused +all sorts of problems.

+

Maps as sets

+

So I imagine you can call me crazy right now - why do I spam about a Map, while +we are working with vector? It is clear that those two represent two distinct +things! Or do they?

+

Let's reconsider what we keep in the ADMINS vector - we have a list of objects +which we expect to be unique, which is a definition of a mathematical set. So +now let me bring back my initial definition of the map:

+
+

First, let's define a map - in this context, it would be a set of keys with +values assigned to them, just like a HashMap in Rust or dictionaries in many languages.

+
+

I purposely used the word "set" here - the map has the set built into it. It is +a generalization of a set or reversing the logic - the set is a particular case +of a map. If you imagine a set that map every single key to the same value, then +the values become irrelevant, and such a map becomes a set semantically.

+

How can you make a map mapping all the keys to the same value? We pick a type +with a single value. Typically in Rust, it would be a unit type (()), but in +CosmWasm, we tend to use the +Empty +type from CW standard crate:

+

+#![allow(unused)]
+fn main() {
+use cosmwasm_std::{Addr, Empty};
+use cw_storage_plus::Map;
+
+pub const ADMINS: Map<Addr, Empty> = Map::new("admins");
+}
+
+

We now need to fix the usage of the map in our contract. Let's start with contract +instantiation:

+

+#![allow(unused)]
+fn main() {
+use crate::msg::InstantiateMsg;
+use crate::state::{ADMINS, DONATION_DENOM};
+use cosmwasm_std::{
+    DepsMut, Empty, Env, MessageInfo, Response, StdResult,
+};
+
+pub fn instantiate(
+    deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    for addr in msg.admins {
+        let admin = deps.api.addr_validate(&addr)?;
+        ADMINS.save(deps.storage, admin, &Empty {})?;
+    }
+    DONATION_DENOM.save(deps.storage, &msg.donation_denom)?;
+
+    Ok(Response::new())
+}
+}
+
+

It didn't simplify much, but we no longer need to collect our address. Then +let's move to the leaving logic:

+

+#![allow(unused)]
+fn main() {
+use crate::state::ADMINS;
+use cosmwasm_std::{DepsMut, MessageInfo};
+
+pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult<Response> {
+    ADMINS.remove(deps.storage, info.sender.clone());
+
+    let resp = Response::new()
+        .add_attribute("action", "leave")
+        .add_attribute("sender", info.sender.as_str());
+
+    Ok(resp)
+}
+}
+
+

Here we see a difference - we don't need to load a whole vector. We remove a +single entry with the +remove +function.

+

What I didn't emphasize before, and what is relevant, is that Map stores every +single key as a distinct item. This way, accessing a single element will be +cheaper than using a vector.

+

However, this has its downside - accessing all the elements is more +gas-consuming using Map! In general, we tend to avoid such situations - the +linear complexity of the contract might lead to very expensive executions +(gas-wise) and potential vulnerabilities - if the user finds a way to create +many dummy elements in such a vector, he may make the execution cost exceeding +any gas limit.

+

Unfortunately, we have such an iteration in our contract - the distribution flow +becomes as follows:

+

+#![allow(unused)]
+fn main() {
+use crate::error::ContractError;
+use crate::state::{ADMINS, DONATION_DENOM};
+use cosmwasm_std::{
+    coins, BankMsg,DepsMut, MessageInfo, Order, Response
+};
+
+pub fn donate(deps: DepsMut, info: MessageInfo) -> Result<Response, ContractError> {
+    let denom = DONATION_DENOM.load(deps.storage)?;
+    let admins: Result<Vec<_>, _> = ADMINS
+        .keys(deps.storage, None, None, Order::Ascending)
+        .collect();
+    let admins = admins?;
+
+    let donation = cw_utils::must_pay(&info, &denom)?.u128();
+
+    let donation_per_admin = donation / (admins.len() as u128);
+
+    let messages = admins.into_iter().map(|admin| BankMsg::Send {
+        to_address: admin.to_string(),
+        amount: coins(donation_per_admin, &denom),
+    });
+
+    let resp = Response::new()
+        .add_messages(messages)
+        .add_attribute("action", "donate")
+        .add_attribute("amount", donation.to_string())
+        .add_attribute("per_admin", donation_per_admin.to_string());
+
+    Ok(resp)
+}
+}
+
+

If I had to write a contract like this, and this donate would be a critical, +often called flow, I would advocate for going for an Item<Vec<Addr>> here. +Fortunately, it is not the case - the distribution does not have to be linear in +complexity! It might sound a bit crazy, as we have to iterate over all receivers +to distribute funds, but this is not true - there is a pretty nice way to do so +in constant time, which I will describe later in the book. For now, we will +leave it as it is, acknowledging the flaw of the contract, which we will fix later.

+

The final function to fix is the admins_list query handler:

+

+#![allow(unused)]
+fn main() {
+use crate::state::ADMINS;
+use cosmwasm_std::{Deps, Order, StdResult};
+
+pub fn admins_list(deps: Deps) -> StdResult<AdminsListResp> {
+    let admins: Result<Vec<_>, _> = ADMINS
+        .keys(deps.storage, None, None, Order::Ascending)
+        .collect();
+    let admins = admins?;
+    let resp = AdminsListResp { admins };
+    Ok(resp)
+}
+}
+
+

Here we also have an issue with linear complexity, but it is far less of a problem.

+

First, queries are often purposed to be called on local nodes, with no gas cost - +we can query contracts as much as we want.

+

And then, even if we have some limit on execution time/cost, there is no reason to +query all the items every single time! We will fix this function later, adding +pagination - to limit the execution time/cost of the query caller would be able to +ask for a limited amount of items starting from the given one. Knowing this chapter, +you can probably figure implementation of it right now, but I will show the common +way we do that when I go through common CosmWasm practices.

+

Reference keys

+

There is one subtlety to improve in our map usage.

+

The thing is that right now, we index the map with the owned Addr key. That forces +us to clone it if we want to reuse the key (particularly in the leave implementation). +This is not a huge cost, but we can avoid it - we can define the key of the map +to be a reference:

+

+#![allow(unused)]
+fn main() {
+use cosmwasm_std::{Addr, Empty};
+use cw_storage_plus::Map;
+
+pub const ADMINS: Map<&Addr, Empty> = Map::new("admins");
+pub const DONATION_DENOM: Item<String> = Item::new("donation_denom");
+}
+
+

Finally, we need to fix the usages of the map in two places:

+

+#![allow(unused)]
+fn main() {
+use crate::state::{ADMINS, DONATION_DENOM};
+use cosmwasm_std::{
+    DepsMut, Empty, Env, MessageInfo, Response, StdResult,
+};
+
+pub fn instantiate(
+    deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    for addr in msg.admins {
+        let admin = deps.api.addr_validate(&addr)?;
+        ADMINS.save(deps.storage, &admin, &Empty {})?;
+    }
+
+    // ...
+
+   DONATION_DENOM.save(deps.storage, &msg.donation_denom)?;
+
+   Ok(Response::new())
+}
+
+pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult<Response> {
+    ADMINS.remove(deps.storage, &info.sender);
+
+    // ...
+
+   let resp = Response::new()
+       .add_attribute("action", "leave")
+       .add_attribute("sender", info.sender.as_str());
+
+   Ok(resp)
+}
+}
+
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + diff --git a/cross-contract/working-with-time.html b/cross-contract/working-with-time.html new file mode 100644 index 0000000..eba00b5 --- /dev/null +++ b/cross-contract/working-with-time.html @@ -0,0 +1,324 @@ + + + + + + Working with time - CosmWasm book + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+
+

Working with time

+

The concept of time in the blockchain is tricky - as in +every distributed system, it is not easy to synchronize the +clocks of all the nodes.

+

However, there is the notion of a time that is even +monotonic - which means that it should never go "backward" +between executions. Also, what is important is - time is +always unique throughout the whole transaction - and even +the entire block, which is built of multiple transactions.

+

The time is encoded in the +Env +type in its +block +field, which looks like this:

+

+#![allow(unused)]
+fn main() {
+pub struct BlockInfo {
+    pub height: u64,
+    pub time: Timestamp,
+    pub chain_id: String,
+}
+}
+
+

You can see the time field, which is the timestamp of the +processed block. The height field is also worth +mentioning - it contains a sequence number of the processed +block. It is sometimes more useful than time, as it is +guaranteed that the height field is guaranteed to increase +between blocks, while two blocks may be executed with the +same time (even though it is rather not probable).

+

Also, many transactions might be executed in a single block. +That means that if we need a unique id for the execution of +a particular message, we should look for something more. +This thing is a +transaction +field of the Env type:

+

+#![allow(unused)]
+fn main() {
+pub struct TransactionInfo {
+    pub index: u32,
+}
+}
+
+

The index here contains a unique index of the transaction +in the block. That means that to get the unique identifier +of a transaction through the whole block, we can use the +(height, transaction_index) pair.

+

Join time

+

We want to use the time in our system to keep track of the +join time of admins. We don't yet add new members to the +group, but we can already set the join time of initial +admins. Let's start updating our state:

+

+#![allow(unused)]
+fn main() {
+use cosmwasm_std::{Addr, Timestamp};
+use cw_storage_plus::Map;
+use cw_storage_plus::Item;
+
+pub const ADMINS: Map<&Addr, Timestamp> = Map::new("admins");
+pub const DONATION_DENOM: Item<String> = Item::new("donation_denom");
+}
+
+

As you can see, our admins set became a proper map - we will +assign the join time to every admin.

+

Now we need to update how we initialize a map - we stored the Empty data previously, but it nevermore matches our value type. Let's check an updated instantiation function:

+

You might argue to create a separate structure for the value +of this map, so in the future, if we would need to add +something there, but in my opinion, it would be premature - +we can also change the entire value type in the future, as +it would be the same breaking change.

+

Now we need to update how we initialize a map - we stored +the Empty data previously, but it nevermore matches our +value type. Let's check an updated instantiation function:

+

+#![allow(unused)]
+fn main() {
+use crate::state::{ADMINS, DONATION_DENOM};
+use cosmwasm_std::{
+    DepsMut, Env, MessageInfo, Response, StdResult,
+};
+
+pub fn instantiate(
+    deps: DepsMut,
+    env: Env,
+    _info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    for addr in msg.admins {
+        let admin = deps.api.addr_validate(&addr)?;
+        ADMINS.save(deps.storage, &admin, &env.block.time)?;
+    }
+    DONATION_DENOM.save(deps.storage, &msg.donation_denom)?;
+
+    Ok(Response::new())
+}
+}
+
+

Instead of storing &Empty {} as an admin value, we store +the join time, which we read from &env.block.time. Also, +note that I removed the underscore from the name of the +env block - it was there only to ensure the Rust compiler +the variable is purposely unused and not some kind of a bug.

+

Finally, remember to remove any obsolete Empty imports +through the project - the compiler should help you point out +unused imports.

+

Query and tests

+

The last thing to add regarding join time is the new query +asking for the join time of a particular admin. Everything +you need to do that was already discussed, I'll leave it for +you as an exercise. The query variant should look like:

+

+#![allow(unused)]
+fn main() {
+#[returns(JoinTimeResp)]
+JoinTime { admin: String },
+}
+
+

And the example response type:

+

+#![allow(unused)]
+fn main() {
+#[cw_serde]
+pub struct JoinTimeResp {
+    pub joined: Timestamp,
+}
+}
+
+

You may question that in response type, I suggest always returning a joined +value, but what to do when no such admin is added? Well, in such a case, I +would rely on the fact that load function returns a descriptive error of +missing value in storage - however, feel free to define your own error for such +a case or even make the joined field optional, and be returned if requested +admin exists.

+

Finally, there would be a good idea to make a test for new functionality - call +a new query right after instantiation to verify initial admins has proper join +time (possibly by extending the existing instantiation test).

+

One thing you might need help with in tests might be how to get the time of +execution. Using any OS-time would be doomed to fail - instead, you can call +the +block_info +function to reach the +BlockInfo +structure containing the block state at a particular moment in the app - calling +it just before instantiation would make you sure you are working with the same state +which would be simulated on the call.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + diff --git a/css/chrome.css b/css/chrome.css new file mode 100644 index 0000000..21c08b9 --- /dev/null +++ b/css/chrome.css @@ -0,0 +1,495 @@ +/* CSS for UI elements (a.k.a. chrome) */ + +@import 'variables.css'; + +::-webkit-scrollbar { + background: var(--bg); +} +::-webkit-scrollbar-thumb { + background: var(--scrollbar); +} +html { + scrollbar-color: var(--scrollbar) var(--bg); +} +#searchresults a, +.content a:link, +a:visited, +a > .hljs { + color: var(--links); +} + +/* Menu Bar */ + +#menu-bar, +#menu-bar-hover-placeholder { + z-index: 101; + margin: auto calc(0px - var(--page-padding)); +} +#menu-bar { + position: relative; + display: flex; + flex-wrap: wrap; + background-color: var(--bg); + border-bottom-color: var(--bg); + border-bottom-width: 1px; + border-bottom-style: solid; +} +#menu-bar.sticky, +.js #menu-bar-hover-placeholder:hover + #menu-bar, +.js #menu-bar:hover, +.js.sidebar-visible #menu-bar { + position: -webkit-sticky; + position: sticky; + top: 0 !important; +} +#menu-bar-hover-placeholder { + position: sticky; + position: -webkit-sticky; + top: 0; + height: var(--menu-bar-height); +} +#menu-bar.bordered { + border-bottom-color: var(--table-border-color); +} +#menu-bar i, #menu-bar .icon-button { + position: relative; + padding: 0 8px; + z-index: 10; + line-height: var(--menu-bar-height); + cursor: pointer; + transition: color 0.5s; +} +@media only screen and (max-width: 420px) { + #menu-bar i, #menu-bar .icon-button { + padding: 0 5px; + } +} + +.icon-button { + border: none; + background: none; + padding: 0; + color: inherit; +} +.icon-button i { + margin: 0; +} + +.right-buttons { + margin: 0 15px; +} +.right-buttons a { + text-decoration: none; +} + +.left-buttons { + display: flex; + margin: 0 5px; +} +.no-js .left-buttons { + display: none; +} + +.menu-title { + display: inline-block; + font-weight: 200; + font-size: 2.4rem; + line-height: var(--menu-bar-height); + text-align: center; + margin: 0; + flex: 1; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.js .menu-title { + cursor: pointer; +} + +.menu-bar, +.menu-bar:visited, +.nav-chapters, +.nav-chapters:visited, +.mobile-nav-chapters, +.mobile-nav-chapters:visited, +.menu-bar .icon-button, +.menu-bar a i { + color: var(--icons); +} + +.menu-bar i:hover, +.menu-bar .icon-button:hover, +.nav-chapters:hover, +.mobile-nav-chapters i:hover { + color: var(--icons-hover); +} + +/* Nav Icons */ + +.nav-chapters { + font-size: 2.5em; + text-align: center; + text-decoration: none; + + position: fixed; + top: 0; + bottom: 0; + margin: 0; + max-width: 150px; + min-width: 90px; + + display: flex; + justify-content: center; + align-content: center; + flex-direction: column; + + transition: color 0.5s, background-color 0.5s; +} + +.nav-chapters:hover { + text-decoration: none; + background-color: var(--theme-hover); + transition: background-color 0.15s, color 0.15s; +} + +.nav-wrapper { + margin-top: 50px; + display: none; +} + +.mobile-nav-chapters { + font-size: 2.5em; + text-align: center; + text-decoration: none; + width: 90px; + border-radius: 5px; + background-color: var(--sidebar-bg); +} + +.previous { + float: left; +} + +.next { + float: right; + right: var(--page-padding); +} + +@media only screen and (max-width: 1080px) { + .nav-wide-wrapper { display: none; } + .nav-wrapper { display: block; } +} + +@media only screen and (max-width: 1380px) { + .sidebar-visible .nav-wide-wrapper { display: none; } + .sidebar-visible .nav-wrapper { display: block; } +} + +/* Inline code */ + +:not(pre) > .hljs { + display: inline; + padding: 0.1em 0.3em; + border-radius: 3px; +} + +:not(pre):not(a) > .hljs { + color: var(--inline-code-color); + overflow-x: initial; +} + +a:hover > .hljs { + text-decoration: underline; +} + +pre { + position: relative; +} +pre > .buttons { + position: absolute; + z-index: 100; + right: 5px; + top: 5px; + + color: var(--sidebar-fg); + cursor: pointer; +} +pre > .buttons :hover { + color: var(--sidebar-active); +} +pre > .buttons i { + margin-left: 8px; +} +pre > .buttons button { + color: inherit; + background: transparent; + border: none; + cursor: inherit; +} +pre > .result { + margin-top: 10px; +} + +/* Search */ + +#searchresults a { + text-decoration: none; +} + +mark { + border-radius: 2px; + padding: 0 3px 1px 3px; + margin: 0 -3px -1px -3px; + background-color: var(--search-mark-bg); + transition: background-color 300ms linear; + cursor: pointer; +} + +mark.fade-out { + background-color: rgba(0,0,0,0) !important; + cursor: auto; +} + +.searchbar-outer { + margin-left: auto; + margin-right: auto; + max-width: var(--content-max-width); +} + +#searchbar { + width: 100%; + margin: 5px auto 0px auto; + padding: 10px 16px; + transition: box-shadow 300ms ease-in-out; + border: 1px solid var(--searchbar-border-color); + border-radius: 3px; + background-color: var(--searchbar-bg); + color: var(--searchbar-fg); +} +#searchbar:focus, +#searchbar.active { + box-shadow: 0 0 3px var(--searchbar-shadow-color); +} + +.searchresults-header { + font-weight: bold; + font-size: 1em; + padding: 18px 0 0 5px; + color: var(--searchresults-header-fg); +} + +.searchresults-outer { + margin-left: auto; + margin-right: auto; + max-width: var(--content-max-width); + border-bottom: 1px dashed var(--searchresults-border-color); +} + +ul#searchresults { + list-style: none; + padding-left: 20px; +} +ul#searchresults li { + margin: 10px 0px; + padding: 2px; + border-radius: 2px; +} +ul#searchresults li.focus { + background-color: var(--searchresults-li-bg); +} +ul#searchresults span.teaser { + display: block; + clear: both; + margin: 5px 0 0 20px; + font-size: 0.8em; +} +ul#searchresults span.teaser em { + font-weight: bold; + font-style: normal; +} + +/* Sidebar */ + +.sidebar { + position: fixed; + left: 0; + top: 0; + bottom: 0; + width: var(--sidebar-width); + font-size: 0.875em; + box-sizing: border-box; + -webkit-overflow-scrolling: touch; + overscroll-behavior-y: contain; + background-color: var(--sidebar-bg); + color: var(--sidebar-fg); +} +.sidebar-resizing { + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; +} +.js:not(.sidebar-resizing) .sidebar { + transition: transform 0.3s; /* Animation: slide away */ +} +.sidebar code { + line-height: 2em; +} +.sidebar .sidebar-scrollbox { + overflow-y: auto; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + padding: 10px 10px; +} +.sidebar .sidebar-resize-handle { + position: absolute; + cursor: col-resize; + width: 0; + right: 0; + top: 0; + bottom: 0; +} +.js .sidebar .sidebar-resize-handle { + cursor: col-resize; + width: 5px; +} +.sidebar-hidden .sidebar { + transform: translateX(calc(0px - var(--sidebar-width))); +} +.sidebar::-webkit-scrollbar { + background: var(--sidebar-bg); +} +.sidebar::-webkit-scrollbar-thumb { + background: var(--scrollbar); +} + +.sidebar-visible .page-wrapper { + transform: translateX(var(--sidebar-width)); +} +@media only screen and (min-width: 620px) { + .sidebar-visible .page-wrapper { + transform: none; + margin-left: var(--sidebar-width); + } +} + +.chapter { + list-style: none outside none; + padding-left: 0; + line-height: 2.2em; +} + +.chapter ol { + width: 100%; +} + +.chapter li { + display: flex; + color: var(--sidebar-non-existant); +} +.chapter li a { + display: block; + padding: 0; + text-decoration: none; + color: var(--sidebar-fg); +} + +.chapter li a:hover { + color: var(--sidebar-active); +} + +.chapter li a.active { + color: var(--sidebar-active); +} + +.chapter li > a.toggle { + cursor: pointer; + display: block; + margin-left: auto; + padding: 0 10px; + user-select: none; + opacity: 0.68; +} + +.chapter li > a.toggle div { + transition: transform 0.5s; +} + +/* collapse the section */ +.chapter li:not(.expanded) + li > ol { + display: none; +} + +.chapter li.chapter-item { + line-height: 1.5em; + margin-top: 0.6em; +} + +.chapter li.expanded > a.toggle div { + transform: rotate(90deg); +} + +.spacer { + width: 100%; + height: 3px; + margin: 5px 0px; +} +.chapter .spacer { + background-color: var(--sidebar-spacer); +} + +@media (-moz-touch-enabled: 1), (pointer: coarse) { + .chapter li a { padding: 5px 0; } + .spacer { margin: 10px 0; } +} + +.section { + list-style: none outside none; + padding-left: 20px; + line-height: 1.9em; +} + +/* Theme Menu Popup */ + +.theme-popup { + position: absolute; + left: 10px; + top: var(--menu-bar-height); + z-index: 1000; + border-radius: 4px; + font-size: 0.7em; + color: var(--fg); + background: var(--theme-popup-bg); + border: 1px solid var(--theme-popup-border); + margin: 0; + padding: 0; + list-style: none; + display: none; +} +.theme-popup .default { + color: var(--icons); +} +.theme-popup .theme { + width: 100%; + border: 0; + margin: 0; + padding: 2px 10px; + line-height: 25px; + white-space: nowrap; + text-align: left; + cursor: pointer; + color: inherit; + background: inherit; + font-size: inherit; +} +.theme-popup .theme:hover { + background-color: var(--theme-hover); +} +.theme-popup .theme:hover:first-child, +.theme-popup .theme:hover:last-child { + border-top-left-radius: inherit; + border-top-right-radius: inherit; +} diff --git a/css/general.css b/css/general.css new file mode 100644 index 0000000..ef2ba50 --- /dev/null +++ b/css/general.css @@ -0,0 +1,182 @@ +/* Base styles and content styles */ + +@import 'variables.css'; + +:root { + /* Browser default font-size is 16px, this way 1 rem = 10px */ + font-size: 62.5%; +} + +html { + font-family: "Open Sans", sans-serif; + color: var(--fg); + background-color: var(--bg); + text-size-adjust: none; + -webkit-text-size-adjust: none; +} + +body { + margin: 0; + font-size: 1.6rem; + overflow-x: hidden; +} + +code { + font-family: "Source Code Pro", Consolas, "Ubuntu Mono", Menlo, "DejaVu Sans Mono", monospace, monospace !important; + font-size: 0.875em; /* please adjust the ace font size accordingly in editor.js */ +} + +/* Don't change font size in headers. */ +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + font-size: unset; +} + +.left { float: left; } +.right { float: right; } +.boring { opacity: 0.6; } +.hide-boring .boring { display: none; } +.hidden { display: none !important; } + +h2, h3 { margin-top: 2.5em; } +h4, h5 { margin-top: 2em; } + +.header + .header h3, +.header + .header h4, +.header + .header h5 { + margin-top: 1em; +} + +h1:target::before, +h2:target::before, +h3:target::before, +h4:target::before, +h5:target::before, +h6:target::before { + display: inline-block; + content: "»"; + margin-left: -30px; + width: 30px; +} + +/* This is broken on Safari as of version 14, but is fixed + in Safari Technology Preview 117 which I think will be Safari 14.2. + https://bugs.webkit.org/show_bug.cgi?id=218076 +*/ +:target { + scroll-margin-top: calc(var(--menu-bar-height) + 0.5em); +} + +.page { + outline: 0; + padding: 0 var(--page-padding); + margin-top: calc(0px - var(--menu-bar-height)); /* Compensate for the #menu-bar-hover-placeholder */ +} +.page-wrapper { + box-sizing: border-box; +} +.js:not(.sidebar-resizing) .page-wrapper { + transition: margin-left 0.3s ease, transform 0.3s ease; /* Animation: slide away */ +} + +.content { + overflow-y: auto; + padding: 0 15px; + padding-bottom: 50px; +} +.content main { + margin-left: auto; + margin-right: auto; + max-width: var(--content-max-width); +} +.content p { line-height: 1.45em; } +.content ol { line-height: 1.45em; } +.content ul { line-height: 1.45em; } +.content a { text-decoration: none; } +.content a:hover { text-decoration: underline; } +.content img, .content video { max-width: 100%; } +.content .header:link, +.content .header:visited { + color: var(--fg); +} +.content .header:link, +.content .header:visited:hover { + text-decoration: none; +} + +table { + margin: 0 auto; + border-collapse: collapse; +} +table td { + padding: 3px 20px; + border: 1px var(--table-border-color) solid; +} +table thead { + background: var(--table-header-bg); +} +table thead td { + font-weight: 700; + border: none; +} +table thead th { + padding: 3px 20px; +} +table thead tr { + border: 1px var(--table-header-bg) solid; +} +/* Alternate background colors for rows */ +table tbody tr:nth-child(2n) { + background: var(--table-alternate-bg); +} + + +blockquote { + margin: 20px 0; + padding: 0 20px; + color: var(--fg); + background-color: var(--quote-bg); + border-top: .1em solid var(--quote-border); + border-bottom: .1em solid var(--quote-border); +} + + +:not(.footnote-definition) + .footnote-definition, +.footnote-definition + :not(.footnote-definition) { + margin-top: 2em; +} +.footnote-definition { + font-size: 0.9em; + margin: 0.5em 0; +} +.footnote-definition p { + display: inline; +} + +.tooltiptext { + position: absolute; + visibility: hidden; + color: #fff; + background-color: #333; + transform: translateX(-50%); /* Center by moving tooltip 50% of its width left */ + left: -8px; /* Half of the width of the icon */ + top: -35px; + font-size: 0.8em; + text-align: center; + border-radius: 6px; + padding: 5px 8px; + margin: 5px; + z-index: 1000; +} +.tooltipped .tooltiptext { + visibility: visible; +} + +.chapter li.part-title { + color: var(--sidebar-fg); + margin: 5px 0px; + font-weight: bold; +} + +.result-no-output { + font-style: italic; +} diff --git a/css/print.css b/css/print.css new file mode 100644 index 0000000..5e690f7 --- /dev/null +++ b/css/print.css @@ -0,0 +1,54 @@ + +#sidebar, +#menu-bar, +.nav-chapters, +.mobile-nav-chapters { + display: none; +} + +#page-wrapper.page-wrapper { + transform: none; + margin-left: 0px; + overflow-y: initial; +} + +#content { + max-width: none; + margin: 0; + padding: 0; +} + +.page { + overflow-y: initial; +} + +code { + background-color: #666666; + border-radius: 5px; + + /* Force background to be printed in Chrome */ + -webkit-print-color-adjust: exact; +} + +pre > .buttons { + z-index: 2; +} + +a, a:visited, a:active, a:hover { + color: #4183c4; + text-decoration: none; +} + +h1, h2, h3, h4, h5, h6 { + page-break-inside: avoid; + page-break-after: avoid; +} + +pre, code { + page-break-inside: avoid; + white-space: pre-wrap; +} + +.fa { + display: none !important; +} diff --git a/css/variables.css b/css/variables.css new file mode 100644 index 0000000..56b634b --- /dev/null +++ b/css/variables.css @@ -0,0 +1,253 @@ + +/* Globals */ + +:root { + --sidebar-width: 300px; + --page-padding: 15px; + --content-max-width: 750px; + --menu-bar-height: 50px; +} + +/* Themes */ + +.ayu { + --bg: hsl(210, 25%, 8%); + --fg: #c5c5c5; + + --sidebar-bg: #14191f; + --sidebar-fg: #c8c9db; + --sidebar-non-existant: #5c6773; + --sidebar-active: #ffb454; + --sidebar-spacer: #2d334f; + + --scrollbar: var(--sidebar-fg); + + --icons: #737480; + --icons-hover: #b7b9cc; + + --links: #0096cf; + + --inline-code-color: #ffb454; + + --theme-popup-bg: #14191f; + --theme-popup-border: #5c6773; + --theme-hover: #191f26; + + --quote-bg: hsl(226, 15%, 17%); + --quote-border: hsl(226, 15%, 22%); + + --table-border-color: hsl(210, 25%, 13%); + --table-header-bg: hsl(210, 25%, 28%); + --table-alternate-bg: hsl(210, 25%, 11%); + + --searchbar-border-color: #848484; + --searchbar-bg: #424242; + --searchbar-fg: #fff; + --searchbar-shadow-color: #d4c89f; + --searchresults-header-fg: #666; + --searchresults-border-color: #888; + --searchresults-li-bg: #252932; + --search-mark-bg: #e3b171; +} + +.coal { + --bg: hsl(200, 7%, 8%); + --fg: #98a3ad; + + --sidebar-bg: #292c2f; + --sidebar-fg: #a1adb8; + --sidebar-non-existant: #505254; + --sidebar-active: #3473ad; + --sidebar-spacer: #393939; + + --scrollbar: var(--sidebar-fg); + + --icons: #43484d; + --icons-hover: #b3c0cc; + + --links: #2b79a2; + + --inline-code-color: #c5c8c6; + + --theme-popup-bg: #141617; + --theme-popup-border: #43484d; + --theme-hover: #1f2124; + + --quote-bg: hsl(234, 21%, 18%); + --quote-border: hsl(234, 21%, 23%); + + --table-border-color: hsl(200, 7%, 13%); + --table-header-bg: hsl(200, 7%, 28%); + --table-alternate-bg: hsl(200, 7%, 11%); + + --searchbar-border-color: #aaa; + --searchbar-bg: #b7b7b7; + --searchbar-fg: #000; + --searchbar-shadow-color: #aaa; + --searchresults-header-fg: #666; + --searchresults-border-color: #98a3ad; + --searchresults-li-bg: #2b2b2f; + --search-mark-bg: #355c7d; +} + +.light { + --bg: hsl(0, 0%, 100%); + --fg: hsl(0, 0%, 0%); + + --sidebar-bg: #fafafa; + --sidebar-fg: hsl(0, 0%, 0%); + --sidebar-non-existant: #aaaaaa; + --sidebar-active: #1f1fff; + --sidebar-spacer: #f4f4f4; + + --scrollbar: #8F8F8F; + + --icons: #747474; + --icons-hover: #000000; + + --links: #20609f; + + --inline-code-color: #301900; + + --theme-popup-bg: #fafafa; + --theme-popup-border: #cccccc; + --theme-hover: #e6e6e6; + + --quote-bg: hsl(197, 37%, 96%); + --quote-border: hsl(197, 37%, 91%); + + --table-border-color: hsl(0, 0%, 95%); + --table-header-bg: hsl(0, 0%, 80%); + --table-alternate-bg: hsl(0, 0%, 97%); + + --searchbar-border-color: #aaa; + --searchbar-bg: #fafafa; + --searchbar-fg: #000; + --searchbar-shadow-color: #aaa; + --searchresults-header-fg: #666; + --searchresults-border-color: #888; + --searchresults-li-bg: #e4f2fe; + --search-mark-bg: #a2cff5; +} + +.navy { + --bg: hsl(226, 23%, 11%); + --fg: #bcbdd0; + + --sidebar-bg: #282d3f; + --sidebar-fg: #c8c9db; + --sidebar-non-existant: #505274; + --sidebar-active: #2b79a2; + --sidebar-spacer: #2d334f; + + --scrollbar: var(--sidebar-fg); + + --icons: #737480; + --icons-hover: #b7b9cc; + + --links: #2b79a2; + + --inline-code-color: #c5c8c6; + + --theme-popup-bg: #161923; + --theme-popup-border: #737480; + --theme-hover: #282e40; + + --quote-bg: hsl(226, 15%, 17%); + --quote-border: hsl(226, 15%, 22%); + + --table-border-color: hsl(226, 23%, 16%); + --table-header-bg: hsl(226, 23%, 31%); + --table-alternate-bg: hsl(226, 23%, 14%); + + --searchbar-border-color: #aaa; + --searchbar-bg: #aeaec6; + --searchbar-fg: #000; + --searchbar-shadow-color: #aaa; + --searchresults-header-fg: #5f5f71; + --searchresults-border-color: #5c5c68; + --searchresults-li-bg: #242430; + --search-mark-bg: #a2cff5; +} + +.rust { + --bg: hsl(60, 9%, 87%); + --fg: #262625; + + --sidebar-bg: #3b2e2a; + --sidebar-fg: #c8c9db; + --sidebar-non-existant: #505254; + --sidebar-active: #e69f67; + --sidebar-spacer: #45373a; + + --scrollbar: var(--sidebar-fg); + + --icons: #737480; + --icons-hover: #262625; + + --links: #2b79a2; + + --inline-code-color: #6e6b5e; + + --theme-popup-bg: #e1e1db; + --theme-popup-border: #b38f6b; + --theme-hover: #99908a; + + --quote-bg: hsl(60, 5%, 75%); + --quote-border: hsl(60, 5%, 70%); + + --table-border-color: hsl(60, 9%, 82%); + --table-header-bg: #b3a497; + --table-alternate-bg: hsl(60, 9%, 84%); + + --searchbar-border-color: #aaa; + --searchbar-bg: #fafafa; + --searchbar-fg: #000; + --searchbar-shadow-color: #aaa; + --searchresults-header-fg: #666; + --searchresults-border-color: #888; + --searchresults-li-bg: #dec2a2; + --search-mark-bg: #e69f67; +} + +@media (prefers-color-scheme: dark) { + .light.no-js { + --bg: hsl(200, 7%, 8%); + --fg: #98a3ad; + + --sidebar-bg: #292c2f; + --sidebar-fg: #a1adb8; + --sidebar-non-existant: #505254; + --sidebar-active: #3473ad; + --sidebar-spacer: #393939; + + --scrollbar: var(--sidebar-fg); + + --icons: #43484d; + --icons-hover: #b3c0cc; + + --links: #2b79a2; + + --inline-code-color: #c5c8c6; + + --theme-popup-bg: #141617; + --theme-popup-border: #43484d; + --theme-hover: #1f2124; + + --quote-bg: hsl(234, 21%, 18%); + --quote-border: hsl(234, 21%, 23%); + + --table-border-color: hsl(200, 7%, 13%); + --table-header-bg: hsl(200, 7%, 28%); + --table-alternate-bg: hsl(200, 7%, 11%); + + --searchbar-border-color: #aaa; + --searchbar-bg: #b7b7b7; + --searchbar-fg: #000; + --searchbar-shadow-color: #aaa; + --searchresults-header-fg: #666; + --searchresults-border-color: #98a3ad; + --searchresults-li-bg: #2b2b2f; + --search-mark-bg: #355c7d; + } +} diff --git a/elasticlunr.min.js b/elasticlunr.min.js new file mode 100644 index 0000000..94b20dd --- /dev/null +++ b/elasticlunr.min.js @@ -0,0 +1,10 @@ +/** + * elasticlunr - http://weixsong.github.io + * Lightweight full-text search engine in Javascript for browser search and offline search. - 0.9.5 + * + * Copyright (C) 2017 Oliver Nightingale + * Copyright (C) 2017 Wei Song + * MIT Licensed + * @license + */ +!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},t.Pipeline.prototype.reset=function(){this._queue=[]},t.Pipeline.prototype.get=function(){return this._queue},t.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.DocumentStore,this.index={},this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},t.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;n._fields=e.fields,n._ref=e.ref,n.documentStore=t.DocumentStore.load(e.documentStore),n.pipeline=t.Pipeline.load(e.pipeline),n.index={};for(var i in e.index)n.index[i]=t.InvertedIndex.load(e.index[i]);return n},t.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new t.InvertedIndex,this},t.Index.prototype.setRef=function(e){return this._ref=e,this},t.Index.prototype.saveDocument=function(e){return this.documentStore=new t.DocumentStore(e),this},t.Index.prototype.addDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.addDoc(i,e),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",e,this)}},t.Index.prototype.removeDocByRef=function(e){if(e&&this.documentStore.isDocStored()!==!1&&this.documentStore.hasDoc(e)){var t=this.documentStore.getDoc(e);this.removeDoc(t,!1)}},t.Index.prototype.removeDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",e,this))}},t.Index.prototype.updateDoc=function(e,t){var t=void 0===t?!0:t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},t.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},t.Index.prototype.getFields=function(){return this._fields.slice()},t.Index.prototype.search=function(e,n){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var i=null;null!=n&&(i=JSON.stringify(n));for(var o=new t.Configuration(i,this.getFields()).get(),r={},s=Object.keys(e),u=0;u0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},t.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},t.Configuration=function(e,n){var e=e||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(e),this.buildUserConfig(i,n)}catch(o){t.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},t.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},t.Configuration.prototype.buildUserConfig=function(e,n){var i="OR",o=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(o=e.expand||o),"fields"in e)for(var r in e.fields)if(n.indexOf(r)>-1){var s=e.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||0===s.boost?s.boost:1,bool:s.bool||i,expand:u}}else t.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},t.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},t.Configuration.prototype.get=function(){return this.config},t.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e1;){if(r===e)return o;e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o]}return r===e?o:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;)e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return r>e?o:e>r?o+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,i=0,o=this.length,r=e.length,s=this.elements,u=e.elements;;){if(n>o-1||i>r-1)break;s[n]!==u[i]?s[n]u[i]&&i++:(t.add(s[n]),n++,i++)}return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,i;this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone();for(var o=0,r=n.toArray();o + + + + diff --git a/fonts/OPEN-SANS-LICENSE.txt b/fonts/OPEN-SANS-LICENSE.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/fonts/OPEN-SANS-LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/fonts/SOURCE-CODE-PRO-LICENSE.txt b/fonts/SOURCE-CODE-PRO-LICENSE.txt new file mode 100644 index 0000000..366206f --- /dev/null +++ b/fonts/SOURCE-CODE-PRO-LICENSE.txt @@ -0,0 +1,93 @@ +Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/fonts/fonts.css b/fonts/fonts.css new file mode 100644 index 0000000..858efa5 --- /dev/null +++ b/fonts/fonts.css @@ -0,0 +1,100 @@ +/* Open Sans is licensed under the Apache License, Version 2.0. See http://www.apache.org/licenses/LICENSE-2.0 */ +/* Source Code Pro is under the Open Font License. See https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL */ + +/* open-sans-300 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + src: local('Open Sans Light'), local('OpenSans-Light'), + url('open-sans-v17-all-charsets-300.woff2') format('woff2'); +} + +/* open-sans-300italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 300; + src: local('Open Sans Light Italic'), local('OpenSans-LightItalic'), + url('open-sans-v17-all-charsets-300italic.woff2') format('woff2'); +} + +/* open-sans-regular - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + src: local('Open Sans Regular'), local('OpenSans-Regular'), + url('open-sans-v17-all-charsets-regular.woff2') format('woff2'); +} + +/* open-sans-italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + src: local('Open Sans Italic'), local('OpenSans-Italic'), + url('open-sans-v17-all-charsets-italic.woff2') format('woff2'); +} + +/* open-sans-600 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + src: local('Open Sans SemiBold'), local('OpenSans-SemiBold'), + url('open-sans-v17-all-charsets-600.woff2') format('woff2'); +} + +/* open-sans-600italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 600; + src: local('Open Sans SemiBold Italic'), local('OpenSans-SemiBoldItalic'), + url('open-sans-v17-all-charsets-600italic.woff2') format('woff2'); +} + +/* open-sans-700 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + src: local('Open Sans Bold'), local('OpenSans-Bold'), + url('open-sans-v17-all-charsets-700.woff2') format('woff2'); +} + +/* open-sans-700italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), + url('open-sans-v17-all-charsets-700italic.woff2') format('woff2'); +} + +/* open-sans-800 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 800; + src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), + url('open-sans-v17-all-charsets-800.woff2') format('woff2'); +} + +/* open-sans-800italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 800; + src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'), + url('open-sans-v17-all-charsets-800italic.woff2') format('woff2'); +} + +/* source-code-pro-500 - latin_vietnamese_latin-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 500; + src: url('source-code-pro-v11-all-charsets-500.woff2') format('woff2'); +} diff --git a/fonts/open-sans-v17-all-charsets-300.woff2 b/fonts/open-sans-v17-all-charsets-300.woff2 new file mode 100644 index 0000000..9f51be3 Binary files /dev/null and b/fonts/open-sans-v17-all-charsets-300.woff2 differ diff --git a/fonts/open-sans-v17-all-charsets-300italic.woff2 b/fonts/open-sans-v17-all-charsets-300italic.woff2 new file mode 100644 index 0000000..2f54544 Binary files /dev/null and b/fonts/open-sans-v17-all-charsets-300italic.woff2 differ diff --git a/fonts/open-sans-v17-all-charsets-600.woff2 b/fonts/open-sans-v17-all-charsets-600.woff2 new file mode 100644 index 0000000..f503d55 Binary files /dev/null and b/fonts/open-sans-v17-all-charsets-600.woff2 differ diff --git a/fonts/open-sans-v17-all-charsets-600italic.woff2 b/fonts/open-sans-v17-all-charsets-600italic.woff2 new file mode 100644 index 0000000..c99aabe Binary files /dev/null and b/fonts/open-sans-v17-all-charsets-600italic.woff2 differ diff --git a/fonts/open-sans-v17-all-charsets-700.woff2 b/fonts/open-sans-v17-all-charsets-700.woff2 new file mode 100644 index 0000000..421a1ab Binary files /dev/null and b/fonts/open-sans-v17-all-charsets-700.woff2 differ diff --git a/fonts/open-sans-v17-all-charsets-700italic.woff2 b/fonts/open-sans-v17-all-charsets-700italic.woff2 new file mode 100644 index 0000000..12ce3d2 Binary files /dev/null and b/fonts/open-sans-v17-all-charsets-700italic.woff2 differ diff --git a/fonts/open-sans-v17-all-charsets-800.woff2 b/fonts/open-sans-v17-all-charsets-800.woff2 new file mode 100644 index 0000000..c94a223 Binary files /dev/null and b/fonts/open-sans-v17-all-charsets-800.woff2 differ diff --git a/fonts/open-sans-v17-all-charsets-800italic.woff2 b/fonts/open-sans-v17-all-charsets-800italic.woff2 new file mode 100644 index 0000000..eed7d3c Binary files /dev/null and b/fonts/open-sans-v17-all-charsets-800italic.woff2 differ diff --git a/fonts/open-sans-v17-all-charsets-italic.woff2 b/fonts/open-sans-v17-all-charsets-italic.woff2 new file mode 100644 index 0000000..398b68a Binary files /dev/null and b/fonts/open-sans-v17-all-charsets-italic.woff2 differ diff --git a/fonts/open-sans-v17-all-charsets-regular.woff2 b/fonts/open-sans-v17-all-charsets-regular.woff2 new file mode 100644 index 0000000..8383e94 Binary files /dev/null and b/fonts/open-sans-v17-all-charsets-regular.woff2 differ diff --git a/fonts/source-code-pro-v11-all-charsets-500.woff2 b/fonts/source-code-pro-v11-all-charsets-500.woff2 new file mode 100644 index 0000000..7222456 Binary files /dev/null and b/fonts/source-code-pro-v11-all-charsets-500.woff2 differ diff --git a/highlight.css b/highlight.css new file mode 100644 index 0000000..c234322 --- /dev/null +++ b/highlight.css @@ -0,0 +1,83 @@ +/* + * An increased contrast highlighting scheme loosely based on the + * "Base16 Atelier Dune Light" theme by Bram de Haan + * (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune) + * Original Base16 color scheme by Chris Kempson + * (https://github.com/chriskempson/base16) + */ + +/* Comment */ +.hljs-comment, +.hljs-quote { + color: #575757; +} + +/* Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #d70025; +} + +/* Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #b21e00; +} + +/* Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #008200; +} + +/* Blue */ +.hljs-title, +.hljs-section { + color: #0030f2; +} + +/* Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #9d00ec; +} + +.hljs { + display: block; + overflow-x: auto; + background: #f6f7f6; + color: #000; + padding: 0.5em; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} + +.hljs-addition { + color: #22863a; + background-color: #f0fff4; +} + +.hljs-deletion { + color: #b31d28; + background-color: #ffeef0; +} diff --git a/highlight.js b/highlight.js new file mode 100644 index 0000000..180385b --- /dev/null +++ b/highlight.js @@ -0,0 +1,6 @@ +/* + Highlight.js 10.1.1 (93fd0d73) + License: BSD-3-Clause + Copyright (c) 2006-2020, Ivan Sagalaev +*/ +var hljs=function(){"use strict";function e(n){Object.freeze(n);var t="function"==typeof n;return Object.getOwnPropertyNames(n).forEach((function(r){!Object.hasOwnProperty.call(n,r)||null===n[r]||"object"!=typeof n[r]&&"function"!=typeof n[r]||t&&("caller"===r||"callee"===r||"arguments"===r)||Object.isFrozen(n[r])||e(n[r])})),n}class n{constructor(e){void 0===e.data&&(e.data={}),this.data=e.data}ignoreMatch(){this.ignore=!0}}function t(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function r(e,...n){var t={};for(const n in e)t[n]=e[n];return n.forEach((function(e){for(const n in e)t[n]=e[n]})),t}function a(e){return e.nodeName.toLowerCase()}var i=Object.freeze({__proto__:null,escapeHTML:t,inherit:r,nodeStream:function(e){var n=[];return function e(t,r){for(var i=t.firstChild;i;i=i.nextSibling)3===i.nodeType?r+=i.nodeValue.length:1===i.nodeType&&(n.push({event:"start",offset:r,node:i}),r=e(i,r),a(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:r,node:i}));return r}(e,0),n},mergeStreams:function(e,n,r){var i=0,s="",o=[];function l(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset"}function u(e){s+=""}function d(e){("start"===e.event?c:u)(e.node)}for(;e.length||n.length;){var g=l();if(s+=t(r.substring(i,g[0].offset)),i=g[0].offset,g===e){o.reverse().forEach(u);do{d(g.splice(0,1)[0]),g=l()}while(g===e&&g.length&&g[0].offset===i);o.reverse().forEach(c)}else"start"===g[0].event?o.push(g[0].node):o.pop(),d(g.splice(0,1)[0])}return s+t(r.substr(i))}});const s="",o=e=>!!e.kind;class l{constructor(e,n){this.buffer="",this.classPrefix=n.classPrefix,e.walk(this)}addText(e){this.buffer+=t(e)}openNode(e){if(!o(e))return;let n=e.kind;e.sublanguage||(n=`${this.classPrefix}${n}`),this.span(n)}closeNode(e){o(e)&&(this.buffer+=s)}value(){return this.buffer}span(e){this.buffer+=``}}class c{constructor(){this.rootNode={children:[]},this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){const n={kind:e,children:[]};this.add(n),this.stack.push(n)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,n){return"string"==typeof n?e.addText(n):n.children&&(e.openNode(n),n.children.forEach(n=>this._walk(e,n)),e.closeNode(n)),e}static _collapse(e){"string"!=typeof e&&e.children&&(e.children.every(e=>"string"==typeof e)?e.children=[e.children.join("")]:e.children.forEach(e=>{c._collapse(e)}))}}class u extends c{constructor(e){super(),this.options=e}addKeyword(e,n){""!==e&&(this.openNode(n),this.addText(e),this.closeNode())}addText(e){""!==e&&this.add(e)}addSublanguage(e,n){const t=e.root;t.kind=n,t.sublanguage=!0,this.add(t)}toHTML(){return new l(this,this.options).value()}finalize(){return!0}}function d(e){return e?"string"==typeof e?e:e.source:null}const g="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",h={begin:"\\\\[\\s\\S]",relevance:0},f={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[h]},p={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[h]},b={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},m=function(e,n,t={}){var a=r({className:"comment",begin:e,end:n,contains:[]},t);return a.contains.push(b),a.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",relevance:0}),a},v=m("//","$"),x=m("/\\*","\\*/"),E=m("#","$");var _=Object.freeze({__proto__:null,IDENT_RE:"[a-zA-Z]\\w*",UNDERSCORE_IDENT_RE:"[a-zA-Z_]\\w*",NUMBER_RE:"\\b\\d+(\\.\\d+)?",C_NUMBER_RE:g,BINARY_NUMBER_RE:"\\b(0b[01]+)",RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:(e={})=>{const n=/^#![ ]*\//;return e.binary&&(e.begin=function(...e){return e.map(e=>d(e)).join("")}(n,/.*\b/,e.binary,/\b.*/)),r({className:"meta",begin:n,end:/$/,relevance:0,"on:begin":(e,n)=>{0!==e.index&&n.ignoreMatch()}},e)},BACKSLASH_ESCAPE:h,APOS_STRING_MODE:f,QUOTE_STRING_MODE:p,PHRASAL_WORDS_MODE:b,COMMENT:m,C_LINE_COMMENT_MODE:v,C_BLOCK_COMMENT_MODE:x,HASH_COMMENT_MODE:E,NUMBER_MODE:{className:"number",begin:"\\b\\d+(\\.\\d+)?",relevance:0},C_NUMBER_MODE:{className:"number",begin:g,relevance:0},BINARY_NUMBER_MODE:{className:"number",begin:"\\b(0b[01]+)",relevance:0},CSS_NUMBER_MODE:{className:"number",begin:"\\b\\d+(\\.\\d+)?(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},REGEXP_MODE:{begin:/(?=\/[^/\n]*\/)/,contains:[{className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[h,{begin:/\[/,end:/\]/,relevance:0,contains:[h]}]}]},TITLE_MODE:{className:"title",begin:"[a-zA-Z]\\w*",relevance:0},UNDERSCORE_TITLE_MODE:{className:"title",begin:"[a-zA-Z_]\\w*",relevance:0},METHOD_GUARD:{begin:"\\.\\s*[a-zA-Z_]\\w*",relevance:0},END_SAME_AS_BEGIN:function(e){return Object.assign(e,{"on:begin":(e,n)=>{n.data._beginMatch=e[1]},"on:end":(e,n)=>{n.data._beginMatch!==e[1]&&n.ignoreMatch()}})}}),N="of and for in not or if then".split(" ");function w(e,n){return n?+n:function(e){return N.includes(e.toLowerCase())}(e)?0:1}const R=t,y=r,{nodeStream:k,mergeStreams:O}=i,M=Symbol("nomatch");return function(t){var a=[],i={},s={},o=[],l=!0,c=/(^(<[^>]+>|\t|)+|\n)/gm,g="Could not find the language '{}', did you forget to load/include a language module?";const h={disableAutodetect:!0,name:"Plain text",contains:[]};var f={noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:null,__emitter:u};function p(e){return f.noHighlightRe.test(e)}function b(e,n,t,r){var a={code:n,language:e};S("before:highlight",a);var i=a.result?a.result:m(a.language,a.code,t,r);return i.code=a.code,S("after:highlight",i),i}function m(e,t,a,s){var o=t;function c(e,n){var t=E.case_insensitive?n[0].toLowerCase():n[0];return Object.prototype.hasOwnProperty.call(e.keywords,t)&&e.keywords[t]}function u(){null!=y.subLanguage?function(){if(""!==A){var e=null;if("string"==typeof y.subLanguage){if(!i[y.subLanguage])return void O.addText(A);e=m(y.subLanguage,A,!0,k[y.subLanguage]),k[y.subLanguage]=e.top}else e=v(A,y.subLanguage.length?y.subLanguage:null);y.relevance>0&&(I+=e.relevance),O.addSublanguage(e.emitter,e.language)}}():function(){if(!y.keywords)return void O.addText(A);let e=0;y.keywordPatternRe.lastIndex=0;let n=y.keywordPatternRe.exec(A),t="";for(;n;){t+=A.substring(e,n.index);const r=c(y,n);if(r){const[e,a]=r;O.addText(t),t="",I+=a,O.addKeyword(n[0],e)}else t+=n[0];e=y.keywordPatternRe.lastIndex,n=y.keywordPatternRe.exec(A)}t+=A.substr(e),O.addText(t)}(),A=""}function h(e){return e.className&&O.openNode(e.className),y=Object.create(e,{parent:{value:y}})}function p(e){return 0===y.matcher.regexIndex?(A+=e[0],1):(L=!0,0)}var b={};function x(t,r){var i=r&&r[0];if(A+=t,null==i)return u(),0;if("begin"===b.type&&"end"===r.type&&b.index===r.index&&""===i){if(A+=o.slice(r.index,r.index+1),!l){const n=Error("0 width match regex");throw n.languageName=e,n.badRule=b.rule,n}return 1}if(b=r,"begin"===r.type)return function(e){var t=e[0],r=e.rule;const a=new n(r),i=[r.__beforeBegin,r["on:begin"]];for(const n of i)if(n&&(n(e,a),a.ignore))return p(t);return r&&r.endSameAsBegin&&(r.endRe=RegExp(t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")),r.skip?A+=t:(r.excludeBegin&&(A+=t),u(),r.returnBegin||r.excludeBegin||(A=t)),h(r),r.returnBegin?0:t.length}(r);if("illegal"===r.type&&!a){const e=Error('Illegal lexeme "'+i+'" for mode "'+(y.className||"")+'"');throw e.mode=y,e}if("end"===r.type){var s=function(e){var t=e[0],r=o.substr(e.index),a=function e(t,r,a){let i=function(e,n){var t=e&&e.exec(n);return t&&0===t.index}(t.endRe,a);if(i){if(t["on:end"]){const e=new n(t);t["on:end"](r,e),e.ignore&&(i=!1)}if(i){for(;t.endsParent&&t.parent;)t=t.parent;return t}}if(t.endsWithParent)return e(t.parent,r,a)}(y,e,r);if(!a)return M;var i=y;i.skip?A+=t:(i.returnEnd||i.excludeEnd||(A+=t),u(),i.excludeEnd&&(A=t));do{y.className&&O.closeNode(),y.skip||y.subLanguage||(I+=y.relevance),y=y.parent}while(y!==a.parent);return a.starts&&(a.endSameAsBegin&&(a.starts.endRe=a.endRe),h(a.starts)),i.returnEnd?0:t.length}(r);if(s!==M)return s}if("illegal"===r.type&&""===i)return 1;if(B>1e5&&B>3*r.index)throw Error("potential infinite loop, way more iterations than matches");return A+=i,i.length}var E=T(e);if(!E)throw console.error(g.replace("{}",e)),Error('Unknown language: "'+e+'"');var _=function(e){function n(n,t){return RegExp(d(n),"m"+(e.case_insensitive?"i":"")+(t?"g":""))}class t{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,n){n.position=this.position++,this.matchIndexes[this.matchAt]=n,this.regexes.push([n,e]),this.matchAt+=function(e){return RegExp(e.toString()+"|").exec("").length-1}(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const e=this.regexes.map(e=>e[1]);this.matcherRe=n(function(e,n="|"){for(var t=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./,r=0,a="",i=0;i0&&(a+=n),a+="(";o.length>0;){var l=t.exec(o);if(null==l){a+=o;break}a+=o.substring(0,l.index),o=o.substring(l.index+l[0].length),"\\"===l[0][0]&&l[1]?a+="\\"+(+l[1]+s):(a+=l[0],"("===l[0]&&r++)}a+=")"}return a}(e),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;const n=this.matcherRe.exec(e);if(!n)return null;const t=n.findIndex((e,n)=>n>0&&void 0!==e),r=this.matchIndexes[t];return n.splice(0,t),Object.assign(n,r)}}class a{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];const n=new t;return this.rules.slice(e).forEach(([e,t])=>n.addRule(e,t)),n.compile(),this.multiRegexes[e]=n,n}considerAll(){this.regexIndex=0}addRule(e,n){this.rules.push([e,n]),"begin"===n.type&&this.count++}exec(e){const n=this.getMatcher(this.regexIndex);n.lastIndex=this.lastIndex;const t=n.exec(e);return t&&(this.regexIndex+=t.position+1,this.regexIndex===this.count&&(this.regexIndex=0)),t}}function i(e,n){const t=e.input[e.index-1],r=e.input[e.index+e[0].length];"."!==t&&"."!==r||n.ignoreMatch()}if(e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return function t(s,o){const l=s;if(s.compiled)return l;s.compiled=!0,s.__beforeBegin=null,s.keywords=s.keywords||s.beginKeywords;let c=null;if("object"==typeof s.keywords&&(c=s.keywords.$pattern,delete s.keywords.$pattern),s.keywords&&(s.keywords=function(e,n){var t={};return"string"==typeof e?r("keyword",e):Object.keys(e).forEach((function(n){r(n,e[n])})),t;function r(e,r){n&&(r=r.toLowerCase()),r.split(" ").forEach((function(n){var r=n.split("|");t[r[0]]=[e,w(r[0],r[1])]}))}}(s.keywords,e.case_insensitive)),s.lexemes&&c)throw Error("ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) ");return l.keywordPatternRe=n(s.lexemes||c||/\w+/,!0),o&&(s.beginKeywords&&(s.begin="\\b("+s.beginKeywords.split(" ").join("|")+")(?=\\b|\\s)",s.__beforeBegin=i),s.begin||(s.begin=/\B|\b/),l.beginRe=n(s.begin),s.endSameAsBegin&&(s.end=s.begin),s.end||s.endsWithParent||(s.end=/\B|\b/),s.end&&(l.endRe=n(s.end)),l.terminator_end=d(s.end)||"",s.endsWithParent&&o.terminator_end&&(l.terminator_end+=(s.end?"|":"")+o.terminator_end)),s.illegal&&(l.illegalRe=n(s.illegal)),void 0===s.relevance&&(s.relevance=1),s.contains||(s.contains=[]),s.contains=[].concat(...s.contains.map((function(e){return function(e){return e.variants&&!e.cached_variants&&(e.cached_variants=e.variants.map((function(n){return r(e,{variants:null},n)}))),e.cached_variants?e.cached_variants:function e(n){return!!n&&(n.endsWithParent||e(n.starts))}(e)?r(e,{starts:e.starts?r(e.starts):null}):Object.isFrozen(e)?r(e):e}("self"===e?s:e)}))),s.contains.forEach((function(e){t(e,l)})),s.starts&&t(s.starts,o),l.matcher=function(e){const n=new a;return e.contains.forEach(e=>n.addRule(e.begin,{rule:e,type:"begin"})),e.terminator_end&&n.addRule(e.terminator_end,{type:"end"}),e.illegal&&n.addRule(e.illegal,{type:"illegal"}),n}(l),l}(e)}(E),N="",y=s||_,k={},O=new f.__emitter(f);!function(){for(var e=[],n=y;n!==E;n=n.parent)n.className&&e.unshift(n.className);e.forEach(e=>O.openNode(e))}();var A="",I=0,S=0,B=0,L=!1;try{for(y.matcher.considerAll();;){B++,L?L=!1:(y.matcher.lastIndex=S,y.matcher.considerAll());const e=y.matcher.exec(o);if(!e)break;const n=x(o.substring(S,e.index),e);S=e.index+n}return x(o.substr(S)),O.closeAllNodes(),O.finalize(),N=O.toHTML(),{relevance:I,value:N,language:e,illegal:!1,emitter:O,top:y}}catch(n){if(n.message&&n.message.includes("Illegal"))return{illegal:!0,illegalBy:{msg:n.message,context:o.slice(S-100,S+100),mode:n.mode},sofar:N,relevance:0,value:R(o),emitter:O};if(l)return{illegal:!1,relevance:0,value:R(o),emitter:O,language:e,top:y,errorRaised:n};throw n}}function v(e,n){n=n||f.languages||Object.keys(i);var t=function(e){const n={relevance:0,emitter:new f.__emitter(f),value:R(e),illegal:!1,top:h};return n.emitter.addText(e),n}(e),r=t;return n.filter(T).filter(I).forEach((function(n){var a=m(n,e,!1);a.language=n,a.relevance>r.relevance&&(r=a),a.relevance>t.relevance&&(r=t,t=a)})),r.language&&(t.second_best=r),t}function x(e){return f.tabReplace||f.useBR?e.replace(c,e=>"\n"===e?f.useBR?"
":e:f.tabReplace?e.replace(/\t/g,f.tabReplace):e):e}function E(e){let n=null;const t=function(e){var n=e.className+" ";n+=e.parentNode?e.parentNode.className:"";const t=f.languageDetectRe.exec(n);if(t){var r=T(t[1]);return r||(console.warn(g.replace("{}",t[1])),console.warn("Falling back to no-highlight mode for this block.",e)),r?t[1]:"no-highlight"}return n.split(/\s+/).find(e=>p(e)||T(e))}(e);if(p(t))return;S("before:highlightBlock",{block:e,language:t}),f.useBR?(n=document.createElement("div")).innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n"):n=e;const r=n.textContent,a=t?b(t,r,!0):v(r),i=k(n);if(i.length){const e=document.createElement("div");e.innerHTML=a.value,a.value=O(i,k(e),r)}a.value=x(a.value),S("after:highlightBlock",{block:e,result:a}),e.innerHTML=a.value,e.className=function(e,n,t){var r=n?s[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),e.includes(r)||a.push(r),a.join(" ").trim()}(e.className,t,a.language),e.result={language:a.language,re:a.relevance,relavance:a.relevance},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.relevance,relavance:a.second_best.relevance})}const N=()=>{if(!N.called){N.called=!0;var e=document.querySelectorAll("pre code");a.forEach.call(e,E)}};function T(e){return e=(e||"").toLowerCase(),i[e]||i[s[e]]}function A(e,{languageName:n}){"string"==typeof e&&(e=[e]),e.forEach(e=>{s[e]=n})}function I(e){var n=T(e);return n&&!n.disableAutodetect}function S(e,n){var t=e;o.forEach((function(e){e[t]&&e[t](n)}))}Object.assign(t,{highlight:b,highlightAuto:v,fixMarkup:x,highlightBlock:E,configure:function(e){f=y(f,e)},initHighlighting:N,initHighlightingOnLoad:function(){window.addEventListener("DOMContentLoaded",N,!1)},registerLanguage:function(e,n){var r=null;try{r=n(t)}catch(n){if(console.error("Language definition for '{}' could not be registered.".replace("{}",e)),!l)throw n;console.error(n),r=h}r.name||(r.name=e),i[e]=r,r.rawDefinition=n.bind(null,t),r.aliases&&A(r.aliases,{languageName:e})},listLanguages:function(){return Object.keys(i)},getLanguage:T,registerAliases:A,requireLanguage:function(e){var n=T(e);if(n)return n;throw Error("The '{}' language is required, but not loaded.".replace("{}",e))},autoDetection:I,inherit:y,addPlugin:function(e){o.push(e)}}),t.debugMode=function(){l=!1},t.safeMode=function(){l=!0},t.versionString="10.1.1";for(const n in _)"object"==typeof _[n]&&e(_[n]);return Object.assign(t,_),t}({})}();"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs);hljs.registerLanguage("php",function(){"use strict";return function(e){var r={begin:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},t={className:"meta",variants:[{begin:/<\?php/,relevance:10},{begin:/<\?[=]?/},{begin:/\?>/}]},a={className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:'b"',end:'"'},{begin:"b'",end:"'"},e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null})]},n={variants:[e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]},i={keyword:"__CLASS__ __DIR__ __FILE__ __FUNCTION__ __LINE__ __METHOD__ __NAMESPACE__ __TRAIT__ die echo exit include include_once print require require_once array abstract and as binary bool boolean break callable case catch class clone const continue declare default do double else elseif empty enddeclare endfor endforeach endif endswitch endwhile eval extends final finally float for foreach from global goto if implements instanceof insteadof int integer interface isset iterable list new object or private protected public real return string switch throw trait try unset use var void while xor yield",literal:"false null true",built_in:"Error|0 AppendIterator ArgumentCountError ArithmeticError ArrayIterator ArrayObject AssertionError BadFunctionCallException BadMethodCallException CachingIterator CallbackFilterIterator CompileError Countable DirectoryIterator DivisionByZeroError DomainException EmptyIterator ErrorException Exception FilesystemIterator FilterIterator GlobIterator InfiniteIterator InvalidArgumentException IteratorIterator LengthException LimitIterator LogicException MultipleIterator NoRewindIterator OutOfBoundsException OutOfRangeException OuterIterator OverflowException ParentIterator ParseError RangeException RecursiveArrayIterator RecursiveCachingIterator RecursiveCallbackFilterIterator RecursiveDirectoryIterator RecursiveFilterIterator RecursiveIterator RecursiveIteratorIterator RecursiveRegexIterator RecursiveTreeIterator RegexIterator RuntimeException SeekableIterator SplDoublyLinkedList SplFileInfo SplFileObject SplFixedArray SplHeap SplMaxHeap SplMinHeap SplObjectStorage SplObserver SplObserver SplPriorityQueue SplQueue SplStack SplSubject SplSubject SplTempFileObject TypeError UnderflowException UnexpectedValueException ArrayAccess Closure Generator Iterator IteratorAggregate Serializable Throwable Traversable WeakReference Directory __PHP_Incomplete_Class parent php_user_filter self static stdClass"};return{aliases:["php","php3","php4","php5","php6","php7"],case_insensitive:!0,keywords:i,contains:[e.HASH_COMMENT_MODE,e.COMMENT("//","$",{contains:[t]}),e.COMMENT("/\\*","\\*/",{contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.COMMENT("__halt_compiler.+?;",!1,{endsWithParent:!0,keywords:"__halt_compiler"}),{className:"string",begin:/<<<['"]?\w+['"]?$/,end:/^\w+;?$/,contains:[e.BACKSLASH_ESCAPE,{className:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]}]},t,{className:"keyword",begin:/\$this\b/},r,{begin:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{className:"function",beginKeywords:"fn function",end:/[;{]/,excludeEnd:!0,illegal:"[$%\\[]",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:i,contains:["self",r,e.C_BLOCK_COMMENT_MODE,a,n]}]},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,illegal:/[:\(\$"]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",end:";",illegal:/[\.']/,contains:[e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"use",end:";",contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"=>"},a,n]}}}());hljs.registerLanguage("nginx",function(){"use strict";return function(e){var n={className:"variable",variants:[{begin:/\$\d+/},{begin:/\$\{/,end:/}/},{begin:"[\\$\\@]"+e.UNDERSCORE_IDENT_RE}]},a={endsWithParent:!0,keywords:{$pattern:"[a-z/_]+",literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},relevance:0,illegal:"=>",contains:[e.HASH_COMMENT_MODE,{className:"string",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/}]},{begin:"([a-z]+):/",end:"\\s",endsWithParent:!0,excludeEnd:!0,contains:[n]},{className:"regexp",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:"\\s\\^",end:"\\s|{|;",returnEnd:!0},{begin:"~\\*?\\s+",end:"\\s|{|;",returnEnd:!0},{begin:"\\*(\\.[a-z\\-]+)+"},{begin:"([a-z\\-]+\\.)+\\*"}]},{className:"number",begin:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{className:"number",begin:"\\b\\d+[kKmMgGdshdwy]*\\b",relevance:0},n]};return{name:"Nginx config",aliases:["nginxconf"],contains:[e.HASH_COMMENT_MODE,{begin:e.UNDERSCORE_IDENT_RE+"\\s+{",returnBegin:!0,end:"{",contains:[{className:"section",begin:e.UNDERSCORE_IDENT_RE}],relevance:0},{begin:e.UNDERSCORE_IDENT_RE+"\\s",end:";|{",returnBegin:!0,contains:[{className:"attribute",begin:e.UNDERSCORE_IDENT_RE,starts:a}],relevance:0}],illegal:"[^\\s\\}]"}}}());hljs.registerLanguage("csharp",function(){"use strict";return function(e){var n={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let nameof on orderby partial remove select set value var when where yield",literal:"null false true"},i=e.inherit(e.TITLE_MODE,{begin:"[a-zA-Z](\\.?\\w)*"}),a={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},s={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},t=e.inherit(s,{illegal:/\n/}),l={className:"subst",begin:"{",end:"}",keywords:n},r=e.inherit(l,{illegal:/\n/}),c={className:"string",begin:/\$"/,end:'"',illegal:/\n/,contains:[{begin:"{{"},{begin:"}}"},e.BACKSLASH_ESCAPE,r]},o={className:"string",begin:/\$@"/,end:'"',contains:[{begin:"{{"},{begin:"}}"},{begin:'""'},l]},g=e.inherit(o,{illegal:/\n/,contains:[{begin:"{{"},{begin:"}}"},{begin:'""'},r]});l.contains=[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.C_BLOCK_COMMENT_MODE],r.contains=[g,c,t,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.inherit(e.C_BLOCK_COMMENT_MODE,{illegal:/\n/})];var d={variants:[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},E={begin:"<",end:">",contains:[{beginKeywords:"in out"},i]},_=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?",b={begin:"@"+e.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"],keywords:n,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0,contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{begin:"\x3c!--|--\x3e"},{begin:""}]}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},d,a,{beginKeywords:"class interface",end:/[{;=]/,illegal:/[^\s:,]/,contains:[{beginKeywords:"where class"},i,E,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",end:/[{;=]/,illegal:/[^\s:]/,contains:[i,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta",begin:"^\\s*\\[",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{className:"meta-string",begin:/"/,end:/"/}]},{beginKeywords:"new return throw await else",relevance:0},{className:"function",begin:"("+_+"\\s+)+"+e.IDENT_RE+"\\s*(\\<.+\\>)?\\s*\\(",returnBegin:!0,end:/\s*[{;=]/,excludeEnd:!0,keywords:n,contains:[{begin:e.IDENT_RE+"\\s*(\\<.+\\>)?\\s*\\(",returnBegin:!0,contains:[e.TITLE_MODE,E],relevance:0},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,relevance:0,contains:[d,a,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},b]}}}());hljs.registerLanguage("perl",function(){"use strict";return function(e){var n={$pattern:/[\w.]+/,keyword:"getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qq fileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmget sub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedir ioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when"},t={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:n},s={begin:"->{",end:"}"},r={variants:[{begin:/\$\d/},{begin:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{begin:/[\$%@][^\s\w{]/,relevance:0}]},i=[e.BACKSLASH_ESCAPE,t,r],a=[r,e.HASH_COMMENT_MODE,e.COMMENT("^\\=\\w","\\=cut",{endsWithParent:!0}),s,{className:"string",contains:i,variants:[{begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*\\<",end:"\\>",relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE]},{begin:"{\\w+}",contains:[],relevance:0},{begin:"-?\\w+\\s*\\=\\>",contains:[],relevance:0}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[e.HASH_COMMENT_MODE,{className:"regexp",begin:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",relevance:10},{className:"regexp",begin:"(m|qr)?/",end:"/[a-z]*",contains:[e.BACKSLASH_ESCAPE],relevance:0}]},{className:"function",beginKeywords:"sub",end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]}];return t.contains=a,s.contains=a,{name:"Perl",aliases:["pl","pm"],keywords:n,contains:a}}}());hljs.registerLanguage("swift",function(){"use strict";return function(e){var i={keyword:"#available #colorLiteral #column #else #elseif #endif #file #fileLiteral #function #if #imageLiteral #line #selector #sourceLocation _ __COLUMN__ __FILE__ __FUNCTION__ __LINE__ Any as as! as? associatedtype associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false fileprivate final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating open operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet",literal:"true false nil",built_in:"abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c compactMap contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip"},n=e.COMMENT("/\\*","\\*/",{contains:["self"]}),t={className:"subst",begin:/\\\(/,end:"\\)",keywords:i,contains:[]},a={className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:/"""/,end:/"""/},{begin:/"/,end:/"/}]},r={className:"number",begin:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",relevance:0};return t.contains=[r],{name:"Swift",keywords:i,contains:[a,e.C_LINE_COMMENT_MODE,n,{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*[!?]"},{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*",relevance:0},r,{className:"function",beginKeywords:"func",end:"{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][0-9A-Za-z$_]*/}),{begin://},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:i,contains:["self",r,a,e.C_BLOCK_COMMENT_MODE,{begin:":"}],illegal:/["']/}],illegal:/\[|%/},{className:"class",beginKeywords:"struct protocol class extension enum",keywords:i,end:"\\{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/})]},{className:"meta",begin:"(@discardableResult|@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@objcMembers|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain|@dynamicMemberLookup|@propertyWrapper)\\b"},{beginKeywords:"import",end:/$/,contains:[e.C_LINE_COMMENT_MODE,n]}]}}}());hljs.registerLanguage("makefile",function(){"use strict";return function(e){var i={className:"variable",variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)",contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin:"",relevance:10,contains:[a,i,t,s,{begin:"\\[",end:"\\]",contains:[{className:"meta",begin:"",contains:[a,s,i,t]}]}]},e.COMMENT("\x3c!--","--\x3e",{relevance:10}),{begin:"<\\!\\[CDATA\\[",end:"\\]\\]>",relevance:10},n,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag",begin:")",end:">",keywords:{name:"style"},contains:[c],starts:{end:"",returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:")",end:">",keywords:{name:"script"},contains:[c],starts:{end:"<\/script>",returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:"",contains:[{className:"name",begin:/[^\/><\s]+/,relevance:0},c]}]}}}());hljs.registerLanguage("bash",function(){"use strict";return function(e){const s={};Object.assign(s,{className:"variable",variants:[{begin:/\$[\w\d#@][\w\d_]*/},{begin:/\$\{/,end:/\}/,contains:[{begin:/:-/,contains:[s]}]}]});const t={className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},n={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,s,t]};t.contains.push(n);const a={begin:/\$\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,s]},i=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10}),c={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b-?[a-z\._]+\b/,keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},contains:[i,e.SHEBANG(),c,a,e.HASH_COMMENT_MODE,n,{className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},s]}}}());hljs.registerLanguage("c-like",function(){"use strict";return function(e){function t(e){return"(?:"+e+")?"}var n="(decltype\\(auto\\)|"+t("[a-zA-Z_]\\w*::")+"[a-zA-Z_]\\w*"+t("<.*?>")+")",r={className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},a={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},i={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},s={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(a,{className:"meta-string"}),{className:"meta-string",begin:/<.*?>/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},o={className:"title",begin:t("[a-zA-Z_]\\w*::")+e.IDENT_RE,relevance:0},c=t("[a-zA-Z_]\\w*::")+e.IDENT_RE+"\\s*\\(",l={keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_t short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary",literal:"true false nullptr NULL"},d=[r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,i,a],_={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:l,contains:d.concat([{begin:/\(/,end:/\)/,keywords:l,contains:d.concat(["self"]),relevance:0}]),relevance:0},u={className:"function",begin:"("+n+"[\\*&\\s]+)+"+c,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:l,illegal:/[^\w\s\*&:<>]/,contains:[{begin:"decltype\\(auto\\)",keywords:l,relevance:0},{begin:c,returnBegin:!0,contains:[o],relevance:0},{className:"params",begin:/\(/,end:/\)/,keywords:l,relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,i,r,{begin:/\(/,end:/\)/,keywords:l,relevance:0,contains:["self",e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,i,r]}]},r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s]};return{aliases:["c","cc","h","c++","h++","hpp","hh","hxx","cxx"],keywords:l,disableAutodetect:!0,illegal:"",keywords:l,contains:["self",r]},{begin:e.IDENT_RE+"::",keywords:l},{className:"class",beginKeywords:"class struct",end:/[{;:]/,contains:[{begin://,contains:["self"]},e.TITLE_MODE]}]),exports:{preprocessor:s,strings:a,keywords:l}}}}());hljs.registerLanguage("coffeescript",function(){"use strict";const e=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);return function(r){var t={keyword:e.concat(["then","unless","until","loop","by","when","and","or","is","isnt","not"]).filter((e=>n=>!e.includes(n))(["var","const","let","function","static"])).join(" "),literal:n.concat(["yes","no","on","off"]).join(" "),built_in:a.concat(["npm","print"]).join(" ")},i="[A-Za-z$_][0-9A-Za-z$_]*",s={className:"subst",begin:/#\{/,end:/}/,keywords:t},o=[r.BINARY_NUMBER_MODE,r.inherit(r.C_NUMBER_MODE,{starts:{end:"(\\s*/)?",relevance:0}}),{className:"string",variants:[{begin:/'''/,end:/'''/,contains:[r.BACKSLASH_ESCAPE]},{begin:/'/,end:/'/,contains:[r.BACKSLASH_ESCAPE]},{begin:/"""/,end:/"""/,contains:[r.BACKSLASH_ESCAPE,s]},{begin:/"/,end:/"/,contains:[r.BACKSLASH_ESCAPE,s]}]},{className:"regexp",variants:[{begin:"///",end:"///",contains:[s,r.HASH_COMMENT_MODE]},{begin:"//[gim]{0,3}(?=\\W)",relevance:0},{begin:/\/(?![ *]).*?(?![\\]).\/[gim]{0,3}(?=\W)/}]},{begin:"@"+i},{subLanguage:"javascript",excludeBegin:!0,excludeEnd:!0,variants:[{begin:"```",end:"```"},{begin:"`",end:"`"}]}];s.contains=o;var c=r.inherit(r.TITLE_MODE,{begin:i}),l={className:"params",begin:"\\([^\\(]",returnBegin:!0,contains:[{begin:/\(/,end:/\)/,keywords:t,contains:["self"].concat(o)}]};return{name:"CoffeeScript",aliases:["coffee","cson","iced"],keywords:t,illegal:/\/\*/,contains:o.concat([r.COMMENT("###","###"),r.HASH_COMMENT_MODE,{className:"function",begin:"^\\s*"+i+"\\s*=\\s*(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[c,l]},{begin:/[:\(,=]\s*/,relevance:0,contains:[{className:"function",begin:"(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[l]}]},{className:"class",beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[c]},c]},{begin:i+":",end:":",returnBegin:!0,returnEnd:!0,relevance:0}])}}}());hljs.registerLanguage("ruby",function(){"use strict";return function(e){var n="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",a={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},s={className:"doctag",begin:"@[A-Za-z]+"},i={begin:"#<",end:">"},r=[e.COMMENT("#","$",{contains:[s]}),e.COMMENT("^\\=begin","^\\=end",{contains:[s],relevance:10}),e.COMMENT("^__END__","\\n$")],c={className:"subst",begin:"#\\{",end:"}",keywords:a},t={className:"string",contains:[e.BACKSLASH_ESCAPE,c],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:"%[qQwWx]?\\(",end:"\\)"},{begin:"%[qQwWx]?\\[",end:"\\]"},{begin:"%[qQwWx]?{",end:"}"},{begin:"%[qQwWx]?<",end:">"},{begin:"%[qQwWx]?/",end:"/"},{begin:"%[qQwWx]?%",end:"%"},{begin:"%[qQwWx]?-",end:"-"},{begin:"%[qQwWx]?\\|",end:"\\|"},{begin:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{begin:/<<[-~]?'?(\w+)(?:.|\n)*?\n\s*\1\b/,returnBegin:!0,contains:[{begin:/<<[-~]?'?/},e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,contains:[e.BACKSLASH_ESCAPE,c]})]}]},b={className:"params",begin:"\\(",end:"\\)",endsParent:!0,keywords:a},d=[t,i,{className:"class",beginKeywords:"class module",end:"$|;",illegal:/=/,contains:[e.inherit(e.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{begin:"<\\s*",contains:[{begin:"("+e.IDENT_RE+"::)?"+e.IDENT_RE}]}].concat(r)},{className:"function",beginKeywords:"def",end:"$|;",contains:[e.inherit(e.TITLE_MODE,{begin:n}),b].concat(r)},{begin:e.IDENT_RE+"::"},{className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"(\\!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[t,{begin:n}],relevance:0},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{className:"params",begin:/\|/,end:/\|/,keywords:a},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[i,{className:"regexp",contains:[e.BACKSLASH_ESCAPE,c],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:"%r{",end:"}[a-z]*"},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(r),relevance:0}].concat(r);c.contains=d,b.contains=d;var g=[{begin:/^\s*=>/,starts:{end:"$",contains:d}},{className:"meta",begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+>|(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>)",starts:{end:"$",contains:d}}];return{name:"Ruby",aliases:["rb","gemspec","podspec","thor","irb"],keywords:a,illegal:/\/\*/,contains:r.concat(g).concat(d)}}}());hljs.registerLanguage("yaml",function(){"use strict";return function(e){var n="true false yes no null",a="[\\w#;/?:@&=+$,.~*\\'()[\\]]+",s={className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{begin:"{{",end:"}}"},{begin:"%{",end:"}"}]}]},i=e.inherit(s,{variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),l={end:",",endsWithParent:!0,excludeEnd:!0,contains:[],keywords:n,relevance:0},t={begin:"{",end:"}",contains:[l],illegal:"\\n",relevance:0},g={begin:"\\[",end:"\\]",contains:[l],illegal:"\\n",relevance:0},b=[{className:"attr",variants:[{begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---s*$",relevance:10},{className:"string",begin:"[\\|>]([0-9]?[+-])?[ ]*\\n( *)[\\S ]+\\n(\\2[\\S ]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+a},{className:"type",begin:"!<"+a+">"},{className:"type",begin:"!"+a},{className:"type",begin:"!!"+a},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"\\-(?=[ ]|$)",relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},{className:"number",begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b"},{className:"number",begin:e.C_NUMBER_RE+"\\b"},t,g,s],c=[...b];return c.pop(),c.push(i),l.contains=c,{name:"YAML",case_insensitive:!0,aliases:["yml","YAML"],contains:b}}}());hljs.registerLanguage("d",function(){"use strict";return function(e){var a={$pattern:e.UNDERSCORE_IDENT_RE,keyword:"abstract alias align asm assert auto body break byte case cast catch class const continue debug default delete deprecated do else enum export extern final finally for foreach foreach_reverse|10 goto if immutable import in inout int interface invariant is lazy macro mixin module new nothrow out override package pragma private protected public pure ref return scope shared static struct super switch synchronized template this throw try typedef typeid typeof union unittest version void volatile while with __FILE__ __LINE__ __gshared|10 __thread __traits __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__ __VERSION__",built_in:"bool cdouble cent cfloat char creal dchar delegate double dstring float function idouble ifloat ireal long real short string ubyte ucent uint ulong ushort wchar wstring",literal:"false null true"},d="((0|[1-9][\\d_]*)|0[bB][01_]+|0[xX]([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))",n="\\\\(['\"\\?\\\\abfnrtv]|u[\\dA-Fa-f]{4}|[0-7]{1,3}|x[\\dA-Fa-f]{2}|U[\\dA-Fa-f]{8})|&[a-zA-Z\\d]{2,};",t={className:"number",begin:"\\b"+d+"(L|u|U|Lu|LU|uL|UL)?",relevance:0},_={className:"number",begin:"\\b(((0[xX](([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)\\.([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)|\\.?([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))[pP][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))|((0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(\\.\\d*|([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)))|\\d+\\.(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)|\\.(0|[1-9][\\d_]*)([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))?))([fF]|L|i|[fF]i|Li)?|"+d+"(i|[fF]i|Li))",relevance:0},r={className:"string",begin:"'("+n+"|.)",end:"'",illegal:"."},i={className:"string",begin:'"',contains:[{begin:n,relevance:0}],end:'"[cwd]?'},s=e.COMMENT("\\/\\+","\\+\\/",{contains:["self"],relevance:10});return{name:"D",keywords:a,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s,{className:"string",begin:'x"[\\da-fA-F\\s\\n\\r]*"[cwd]?',relevance:10},i,{className:"string",begin:'[rq]"',end:'"[cwd]?',relevance:5},{className:"string",begin:"`",end:"`[cwd]?"},{className:"string",begin:'q"\\{',end:'\\}"'},_,t,r,{className:"meta",begin:"^#!",end:"$",relevance:5},{className:"meta",begin:"#(line)",end:"$",relevance:5},{className:"keyword",begin:"@[a-zA-Z_][a-zA-Z_\\d]*"}]}}}());hljs.registerLanguage("properties",function(){"use strict";return function(e){var n="[ \\t\\f]*",t="("+n+"[:=]"+n+"|[ \\t\\f]+)",a="([^\\\\:= \\t\\f\\n]|\\\\.)+",s={end:t,relevance:0,starts:{className:"string",end:/$/,relevance:0,contains:[{begin:"\\\\\\n"}]}};return{name:".properties",case_insensitive:!0,illegal:/\S/,contains:[e.COMMENT("^\\s*[!#]","$"),{begin:"([^\\\\\\W:= \\t\\f\\n]|\\\\.)+"+t,returnBegin:!0,contains:[{className:"attr",begin:"([^\\\\\\W:= \\t\\f\\n]|\\\\.)+",endsParent:!0,relevance:0}],starts:s},{begin:a+t,returnBegin:!0,relevance:0,contains:[{className:"meta",begin:a,endsParent:!0,relevance:0}],starts:s},{className:"attr",relevance:0,begin:a+n+"$"}]}}}());hljs.registerLanguage("http",function(){"use strict";return function(e){var n="HTTP/[0-9\\.]+";return{name:"HTTP",aliases:["https"],illegal:"\\S",contains:[{begin:"^"+n,end:"$",contains:[{className:"number",begin:"\\b\\d{3}\\b"}]},{begin:"^[A-Z]+ (.*?) "+n+"$",returnBegin:!0,end:"$",contains:[{className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{begin:n},{className:"keyword",begin:"[A-Z]+"}]},{className:"attribute",begin:"^\\w",end:": ",excludeEnd:!0,illegal:"\\n|\\s|=",starts:{end:"$",relevance:0}},{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}]}}}());hljs.registerLanguage("haskell",function(){"use strict";return function(e){var n={variants:[e.COMMENT("--","$"),e.COMMENT("{-","-}",{contains:["self"]})]},i={className:"meta",begin:"{-#",end:"#-}"},a={className:"meta",begin:"^#",end:"$"},s={className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},l={begin:"\\(",end:"\\)",illegal:'"',contains:[i,a,{className:"type",begin:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},e.inherit(e.TITLE_MODE,{begin:"[_a-z][\\w']*"}),n]};return{name:"Haskell",aliases:["hs"],keywords:"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec",contains:[{beginKeywords:"module",end:"where",keywords:"module where",contains:[l,n],illegal:"\\W\\.|;"},{begin:"\\bimport\\b",end:"$",keywords:"import qualified as hiding",contains:[l,n],illegal:"\\W\\.|;"},{className:"class",begin:"^(\\s*)?(class|instance)\\b",end:"where",keywords:"class family instance where",contains:[s,l,n]},{className:"class",begin:"\\b(data|(new)?type)\\b",end:"$",keywords:"data family type newtype deriving",contains:[i,s,l,{begin:"{",end:"}",contains:l.contains},n]},{beginKeywords:"default",end:"$",contains:[s,l,n]},{beginKeywords:"infix infixl infixr",end:"$",contains:[e.C_NUMBER_MODE,n]},{begin:"\\bforeign\\b",end:"$",keywords:"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe",contains:[s,e.QUOTE_STRING_MODE,n]},{className:"meta",begin:"#!\\/usr\\/bin\\/env runhaskell",end:"$"},i,a,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,s,e.inherit(e.TITLE_MODE,{begin:"^[_a-z][\\w']*"}),n,{begin:"->|<-"}]}}}());hljs.registerLanguage("handlebars",function(){"use strict";function e(...e){return e.map(e=>(function(e){return e?"string"==typeof e?e:e.source:null})(e)).join("")}return function(n){const a={"builtin-name":"action bindattr collection component concat debugger each each-in get hash if in input link-to loc log lookup mut outlet partial query-params render template textarea unbound unless view with yield"},t=/\[.*?\]/,s=/[^\s!"#%&'()*+,.\/;<=>@\[\\\]^`{|}~]+/,i=e("(",/'.*?'/,"|",/".*?"/,"|",t,"|",s,"|",/\.|\//,")+"),r=e("(",t,"|",s,")(?==)"),l={begin:i,lexemes:/[\w.\/]+/},c=n.inherit(l,{keywords:{literal:"true false undefined null"}}),o={begin:/\(/,end:/\)/},m={className:"attr",begin:r,relevance:0,starts:{begin:/=/,end:/=/,starts:{contains:[n.NUMBER_MODE,n.QUOTE_STRING_MODE,n.APOS_STRING_MODE,c,o]}}},d={contains:[n.NUMBER_MODE,n.QUOTE_STRING_MODE,n.APOS_STRING_MODE,{begin:/as\s+\|/,keywords:{keyword:"as"},end:/\|/,contains:[{begin:/\w+/}]},m,c,o],returnEnd:!0},g=n.inherit(l,{className:"name",keywords:a,starts:n.inherit(d,{end:/\)/})});o.contains=[g];const u=n.inherit(l,{keywords:a,className:"name",starts:n.inherit(d,{end:/}}/})}),b=n.inherit(l,{keywords:a,className:"name"}),h=n.inherit(l,{className:"name",keywords:a,starts:n.inherit(d,{end:/}}/})});return{name:"Handlebars",aliases:["hbs","html.hbs","html.handlebars","htmlbars"],case_insensitive:!0,subLanguage:"xml",contains:[{begin:/\\\{\{/,skip:!0},{begin:/\\\\(?=\{\{)/,skip:!0},n.COMMENT(/\{\{!--/,/--\}\}/),n.COMMENT(/\{\{!/,/\}\}/),{className:"template-tag",begin:/\{\{\{\{(?!\/)/,end:/\}\}\}\}/,contains:[u],starts:{end:/\{\{\{\{\//,returnEnd:!0,subLanguage:"xml"}},{className:"template-tag",begin:/\{\{\{\{\//,end:/\}\}\}\}/,contains:[b]},{className:"template-tag",begin:/\{\{#/,end:/\}\}/,contains:[u]},{className:"template-tag",begin:/\{\{(?=else\}\})/,end:/\}\}/,keywords:"else"},{className:"template-tag",begin:/\{\{\//,end:/\}\}/,contains:[b]},{className:"template-variable",begin:/\{\{\{/,end:/\}\}\}/,contains:[h]},{className:"template-variable",begin:/\{\{/,end:/\}\}/,contains:[h]}]}}}());hljs.registerLanguage("rust",function(){"use strict";return function(e){var n="([ui](8|16|32|64|128|size)|f(32|64))?",t="drop i8 i16 i32 i64 i128 isize u8 u16 u32 u64 u128 usize f32 f64 str char bool Box Option Result String Vec Copy Send Sized Sync Drop Fn FnMut FnOnce ToOwned Clone Debug PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator Extend IntoIterator DoubleEndedIterator ExactSizeIterator SliceConcatExt ToString assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! debug_assert! debug_assert_eq! env! panic! file! format! format_args! include_bin! include_str! line! local_data_key! module_path! option_env! print! println! select! stringify! try! unimplemented! unreachable! vec! write! writeln! macro_rules! assert_ne! debug_assert_ne!";return{name:"Rust",aliases:["rs"],keywords:{$pattern:e.IDENT_RE+"!?",keyword:"abstract as async await become box break const continue crate do dyn else enum extern false final fn for if impl in let loop macro match mod move mut override priv pub ref return self Self static struct super trait true try type typeof unsafe unsized use virtual where while yield",literal:"true false Some None Ok Err",built_in:t},illegal:""}]}}}());hljs.registerLanguage("cpp",function(){"use strict";return function(e){var t=e.getLanguage("c-like").rawDefinition();return t.disableAutodetect=!1,t.name="C++",t.aliases=["cc","c++","h++","hpp","hh","hxx","cxx"],t}}());hljs.registerLanguage("ini",function(){"use strict";function e(e){return e?"string"==typeof e?e:e.source:null}function n(...n){return n.map(n=>e(n)).join("")}return function(a){var s={className:"number",relevance:0,variants:[{begin:/([\+\-]+)?[\d]+_[\d_]+/},{begin:a.NUMBER_RE}]},i=a.COMMENT();i.variants=[{begin:/;/,end:/$/},{begin:/#/,end:/$/}];var t={className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)}/}]},r={className:"literal",begin:/\bon|off|true|false|yes|no\b/},l={className:"string",contains:[a.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}]},c={begin:/\[/,end:/\]/,contains:[i,r,t,l,s,"self"],relevance:0},g="("+[/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/].map(n=>e(n)).join("|")+")";return{name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/,contains:[i,{className:"section",begin:/\[+/,end:/\]+/},{begin:n(g,"(\\s*\\.\\s*",g,")*",n("(?=",/\s*=\s*[^#\s]/,")")),className:"attr",starts:{end:/$/,contains:[i,c,r,t,l,s]}}]}}}());hljs.registerLanguage("objectivec",function(){"use strict";return function(e){var n=/[a-zA-Z@][a-zA-Z0-9_]*/,_={$pattern:n,keyword:"@interface @class @protocol @implementation"};return{name:"Objective-C",aliases:["mm","objc","obj-c"],keywords:{$pattern:n,keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},illegal:"/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class",begin:"("+_.keyword.split(" ").join("|")+")\\b",end:"({|$)",excludeEnd:!0,keywords:_,contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE,relevance:0}]}}}());hljs.registerLanguage("apache",function(){"use strict";return function(e){var n={className:"number",begin:"\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?"};return{name:"Apache config",aliases:["apacheconf"],case_insensitive:!0,contains:[e.HASH_COMMENT_MODE,{className:"section",begin:"",contains:[n,{className:"number",begin:":\\d{1,5}"},e.inherit(e.QUOTE_STRING_MODE,{relevance:0})]},{className:"attribute",begin:/\w+/,relevance:0,keywords:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{end:/$/,relevance:0,keywords:{literal:"on off all deny allow"},contains:[{className:"meta",begin:"\\s\\[",end:"\\]$"},{className:"variable",begin:"[\\$%]\\{",end:"\\}",contains:["self",{className:"number",begin:"[\\$%]\\d+"}]},n,{className:"number",begin:"\\d+"},e.QUOTE_STRING_MODE]}}],illegal:/\S/}}}());hljs.registerLanguage("java",function(){"use strict";function e(e){return e?"string"==typeof e?e:e.source:null}function n(e){return a("(",e,")?")}function a(...n){return n.map(n=>e(n)).join("")}function s(...n){return"("+n.map(n=>e(n)).join("|")+")"}return function(e){var t="false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",i={className:"meta",begin:"@[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},r=e=>a("[",e,"]+([",e,"_]*[",e,"]+)?"),c={className:"number",variants:[{begin:`\\b(0[bB]${r("01")})[lL]?`},{begin:`\\b(0${r("0-7")})[dDfFlL]?`},{begin:a(/\b0[xX]/,s(a(r("a-fA-F0-9"),/\./,r("a-fA-F0-9")),a(r("a-fA-F0-9"),/\.?/),a(/\./,r("a-fA-F0-9"))),/([pP][+-]?(\d+))?/,/[fFdDlL]?/)},{begin:a(/\b/,s(a(/\d*\./,r("\\d")),r("\\d")),/[eE][+-]?[\d]+[dDfF]?/)},{begin:a(/\b/,r(/\d/),n(/\.?/),n(r(/\d/)),/[dDfFlL]?/)}],relevance:0};return{name:"Java",aliases:["jsp"],keywords:t,illegal:/<\/|#/,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"class",beginKeywords:"class interface",end:/[{;=]/,excludeEnd:!0,keywords:"class interface",illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"new throw return else",relevance:0},{className:"function",begin:"([À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(<[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(\\s*,\\s*[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*)*>)?\\s+)+"+e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:t,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,keywords:t,relevance:0,contains:[i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},c,i]}}}());hljs.registerLanguage("x86asm",function(){"use strict";return function(s){return{name:"Intel x86 Assembly",case_insensitive:!0,keywords:{$pattern:"[.%]?"+s.IDENT_RE,keyword:"lock rep repe repz repne repnz xaquire xrelease bnd nobnd aaa aad aam aas adc add and arpl bb0_reset bb1_reset bound bsf bsr bswap bt btc btr bts call cbw cdq cdqe clc cld cli clts cmc cmp cmpsb cmpsd cmpsq cmpsw cmpxchg cmpxchg486 cmpxchg8b cmpxchg16b cpuid cpu_read cpu_write cqo cwd cwde daa das dec div dmint emms enter equ f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem fprem1 fptan frndint frstor fsave fscale fsetpm fsin fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr fsubrp ftst fucom fucomi fucomip fucomp fucompp fxam fxch fxtract fyl2x fyl2xp1 hlt ibts icebp idiv imul in inc incbin insb insd insw int int01 int1 int03 int3 into invd invpcid invlpg invlpga iret iretd iretq iretw jcxz jecxz jrcxz jmp jmpe lahf lar lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw loadall loadall286 lodsb lodsd lodsq lodsw loop loope loopne loopnz loopz lsl lss ltr mfence monitor mov movd movq movsb movsd movsq movsw movsx movsxd movzx mul mwait neg nop not or out outsb outsd outsw packssdw packsswb packuswb paddb paddd paddsb paddsiw paddsw paddusb paddusw paddw pand pandn pause paveb pavgusb pcmpeqb pcmpeqd pcmpeqw pcmpgtb pcmpgtd pcmpgtw pdistib pf2id pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pmachriw pmaddwd pmagw pmulhriw pmulhrwa pmulhrwc pmulhw pmullw pmvgezb pmvlzb pmvnzb pmvzb pop popa popad popaw popf popfd popfq popfw por prefetch prefetchw pslld psllq psllw psrad psraw psrld psrlq psrlw psubb psubd psubsb psubsiw psubsw psubusb psubusw psubw punpckhbw punpckhdq punpckhwd punpcklbw punpckldq punpcklwd push pusha pushad pushaw pushf pushfd pushfq pushfw pxor rcl rcr rdshr rdmsr rdpmc rdtsc rdtscp ret retf retn rol ror rdm rsdc rsldt rsm rsts sahf sal salc sar sbb scasb scasd scasq scasw sfence sgdt shl shld shr shrd sidt sldt skinit smi smint smintold smsw stc std sti stosb stosd stosq stosw str sub svdc svldt svts swapgs syscall sysenter sysexit sysret test ud0 ud1 ud2b ud2 ud2a umov verr verw fwait wbinvd wrshr wrmsr xadd xbts xchg xlatb xlat xor cmove cmovz cmovne cmovnz cmova cmovnbe cmovae cmovnb cmovb cmovnae cmovbe cmovna cmovg cmovnle cmovge cmovnl cmovl cmovnge cmovle cmovng cmovc cmovnc cmovo cmovno cmovs cmovns cmovp cmovpe cmovnp cmovpo je jz jne jnz ja jnbe jae jnb jb jnae jbe jna jg jnle jge jnl jl jnge jle jng jc jnc jo jno js jns jpo jnp jpe jp sete setz setne setnz seta setnbe setae setnb setnc setb setnae setcset setbe setna setg setnle setge setnl setl setnge setle setng sets setns seto setno setpe setp setpo setnp addps addss andnps andps cmpeqps cmpeqss cmpleps cmpless cmpltps cmpltss cmpneqps cmpneqss cmpnleps cmpnless cmpnltps cmpnltss cmpordps cmpordss cmpunordps cmpunordss cmpps cmpss comiss cvtpi2ps cvtps2pi cvtsi2ss cvtss2si cvttps2pi cvttss2si divps divss ldmxcsr maxps maxss minps minss movaps movhps movlhps movlps movhlps movmskps movntps movss movups mulps mulss orps rcpps rcpss rsqrtps rsqrtss shufps sqrtps sqrtss stmxcsr subps subss ucomiss unpckhps unpcklps xorps fxrstor fxrstor64 fxsave fxsave64 xgetbv xsetbv xsave xsave64 xsaveopt xsaveopt64 xrstor xrstor64 prefetchnta prefetcht0 prefetcht1 prefetcht2 maskmovq movntq pavgb pavgw pextrw pinsrw pmaxsw pmaxub pminsw pminub pmovmskb pmulhuw psadbw pshufw pf2iw pfnacc pfpnacc pi2fw pswapd maskmovdqu clflush movntdq movnti movntpd movdqa movdqu movdq2q movq2dq paddq pmuludq pshufd pshufhw pshuflw pslldq psrldq psubq punpckhqdq punpcklqdq addpd addsd andnpd andpd cmpeqpd cmpeqsd cmplepd cmplesd cmpltpd cmpltsd cmpneqpd cmpneqsd cmpnlepd cmpnlesd cmpnltpd cmpnltsd cmpordpd cmpordsd cmpunordpd cmpunordsd cmppd comisd cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtps2dq cvtps2pd cvtsd2si cvtsd2ss cvtsi2sd cvtss2sd cvttpd2pi cvttpd2dq cvttps2dq cvttsd2si divpd divsd maxpd maxsd minpd minsd movapd movhpd movlpd movmskpd movupd mulpd mulsd orpd shufpd sqrtpd sqrtsd subpd subsd ucomisd unpckhpd unpcklpd xorpd addsubpd addsubps haddpd haddps hsubpd hsubps lddqu movddup movshdup movsldup clgi stgi vmcall vmclear vmfunc vmlaunch vmload vmmcall vmptrld vmptrst vmread vmresume vmrun vmsave vmwrite vmxoff vmxon invept invvpid pabsb pabsw pabsd palignr phaddw phaddd phaddsw phsubw phsubd phsubsw pmaddubsw pmulhrsw pshufb psignb psignw psignd extrq insertq movntsd movntss lzcnt blendpd blendps blendvpd blendvps dppd dpps extractps insertps movntdqa mpsadbw packusdw pblendvb pblendw pcmpeqq pextrb pextrd pextrq phminposuw pinsrb pinsrd pinsrq pmaxsb pmaxsd pmaxud pmaxuw pminsb pminsd pminud pminuw pmovsxbw pmovsxbd pmovsxbq pmovsxwd pmovsxwq pmovsxdq pmovzxbw pmovzxbd pmovzxbq pmovzxwd pmovzxwq pmovzxdq pmuldq pmulld ptest roundpd roundps roundsd roundss crc32 pcmpestri pcmpestrm pcmpistri pcmpistrm pcmpgtq popcnt getsec pfrcpv pfrsqrtv movbe aesenc aesenclast aesdec aesdeclast aesimc aeskeygenassist vaesenc vaesenclast vaesdec vaesdeclast vaesimc vaeskeygenassist vaddpd vaddps vaddsd vaddss vaddsubpd vaddsubps vandpd vandps vandnpd vandnps vblendpd vblendps vblendvpd vblendvps vbroadcastss vbroadcastsd vbroadcastf128 vcmpeq_ospd vcmpeqpd vcmplt_ospd vcmpltpd vcmple_ospd vcmplepd vcmpunord_qpd vcmpunordpd vcmpneq_uqpd vcmpneqpd vcmpnlt_uspd vcmpnltpd vcmpnle_uspd vcmpnlepd vcmpord_qpd vcmpordpd vcmpeq_uqpd vcmpnge_uspd vcmpngepd vcmpngt_uspd vcmpngtpd vcmpfalse_oqpd vcmpfalsepd vcmpneq_oqpd vcmpge_ospd vcmpgepd vcmpgt_ospd vcmpgtpd vcmptrue_uqpd vcmptruepd vcmplt_oqpd vcmple_oqpd vcmpunord_spd vcmpneq_uspd vcmpnlt_uqpd vcmpnle_uqpd vcmpord_spd vcmpeq_uspd vcmpnge_uqpd vcmpngt_uqpd vcmpfalse_ospd vcmpneq_ospd vcmpge_oqpd vcmpgt_oqpd vcmptrue_uspd vcmppd vcmpeq_osps vcmpeqps vcmplt_osps vcmpltps vcmple_osps vcmpleps vcmpunord_qps vcmpunordps vcmpneq_uqps vcmpneqps vcmpnlt_usps vcmpnltps vcmpnle_usps vcmpnleps vcmpord_qps vcmpordps vcmpeq_uqps vcmpnge_usps vcmpngeps vcmpngt_usps vcmpngtps vcmpfalse_oqps vcmpfalseps vcmpneq_oqps vcmpge_osps vcmpgeps vcmpgt_osps vcmpgtps vcmptrue_uqps vcmptrueps vcmplt_oqps vcmple_oqps vcmpunord_sps vcmpneq_usps vcmpnlt_uqps vcmpnle_uqps vcmpord_sps vcmpeq_usps vcmpnge_uqps vcmpngt_uqps vcmpfalse_osps vcmpneq_osps vcmpge_oqps vcmpgt_oqps vcmptrue_usps vcmpps vcmpeq_ossd vcmpeqsd vcmplt_ossd vcmpltsd vcmple_ossd vcmplesd vcmpunord_qsd vcmpunordsd vcmpneq_uqsd vcmpneqsd vcmpnlt_ussd vcmpnltsd vcmpnle_ussd vcmpnlesd vcmpord_qsd vcmpordsd vcmpeq_uqsd vcmpnge_ussd vcmpngesd vcmpngt_ussd vcmpngtsd vcmpfalse_oqsd vcmpfalsesd vcmpneq_oqsd vcmpge_ossd vcmpgesd vcmpgt_ossd vcmpgtsd vcmptrue_uqsd vcmptruesd vcmplt_oqsd vcmple_oqsd vcmpunord_ssd vcmpneq_ussd vcmpnlt_uqsd vcmpnle_uqsd vcmpord_ssd vcmpeq_ussd vcmpnge_uqsd vcmpngt_uqsd vcmpfalse_ossd vcmpneq_ossd vcmpge_oqsd vcmpgt_oqsd vcmptrue_ussd vcmpsd vcmpeq_osss vcmpeqss vcmplt_osss vcmpltss vcmple_osss vcmpless vcmpunord_qss vcmpunordss vcmpneq_uqss vcmpneqss vcmpnlt_usss vcmpnltss vcmpnle_usss vcmpnless vcmpord_qss vcmpordss vcmpeq_uqss vcmpnge_usss vcmpngess vcmpngt_usss vcmpngtss vcmpfalse_oqss vcmpfalsess vcmpneq_oqss vcmpge_osss vcmpgess vcmpgt_osss vcmpgtss vcmptrue_uqss vcmptruess vcmplt_oqss vcmple_oqss vcmpunord_sss vcmpneq_usss vcmpnlt_uqss vcmpnle_uqss vcmpord_sss vcmpeq_usss vcmpnge_uqss vcmpngt_uqss vcmpfalse_osss vcmpneq_osss vcmpge_oqss vcmpgt_oqss vcmptrue_usss vcmpss vcomisd vcomiss vcvtdq2pd vcvtdq2ps vcvtpd2dq vcvtpd2ps vcvtps2dq vcvtps2pd vcvtsd2si vcvtsd2ss vcvtsi2sd vcvtsi2ss vcvtss2sd vcvtss2si vcvttpd2dq vcvttps2dq vcvttsd2si vcvttss2si vdivpd vdivps vdivsd vdivss vdppd vdpps vextractf128 vextractps vhaddpd vhaddps vhsubpd vhsubps vinsertf128 vinsertps vlddqu vldqqu vldmxcsr vmaskmovdqu vmaskmovps vmaskmovpd vmaxpd vmaxps vmaxsd vmaxss vminpd vminps vminsd vminss vmovapd vmovaps vmovd vmovq vmovddup vmovdqa vmovqqa vmovdqu vmovqqu vmovhlps vmovhpd vmovhps vmovlhps vmovlpd vmovlps vmovmskpd vmovmskps vmovntdq vmovntqq vmovntdqa vmovntpd vmovntps vmovsd vmovshdup vmovsldup vmovss vmovupd vmovups vmpsadbw vmulpd vmulps vmulsd vmulss vorpd vorps vpabsb vpabsw vpabsd vpacksswb vpackssdw vpackuswb vpackusdw vpaddb vpaddw vpaddd vpaddq vpaddsb vpaddsw vpaddusb vpaddusw vpalignr vpand vpandn vpavgb vpavgw vpblendvb vpblendw vpcmpestri vpcmpestrm vpcmpistri vpcmpistrm vpcmpeqb vpcmpeqw vpcmpeqd vpcmpeqq vpcmpgtb vpcmpgtw vpcmpgtd vpcmpgtq vpermilpd vpermilps vperm2f128 vpextrb vpextrw vpextrd vpextrq vphaddw vphaddd vphaddsw vphminposuw vphsubw vphsubd vphsubsw vpinsrb vpinsrw vpinsrd vpinsrq vpmaddwd vpmaddubsw vpmaxsb vpmaxsw vpmaxsd vpmaxub vpmaxuw vpmaxud vpminsb vpminsw vpminsd vpminub vpminuw vpminud vpmovmskb vpmovsxbw vpmovsxbd vpmovsxbq vpmovsxwd vpmovsxwq vpmovsxdq vpmovzxbw vpmovzxbd vpmovzxbq vpmovzxwd vpmovzxwq vpmovzxdq vpmulhuw vpmulhrsw vpmulhw vpmullw vpmulld vpmuludq vpmuldq vpor vpsadbw vpshufb vpshufd vpshufhw vpshuflw vpsignb vpsignw vpsignd vpslldq vpsrldq vpsllw vpslld vpsllq vpsraw vpsrad vpsrlw vpsrld vpsrlq vptest vpsubb vpsubw vpsubd vpsubq vpsubsb vpsubsw vpsubusb vpsubusw vpunpckhbw vpunpckhwd vpunpckhdq vpunpckhqdq vpunpcklbw vpunpcklwd vpunpckldq vpunpcklqdq vpxor vrcpps vrcpss vrsqrtps vrsqrtss vroundpd vroundps vroundsd vroundss vshufpd vshufps vsqrtpd vsqrtps vsqrtsd vsqrtss vstmxcsr vsubpd vsubps vsubsd vsubss vtestps vtestpd vucomisd vucomiss vunpckhpd vunpckhps vunpcklpd vunpcklps vxorpd vxorps vzeroall vzeroupper pclmullqlqdq pclmulhqlqdq pclmullqhqdq pclmulhqhqdq pclmulqdq vpclmullqlqdq vpclmulhqlqdq vpclmullqhqdq vpclmulhqhqdq vpclmulqdq vfmadd132ps vfmadd132pd vfmadd312ps vfmadd312pd vfmadd213ps vfmadd213pd vfmadd123ps vfmadd123pd vfmadd231ps vfmadd231pd vfmadd321ps vfmadd321pd vfmaddsub132ps vfmaddsub132pd vfmaddsub312ps vfmaddsub312pd vfmaddsub213ps vfmaddsub213pd vfmaddsub123ps vfmaddsub123pd vfmaddsub231ps vfmaddsub231pd vfmaddsub321ps vfmaddsub321pd vfmsub132ps vfmsub132pd vfmsub312ps vfmsub312pd vfmsub213ps vfmsub213pd vfmsub123ps vfmsub123pd vfmsub231ps vfmsub231pd vfmsub321ps vfmsub321pd vfmsubadd132ps vfmsubadd132pd vfmsubadd312ps vfmsubadd312pd vfmsubadd213ps vfmsubadd213pd vfmsubadd123ps vfmsubadd123pd vfmsubadd231ps vfmsubadd231pd vfmsubadd321ps vfmsubadd321pd vfnmadd132ps vfnmadd132pd vfnmadd312ps vfnmadd312pd vfnmadd213ps vfnmadd213pd vfnmadd123ps vfnmadd123pd vfnmadd231ps vfnmadd231pd vfnmadd321ps vfnmadd321pd vfnmsub132ps vfnmsub132pd vfnmsub312ps vfnmsub312pd vfnmsub213ps vfnmsub213pd vfnmsub123ps vfnmsub123pd vfnmsub231ps vfnmsub231pd vfnmsub321ps vfnmsub321pd vfmadd132ss vfmadd132sd vfmadd312ss vfmadd312sd vfmadd213ss vfmadd213sd vfmadd123ss vfmadd123sd vfmadd231ss vfmadd231sd vfmadd321ss vfmadd321sd vfmsub132ss vfmsub132sd vfmsub312ss vfmsub312sd vfmsub213ss vfmsub213sd vfmsub123ss vfmsub123sd vfmsub231ss vfmsub231sd vfmsub321ss vfmsub321sd vfnmadd132ss vfnmadd132sd vfnmadd312ss vfnmadd312sd vfnmadd213ss vfnmadd213sd vfnmadd123ss vfnmadd123sd vfnmadd231ss vfnmadd231sd vfnmadd321ss vfnmadd321sd vfnmsub132ss vfnmsub132sd vfnmsub312ss vfnmsub312sd vfnmsub213ss vfnmsub213sd vfnmsub123ss vfnmsub123sd vfnmsub231ss vfnmsub231sd vfnmsub321ss vfnmsub321sd rdfsbase rdgsbase rdrand wrfsbase wrgsbase vcvtph2ps vcvtps2ph adcx adox rdseed clac stac xstore xcryptecb xcryptcbc xcryptctr xcryptcfb xcryptofb montmul xsha1 xsha256 llwpcb slwpcb lwpval lwpins vfmaddpd vfmaddps vfmaddsd vfmaddss vfmaddsubpd vfmaddsubps vfmsubaddpd vfmsubaddps vfmsubpd vfmsubps vfmsubsd vfmsubss vfnmaddpd vfnmaddps vfnmaddsd vfnmaddss vfnmsubpd vfnmsubps vfnmsubsd vfnmsubss vfrczpd vfrczps vfrczsd vfrczss vpcmov vpcomb vpcomd vpcomq vpcomub vpcomud vpcomuq vpcomuw vpcomw vphaddbd vphaddbq vphaddbw vphadddq vphaddubd vphaddubq vphaddubw vphaddudq vphadduwd vphadduwq vphaddwd vphaddwq vphsubbw vphsubdq vphsubwd vpmacsdd vpmacsdqh vpmacsdql vpmacssdd vpmacssdqh vpmacssdql vpmacsswd vpmacssww vpmacswd vpmacsww vpmadcsswd vpmadcswd vpperm vprotb vprotd vprotq vprotw vpshab vpshad vpshaq vpshaw vpshlb vpshld vpshlq vpshlw vbroadcasti128 vpblendd vpbroadcastb vpbroadcastw vpbroadcastd vpbroadcastq vpermd vpermpd vpermps vpermq vperm2i128 vextracti128 vinserti128 vpmaskmovd vpmaskmovq vpsllvd vpsllvq vpsravd vpsrlvd vpsrlvq vgatherdpd vgatherqpd vgatherdps vgatherqps vpgatherdd vpgatherqd vpgatherdq vpgatherqq xabort xbegin xend xtest andn bextr blci blcic blsi blsic blcfill blsfill blcmsk blsmsk blsr blcs bzhi mulx pdep pext rorx sarx shlx shrx tzcnt tzmsk t1mskc valignd valignq vblendmpd vblendmps vbroadcastf32x4 vbroadcastf64x4 vbroadcasti32x4 vbroadcasti64x4 vcompresspd vcompressps vcvtpd2udq vcvtps2udq vcvtsd2usi vcvtss2usi vcvttpd2udq vcvttps2udq vcvttsd2usi vcvttss2usi vcvtudq2pd vcvtudq2ps vcvtusi2sd vcvtusi2ss vexpandpd vexpandps vextractf32x4 vextractf64x4 vextracti32x4 vextracti64x4 vfixupimmpd vfixupimmps vfixupimmsd vfixupimmss vgetexppd vgetexpps vgetexpsd vgetexpss vgetmantpd vgetmantps vgetmantsd vgetmantss vinsertf32x4 vinsertf64x4 vinserti32x4 vinserti64x4 vmovdqa32 vmovdqa64 vmovdqu32 vmovdqu64 vpabsq vpandd vpandnd vpandnq vpandq vpblendmd vpblendmq vpcmpltd vpcmpled vpcmpneqd vpcmpnltd vpcmpnled vpcmpd vpcmpltq vpcmpleq vpcmpneqq vpcmpnltq vpcmpnleq vpcmpq vpcmpequd vpcmpltud vpcmpleud vpcmpnequd vpcmpnltud vpcmpnleud vpcmpud vpcmpequq vpcmpltuq vpcmpleuq vpcmpnequq vpcmpnltuq vpcmpnleuq vpcmpuq vpcompressd vpcompressq vpermi2d vpermi2pd vpermi2ps vpermi2q vpermt2d vpermt2pd vpermt2ps vpermt2q vpexpandd vpexpandq vpmaxsq vpmaxuq vpminsq vpminuq vpmovdb vpmovdw vpmovqb vpmovqd vpmovqw vpmovsdb vpmovsdw vpmovsqb vpmovsqd vpmovsqw vpmovusdb vpmovusdw vpmovusqb vpmovusqd vpmovusqw vpord vporq vprold vprolq vprolvd vprolvq vprord vprorq vprorvd vprorvq vpscatterdd vpscatterdq vpscatterqd vpscatterqq vpsraq vpsravq vpternlogd vpternlogq vptestmd vptestmq vptestnmd vptestnmq vpxord vpxorq vrcp14pd vrcp14ps vrcp14sd vrcp14ss vrndscalepd vrndscaleps vrndscalesd vrndscaless vrsqrt14pd vrsqrt14ps vrsqrt14sd vrsqrt14ss vscalefpd vscalefps vscalefsd vscalefss vscatterdpd vscatterdps vscatterqpd vscatterqps vshuff32x4 vshuff64x2 vshufi32x4 vshufi64x2 kandnw kandw kmovw knotw kortestw korw kshiftlw kshiftrw kunpckbw kxnorw kxorw vpbroadcastmb2q vpbroadcastmw2d vpconflictd vpconflictq vplzcntd vplzcntq vexp2pd vexp2ps vrcp28pd vrcp28ps vrcp28sd vrcp28ss vrsqrt28pd vrsqrt28ps vrsqrt28sd vrsqrt28ss vgatherpf0dpd vgatherpf0dps vgatherpf0qpd vgatherpf0qps vgatherpf1dpd vgatherpf1dps vgatherpf1qpd vgatherpf1qps vscatterpf0dpd vscatterpf0dps vscatterpf0qpd vscatterpf0qps vscatterpf1dpd vscatterpf1dps vscatterpf1qpd vscatterpf1qps prefetchwt1 bndmk bndcl bndcu bndcn bndmov bndldx bndstx sha1rnds4 sha1nexte sha1msg1 sha1msg2 sha256rnds2 sha256msg1 sha256msg2 hint_nop0 hint_nop1 hint_nop2 hint_nop3 hint_nop4 hint_nop5 hint_nop6 hint_nop7 hint_nop8 hint_nop9 hint_nop10 hint_nop11 hint_nop12 hint_nop13 hint_nop14 hint_nop15 hint_nop16 hint_nop17 hint_nop18 hint_nop19 hint_nop20 hint_nop21 hint_nop22 hint_nop23 hint_nop24 hint_nop25 hint_nop26 hint_nop27 hint_nop28 hint_nop29 hint_nop30 hint_nop31 hint_nop32 hint_nop33 hint_nop34 hint_nop35 hint_nop36 hint_nop37 hint_nop38 hint_nop39 hint_nop40 hint_nop41 hint_nop42 hint_nop43 hint_nop44 hint_nop45 hint_nop46 hint_nop47 hint_nop48 hint_nop49 hint_nop50 hint_nop51 hint_nop52 hint_nop53 hint_nop54 hint_nop55 hint_nop56 hint_nop57 hint_nop58 hint_nop59 hint_nop60 hint_nop61 hint_nop62 hint_nop63",built_in:"ip eip rip al ah bl bh cl ch dl dh sil dil bpl spl r8b r9b r10b r11b r12b r13b r14b r15b ax bx cx dx si di bp sp r8w r9w r10w r11w r12w r13w r14w r15w eax ebx ecx edx esi edi ebp esp eip r8d r9d r10d r11d r12d r13d r14d r15d rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15 cs ds es fs gs ss st st0 st1 st2 st3 st4 st5 st6 st7 mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7 xmm8 xmm9 xmm10 xmm11 xmm12 xmm13 xmm14 xmm15 xmm16 xmm17 xmm18 xmm19 xmm20 xmm21 xmm22 xmm23 xmm24 xmm25 xmm26 xmm27 xmm28 xmm29 xmm30 xmm31 ymm0 ymm1 ymm2 ymm3 ymm4 ymm5 ymm6 ymm7 ymm8 ymm9 ymm10 ymm11 ymm12 ymm13 ymm14 ymm15 ymm16 ymm17 ymm18 ymm19 ymm20 ymm21 ymm22 ymm23 ymm24 ymm25 ymm26 ymm27 ymm28 ymm29 ymm30 ymm31 zmm0 zmm1 zmm2 zmm3 zmm4 zmm5 zmm6 zmm7 zmm8 zmm9 zmm10 zmm11 zmm12 zmm13 zmm14 zmm15 zmm16 zmm17 zmm18 zmm19 zmm20 zmm21 zmm22 zmm23 zmm24 zmm25 zmm26 zmm27 zmm28 zmm29 zmm30 zmm31 k0 k1 k2 k3 k4 k5 k6 k7 bnd0 bnd1 bnd2 bnd3 cr0 cr1 cr2 cr3 cr4 cr8 dr0 dr1 dr2 dr3 dr8 tr3 tr4 tr5 tr6 tr7 r0 r1 r2 r3 r4 r5 r6 r7 r0b r1b r2b r3b r4b r5b r6b r7b r0w r1w r2w r3w r4w r5w r6w r7w r0d r1d r2d r3d r4d r5d r6d r7d r0h r1h r2h r3h r0l r1l r2l r3l r4l r5l r6l r7l r8l r9l r10l r11l r12l r13l r14l r15l db dw dd dq dt ddq do dy dz resb resw resd resq rest resdq reso resy resz incbin equ times byte word dword qword nosplit rel abs seg wrt strict near far a32 ptr",meta:"%define %xdefine %+ %undef %defstr %deftok %assign %strcat %strlen %substr %rotate %elif %else %endif %if %ifmacro %ifctx %ifidn %ifidni %ifid %ifnum %ifstr %iftoken %ifempty %ifenv %error %warning %fatal %rep %endrep %include %push %pop %repl %pathsearch %depend %use %arg %stacksize %local %line %comment %endcomment .nolist __FILE__ __LINE__ __SECT__ __BITS__ __OUTPUT_FORMAT__ __DATE__ __TIME__ __DATE_NUM__ __TIME_NUM__ __UTC_DATE__ __UTC_TIME__ __UTC_DATE_NUM__ __UTC_TIME_NUM__ __PASS__ struc endstruc istruc at iend align alignb sectalign daz nodaz up down zero default option assume public bits use16 use32 use64 default section segment absolute extern global common cpu float __utf16__ __utf16le__ __utf16be__ __utf32__ __utf32le__ __utf32be__ __float8__ __float16__ __float32__ __float64__ __float80m__ __float80e__ __float128l__ __float128h__ __Infinity__ __QNaN__ __SNaN__ Inf NaN QNaN SNaN float8 float16 float32 float64 float80m float80e float128l float128h __FLOAT_DAZ__ __FLOAT_ROUND__ __FLOAT__"},contains:[s.COMMENT(";","$",{relevance:0}),{className:"number",variants:[{begin:"\\b(?:([0-9][0-9_]*)?\\.[0-9_]*(?:[eE][+-]?[0-9_]+)?|(0[Xx])?[0-9][0-9_]*\\.?[0-9_]*(?:[pP](?:[+-]?[0-9_]+)?)?)\\b",relevance:0},{begin:"\\$[0-9][0-9A-Fa-f]*",relevance:0},{begin:"\\b(?:[0-9A-Fa-f][0-9A-Fa-f_]*[Hh]|[0-9][0-9_]*[DdTt]?|[0-7][0-7_]*[QqOo]|[0-1][0-1_]*[BbYy])\\b"},{begin:"\\b(?:0[Xx][0-9A-Fa-f_]+|0[DdTt][0-9_]+|0[QqOo][0-7_]+|0[BbYy][0-1_]+)\\b"}]},s.QUOTE_STRING_MODE,{className:"string",variants:[{begin:"'",end:"[^\\\\]'"},{begin:"`",end:"[^\\\\]`"}],relevance:0},{className:"symbol",variants:[{begin:"^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)"},{begin:"^\\s*%%[A-Za-z0-9_$#@~.?]*:"}],relevance:0},{className:"subst",begin:"%[0-9]+",relevance:0},{className:"subst",begin:"%!S+",relevance:0},{className:"meta",begin:/^\s*\.[\w_-]+/}]}}}());hljs.registerLanguage("kotlin",function(){"use strict";return function(e){var n={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual trait volatile transient native default",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},a={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@"},i={className:"subst",begin:"\\${",end:"}",contains:[e.C_NUMBER_MODE]},s={className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},t={className:"string",variants:[{begin:'"""',end:'"""(?=[^"])',contains:[s,i]},{begin:"'",end:"'",illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,s,i]}]};i.contains.push(t);var r={className:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?"},l={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[e.inherit(t,{className:"meta-string"})]}]},c=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),o={variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]},d=o;return d.variants[1].contains=[o],o.variants[1].contains=[d],{name:"Kotlin",aliases:["kt"],keywords:n,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,c,{className:"keyword",begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",begin:/@\w+/}]}},a,r,l,{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:n,illegal:/fun\s+(<.*>)?[^\s\(]+(\s+[^\s\(]+)\s*=/,relevance:5,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin://,keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:n,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[o,e.C_LINE_COMMENT_MODE,c],relevance:0},e.C_LINE_COMMENT_MODE,c,r,l,t,e.C_NUMBER_MODE]},c]},{className:"class",beginKeywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},e.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,]|$/,excludeBegin:!0,returnEnd:!0},r,l]},t,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:"\n"},{className:"number",begin:"\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",relevance:0}]}}}());hljs.registerLanguage("armasm",function(){"use strict";return function(s){const e={variants:[s.COMMENT("^[ \\t]*(?=#)","$",{relevance:0,excludeBegin:!0}),s.COMMENT("[;@]","$",{relevance:0}),s.C_LINE_COMMENT_MODE,s.C_BLOCK_COMMENT_MODE]};return{name:"ARM Assembly",case_insensitive:!0,aliases:["arm"],keywords:{$pattern:"\\.?"+s.IDENT_RE,meta:".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND ",built_in:"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 pc lr sp ip sl sb fp a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 d16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 {PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @"},contains:[{className:"keyword",begin:"\\b(adc|(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|wfe|wfi|yield)(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?[sptrx]?(?=\\s)"},e,s.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'",relevance:0},{className:"title",begin:"\\|",end:"\\|",illegal:"\\n",relevance:0},{className:"number",variants:[{begin:"[#$=]?0x[0-9a-f]+"},{begin:"[#$=]?0b[01]+"},{begin:"[#$=]\\d+"},{begin:"\\b\\d+"}],relevance:0},{className:"symbol",variants:[{begin:"^[ \\t]*[a-z_\\.\\$][a-z0-9_\\.\\$]+:"},{begin:"^[a-z_\\.\\$][a-z0-9_\\.\\$]+"},{begin:"[=#]\\w+"}],relevance:0}]}}}());hljs.registerLanguage("go",function(){"use strict";return function(e){var n={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",literal:"true false iota nil",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{name:"Go",aliases:["golang"],keywords:n,illegal:">>|\.\.\.) /},i={className:"subst",begin:/\{/,end:/\}/,keywords:n,illegal:/#/},s={begin:/\{\{/,relevance:0},r={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/(u|b)?r?'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/(u|b)?r?"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/(fr|rf|f)'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a,s,i]},{begin:/(fr|rf|f)"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a,s,i]},{begin:/(u|r|ur)'/,end:/'/,relevance:10},{begin:/(u|r|ur)"/,end:/"/,relevance:10},{begin:/(b|br)'/,end:/'/},{begin:/(b|br)"/,end:/"/},{begin:/(fr|rf|f)'/,end:/'/,contains:[e.BACKSLASH_ESCAPE,s,i]},{begin:/(fr|rf|f)"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,s,i]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},l={className:"number",relevance:0,variants:[{begin:e.BINARY_NUMBER_RE+"[lLjJ]?"},{begin:"\\b(0o[0-7]+)[lLjJ]?"},{begin:e.C_NUMBER_RE+"[lLjJ]?"}]},t={className:"params",variants:[{begin:/\(\s*\)/,skip:!0,className:null},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:["self",a,l,r,e.HASH_COMMENT_MODE]}]};return i.contains=[r,l,a],{name:"Python",aliases:["py","gyp","ipython"],keywords:n,illegal:/(<\/|->|\?)|=>/,contains:[a,l,{beginKeywords:"if",relevance:0},r,e.HASH_COMMENT_MODE,{variants:[{className:"function",beginKeywords:"def"},{className:"class",beginKeywords:"class"}],end:/:/,illegal:/[${=;\n,]/,contains:[e.UNDERSCORE_TITLE_MODE,t,{begin:/->/,endsWithParent:!0,keywords:"None"}]},{className:"meta",begin:/^[\t ]*@/,end:/$/},{begin:/\b(print|exec)\(/}]}}}());hljs.registerLanguage("shell",function(){"use strict";return function(s){return{name:"Shell Session",aliases:["console"],contains:[{className:"meta",begin:"^\\s{0,3}[/\\w\\d\\[\\]()@-]*[>%$#]",starts:{end:"$",subLanguage:"bash"}}]}}}());hljs.registerLanguage("scala",function(){"use strict";return function(e){var n={className:"subst",variants:[{begin:"\\$[A-Za-z0-9_]+"},{begin:"\\${",end:"}"}]},a={className:"string",variants:[{begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:'"""',end:'"""',relevance:10},{begin:'[a-z]+"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,n]},{className:"string",begin:'[a-z]+"""',end:'"""',contains:[n],relevance:10}]},s={className:"type",begin:"\\b[A-Z][A-Za-z0-9_]*",relevance:0},t={className:"title",begin:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,relevance:0},i={className:"class",beginKeywords:"class object trait type",end:/[:={\[\n;]/,excludeEnd:!0,contains:[{beginKeywords:"extends with",relevance:10},{begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[s]},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[s]},t]},l={className:"function",beginKeywords:"def",end:/[:={\[(\n;]/,excludeEnd:!0,contains:[t]};return{name:"Scala",keywords:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,{className:"symbol",begin:"'\\w[\\w\\d_]*(?!')"},s,l,i,e.C_NUMBER_MODE,{className:"meta",begin:"@[A-Za-z]+"}]}}}());hljs.registerLanguage("julia",function(){"use strict";return function(e){var r="[A-Za-z_\\u00A1-\\uFFFF][A-Za-z_0-9\\u00A1-\\uFFFF]*",t={$pattern:r,keyword:"in isa where baremodule begin break catch ccall const continue do else elseif end export false finally for function global if import importall let local macro module quote return true try using while type immutable abstract bitstype typealias ",literal:"true false ARGS C_NULL DevNull ENDIAN_BOM ENV I Inf Inf16 Inf32 Inf64 InsertionSort JULIA_HOME LOAD_PATH MergeSort NaN NaN16 NaN32 NaN64 PROGRAM_FILE QuickSort RoundDown RoundFromZero RoundNearest RoundNearestTiesAway RoundNearestTiesUp RoundToZero RoundUp STDERR STDIN STDOUT VERSION catalan e|0 eu|0 eulergamma golden im nothing pi γ π φ ",built_in:"ANY AbstractArray AbstractChannel AbstractFloat AbstractMatrix AbstractRNG AbstractSerializer AbstractSet AbstractSparseArray AbstractSparseMatrix AbstractSparseVector AbstractString AbstractUnitRange AbstractVecOrMat AbstractVector Any ArgumentError Array AssertionError Associative Base64DecodePipe Base64EncodePipe Bidiagonal BigFloat BigInt BitArray BitMatrix BitVector Bool BoundsError BufferStream CachingPool CapturedException CartesianIndex CartesianRange Cchar Cdouble Cfloat Channel Char Cint Cintmax_t Clong Clonglong ClusterManager Cmd CodeInfo Colon Complex Complex128 Complex32 Complex64 CompositeException Condition ConjArray ConjMatrix ConjVector Cptrdiff_t Cshort Csize_t Cssize_t Cstring Cuchar Cuint Cuintmax_t Culong Culonglong Cushort Cwchar_t Cwstring DataType Date DateFormat DateTime DenseArray DenseMatrix DenseVecOrMat DenseVector Diagonal Dict DimensionMismatch Dims DirectIndexString Display DivideError DomainError EOFError EachLine Enum Enumerate ErrorException Exception ExponentialBackOff Expr Factorization FileMonitor Float16 Float32 Float64 Function Future GlobalRef GotoNode HTML Hermitian IO IOBuffer IOContext IOStream IPAddr IPv4 IPv6 IndexCartesian IndexLinear IndexStyle InexactError InitError Int Int128 Int16 Int32 Int64 Int8 IntSet Integer InterruptException InvalidStateException Irrational KeyError LabelNode LinSpace LineNumberNode LoadError LowerTriangular MIME Matrix MersenneTwister Method MethodError MethodTable Module NTuple NewvarNode NullException Nullable Number ObjectIdDict OrdinalRange OutOfMemoryError OverflowError Pair ParseError PartialQuickSort PermutedDimsArray Pipe PollingFileWatcher ProcessExitedException Ptr QuoteNode RandomDevice Range RangeIndex Rational RawFD ReadOnlyMemoryError Real ReentrantLock Ref Regex RegexMatch RemoteChannel RemoteException RevString RoundingMode RowVector SSAValue SegmentationFault SerializationState Set SharedArray SharedMatrix SharedVector Signed SimpleVector Slot SlotNumber SparseMatrixCSC SparseVector StackFrame StackOverflowError StackTrace StepRange StepRangeLen StridedArray StridedMatrix StridedVecOrMat StridedVector String SubArray SubString SymTridiagonal Symbol Symmetric SystemError TCPSocket Task Text TextDisplay Timer Tridiagonal Tuple Type TypeError TypeMapEntry TypeMapLevel TypeName TypeVar TypedSlot UDPSocket UInt UInt128 UInt16 UInt32 UInt64 UInt8 UndefRefError UndefVarError UnicodeError UniformScaling Union UnionAll UnitRange Unsigned UpperTriangular Val Vararg VecElement VecOrMat Vector VersionNumber Void WeakKeyDict WeakRef WorkerConfig WorkerPool "},a={keywords:t,illegal:/<\//},n={className:"subst",begin:/\$\(/,end:/\)/,keywords:t},o={className:"variable",begin:"\\$"+r},i={className:"string",contains:[e.BACKSLASH_ESCAPE,n,o],variants:[{begin:/\w*"""/,end:/"""\w*/,relevance:10},{begin:/\w*"/,end:/"\w*/}]},l={className:"string",contains:[e.BACKSLASH_ESCAPE,n,o],begin:"`",end:"`"},s={className:"meta",begin:"@"+r};return a.name="Julia",a.contains=[{className:"number",begin:/(\b0x[\d_]*(\.[\d_]*)?|0x\.\d[\d_]*)p[-+]?\d+|\b0[box][a-fA-F0-9][a-fA-F0-9_]*|(\b\d[\d_]*(\.[\d_]*)?|\.\d[\d_]*)([eEfF][-+]?\d+)?/,relevance:0},{className:"string",begin:/'(.|\\[xXuU][a-zA-Z0-9]+)'/},i,l,s,{className:"comment",variants:[{begin:"#=",end:"=#",relevance:10},{begin:"#",end:"$"}]},e.HASH_COMMENT_MODE,{className:"keyword",begin:"\\b(((abstract|primitive)\\s+)type|(mutable\\s+)?struct)\\b"},{begin:/<:/}],n.contains=a.contains,a}}());hljs.registerLanguage("php-template",function(){"use strict";return function(n){return{name:"PHP template",subLanguage:"xml",contains:[{begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},n.inherit(n.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),n.inherit(n.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]}]}}}());hljs.registerLanguage("scss",function(){"use strict";return function(e){var t={className:"variable",begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b"},i={className:"number",begin:"#[0-9A-Fa-f]+"};return e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE,{name:"SCSS",case_insensitive:!0,illegal:"[=/|']",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"selector-id",begin:"\\#[A-Za-z0-9_-]+",relevance:0},{className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},{className:"selector-attr",begin:"\\[",end:"\\]",illegal:"$"},{className:"selector-tag",begin:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b",relevance:0},{className:"selector-pseudo",begin:":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)"},{className:"selector-pseudo",begin:"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)"},t,{className:"attribute",begin:"\\b(src|z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b",illegal:"[^\\s]"},{begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{begin:":",end:";",contains:[t,i,e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{className:"meta",begin:"!important"}]},{begin:"@(page|font-face)",lexemes:"@[a-z-]+",keywords:"@page @font-face"},{begin:"@",end:"[{;]",returnBegin:!0,keywords:"and or not only",contains:[{begin:"@[a-z-]+",className:"keyword"},t,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,i,e.CSS_NUMBER_MODE]}]}}}());hljs.registerLanguage("r",function(){"use strict";return function(e){var n="([a-zA-Z]|\\.[a-zA-Z.])[a-zA-Z0-9._]*";return{name:"R",contains:[e.HASH_COMMENT_MODE,{begin:n,keywords:{$pattern:n,keyword:"function if in break next repeat else for return switch while try tryCatch stop warning require library attach detach source setMethod setGeneric setGroupGeneric setClass ...",literal:"NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10"},relevance:0},{className:"number",begin:"0[xX][0-9a-fA-F]+[Li]?\\b",relevance:0},{className:"number",begin:"\\d+(?:[eE][+\\-]?\\d*)?L\\b",relevance:0},{className:"number",begin:"\\d+\\.(?!\\d)(?:i\\b)?",relevance:0},{className:"number",begin:"\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{className:"number",begin:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{begin:"`",end:"`",relevance:0},{className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:'"',end:'"'},{begin:"'",end:"'"}]}]}}}());hljs.registerLanguage("sql",function(){"use strict";return function(e){var t=e.COMMENT("--","$");return{name:"SQL",case_insensitive:!0,illegal:/[<>{}*]/,contains:[{beginKeywords:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment values with",end:/;/,endsWithParent:!0,keywords:{$pattern:/[\w\.]+/,keyword:"as abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias all allocate allow alter always analyze ancillary and anti any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound bucket buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain explode export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force foreign form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour hours http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lateral lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minutes minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notnull notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second seconds section securefile security seed segment select self semi sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tablesample tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unnest unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace window with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null unknown",built_in:"array bigint binary bit blob bool boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text time timestamp tinyint varchar varchar2 varying void"},contains:[{className:"string",begin:"'",end:"'",contains:[{begin:"''"}]},{className:"string",begin:'"',end:'"',contains:[{begin:'""'}]},{className:"string",begin:"`",end:"`"},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,e.HASH_COMMENT_MODE]},e.C_BLOCK_COMMENT_MODE,t,e.HASH_COMMENT_MODE]}}}());hljs.registerLanguage("c",function(){"use strict";return function(e){var n=e.getLanguage("c-like").rawDefinition();return n.name="C",n.aliases=["c","h"],n}}());hljs.registerLanguage("json",function(){"use strict";return function(n){var e={literal:"true false null"},i=[n.C_LINE_COMMENT_MODE,n.C_BLOCK_COMMENT_MODE],t=[n.QUOTE_STRING_MODE,n.C_NUMBER_MODE],a={end:",",endsWithParent:!0,excludeEnd:!0,contains:t,keywords:e},l={begin:"{",end:"}",contains:[{className:"attr",begin:/"/,end:/"/,contains:[n.BACKSLASH_ESCAPE],illegal:"\\n"},n.inherit(a,{begin:/:/})].concat(i),illegal:"\\S"},s={begin:"\\[",end:"\\]",contains:[n.inherit(a)],illegal:"\\S"};return t.push(l,s),i.forEach((function(n){t.push(n)})),{name:"JSON",contains:t,keywords:e,illegal:"\\S"}}}());hljs.registerLanguage("python-repl",function(){"use strict";return function(n){return{aliases:["pycon"],contains:[{className:"meta",starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}}}());hljs.registerLanguage("markdown",function(){"use strict";return function(n){const e={begin:"<",end:">",subLanguage:"xml",relevance:0},a={begin:"\\[.+?\\][\\(\\[].*?[\\)\\]]",returnBegin:!0,contains:[{className:"string",begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0,relevance:0},{className:"link",begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}],relevance:10},i={className:"strong",contains:[],variants:[{begin:/_{2}/,end:/_{2}/},{begin:/\*{2}/,end:/\*{2}/}]},s={className:"emphasis",contains:[],variants:[{begin:/\*(?!\*)/,end:/\*/},{begin:/_(?!_)/,end:/_/,relevance:0}]};i.contains.push(s),s.contains.push(i);var c=[e,a];return i.contains=i.contains.concat(c),s.contains=s.contains.concat(c),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:c=c.concat(i,s)},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:c}]}]},e,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},i,s,{className:"quote",begin:"^>\\s+",contains:c,end:"$"},{className:"code",variants:[{begin:"(`{3,})(.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})(.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{begin:"^[-\\*]{3,}",end:"$"},a,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}}}());hljs.registerLanguage("javascript",function(){"use strict";const e=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);function s(e){return r("(?=",e,")")}function r(...e){return e.map(e=>(function(e){return e?"string"==typeof e?e:e.source:null})(e)).join("")}return function(t){var i="[A-Za-z$_][0-9A-Za-z$_]*",c={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/},o={$pattern:"[A-Za-z$_][0-9A-Za-z$_]*",keyword:e.join(" "),literal:n.join(" "),built_in:a.join(" ")},l={className:"number",variants:[{begin:"\\b(0[bB][01]+)n?"},{begin:"\\b(0[oO][0-7]+)n?"},{begin:t.C_NUMBER_RE+"n?"}],relevance:0},E={className:"subst",begin:"\\$\\{",end:"\\}",keywords:o,contains:[]},d={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,E],subLanguage:"xml"}},g={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,E],subLanguage:"css"}},u={className:"string",begin:"`",end:"`",contains:[t.BACKSLASH_ESCAPE,E]};E.contains=[t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,d,g,u,l,t.REGEXP_MODE];var b=E.contains.concat([{begin:/\(/,end:/\)/,contains:["self"].concat(E.contains,[t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE])},t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE]),_={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:b};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:o,contains:[t.SHEBANG({binary:"node",relevance:5}),{className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,d,g,u,t.C_LINE_COMMENT_MODE,t.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+",contains:[{className:"type",begin:"\\{",end:"\\}",relevance:0},{className:"variable",begin:i+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),t.C_BLOCK_COMMENT_MODE,l,{begin:r(/[{,\n]\s*/,s(r(/(((\/\/.*)|(\/\*(.|\n)*\*\/))\s*)*/,i+"\\s*:"))),relevance:0,contains:[{className:"attr",begin:i+s("\\s*:"),relevance:0}]},{begin:"("+t.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE,t.REGEXP_MODE,{className:"function",begin:"(\\([^(]*(\\([^(]*(\\([^(]*\\))?\\))?\\)|"+t.UNDERSCORE_IDENT_RE+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:t.UNDERSCORE_IDENT_RE},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:o,contains:b}]}]},{begin:/,/,relevance:0},{className:"",begin:/\s/,end:/\s*/,skip:!0},{variants:[{begin:"<>",end:""},{begin:c.begin,end:c.end}],subLanguage:"xml",contains:[{begin:c.begin,end:c.end,skip:!0,contains:["self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[t.inherit(t.TITLE_MODE,{begin:i}),_],illegal:/\[|%/},{begin:/\$[(.]/},t.METHOD_GUARD,{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends"},t.UNDERSCORE_TITLE_MODE]},{beginKeywords:"constructor",end:/\{/,excludeEnd:!0},{begin:"(get|set)\\s+(?="+i+"\\()",end:/{/,keywords:"get set",contains:[t.inherit(t.TITLE_MODE,{begin:i}),{begin:/\(\)/},_]}],illegal:/#(?!!)/}}}());hljs.registerLanguage("typescript",function(){"use strict";const e=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);return function(r){var t={$pattern:"[A-Za-z$_][0-9A-Za-z$_]*",keyword:e.concat(["type","namespace","typedef","interface","public","private","protected","implements","declare","abstract","readonly"]).join(" "),literal:n.join(" "),built_in:a.concat(["any","void","number","boolean","string","object","never","enum"]).join(" ")},s={className:"meta",begin:"@[A-Za-z$_][0-9A-Za-z$_]*"},i={className:"number",variants:[{begin:"\\b(0[bB][01]+)n?"},{begin:"\\b(0[oO][0-7]+)n?"},{begin:r.C_NUMBER_RE+"n?"}],relevance:0},o={className:"subst",begin:"\\$\\{",end:"\\}",keywords:t,contains:[]},c={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[r.BACKSLASH_ESCAPE,o],subLanguage:"xml"}},l={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[r.BACKSLASH_ESCAPE,o],subLanguage:"css"}},E={className:"string",begin:"`",end:"`",contains:[r.BACKSLASH_ESCAPE,o]};o.contains=[r.APOS_STRING_MODE,r.QUOTE_STRING_MODE,c,l,E,i,r.REGEXP_MODE];var d={begin:"\\(",end:/\)/,keywords:t,contains:["self",r.QUOTE_STRING_MODE,r.APOS_STRING_MODE,r.NUMBER_MODE]},u={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,contains:[r.C_LINE_COMMENT_MODE,r.C_BLOCK_COMMENT_MODE,s,d]};return{name:"TypeScript",aliases:["ts"],keywords:t,contains:[r.SHEBANG(),{className:"meta",begin:/^\s*['"]use strict['"]/},r.APOS_STRING_MODE,r.QUOTE_STRING_MODE,c,l,E,r.C_LINE_COMMENT_MODE,r.C_BLOCK_COMMENT_MODE,i,{begin:"("+r.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[r.C_LINE_COMMENT_MODE,r.C_BLOCK_COMMENT_MODE,r.REGEXP_MODE,{className:"function",begin:"(\\([^(]*(\\([^(]*(\\([^(]*\\))?\\))?\\)|"+r.UNDERSCORE_IDENT_RE+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:r.UNDERSCORE_IDENT_RE},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,contains:d.contains}]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/[\{;]/,excludeEnd:!0,keywords:t,contains:["self",r.inherit(r.TITLE_MODE,{begin:"[A-Za-z$_][0-9A-Za-z$_]*"}),u],illegal:/%/,relevance:0},{beginKeywords:"constructor",end:/[\{;]/,excludeEnd:!0,contains:["self",u]},{begin:/module\./,keywords:{built_in:"module"},relevance:0},{beginKeywords:"module",end:/\{/,excludeEnd:!0},{beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:"interface extends"},{begin:/\$[(.]/},{begin:"\\."+r.IDENT_RE,relevance:0},s,d]}}}());hljs.registerLanguage("plaintext",function(){"use strict";return function(t){return{name:"Plain text",aliases:["text","txt"],disableAutodetect:!0}}}());hljs.registerLanguage("less",function(){"use strict";return function(e){var n="([\\w-]+|@{[\\w-]+})",a=[],s=[],t=function(e){return{className:"string",begin:"~?"+e+".*?"+e}},r=function(e,n,a){return{className:e,begin:n,relevance:a}},i={begin:"\\(",end:"\\)",contains:s,relevance:0};s.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,t("'"),t('"'),e.CSS_NUMBER_MODE,{begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",excludeEnd:!0}},r("number","#[0-9A-Fa-f]+\\b"),i,r("variable","@@?[\\w-]+",10),r("variable","@{[\\w-]+}"),r("built_in","~?`[^`]*?`"),{className:"attribute",begin:"[\\w-]+\\s*:",end:":",returnBegin:!0,excludeEnd:!0},{className:"meta",begin:"!important"});var c=s.concat({begin:"{",end:"}",contains:a}),l={beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not"}].concat(s)},o={begin:n+"\\s*:",returnBegin:!0,end:"[;}]",relevance:0,contains:[{className:"attribute",begin:n,end:":",excludeEnd:!0,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:s}}]},g={className:"keyword",begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{end:"[;{}]",returnEnd:!0,contains:s,relevance:0}},d={className:"variable",variants:[{begin:"@[\\w-]+\\s*:",relevance:15},{begin:"@[\\w-]+"}],starts:{end:"[;}]",returnEnd:!0,contains:c}},b={variants:[{begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:n,end:"{"}],returnBegin:!0,returnEnd:!0,illegal:"[<='$\"]",relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,l,r("keyword","all\\b"),r("variable","@{[\\w-]+}"),r("selector-tag",n+"%?",0),r("selector-id","#"+n),r("selector-class","\\."+n,0),r("selector-tag","&",0),{className:"selector-attr",begin:"\\[",end:"\\]"},{className:"selector-pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{begin:"\\(",end:"\\)",contains:c},{begin:"!important"}]};return a.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,g,d,o,b),{name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:a}}}());hljs.registerLanguage("lua",function(){"use strict";return function(e){var t={begin:"\\[=*\\[",end:"\\]=*\\]",contains:["self"]},a=[e.COMMENT("--(?!\\[=*\\[)","$"),e.COMMENT("--\\[=*\\[","\\]=*\\]",{contains:[t],relevance:10})];return{name:"Lua",keywords:{$pattern:e.UNDERSCORE_IDENT_RE,literal:"true false nil",keyword:"and break do else elseif end for goto if in local not or repeat return then until while",built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"},contains:a.concat([{className:"function",beginKeywords:"function",end:"\\)",contains:[e.inherit(e.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",begin:"\\(",endsWithParent:!0,contains:a}].concat(a)},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"\\[=*\\[",end:"\\]=*\\]",contains:[t],relevance:5}])}}}()); diff --git a/impressum.html b/impressum.html new file mode 100644 index 0000000..046d430 --- /dev/null +++ b/impressum.html @@ -0,0 +1,191 @@ + + + + + + Legal Information - CosmWasm book + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+
+

Legal Information

+

Infomation according to § 5 TMG

+

Provider

+

Confio GmbH
+7th Floor
+Potsdamer Platz 1
+10785 Berlin

+

Managing Director

+

Simon Warta

+

Contact

+

hello@confio.gmbh

+

Commercial Register

+

HRB 221575, Amtsgericht Charlottenburg

+

VAT number

+

DE339802279

+

Responsible for the content

+

Simon Warta
+c/o Confio GmbH
+7th Floor
+Potsdamer Platz 1
+10785 Berlin

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + diff --git a/index.html b/index.html new file mode 100644 index 0000000..b719f2f --- /dev/null +++ b/index.html @@ -0,0 +1,198 @@ + + + + + + Introduction - CosmWasm book + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+
+

Introduction

+

This book is a guide for creating CosmWasm smart contracts. It will lead you +step by step, and explain relevant topics from the easiest to the trickier +ones.

+

The idea of the book is not only to tell you about smart contracts API but also +to show you how to do it in a clean and maintainable way. We will show you +patterns that CosmWasm creators established and encouraged you to use.

+

Prerequirements

+

This book explores CosmWasm smart contracts. It is not a Rust tutorial, and it +assumes basic Rust knowledge. As you will probably learn it alongside this +book, I strongly recommend grasping the language itself first. You can find +great resources to start with Rust on Learn +Rust page.

+

CosmWasm API documentation

+

This is the guide-like documentation. If you are looking for the API +documentation, you may be interested in checking one of the following:

+ +

Contributing to the book

+

This book is maintained on Github and auto +deployed from there. Please create an +issue or pull request if you find +any mistakes, bugs, or ambiguities.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + diff --git a/mark.min.js b/mark.min.js new file mode 100644 index 0000000..1636231 --- /dev/null +++ b/mark.min.js @@ -0,0 +1,7 @@ +/*!*************************************************** +* mark.js v8.11.1 +* https://markjs.io/ +* Copyright (c) 2014–2018, Julian Kühnel +* Released under the MIT license https://git.io/vwTVl +*****************************************************/ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Mark=t()}(this,function(){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},n=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5e3;t(this,e),this.ctx=n,this.iframes=r,this.exclude=i,this.iframesTimeout=o}return n(e,[{key:"getContexts",value:function(){var e=[];return(void 0!==this.ctx&&this.ctx?NodeList.prototype.isPrototypeOf(this.ctx)?Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?this.ctx:"string"==typeof this.ctx?Array.prototype.slice.call(document.querySelectorAll(this.ctx)):[this.ctx]:[]).forEach(function(t){var n=e.filter(function(e){return e.contains(t)}).length>0;-1!==e.indexOf(t)||n||e.push(t)}),e}},{key:"getIframeContents",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},r=void 0;try{var i=e.contentWindow;if(r=i.document,!i||!r)throw new Error("iframe inaccessible")}catch(e){n()}r&&t(r)}},{key:"isIframeBlank",value:function(e){var t="about:blank",n=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&n!==t&&n}},{key:"observeIframeLoad",value:function(e,t,n){var r=this,i=!1,o=null,a=function a(){if(!i){i=!0,clearTimeout(o);try{r.isIframeBlank(e)||(e.removeEventListener("load",a),r.getIframeContents(e,t,n))}catch(e){n()}}};e.addEventListener("load",a),o=setTimeout(a,this.iframesTimeout)}},{key:"onIframeReady",value:function(e,t,n){try{"complete"===e.contentWindow.document.readyState?this.isIframeBlank(e)?this.observeIframeLoad(e,t,n):this.getIframeContents(e,t,n):this.observeIframeLoad(e,t,n)}catch(e){n()}}},{key:"waitForIframes",value:function(e,t){var n=this,r=0;this.forEachIframe(e,function(){return!0},function(e){r++,n.waitForIframes(e.querySelector("html"),function(){--r||t()})},function(e){e||t()})}},{key:"forEachIframe",value:function(t,n,r){var i=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},a=t.querySelectorAll("iframe"),s=a.length,c=0;a=Array.prototype.slice.call(a);var u=function(){--s<=0&&o(c)};s||u(),a.forEach(function(t){e.matches(t,i.exclude)?u():i.onIframeReady(t,function(e){n(t)&&(c++,r(e)),u()},u)})}},{key:"createIterator",value:function(e,t,n){return document.createNodeIterator(e,t,n,!1)}},{key:"createInstanceOnIframe",value:function(t){return new e(t.querySelector("html"),this.iframes)}},{key:"compareNodeIframe",value:function(e,t,n){if(e.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_PRECEDING){if(null===t)return!0;if(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)return!0}return!1}},{key:"getIteratorNode",value:function(e){var t=e.previousNode();return{prevNode:t,node:null===t?e.nextNode():e.nextNode()&&e.nextNode()}}},{key:"checkIframeFilter",value:function(e,t,n,r){var i=!1,o=!1;return r.forEach(function(e,t){e.val===n&&(i=t,o=e.handled)}),this.compareNodeIframe(e,t,n)?(!1!==i||o?!1===i||o||(r[i].handled=!0):r.push({val:n,handled:!0}),!0):(!1===i&&r.push({val:n,handled:!1}),!1)}},{key:"handleOpenIframes",value:function(e,t,n,r){var i=this;e.forEach(function(e){e.handled||i.getIframeContents(e.val,function(e){i.createInstanceOnIframe(e).forEachNode(t,n,r)})})}},{key:"iterateThroughNodes",value:function(e,t,n,r,i){for(var o,a=this,s=this.createIterator(t,e,r),c=[],u=[],l=void 0,h=void 0;void 0,o=a.getIteratorNode(s),h=o.prevNode,l=o.node;)this.iframes&&this.forEachIframe(t,function(e){return a.checkIframeFilter(l,h,e,c)},function(t){a.createInstanceOnIframe(t).forEachNode(e,function(e){return u.push(e)},r)}),u.push(l);u.forEach(function(e){n(e)}),this.iframes&&this.handleOpenIframes(c,e,n,r),i()}},{key:"forEachNode",value:function(e,t,n){var r=this,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},o=this.getContexts(),a=o.length;a||i(),o.forEach(function(o){var s=function(){r.iterateThroughNodes(e,o,t,n,function(){--a<=0&&i()})};r.iframes?r.waitForIframes(o,s):s()})}}],[{key:"matches",value:function(e,t){var n="string"==typeof t?[t]:t,r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(r){var i=!1;return n.every(function(t){return!r.call(e,t)||(i=!0,!1)}),i}return!1}}]),e}(),o=function(){function e(n){t(this,e),this.opt=r({},{diacritics:!0,synonyms:{},accuracy:"partially",caseSensitive:!1,ignoreJoiners:!1,ignorePunctuation:[],wildcards:"disabled"},n)}return n(e,[{key:"create",value:function(e){return"disabled"!==this.opt.wildcards&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),"disabled"!==this.opt.wildcards&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e),new RegExp(e,"gm"+(this.opt.caseSensitive?"":"i"))}},{key:"escapeStr",value:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}},{key:"createSynonymsRegExp",value:function(e){var t=this.opt.synonyms,n=this.opt.caseSensitive?"":"i",r=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(var i in t)if(t.hasOwnProperty(i)){var o=t[i],a="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(i):this.escapeStr(i),s="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(o):this.escapeStr(o);""!==a&&""!==s&&(e=e.replace(new RegExp("("+this.escapeStr(a)+"|"+this.escapeStr(s)+")","gm"+n),r+"("+this.processSynonyms(a)+"|"+this.processSynonyms(s)+")"+r))}return e}},{key:"processSynonyms",value:function(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}},{key:"setupWildcardsRegExp",value:function(e){return(e=e.replace(/(?:\\)*\?/g,function(e){return"\\"===e.charAt(0)?"?":""})).replace(/(?:\\)*\*/g,function(e){return"\\"===e.charAt(0)?"*":""})}},{key:"createWildcardsRegExp",value:function(e){var t="withSpaces"===this.opt.wildcards;return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}},{key:"setupIgnoreJoinersRegExp",value:function(e){return e.replace(/[^(|)\\]/g,function(e,t,n){var r=n.charAt(t+1);return/[(|)\\]/.test(r)||""===r?e:e+"\0"})}},{key:"createJoinersRegExp",value:function(e){var t=[],n=this.opt.ignorePunctuation;return Array.isArray(n)&&n.length&&t.push(this.escapeStr(n.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join("["+t.join("")+"]*"):e}},{key:"createDiacriticsRegExp",value:function(e){var t=this.opt.caseSensitive?"":"i",n=this.opt.caseSensitive?["aàáảãạăằắẳẵặâầấẩẫậäåāą","AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćč","CÇĆČ","dđď","DĐĎ","eèéẻẽẹêềếểễệëěēę","EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïī","IÌÍỈĨỊÎÏĪ","lł","LŁ","nñňń","NÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøō","OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rř","RŘ","sšśșş","SŠŚȘŞ","tťțţ","TŤȚŢ","uùúủũụưừứửữựûüůū","UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿ","YÝỲỶỸỴŸ","zžżź","ZŽŻŹ"]:["aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćčCÇĆČ","dđďDĐĎ","eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïīIÌÍỈĨỊÎÏĪ","lłLŁ","nñňńNÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rřRŘ","sšśșşSŠŚȘŞ","tťțţTŤȚŢ","uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿYÝỲỶỸỴŸ","zžżźZŽŻŹ"],r=[];return e.split("").forEach(function(i){n.every(function(n){if(-1!==n.indexOf(i)){if(r.indexOf(n)>-1)return!1;e=e.replace(new RegExp("["+n+"]","gm"+t),"["+n+"]"),r.push(n)}return!0})}),e}},{key:"createMergedBlanksRegExp",value:function(e){return e.replace(/[\s]+/gim,"[\\s]+")}},{key:"createAccuracyRegExp",value:function(e){var t=this,n=this.opt.accuracy,r="string"==typeof n?n:n.value,i="";switch(("string"==typeof n?[]:n.limiters).forEach(function(e){i+="|"+t.escapeStr(e)}),r){case"partially":default:return"()("+e+")";case"complementary":return"()([^"+(i="\\s"+(i||this.escapeStr("!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~¡¿")))+"]*"+e+"[^"+i+"]*)";case"exactly":return"(^|\\s"+i+")("+e+")(?=$|\\s"+i+")"}}}]),e}(),a=function(){function a(e){t(this,a),this.ctx=e,this.ie=!1;var n=window.navigator.userAgent;(n.indexOf("MSIE")>-1||n.indexOf("Trident")>-1)&&(this.ie=!0)}return n(a,[{key:"log",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"debug",r=this.opt.log;this.opt.debug&&"object"===(void 0===r?"undefined":e(r))&&"function"==typeof r[n]&&r[n]("mark.js: "+t)}},{key:"getSeparatedKeywords",value:function(e){var t=this,n=[];return e.forEach(function(e){t.opt.separateWordSearch?e.split(" ").forEach(function(e){e.trim()&&-1===n.indexOf(e)&&n.push(e)}):e.trim()&&-1===n.indexOf(e)&&n.push(e)}),{keywords:n.sort(function(e,t){return t.length-e.length}),length:n.length}}},{key:"isNumeric",value:function(e){return Number(parseFloat(e))==e}},{key:"checkRanges",value:function(e){var t=this;if(!Array.isArray(e)||"[object Object]"!==Object.prototype.toString.call(e[0]))return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];var n=[],r=0;return e.sort(function(e,t){return e.start-t.start}).forEach(function(e){var i=t.callNoMatchOnInvalidRanges(e,r),o=i.start,a=i.end;i.valid&&(e.start=o,e.length=a-o,n.push(e),r=a)}),n}},{key:"callNoMatchOnInvalidRanges",value:function(e,t){var n=void 0,r=void 0,i=!1;return e&&void 0!==e.start?(r=(n=parseInt(e.start,10))+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&r-t>0&&r-n>0?i=!0:(this.log("Ignoring invalid or overlapping range: "+JSON.stringify(e)),this.opt.noMatch(e))):(this.log("Ignoring invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:n,end:r,valid:i}}},{key:"checkWhitespaceRanges",value:function(e,t,n){var r=void 0,i=!0,o=n.length,a=t-o,s=parseInt(e.start,10)-a;return(r=(s=s>o?o:s)+parseInt(e.length,10))>o&&(r=o,this.log("End range automatically set to the max value of "+o)),s<0||r-s<0||s>o||r>o?(i=!1,this.log("Invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)):""===n.substring(s,r).replace(/\s+/g,"")&&(i=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:s,end:r,valid:i}}},{key:"getTextNodes",value:function(e){var t=this,n="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,function(e){r.push({start:n.length,end:(n+=e.textContent).length,node:e})},function(e){return t.matchesExclude(e.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},function(){e({value:n,nodes:r})})}},{key:"matchesExclude",value:function(e){return i.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}},{key:"wrapRangeInTextNode",value:function(e,t,n){var r=this.opt.element?this.opt.element:"mark",i=e.splitText(t),o=i.splitText(n-t),a=document.createElement(r);return a.setAttribute("data-markjs","true"),this.opt.className&&a.setAttribute("class",this.opt.className),a.textContent=i.textContent,i.parentNode.replaceChild(a,i),o}},{key:"wrapRangeInMappedTextNode",value:function(e,t,n,r,i){var o=this;e.nodes.every(function(a,s){var c=e.nodes[s+1];if(void 0===c||c.start>t){if(!r(a.node))return!1;var u=t-a.start,l=(n>a.end?a.end:n)-a.start,h=e.value.substr(0,a.start),f=e.value.substr(l+a.start);if(a.node=o.wrapRangeInTextNode(a.node,u,l),e.value=h+f,e.nodes.forEach(function(t,n){n>=s&&(e.nodes[n].start>0&&n!==s&&(e.nodes[n].start-=l),e.nodes[n].end-=l)}),n-=l,i(a.node.previousSibling,a.start),!(n>a.end))return!1;t=a.end}return!0})}},{key:"wrapGroups",value:function(e,t,n,r){return r((e=this.wrapRangeInTextNode(e,t,t+n)).previousSibling),e}},{key:"separateGroups",value:function(e,t,n,r,i){for(var o=t.length,a=1;a-1&&r(t[a],e)&&(e=this.wrapGroups(e,s,t[a].length,i))}return e}},{key:"wrapMatches",value:function(e,t,n,r,i){var o=this,a=0===t?0:t+1;this.getTextNodes(function(t){t.nodes.forEach(function(t){t=t.node;for(var i=void 0;null!==(i=e.exec(t.textContent))&&""!==i[a];){if(o.opt.separateGroups)t=o.separateGroups(t,i,a,n,r);else{if(!n(i[a],t))continue;var s=i.index;if(0!==a)for(var c=1;cAdminAdminAdmin ContractAdmin ContractExternal ContractExternal Contractexec execute { addr: "external_contract", msg: message_to_execute }exec message_to_execute \ No newline at end of file diff --git a/mdbook-plantuml-img/5ea499d765387fa9c0342773a37395cb916614ef.svg b/mdbook-plantuml-img/5ea499d765387fa9c0342773a37395cb916614ef.svg new file mode 100644 index 0000000..738d7f5 --- /dev/null +++ b/mdbook-plantuml-img/5ea499d765387fa9c0342773a37395cb916614ef.svg @@ -0,0 +1,6 @@ +adminadmins: Map<Addr, Timestamp>votings: Map<Addr, Addr>propose_admin(candidate: Addr)add_admin()leave()donate()execute(contract: Addr, message: Binary) admins_list() -> Vec<Addr>join_time() -> Timestampvotingvotes: Vec<Addr>votes_needed: u64closed: boolaccept()votes_list() -> Vec<Addr>externalmanagesforwards to \ No newline at end of file diff --git a/mdbook-plantuml-img/6528660a9f88cc401fb1b6e62181485b144687ae.svg b/mdbook-plantuml-img/6528660a9f88cc401fb1b6e62181485b144687ae.svg new file mode 100644 index 0000000..6d3e2c7 --- /dev/null +++ b/mdbook-plantuml-img/6528660a9f88cc401fb1b6e62181485b144687ae.svg @@ -0,0 +1 @@ +Admin 1Admin 1Admin 2Admin 2Admin 3Admin 3Admin ContractAdmin ContractVotesexec propose_admin { addr: new_admin }instantiate { addr: "new_admin", required: 3 }Votesexec accept {}query join_time { admin: "admin2" }resp join_time_resp { joined: ... }add voteexec accept {}query join_time { admin: "admin3" }resp join_time_resp { joined: ... }add voteadd_admin { addr: new_admin } \ No newline at end of file diff --git a/mdbook-plantuml-img/66f4c7e9766997a755cbf3507f13144b5787e5da.svg b/mdbook-plantuml-img/66f4c7e9766997a755cbf3507f13144b5787e5da.svg new file mode 100644 index 0000000..107b0f0 --- /dev/null +++ b/mdbook-plantuml-img/66f4c7e9766997a755cbf3507f13144b5787e5da.svg @@ -0,0 +1,4 @@ +adminadmins: Map<Addr, Timestamp>votings: Map<Addr, Addr>propose_admin(candidate: Addr)add_admin()leave()donate() admins_list() -> Vec<Addr>join_time() -> Timestampvotingvotes: Vec<Addr>votes_needed: u64closed: boolaccept()votes_list() -> Vec<Addr>manages \ No newline at end of file diff --git a/print.html b/print.html new file mode 100644 index 0000000..878c083 --- /dev/null +++ b/print.html @@ -0,0 +1,6270 @@ + + + + + + CosmWasm book + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+
+

Introduction

+

This book is a guide for creating CosmWasm smart contracts. It will lead you +step by step, and explain relevant topics from the easiest to the trickier +ones.

+

The idea of the book is not only to tell you about smart contracts API but also +to show you how to do it in a clean and maintainable way. We will show you +patterns that CosmWasm creators established and encouraged you to use.

+

Prerequirements

+

This book explores CosmWasm smart contracts. It is not a Rust tutorial, and it +assumes basic Rust knowledge. As you will probably learn it alongside this +book, I strongly recommend grasping the language itself first. You can find +great resources to start with Rust on Learn +Rust page.

+

CosmWasm API documentation

+

This is the guide-like documentation. If you are looking for the API +documentation, you may be interested in checking one of the following:

+ +

Contributing to the book

+

This book is maintained on Github and auto +deployed from there. Please create an +issue or pull request if you find +any mistakes, bugs, or ambiguities.

+

Setting up the environment

+

To work with CosmWasm smart contract, you will need rust installed on your +machine. If you don't have one, you can find installation instructions on the +Rust website.

+

I assume you are working with a stable Rust channel in this book.

+

Additionally, you will need the Wasm rust compiler backend installed to build +Wasm binaries. To install it, run:

+
rustup target add wasm32-unknown-unknown
+
+

Optionally if you want to try out your contracts on a testnet, you will need a +wasmd binary. We would focus on testing +contracts with Rust unit testing utility throughout the book, so it is not +required to follow. However, seeing the product working in a real-world +environment may be nice.

+

To install wasmd, first install the golang. Then +clone the wasmd and install it:

+
$ git clone git@github.com:CosmWasm/wasmd.git
+$ cd ./wasmd
+$ make install
+
+

Also, to be able to upload Rust Wasm Contracts into the blockchain, you will need +to install docker. To minimize your contract sizes, +it will be required to run CosmWasm Rust Optimizer; without that, more complex +contracts might exceed a size limit.

+

cosmwasm-check utility

+

An additional helpful tool for building smart contracts is the cosmwasm-checkutility. It allows you to check if the wasm binary is a proper smart contract ready to upload into the blockchain. You can install it using cargo:

+
$ cargo install cosmwasm-check
+
+

If the installation succeeds, you should be able to execute the utility from your command line.

+
$ cosmwasm-check --version
+Contract checking 1.2.3
+
+

Verifying the installation

+

To guarantee you are ready to build your smart contracts, you need to make sure you can build examples. +Checkout the cw-plus repository and run the testing command in +its folder:

+
$ git clone git@github.com:CosmWasm/cw-plus.git
+$ cd ./cw-plus
+cw-plus $ cargo test
+
+

You should see that everything in the repository gets compiled, and all tests pass.

+

cw-plus is a great place to find example contracts - look for them in contracts directory. The +repository is maintained by CosmWasm creators, so contracts in there should follow good practices.

+

To verify the cosmwasm-check utility, first, you need to build a smart contract. Go to some contract directory, for example, contracts/cw1-whitelist, and call cargo wasm:

+
cw-plus $ cd contracts/cw1-whitelist
+cw-plus/contracts/cw1-whitelist $ cargo wasm
+
+

You should be able to find your output binary in the target/wasm32-unknown-unknown/release/ +of the root repo directory - not in the contract directory itself! Now you can check if contract +validation passes:

+
cw-plus/contracts/cw1-whitelist $ cosmwasm-check ../../target/wasm32-unknown-unknown/release/cw1_whitelist.wasm
+Available capabilities: {"iterator", "cosmwasm_1_1", "cosmwasm_1_2", "stargate", "staking"}
+
+../../target/wasm32-unknown-unknown/release/cw1_whitelist.wasm: pass
+
+All contracts (1) passed checks!
+
+

Quick start with wasmd

+

In the past, we suggested playing with contracts on the malaga testnet using wasmd. +Now malaga is no longer operative, and the best way to test the contract in the +real environment is to use one of the big CosmWasm chains testnets - Osmosis, Juno, +Terra, or other ones. +Here is the +recommended introduction on how to start with the Osmosis testnet.

+

Basics

+

In this chapter, we will go through creating basic smart contracts step by step. +I will try to explain the core ideas behind CosmWasm and the typical contract structure.

+

Create a Rust project

+

As smart contracts are Rust library crates, we will start with creating one:

+
$ cargo new --lib ./empty-contract
+
+

You created a simple Rust library, but it is not yet ready to be a smart contract. The first thing +to do is to update the Cargo.toml file:

+
[package]
+name = "contract"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib"]
+
+[dependencies]
+cosmwasm-std = { version = "1.0.0-beta8", features = ["staking"] }
+
+
+

As you can see, I added a crate-type field for the library section. Generating the cdylib is +required to create a proper web assembly binary. The downside of this is that such a library cannot +be used as a dependency for other Rust crates - for now, it is not needed, but later we will show +how to approach reusing contracts as dependencies.

+

Additionally, there is one core dependency for smart contracts: the cosmwasm-std. This crate is a +standard library for smart contracts. It provides essential utilities for communication with the +outside world and a couple of helper functions and types. Every smart contract we will build will +use this dependency.

+

Entry points

+

Typical Rust application starts with the fn main() function called by the operating system. +Smart contracts are not significantly different. When the message is sent to the contract, a +function called "entry point" is called. Unlike native applications, which have only a single +main entry point, smart contracts have a couple corresponding to different message types: +instantiate, execute, query, sudo, migrate and more.

+

To start, we will go with three basic entry points:

+
    +
  • instantiate which is called once per smart contract lifetime - you can think about it as +a constructor or initializer of a contract.
  • +
  • execute for handling messages which are able to modify contract state - they are used to +perform some actual actions.
  • +
  • query for handling messages requesting some information from a contract; unlike execute, +they can never affect any contract state, and are used just like database queries.
  • +
+

Go to your src/lib.rs file, and start with an instantiate entry point:

+
use cosmwasm_std::{
+    entry_point, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,
+};
+
+#[entry_point]
+pub fn instantiate(
+    _deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    _msg: Empty,
+) -> StdResult<Response> {
+    Ok(Response::new())
+}
+
+

In fact, instantiate is the only entry point required for a smart contract to be valid. It is not +very useful in this form, but it is a start. Let's take a closer look at the entry point structure.

+

First, we start with importing couple of types just for more consistent usage. Then we define our +entry point. The instantiate takes four arguments:

+
    +
  • deps: DepsMut +is a utility type for communicating with the outer world - it allows querying +and updating the contract state, querying other contracts state, and gives access to an Api +object with a couple of helper functions for dealing with CW addresses.
  • +
  • env: Env +is an object representing the blockchains state when executing the message - the +chain height and id, current timestamp, and the called contract address.
  • +
  • info: MessageInfo +contains metainformation about the message which triggered an execution - +an address that sends the message, and chain native tokens sent with the message.
  • +
  • msg: Empty +is the message triggering execution itself - for now, it is Empty type that +represents {} JSON, but the type of this argument can be anything that is deserializable, +and we will pass more complex types here in the future.
  • +
+

If you are new to the blockchain, those arguments may not have much sense to you, but while +progressing with this guide, I will explain their usage one by one.

+

Notice an essential attribute decorating our entry point +#[entry_point]. Its purpose is to +wrap the whole entry point to the form Wasm runtime understands. The proper Wasm entry points +can use only basic types supported natively by Wasm specification, and Rust structures and enums +are not in this set. Working with such entry points would be rather overcomplicated, so CosmWasm +creators delivered the entry_point macro. It creates the raw Wasm entry point, calling the +decorated function internally and doing all the magic required to build our high-level Rust arguments +from arguments passed by Wasm runtime.

+

The next thing to look at is the return type. I used +StdResult<Response> for this simple example, +which is an alias for Result<Response, StdError>. The return entry point type would always be a +Result type, with some error type implementing +ToString trait and a well-defined type for success +case. For most entry points, an "Ok" case would be the +Response type that allows fitting the contract +into our actor model, which we will discuss very soon.

+

The body of the entry point is as simple as it could be - it always succeeds with a trivial empty response.

+

Building the contract

+

Now it is time to build our contract. We can use a traditional cargo build +pipeline for local testing purposes: cargo build for compiling it and cargo test for running all tests (which we don't have yet, but we will work on that +soon).

+

However, we need to create a wasm binary to upload the contract to blockchain. +We can do it by passing an additional argument to the build command:

+
$ cargo build --target wasm32-unknown-unknown --release
+
+

The --target argument tells cargo to perform cross-compilation for a given target instead of +building a native binary for an OS it is running on - in this case, wasm32-unknown-unknown, +which is a fancy name for Wasm target.

+

Additionally, I passed the --release argument to the command - it is not +required, but in most cases, debug information is not very useful while running +on-chain. It is crucial to reduce the uploaded binary size for gas cost +minimization. It is worth knowing that there is a CosmWasm Rust +Optimizer tool that takes care of +building even smaller binaries. For production, all the contracts should be +compiled using this tool, but for learning purposes, it is not an essential +thing to do.

+

Aliasing build command

+

Now I can see you are disappointed in building your contracts with some overcomplicated command +instead of simple cargo build. Fortunately, it is not the case. The common practice is to alias +the building command to make it as simple as building a native app.

+

Let's create the .cargo/config file in your contract project directory with the following content:

+
[alias]
+wasm = "build --target wasm32-unknown-unknown --release"
+wasm-debug = "build --target wasm32-unknown-unknown"
+
+

Now, building your Wasm binary is as easy as executing cargo wasm. We also added the additional +wasm-debug command for rare cases when we want to build the wasm binary, including debug information.

+

Checking contract validity

+

When the contract is built, the last step is to ensure it is a valid CosmWasm contract is to call +cosmwasm-check on it:

+
$ cargo wasm
+...
+$ cosmwasm-check ./target/wasm32-unknown-unknown/release/contract.wasm
+Available capabilities: {"cosmwasm_1_1", "staking", "stargate", "iterator", "cosmwasm_1_2"}
+
+./target/wasm32-unknown-unknown/release/contract.wasm: pass
+
+

Creating a query

+

We have already created a simple contract reacting to an empty instantiate message. Unfortunately, it +is not very useful. Let's make it a bit reactive.

+

First, we need to add serde crate to our dependencies. It would help us with the serialization and +deserialization of query messages. Update the Cargo.toml:

+
[package]
+name = "contract"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib"]
+
+[dependencies]
+cosmwasm-std = { version = "1.0.0-beta8", features = ["staking"] }
+serde = { version = "1.0.103", default-features = false, features = ["derive"] }
+
+[dev-dependencies]
+cw-multi-test = "0.13.4"
+
+

Now go to your src/lib.rs file, and add a new query entry point:

+
use cosmwasm_std::{
+    entry_point, to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo,
+    Response, StdResult,
+};
+use serde::{Deserialize, Serialize};
+
+#[derive(Serialize, Deserialize)]
+struct QueryResp {
+    message: String,
+}
+
+#[entry_point]
+pub fn instantiate(
+    _deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    _msg: Empty,
+) -> StdResult<Response> {
+    Ok(Response::new())
+}
+
+#[entry_point]
+pub fn query(_deps: Deps, _env: Env, _msg: Empty) -> StdResult<Binary> {
+    let resp = QueryResp {
+        message: "Hello World".to_owned(),
+    };
+
+    to_binary(&resp)
+}
+
+

Note that I omitted the previously created instantiate endpoint for simplicity - +not to overload you with code, I will always only show lines that changed in the code.

+

We first need a structure we will return from our query. We always want to return something +which is serializable. We are just deriving the +Serialize and +Deserialize traits from serde crate.

+

Then we need to implement our entry point. It is very similar to the instantiate one. The +first significant difference is a type of deps argument. For instantiate, it was a DepMut, +but here we went with a Deps +object. That is because the query can never alter the smart +contract's internal state. It can only read the state. It comes with some consequences - for example, +it is impossible to implement caching for future queries (as it would require some data cache to write +to).

+

The other difference is the lack of the info argument. The reason here is that the entry point which +performs actions (like instantiation or execution) can differ how an action is performed based on the +message metadata - for example, they can limit who can perform an action (and do so by checking the +message sender). It is not a case for queries. Queries are supposed just purely to return some +transformed contract state. It can be calculated based on some chain metadata (so the state can +"automatically" change after some time), but not on message info.

+

Note that our entry point still has the same Empty type for its msg argument - it means that the +query message we would send to the contract is still an empty JSON: {}

+

The last thing that changed is the return type. Instead of returning the Response type on the success +case, we return an arbitrary serializable object. This is because queries are not using a typical actor +model message flow - they cannot trigger any actions nor communicate with other contracts in ways different +than querying them (which is handled by the deps argument). The query always returns plain data, which +should be presented directly to the querier.

+

Now take a look at the implementation. Nothing complicated happens there - we create an object we want +to return and encode it to the Binary +type using the to_binary function.

+

Improving the message

+

We have a query, but there is a problem with the query message. It is always an empty JSON. It is terrible - +if we would like to add another query in the future, it would be difficult to have any reasonable distinction +between query variants.

+

In practice, we address this by using a non-empty query message type. Improve our contract:

+
use cosmwasm_std::{
+    entry_point, to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,
+};
+use serde::{Deserialize, Serialize};
+
+#[derive(Serialize, Deserialize)]
+struct QueryResp {
+    message: String,
+}
+
+#[derive(Serialize, Deserialize)]
+pub enum QueryMsg {
+    Greet {},
+}
+
+#[entry_point]
+pub fn instantiate(
+    _deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    _msg: Empty,
+) -> StdResult<Response> {
+    Ok(Response::new())
+}
+
+#[entry_point]
+pub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => {
+            let resp = QueryResp {
+                message: "Hello World".to_owned(),
+            };
+
+            to_binary(&resp)
+        }
+    }
+}
+
+

Now we introduced a proper message type for the query message. It is an +enum, and by +default, it would serialize to a JSON with a single field - the name of the field +will be an enum variant (in our case - always "greet" - at least for now), and the +value of this field would be an object assigned to this enum variant.

+

Note that our enum has no type assigned to the only Greet variant. Typically +in Rust, we create such variants without additional {} after the variant name. Here the +curly braces have a purpose - without them, the variant would serialize to just a string +type - so instead of { "greet": {} }, the JSON representation of this variant would be +"greet". This behavior brings inconsistency in the message schema. It is, generally, +a good habit to always add the {} to serde serializable empty enum variants - for better +JSON representation.

+

But now, we can still improve the code further. Right now, the query function has two +responsibilities. The first is obvious - handling the query itself. It was the first +assumption, and it is still there. But there is a new thing happening there - the query +message dispatching. It may not be obvious, as there is a single variant, but the query +function is an excellent way to become a massive unreadable match statement. To make +the code more SOLID, we will refactor it and +take out handling the greet message to a +separate function.

+
use cosmwasm_std::{
+    entry_point, to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,
+};
+use serde::{Deserialize, Serialize};
+
+#[derive(Serialize, Deserialize)]
+pub struct GreetResp {
+    message: String,
+}
+
+#[derive(Serialize, Deserialize)]
+pub enum QueryMsg {
+    Greet {},
+}
+
+#[entry_point]
+pub fn instantiate(
+    _deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    _msg: Empty,
+) -> StdResult<Response> {
+    Ok(Response::new())
+}
+
+#[entry_point]
+pub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+    }
+}
+
+mod query {
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+}
+
+

Now it looks much better. Note there are a couple of additional improvements. I +renamed the query-response type GreetResp as I may have different responses +for different queries. I want the name to relate only to the variant, not the +whole message.

+

Next is enclosing my new function in the module query. It makes it easier to +avoid name collisions - I can have the same variant for queries and execution +messages in the future, and their handlers would lie in separate namespaces.

+

A questionable decision may be returning StdResult instead of GreetResp +from greet function, as it would never return an error. It is a matter of +style, but I prefer consistency over the message handler, and the majority of +them would have failure cases - e.g. when reading the state.

+

Also, you might pass deps and env arguments to all your query handlers for +consistency. I'm not too fond of this, as it introduces unnecessary boilerplate +which doesn't read well, but I also agree with the consistency argument - I +leave it to your judgment.

+

Structuring the contract

+

You can see that our contract is becoming a bit bigger now. About 50 lines are maybe +not so much, but there are many different entities in a single file, and I think we +can do better. I can already distinguish three different types of entities in the code: +entry points, messages, and handlers. In most contracts, we would divide them across +three files. Start with extracting all the messages to src/msg.rs:

+
use serde::{Deserialize, Serialize};
+
+#[derive(Serialize, Deserialize)]
+pub struct GreetResp {
+    pub message: String,
+}
+
+#[derive(Serialize, Deserialize)]
+pub enum QueryMsg {
+    Greet {},
+}
+
+

You probably noticed that I made my GreetResp fields public. It is because they have +to be now accessed from a different module. Now move forward to the src/contract.rs file:

+
use crate::msg::{GreetResp, QueryMsg};
+use cosmwasm_std::{
+    to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,
+};
+
+pub fn instantiate(
+    _deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    _msg: Empty,
+) -> StdResult<Response> {
+    Ok(Response::new())
+}
+
+pub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+    }
+}
+
+mod query {
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+}
+
+

I moved most of the logic here, so my src/lib.rs is just a very thin library entry with nothing +else but module definitions and entry points definition. I removed the #[entry_point] attribute +from my query function in src/contract.rs. I will have a function with this attribute. +Still, I wanted to split functions' responsibility further - not the contract::query function is +the top-level query handler responsible for dispatching the query message. The query function on +crate-level is only an entry point. It is a subtle distinction, but it will make sense in the future +when we would like not to generate the entry points but to keep the dispatching functions. I introduced +the split now to show you the typical contract structure.

+

Now the last part, the src/lib.rs file:

+
use cosmwasm_std::{
+    entry_point, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,
+};
+
+mod contract;
+mod msg;
+
+#[entry_point]
+pub fn instantiate(deps: DepsMut, env: Env, info: MessageInfo, msg: Empty)
+  -> StdResult<Response>
+{
+    contract::instantiate(deps, env, info, msg)
+}
+
+#[entry_point]
+pub fn query(deps: Deps, env: Env, msg: msg::QueryMsg)
+  -> StdResult<Binary>
+{
+    contract::query(deps, env, msg)
+}
+
+

Straightforward top-level module. Definition of submodules and entry points, nothing more.

+

Now, when we have the contract ready to do something, let's go and test it.

+

Testing a query

+

Last time we created a new query, now it is time to test it out. We will start with the basics - +the unit test. This approach is simple and doesn't require knowledge besides Rust. Go to the +src/contract.rs and add a test in its module:

+
use crate::msg::{GreetResp, QueryMsg};
+use cosmwasm_std::{
+    to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,
+};
+
+pub fn instantiate(
+    _deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    _msg: Empty,
+) -> StdResult<Response> {
+    Ok(Response::new())
+}
+
+pub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+    }
+}
+
+mod query {
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    #[test]
+    fn greet_query() {
+        let resp = query::greet().unwrap();
+        assert_eq!(
+            resp,
+            GreetResp {
+                message: "Hello World".to_owned()
+            }
+        );
+    }
+}
+
+

If you ever wrote a unit test in Rust, nothing should surprise you here. Just a +simple test-only module contains local function unit tests. The problem is - this +test doesn't build yet. We need to tweak our message types a bit. Update the src/msg.rs:

+
use serde::{Deserialize, Serialize};
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub struct GreetResp {
+    pub message: String,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub enum QueryMsg {
+    Greet {},
+}
+
+

I added three new derives to both message types. PartialEq +is required to allow comparing types +for equality - so we can check if they are equal. The Debug +is a trait generating debug-printing +utilities. It is used by assert_eq! to +display information about mismatch if an assertion +fails. Note that because we are not testing the QueryMsg in any way, the additional trait derives +are optional. Still, it is a good practice to make all messages both PartialEq and Debug for +testability and consistency. +The last one, Clone is not needed for now yet, +but it is also good practice to allow messages to be cloned around. We will also require that +later, so I added it already not to go back and forth.

+

Now we are ready to run our test:

+
$ cargo test
+
+...
+running 1 test
+test contract::tests::greet_query ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+

Yay! Test passed!

+

Contract as a black box

+

Now let's go a step further. The Rust testing utility is a friendly tool for building even higher-level +tests. We are currently testing smart contract internals, but if you think about how your smart contract +is visible from the outside world. It is a single entity that is triggered by some input messages. We can +create tests that treat the whole contract as a black box by testing it via our query function. Let's +update our test:

+
use crate::msg::{GreetResp, QueryMsg};
+use cosmwasm_std::{
+    to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,
+};
+
+pub fn instantiate(
+    _deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    _msg: Empty,
+) -> StdResult<Response> {
+    Ok(Response::new())
+}
+
+pub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+    }
+}
+
+mod query {
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use cosmwasm_std::from_binary;
+    use cosmwasm_std::testing::{mock_dependencies, mock_env};
+
+    use super::*;
+
+    #[test]
+    fn greet_query() {
+        let resp = query(
+            mock_dependencies().as_ref(),
+            mock_env(),
+            QueryMsg::Greet {}
+        ).unwrap();
+        let resp: GreetResp = from_binary(&resp).unwrap();
+
+        assert_eq!(
+            resp,
+            GreetResp {
+                message: "Hello World".to_owned()
+            }
+        );
+    }
+}
+
+

We needed to produce two entities for the query functions: the deps and env instances. +Fortunately, cosmwasm-std provides utilities for testing those - +mock_dependencies +and mock_env +functions.

+

You may notice the dependencies mock of a type +OwnedDeps instead +of Deps, which we need here - this is why the +as_ref +function is called on it. If we looked for a DepsMut object, we would use +as_mut +instead.

+

We can rerun the test, and it should still pass. But when we think about that test reflecting +the actual use case, it is inaccurate. The contract is queried, but it was never instantiated! +In software engineering, it is equivalent to calling a getter without constructing an object - +taking it out of nowhere. It is a lousy testing approach. We can do better:

+

+use crate::msg::{GreetResp, QueryMsg};
+use cosmwasm_std::{
+    to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,
+};
+
+pub fn instantiate(
+    _deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    _msg: Empty,
+) -> StdResult<Response> {
+    Ok(Response::new())
+}
+
+pub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+    }
+}
+
+mod query {
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use cosmwasm_std::from_binary;
+    use cosmwasm_std::testing::{mock_dependencies, mock_env, mock_info};
+
+    use super::*;
+
+    #[test]
+    fn greet_query() {
+        let mut deps = mock_dependencies();
+        let env = mock_env();
+
+        instantiate(
+            deps.as_mut(),
+            env.clone(),
+            mock_info("sender", &[]),
+            Empty {},
+        )
+        .unwrap();
+
+        let resp = query(deps.as_ref(), env, QueryMsg::Greet {}).unwrap();
+        let resp: GreetResp = from_binary(&resp).unwrap();
+        assert_eq!(
+            resp,
+            GreetResp {
+                message: "Hello World".to_owned()
+            }
+        );
+    }
+}
+
+

A couple of new things here. First, I extracted the deps and env variables to their variables +and passed them to calls. The idea is that those variables represent some blockchain persistent state, +and we don't want to create them for every call. We want any changes to the contract state occurring +in instantiate to be visible in the query. Also, we want to control how the environment differs +on the query and instantiation.

+

The info argument is another story. The message info is unique for each message sent. To create the +info mock, we must pass two arguments to the +mock_info function.

+

First is the address performing a call. It may look strange to pass sender as an address instead of some +mysterious wasm followed by hash, but it is a valid address. For testing purposes, such addresses are +typically better, as they are way more verbose in case of failing tests.

+

The second argument is funds sent with the message. For now, we leave it as an empty slice, as I don't want +to talk about token transfers yet - we will cover it later.

+

So now it is more a real-case scenario. I see just one problem. I say that the contract is a single black +box. But here, nothing connects the instantiate call to the corresponding query. It seems that we assume +there is some global contract. But it seems that if we would like to have two contracts instantiated differently +in a single test case, it would become a mess. If only there would be some tool to abstract this for us, wouldn't +it be nice?

+

Introducing multitest

+

Let me introduce the multitest - +library for creating tests for smart contracts in Rust.

+

The core idea of multitest is abstracting an entity of contract and +simulating the blockchain environment for testing purposes. The purpose of this +is to be able to test communication between smart contracts. It does its job +well, but it is also an excellent tool for testing single-contract scenarios.

+

First, we need to add a multitest to our Cargo.toml.

+
[package]
+name = "contract"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib"]
+
+[dependencies]
+cosmwasm-std = { version = "1.0.0-beta8", features = ["staking"] }
+serde = { version = "1.0.103", default-features = false, features = ["derive"] }
+
+[dev-dependencies]
+cw-multi-test = "0.13.4"
+
+

I added a new +[dev-dependencies] +section with dependencies not used by the final binary +but which may be used by tools around the development process - for example, tests.

+

When we have the dependency ready, update our test to use the framework:

+
use crate::msg::{GreetResp, QueryMsg};
+use cosmwasm_std::{
+    to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,
+};
+
+pub fn instantiate(
+    _deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    _msg: Empty,
+) -> StdResult<Response> {
+    Ok(Response::new())
+}
+
+pub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+    }
+}
+
+#[allow(dead_code)]
+pub fn execute(
+    _deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    _msg: Empty
+) -> StdResult<Response> {
+    unimplemented!()
+}
+
+mod query {
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use cosmwasm_std::Addr;
+    use cw_multi_test::{App, ContractWrapper, Executor};
+
+    use super::*;
+
+    #[test]
+    fn greet_query() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &Empty {},
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: GreetResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::Greet {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            GreetResp {
+                message: "Hello World".to_owned()
+            }
+        );
+    }
+}
+
+

You probably notice that I added the function for an execute entry point. I didn't add the entry point +itself or the function's implementation, but for the multitest purposes contract has to contain at least +instantiate, query, and execute handlers. I attributed the function as +#[allow(dead_code)], +so, cargo will not complain about it not being used anywhere. Enabling it for tests only with #[cfg(test)] +would also be a way.

+

Then at the beginning of the test, I created the +App +object. It is a core multitest entity representing the virtual blockchain on +which we will run our contracts. As you can see, we can call functions on it +just like we would interact with blockchain using wasmd!

+

Right after creating app, I prepared the representation of the code, which +would be "uploaded" to the blockchain. As multitests are just native Rust +tests, they do not involve any Wasm binaries, but this name matches well what +happens in a real-life scenario. We store this object in the blockchain with +the store_code +function, and as a result, we are getting the code id - we would need it to +instantiate a contract.

+

Instantiation is the next step. In a single +instantiate_contract +call, we provide everything we would provide via wasmd - the contract code id, the address which performs instantiation,

+

the message triggering it, and any funds sent with the message (again - empty for now). We are adding the contract label +and its admin for migrations - None, as we don't need it yet.

+

And after the contract is online, we can query it. The +wrap function is an accessor +for querying Api (queries are handled a bit differently than other calls), and the +query_wasm_smart +queries are given a contract with the message. Also, we don't need to care about query results as Binary - multitest +assumes that we would like to deserialize them to some response type, so it takes advantage of Rust type elision to +provide us with a nice Api.

+

Now it's time to rerun the test. It should still pass, but now we nicely abstracted the testing contract as a whole, +not some internal functions. The next thing we should probably cover is making the contract more interesting +by adding some state.

+

Contract state

+

The contract we are working on already has some behavior that can answer a query. Unfortunately, it is +very predictable with its answers, and it has nothing to alter them. In this chapter, I introduce the +notion of state, which would allow us to bring true life to a smart contract.

+

The state would still be static for now - it would be initialized on contract instantiation. The state +would contain a list of admins who would be eligible to execute messages in the future.

+

The first thing to do is to update Cargo.toml with yet another dependency - the +storage-plus crate with high-level bindings for CosmWasm +smart contracts state management:

+
[package]
+name = "contract"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib"]
+
+[dependencies]
+cosmwasm-std = { version = "1.0.0-beta8", features = ["staking"] }
+serde = { version = "1.0.103", default-features = false, features = ["derive"] }
+cw-storage-plus = "0.13.4"
+
+[dev-dependencies]
+cw-multi-test = "0.13.4"
+
+

Now create a new file where you will keep a state for the contract - we typically call it src/state.rs:

+
use cosmwasm_std::Addr;
+use cw_storage_plus::Item;
+
+pub const ADMINS: Item<Vec<Addr>> = Item::new("admins");
+
+

And make sure we declare the module in src/lib.rs:

+
use cosmwasm_std::{
+    entry_point, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,
+};
+
+mod contract;
+mod msg;
+mod state;
+
+#[entry_point]
+pub fn instantiate(deps: DepsMut, env: Env, info: MessageInfo, msg: Empty)
+  -> StdResult<Response>
+{
+    contract::instantiate(deps, env, info, msg)
+}
+
+#[entry_point]
+pub fn query(deps: Deps, env: Env, msg: msg::QueryMsg)
+  -> StdResult<Binary>
+{
+    contract::query(deps, env, msg)
+}
+
+

The new thing we have here is the ADMINS constant of type Item<Vec<Addr>>. You could ask an excellent +question here - how is the state constant? How do I modify it if it is a constant value?

+

The answer is tricky - this constant is not keeping the state itself. The state is stored in the +blockchain and is accessed via the deps argument passed to entry points. The storage-plus constants +are just accessor utilities helping us access this state in a structured way.

+

In CosmWasm, the blockchain state is just massive key-value storage. The keys are prefixed with metainformation +pointing to the contract which owns them (so no other contract can alter them in any way), but even after +removing the prefixes, the single contract state is a smaller key-value pair.

+

storage-plus handles more complex state structures by additionally prefixing items keys intelligently. For now, +we just used the simplest storage entity - an +Item<_>, which holds a single optional +value of a given type - +Vec<Addr> in this case. And what would be a key to this item in the storage? It doesn't matter to us - it would +be figured out to be unique, based on a unique string passed to the +new function.

+

Before we would go into initializing our state, we need some better instantiate message. Go to src/msg.rs and create one:

+
use cosmwasm_std::Addr;
+use serde::{Deserialize, Serialize};
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub struct InstantiateMsg {
+    pub admins: Vec<String>,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub struct GreetResp {
+    pub message: String,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub enum QueryMsg {
+    Greet {},
+}
+
+

Now go forward to instantiate the entry point in src/contract.rs, and initialize our state to whatever we got in the instantiation message:

+
use crate::msg::{GreetResp, InstantiateMsg, QueryMsg};
+use crate::state::ADMINS;
+// --snip--
+use cosmwasm_std::{
+    to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,
+};
+
+pub fn instantiate(
+    deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    let admins: StdResult<Vec<_>> = msg
+        .admins
+        .into_iter()
+        .map(|addr| deps.api.addr_validate(&addr))
+        .collect();
+    ADMINS.save(deps.storage, &admins?)?;
+
+    Ok(Response::new())
+}
+
+pub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+    }
+}
+
+#[allow(dead_code)]
+pub fn execute(_deps: DepsMut, _env: Env, _info: MessageInfo, _msg: Empty) -> StdResult<Response> {
+    unimplemented!()
+}
+
+mod query {
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use cosmwasm_std::Addr;
+    use cw_multi_test::{App, ContractWrapper, Executor};
+
+    use super::*;
+
+    #[test]
+    fn greet_query() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &Empty {},
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: GreetResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::Greet {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            GreetResp {
+                message: "Hello World".to_owned()
+            }
+        );
+    }
+}
+
+

We also need to update the message type on entry point in src/lib.rs:

+
use cosmwasm_std::{entry_point, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};
+use msg::InstantiateMsg;
+// --snip--
+
+mod contract;
+mod msg;
+mod state;
+
+#[entry_point]
+pub fn instantiate(
+    deps: DepsMut,
+    env: Env,
+    info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    contract::instantiate(deps, env, info, msg)
+}
+
+#[entry_point]
+pub fn query(deps: Deps, env: Env, msg: msg::QueryMsg) -> StdResult<Binary> {
+    contract::query(deps, env, msg)
+}
+
+

Voila, that's all that is needed to update the state!

+

First, we need to transform the vector of strings into the vector of addresses to be stored. We cannot take +addresses as a message argument because not every string is a valid address. It might be a bit confusing when +we were working on tests. Any string could be used in the place of address. Let me explain.

+

Every string can be technically considered an address. However, not every string is an actual existing blockchain +address. When we keep anything of type Addr in the contract, we assume it is a proper address in the blockchain. +That is why the addr_validate +function exits - to check this precondition.

+

Having data to store, we use the save +function to write it into the contract state. Note that the first argument of save is +&mut Storage, which is actual blockchain +storage. As emphasized, the Item object stores nothing and is just an accessor. It determines how to store the data +in the storage given to it. The second argument is the serializable data to be stored.

+

It is a good time to check if the regression we have passes - try running our tests:

+
> cargo test
+
+...
+
+running 1 test
+test contract::tests::greet_query ... FAILED
+
+failures:
+
+---- contract::tests::greet_query stdout ----
+thread 'contract::tests::greet_query' panicked at 'called `Result::unwrap()` on an `Err` value: error executing WasmMsg:
+sender: owner
+Instantiate { admin: None, code_id: 1, msg: Binary(7b7d), funds: [], label: "Contract" }
+
+Caused by:
+    Error parsing into type contract::msg::InstantiateMsg: missing field `admins`', src/contract.rs:80:14
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+
+
+failures:
+    contract::tests::greet_query
+
+test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+error: test failed, to rerun pass '--lib'
+
+

Damn, we broke something! But be calm. Let's start with carefully reading an error message:

+
+

Error parsing into type contract::msg::InstantiateMsg: missing field admins', src/contract.rs:80:14

+
+

The problem is that in the test, we send an empty instantiation message in our test, but right now, our endpoint expects +to have an admin field. Multi-test framework tests contract from the entry point to results, so sending messages using MT +functions first serializes them. Then the contract deserializes them on the entry. But now it tries to deserialize the +empty JSON to some non-empty message! We can quickly fix it by updating the test:

+
use crate::msg::{GreetResp, InstantiateMsg, QueryMsg};
+use crate::state::ADMINS;
+use cosmwasm_std::{
+    to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,
+};
+
+pub fn instantiate(
+    deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    let admins: StdResult<Vec<_>> = msg
+        .admins
+        .into_iter()
+        .map(|addr| deps.api.addr_validate(&addr))
+        .collect();
+    ADMINS.save(deps.storage, &admins?)?;
+
+    Ok(Response::new())
+}
+
+pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+        AdminsList {} => to_binary(&query::admins_list(deps)?),
+    }
+}
+
+#[allow(dead_code)]
+pub fn execute(_deps: DepsMut, _env: Env, _info: MessageInfo, _msg: Empty) -> StdResult<Response> {
+    unimplemented!()
+}
+
+mod query {
+    use crate::msg::AdminsListResp;
+
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+
+    pub fn admins_list(deps: Deps) -> StdResult<AdminsListResp> {
+        let admins = ADMINS.load(deps.storage)?;
+        let resp = AdminsListResp { admins };
+        Ok(resp)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use cosmwasm_std::Addr;
+    use cw_multi_test::{App, ContractWrapper, Executor};
+
+    use super::*;
+
+    #[test]
+    fn greet_query() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: GreetResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::Greet {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            GreetResp {
+                message: "Hello World".to_owned()
+            }
+        );
+    }
+}
+
+

Testing state

+

When the state is initialized, we want a way to test it. We want to provide a +query to check if the instantiation affects the state. Just create a simple one +listing all admins. Start with adding a variant for query message and a corresponding response message in src/msg.rs. We'll call the variant AdminsList, the response AdminsListResp, and have it return a vector of cosmwasm_std::Addr:

+
use cosmwasm_std::Addr;
+use serde::{Deserialize, Serialize};
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub struct InstantiateMsg {
+    pub admins: Vec<Addr>,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub struct GreetResp {
+    pub message: String,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub struct AdminsListResp  {
+    pub admins: Vec<Addr>,
+}
+
+[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub enum QueryMsg {
+    Greet {},
+    AdminsList {},
+}
+
+

And implement it in src/contract.rs:

+
use crate::msg::{AdminsListResp, GreetResp, InstantiateMsg, QueryMsg};
+use crate::state::ADMINS;
+use cosmwasm_std::{
+    to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,
+};
+
+pub fn instantiate(
+    deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    let admins: StdResult<Vec<_>> = msg
+        .admins
+        .into_iter()
+        .map(|addr| deps.api.addr_validate(&addr))
+        .collect();
+    ADMINS.save(deps.storage, &admins?)?;
+
+    Ok(Response::new())
+}
+
+pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+        AdminsList {} => to_binary(&query::admins_list(deps)?),
+    }
+}
+ 
+#[allow(dead_code)]
+pub fn execute(_deps: DepsMut, _env: Env, _info: MessageInfo, _msg: Empty) -> StdResult<Response> {
+    unimplemented!()
+}
+
+mod query {
+   use super::*;
+
+   pub fn greet() -> StdResult<GreetResp> {
+       let resp = GreetResp {
+           message: "Hello World".to_owned(),
+       };
+
+       Ok(resp)
+   }
+
+    pub fn admins_list(deps: Deps) -> StdResult<AdminsListResp> {
+        let admins = ADMINS.load(deps.storage)?;
+        let resp = AdminsListResp { admins };
+        Ok(resp)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use cosmwasm_std::Addr;
+    use cw_multi_test::{App, ContractWrapper, Executor};
+
+    use super::*;
+
+    #[test]
+    fn greet_query() {
+       let mut app = App::default();
+
+       let code = ContractWrapper::new(execute, instantiate, query);
+       let code_id = app.store_code(Box::new(code));
+
+       let addr = app
+           .instantiate_contract(
+               code_id,
+               Addr::unchecked("owner"),
+               &InstantiateMsg { admins: vec![] },
+               &[],
+               "Contract",
+               None,
+           )
+           .unwrap();
+
+       let resp: GreetResp = app
+           .wrap()
+           .query_wasm_smart(addr, &QueryMsg::Greet {})
+           .unwrap();
+
+       assert_eq!(
+           resp,
+           GreetResp {
+               message: "Hello World".to_owned()
+           }
+       );
+    }
+}
+
+

Now when we have the tools to test the instantiation, let's write a test case:

+
use crate::msg::{AdminsListResp, GreetResp, InstantiateMsg, QueryMsg};
+use crate::state::ADMINS;
+use cosmwasm_std::{
+    to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,
+};
+
+pub fn instantiate(
+    deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    let admins: StdResult<Vec<_>> = msg
+        .admins
+        .into_iter()
+        .map(|addr| deps.api.addr_validate(&addr))
+        .collect();
+    ADMINS.save(deps.storage, &admins?)?;
+
+    Ok(Response::new())
+}
+
+pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+        AdminsList {} => to_binary(&query::admins_list(deps)?),
+    }
+}
+
+#[allow(dead_code)]
+pub fn execute(_deps: DepsMut, _env: Env, _info: MessageInfo, _msg: Empty) -> StdResult<Response> {
+    unimplemented!()
+}
+
+mod query {
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+
+    pub fn admins_list(deps: Deps) -> StdResult<AdminsListResp> {
+        let admins = ADMINS.load(deps.storage)?;
+        let resp = AdminsListResp { admins };
+        Ok(resp)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use cosmwasm_std::Addr;
+    use cw_multi_test::{App, ContractWrapper, Executor};
+
+    use super::*;
+
+    #[test]
+    fn instantiation() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(resp, AdminsListResp { admins: vec![] });
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec!["admin1".to_owned(), "admin2".to_owned()],
+                },
+                &[],
+                "Contract 2",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            AdminsListResp {
+                admins: vec![Addr::unchecked("admin1"), Addr::unchecked("admin2")],
+            }
+        );
+    }
+
+    #[test]
+    fn greet_query() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: GreetResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::Greet {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            GreetResp {
+                message: "Hello World".to_owned()
+            }
+        );
+    }
+}
+
+

The test is simple - instantiate the contract twice with different initial admins, and ensure the query result +is proper each time. This is often the way we test our contract - we execute bunch o messages on the contract, +and then we query it for some data, verifying if query responses are like expected.

+

We are doing a pretty good job developing our contract. Now it is time to use the state and allow for some executions.

+

Execution messages

+

We went through instantiate and query messages. It is finally time to introduce the last basic entry point - +the execute messages. It is similar to what we have done so far that I expect this to be just chilling and +revisiting our knowledge. I encourage you to try implementing what I am describing here on your own as an +exercise - without checking out the source code.

+

The idea of the contract will be easy - every contract admin would be eligible to call two execute messages:

+
    +
  • AddMembers message would allow the admin to add another address to the admin's list
  • +
  • Leave would allow and admin to remove himself from the list
  • +
+

Not too complicated. Let's go coding. Start with defining messages:

+
use cosmwasm_std::Addr;
+use serde::{Deserialize, Serialize};
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub struct InstantiateMsg {
+    pub admins: Vec<String>,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub enum ExecuteMsg {
+    AddMembers { admins: Vec<String> },
+    Leave {},
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub struct GreetResp {
+    pub message: String,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub struct AdminsListResp {
+    pub admins: Vec<Addr>,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub enum QueryMsg {
+    Greet {},
+    AdminsList {},
+}
+
+

And implement entry point:

+
use crate::msg::{AdminsListResp, ExecuteMsg, GreetResp, InstantiateMsg, QueryMsg};
+use crate::state::ADMINS;
+use cosmwasm_std::{to_binary, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};
+
+pub fn instantiate(
+    deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    let admins: StdResult<Vec<_>> = msg
+        .admins
+        .into_iter()
+        .map(|addr| deps.api.addr_validate(&addr))
+        .collect();
+    ADMINS.save(deps.storage, &admins?)?;
+
+    Ok(Response::new())
+}
+
+pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+        AdminsList {} => to_binary(&query::admins_list(deps)?),
+    }
+}
+ 
+#[allow(dead_code)]
+pub fn execute(
+    deps: DepsMut,
+    _env: Env,
+    info: MessageInfo,
+    msg: ExecuteMsg,
+) -> StdResult<Response> {
+    use ExecuteMsg::*;
+
+    match msg {
+        AddMembers { admins } => exec::add_members(deps, info, admins),
+        Leave {} => exec::leave(deps, info),
+    }
+}
+
+mod exec {
+    use cosmwasm_std::StdError;
+
+    use super::*;
+
+    pub fn add_members(
+        deps: DepsMut,
+        info: MessageInfo,
+        admins: Vec<String>,
+    ) -> StdResult<Response> {
+        let mut curr_admins = ADMINS.load(deps.storage)?;
+        if !curr_admins.contains(&info.sender) {
+            return Err(StdError::generic_err("Unauthorised access"));
+        }
+
+        let admins: StdResult<Vec<_>> = admins
+            .into_iter()
+            .map(|addr| deps.api.addr_validate(&addr))
+            .collect();
+
+        curr_admins.append(&mut admins?);
+        ADMINS.save(deps.storage, &curr_admins)?;
+
+        Ok(Response::new())
+    }
+
+    pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult<Response> {
+        ADMINS.update(deps.storage, move |admins| -> StdResult<_> {
+            let admins = admins
+                .into_iter()
+                .filter(|admin| *admin != info.sender)
+                .collect();
+            Ok(admins)
+        })?;
+
+        Ok(Response::new())
+    }
+}
+
+mod query {
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+
+    pub fn admins_list(deps: Deps) -> StdResult<AdminsListResp> {
+        let admins = ADMINS.load(deps.storage)?;
+        let resp = AdminsListResp { admins };
+        Ok(resp)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use cosmwasm_std::Addr;
+    use cw_multi_test::{App, ContractWrapper, Executor};
+
+    use crate::msg::AdminsListResp;
+
+    use super::*;
+
+    #[test]
+    fn instantiation() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(resp, AdminsListResp { admins: vec![] });
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec!["admin1".to_owned(), "admin2".to_owned()],
+                },
+                &[],
+                "Contract 2",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            AdminsListResp {
+                admins: vec![Addr::unchecked("admin1"), Addr::unchecked("admin2")],
+            }
+        );
+    }
+
+    #[test]
+    fn greet_query() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: GreetResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::Greet {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            GreetResp {
+                message: "Hello World".to_owned()
+            }
+        );
+    }
+}
+
+

The entry point itself also has to be created in src/lib.rs:

+
use cosmwasm_std::{entry_point, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};
+use msg::{ExecuteMsg, InstantiateMsg, QueryMsg};
+
+mod contract;
+mod msg;
+mod state;
+
+#[entry_point]
+pub fn instantiate(
+    deps: DepsMut,
+    env: Env,
+    info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    contract::instantiate(deps, env, info, msg)
+}
+
+#[entry_point]
+pub fn execute(deps: DepsMut, env: Env, info: MessageInfo, msg: ExecuteMsg) -> StdResult<Response> {
+    contract::execute(deps, env, info, msg)
+}
+
+#[entry_point]
+pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    contract::query(deps, env, msg)
+}
+
+

There are a couple of new things, but nothing significant. First is how do I reach the message sender +to verify he is an admin or remove him from the list - I used the info.sender field of MessageInfo, +which is how it looks like - the member. As the message is always sent from the proper address, the +sender is already of the Addr type - no need to validate it. Another new thing is the +update +function on an Item - it makes a read and update of an entity potentially more efficient. It is +possible to do it by reading admins first, then updating and storing the result.

+

You probably noticed that when working with Item, we always assume something +is there. But nothing forces us to initialize the ADMINS value on +instantiation! So what happens there? Well, both load and update functions +would return an error. But there is a +may_load +function, which returns StdResult<Option<T>> - it would return Ok(None) in +case of empty storage. There is even a possibility to remove an existing item +from storage with the +remove +function.

+

One thing to improve is error handling. While validating the sender to be admin, we are returning +some arbitrary string as an error. We can do better.

+

Error handling

+

In our contract, we now have an error situation when a user tries to execute AddMembers not being +an admin himself. There is no proper error case in +StdError to report this +situation, so we have to return a generic error with a message. It is not the best approach.

+

For error reporting, we encourage using thiserror +crate. Start with updating your dependencies:

+
[package]
+name = "contract"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib"]
+
+[dependencies]
+cosmwasm-std = { version = "1.0.0-beta8", features = ["staking"] }
+serde = { version = "1.0.103", default-features = false, features = ["derive"] }
+cw-storage-plus = "0.13.4"
+thiserror = "1"
+
+[dev-dependencies]
+cw-multi-test = "0.13.4"
+
+

Now we define an error type in src/error.rs:

+
use cosmwasm_std::{Addr, StdError};
+use thiserror::Error;
+
+#[derive(Error, Debug, PartialEq)]
+pub enum ContractError {
+    #[error("{0}")]
+    StdError(#[from] StdError),
+    #[error("{sender} is not contract admin")]
+    Unauthorized { sender: Addr },
+}
+
+

We also need to add the new module to src/lib.rs:

+
use cosmwasm_std::{entry_point, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};
+use msg::{ExecuteMsg, InstantiateMsg, QueryMsg};
+
+mod contract;
+mod error;
+mod msg;
+mod state;
+
+#[entry_point]
+pub fn instantiate(
+    deps: DepsMut,
+    env: Env,
+    info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    contract::instantiate(deps, env, info, msg)
+}
+
+#[entry_point]
+pub fn execute(deps: DepsMut, env: Env, info: MessageInfo, msg: ExecuteMsg) -> StdResult<Response> {
+    contract::execute(deps, env, info, msg)
+}
+
+#[entry_point]
+pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    contract::query(deps, env, msg)
+}
+
+

Using thiserror we define errors like a simple enum, and the crate ensures +that the type implements +std::error::Error +trait. A very nice feature of this crate is the inline definition of +Display trait by an +#[error] attribute. Also, another helpful thing is the #[from] attribute, +which automatically generates proper +From implementation, +so it is easy to use ? operator with thiserror types.

+

Now update the execute endpoint to use our new error type:

+
use crate::error::ContractError;
+use crate::msg::{AdminsListResp, ExecuteMsg, GreetResp, InstantiateMsg, QueryMsg};
+use crate::state::ADMINS;
+use cosmwasm_std::{to_binary, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};
+
+pub fn instantiate(
+    deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    let admins: StdResult<Vec<_>> = msg
+        .admins
+        .into_iter()
+        .map(|addr| deps.api.addr_validate(&addr))
+        .collect();
+    ADMINS.save(deps.storage, &admins?)?;
+
+    Ok(Response::new())
+}
+
+pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+        AdminsList {} => to_binary(&query::admins_list(deps)?),
+    }
+}
+ 
+pub fn execute(
+    deps: DepsMut,
+    _env: Env,
+    info: MessageInfo,
+    msg: ExecuteMsg,
+) -> Result<Response, ContractError> {
+    use ExecuteMsg::*;
+
+    match msg {
+        AddMembers { admins } => exec::add_members(deps, info, admins),
+        Leave {} => exec::leave(deps, info).map_err(Into::into),
+    }
+}
+
+mod exec {
+    use super::*;
+
+    pub fn add_members(
+        deps: DepsMut,
+        info: MessageInfo,
+        admins: Vec<String>,
+    ) -> Result<Response, ContractError> {
+        let mut curr_admins = ADMINS.load(deps.storage)?;
+        if !curr_admins.contains(&info.sender) {
+            return Err(ContractError::Unauthorized {
+                sender: info.sender,
+            });
+        }
+
+        let admins: StdResult<Vec<_>> = admins
+            .into_iter()
+            .map(|addr| deps.api.addr_validate(&addr))
+            .collect();
+
+        curr_admins.append(&mut admins?);
+        ADMINS.save(deps.storage, &curr_admins)?;
+
+        Ok(Response::new())
+    }
+
+    pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult<Response> {
+        ADMINS.update(deps.storage, move |admins| -> StdResult<_> {
+            let admins = admins
+                .into_iter()
+                .filter(|admin| *admin != info.sender)
+                .collect();
+            Ok(admins)
+        })?;
+
+        Ok(Response::new())
+    }
+}
+
+mod query {
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+
+    pub fn admins_list(deps: Deps) -> StdResult<AdminsListResp> {
+        let admins = ADMINS.load(deps.storage)?;
+        let resp = AdminsListResp { admins };
+        Ok(resp)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use cosmwasm_std::Addr;
+    use cw_multi_test::{App, ContractWrapper, Executor};
+
+    use crate::msg::AdminsListResp;
+
+    use super::*;
+
+    #[test]
+    fn instantiation() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(resp, AdminsListResp { admins: vec![] });
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec!["admin1".to_owned(), "admin2".to_owned()],
+                },
+                &[],
+                "Contract 2",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            AdminsListResp {
+                admins: vec![Addr::unchecked("admin1"), Addr::unchecked("admin2")],
+            }
+        );
+    }
+
+    #[test]
+    fn greet_query() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: GreetResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::Greet {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            GreetResp {
+                message: "Hello World".to_owned()
+            }
+        );
+    }
+}
+
+

The entry point return type also has to be updated:

+
use cosmwasm_std::{entry_point, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};
+use error::ContractError;
+use msg::{ExecuteMsg, InstantiateMsg, QueryMsg};
+
+mod contract;
+mod error;
+mod msg;
+mod state;
+
+#[entry_point]
+pub fn instantiate(
+    deps: DepsMut,
+    env: Env,
+    info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    contract::instantiate(deps, env, info, msg)
+}
+
+#[entry_point]
+pub fn execute(
+    deps: DepsMut,
+    env: Env,
+    info: MessageInfo,
+    msg: ExecuteMsg,
+) -> Result<Response, ContractError> {
+    contract::execute(deps, env, info, msg)
+}
+
+#[entry_point]
+pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    contract::query(deps, env, msg)
+}
+
+

Custom error and multi-test

+

Using proper custom error type has one nice upside - multi-test is maintaining error type using +the anyhow crate. It is a sibling of thiserror, designed +to implement type-erased errors in a way that allows getting the original error back.

+

Let's write a test that verifies that a non-admin cannot add himself to a list:

+
use crate::error::ContractError;
+use crate::msg::{AdminsListResp, ExecuteMsg, GreetResp, InstantiateMsg, QueryMsg};
+use crate::state::ADMINS;
+use cosmwasm_std::{to_binary, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};
+
+pub fn instantiate(
+    deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    let admins: StdResult<Vec<_>> = msg
+        .admins
+        .into_iter()
+        .map(|addr| deps.api.addr_validate(&addr))
+        .collect();
+    ADMINS.save(deps.storage, &admins?)?;
+
+    Ok(Response::new())
+}
+
+pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+        AdminsList {} => to_binary(&query::admins_list(deps)?),
+    }
+}
+
+pub fn execute(
+    deps: DepsMut,
+    _env: Env,
+    info: MessageInfo,
+    msg: ExecuteMsg,
+) -> Result<Response, ContractError> {
+    use ExecuteMsg::*;
+
+    match msg {
+        AddMembers { admins } => exec::add_members(deps, info, admins),
+        Leave {} => exec::leave(deps, info).map_err(Into::into),
+    }
+}
+
+mod exec {
+    use super::*;
+
+    pub fn add_members(
+        deps: DepsMut,
+        info: MessageInfo,
+        admins: Vec<String>,
+    ) -> Result<Response, ContractError> {
+        let mut curr_admins = ADMINS.load(deps.storage)?;
+        if !curr_admins.contains(&info.sender) {
+            return Err(ContractError::Unauthorized {
+                sender: info.sender,
+            });
+        }
+
+        let admins: StdResult<Vec<_>> = admins
+            .into_iter()
+            .map(|addr| deps.api.addr_validate(&addr))
+            .collect();
+
+        curr_admins.append(&mut admins?);
+        ADMINS.save(deps.storage, &curr_admins)?;
+
+        Ok(Response::new())
+    }
+
+    pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult<Response> {
+        ADMINS.update(deps.storage, move |admins| -> StdResult<_> {
+            let admins = admins
+                .into_iter()
+                .filter(|admin| *admin != info.sender)
+                .collect();
+            Ok(admins)
+        })?;
+
+        Ok(Response::new())
+    }
+}
+
+mod query {
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+
+    pub fn admins_list(deps: Deps) -> StdResult<AdminsListResp> {
+        let admins = ADMINS.load(deps.storage)?;
+        let resp = AdminsListResp { admins };
+        Ok(resp)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use cosmwasm_std::Addr;
+    use cw_multi_test::{App, ContractWrapper, Executor};
+
+    use crate::msg::AdminsListResp;
+
+    use super::*;
+
+    #[test]
+    fn instantiation() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(resp, AdminsListResp { admins: vec![] });
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec!["admin1".to_owned(), "admin2".to_owned()],
+                },
+                &[],
+                "Contract 2",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            AdminsListResp {
+                admins: vec![Addr::unchecked("admin1"), Addr::unchecked("admin2")],
+            }
+        );
+    }
+
+    #[test]
+    fn greet_query() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: GreetResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::Greet {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            GreetResp {
+                message: "Hello World".to_owned()
+            }
+        );
+    }
+
+    #[test]
+    fn unauthorized() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let err = app
+            .execute_contract(
+                Addr::unchecked("user"),
+                addr,
+                &ExecuteMsg::AddMembers {
+                    admins: vec!["user".to_owned()],
+                },
+                &[],
+            )
+            .unwrap_err();
+
+        assert_eq!(
+            ContractError::Unauthorized {
+                sender: Addr::unchecked("user")
+            },
+            err.downcast().unwrap()
+        );
+    }
+}
+
+

Executing a contract is very similar to any other call - we use an +execute_contract +function. As the execution may fail, we get an error type out of this call, but +instead of calling unwrap to extract a value out of it, we expect an error to +occur - this is the purpose of the +unwrap_err +call. Now, as we have an error value, we can check if it matches what we +expected with an assert_eq!. There is a slight complication - the error +returned from execute_contract is an +anyhow::Error +error, but we expect it to be a ContractError. Fortunately, as I said before, +anyhow errors can recover their original type using the +downcast +function. The unwrap right after it is needed because downcasting may fail. +The reason is that downcast doesn't magically know the type kept in the +underlying error. It deduces it by some context - here, it knows we expect it +to be a ContractError, because of being compared to it - type elision +miracles. But if the underlying error would not be a ContractError, then +unwrap would panic.

+

We just created a simple failure test for execution, but it is not enough to claim the contract is production-ready. +All reasonable ok-cases should be covered for that. I encourage you to create some tests and experiment with them as +an exercise after this chapter.

+

Events attributes and data

+

The only way our contract can communicate to the world, for now, is by queries. +Smart contracts are passive - they cannot invoke any action by themselves. They +can do it only as a reaction to a call. But if you tried playing with wasmd, +you know that execution on the blockchain can return some metadata.

+

There are two things the contract can return to the caller: events and data. +Events are something produced by almost every real-life smart contract. In +contrast, data is rarely used, designed for contract-to-contract communication.

+

Returning events

+

As an example, we would add an event admin_added emitted by our contract on the execution of +AddMembers:

+
use crate::error::ContractError;
+use crate::msg::{AdminsListResp, ExecuteMsg, GreetResp, InstantiateMsg, QueryMsg};
+use crate::state::ADMINS;
+use cosmwasm_std::{
+    to_binary, Binary, Deps, DepsMut, Env, Event, MessageInfo, Response, StdResult,
+};
+ 
+pub fn instantiate(
+    deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    let admins: StdResult<Vec<_>> = msg
+        .admins
+        .map(|addr| deps.api.addr_validate(&addr))
+        .collect();
+    ADMINS.save(deps.storage, &admins?)?;
+
+    Ok(Response::new())
+}
+
+pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+        AdminsList {} => to_binary(&query::admins_list(deps)?),
+    }
+}
+
+pub fn execute(
+    deps: DepsMut,
+    _env: Env,
+    info: MessageInfo,
+    msg: ExecuteMsg,
+) -> Result<Response, ContractError> {
+    use ExecuteMsg::*;
+
+    match msg {
+        AddMembers { admins } => exec::add_members(deps, info, admins),
+        Leave {} => exec::leave(deps, info).map_err(Into::into),
+    }
+}
+
+mod exec {
+    use super::*;
+
+    pub fn add_members(
+        deps: DepsMut,
+        info: MessageInfo,
+        admins: Vec<String>,
+    ) -> Result<Response, ContractError> {
+        let mut curr_admins = ADMINS.load(deps.storage)?;
+        if !curr_admins.contains(&info.sender) {
+            return Err(ContractError::Unauthorized {
+                sender: info.sender,
+            });
+        }
+
+        let events = admins
+            .iter()
+            .map(|admin| Event::new("admin_added").add_attribute("addr", admin));
+        let resp = Response::new()
+            .add_events(events)
+            .add_attribute("action", "add_members")
+            .add_attribute("added_count", admins.len().to_string());
+
+        let admins: StdResult<Vec<_>> = admins
+            .into_iter()
+            .map(|addr| deps.api.addr_validate(&addr))
+            .collect();
+
+        curr_admins.append(&mut admins?);
+        ADMINS.save(deps.storage, &curr_admins)?;
+
+        Ok(resp)
+    }
+
+    pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult<Response> {
+        ADMINS.update(deps.storage, move |admins| -> StdResult<_> {
+            let admins = admins
+                .into_iter()
+                .filter(|admin| *admin != info.sender)
+                .collect();
+            Ok(admins)
+        })?;
+
+        Ok(Response::new())
+    }
+}
+
+mod query {
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+
+    pub fn admins_list(deps: Deps) -> StdResult<AdminsListResp> {
+        let admins = ADMINS.load(deps.storage)?;
+        let resp = AdminsListResp { admins };
+        Ok(resp)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use cosmwasm_std::Addr;
+    use cw_multi_test::{App, ContractWrapper, Executor};
+
+    use crate::msg::AdminsListResp;
+
+    use super::*;
+
+    #[test]
+    fn instantiation() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(resp, AdminsListResp { admins: vec![] });
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec!["admin1".to_owned(), "admin2".to_owned()],
+                },
+                &[],
+                "Contract 2",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            AdminsListResp {
+                admins: vec![Addr::unchecked("admin1"), Addr::unchecked("admin2")],
+            }
+        );
+    }
+
+    #[test]
+    fn greet_query() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: GreetResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::Greet {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            GreetResp {
+                message: "Hello World".to_owned()
+            }
+        );
+    }
+
+    #[test]
+    fn unauthorized() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let err = app
+            .execute_contract(
+                Addr::unchecked("user"),
+                addr,
+                &ExecuteMsg::AddMembers {
+                    admins: vec!["user".to_owned()],
+                },
+                &[],
+            )
+            .unwrap_err();
+
+        assert_eq!(
+            ContractError::Unauthorized {
+                sender: Addr::unchecked("user")
+            },
+            err.downcast().unwrap()
+        );
+    }
+}
+
+

An event is built from two things: an event type provided in the +new function and attributes. +Attributes are added to an event with +the add_attributes +or the add_attribute +call. Attributes are key-value pairs. Because an event cannot contain any list, to achieve reporting +multiple similar actions taking place, we need to emit multiple small events instead of a collective one.

+

Events are emitted by adding them to the response with +add_event or +add_events call. +Additionally, there is a possibility to add attributes directly to the response. It is just sugar. By default, +every execution emits a standard "wasm" event. Adding attributes to the result adds them to the default event.

+

We can check if events are properly emitted by contract. It is not always done, as it is much of boilerplate in +test, but events are, generally, more like logs - not necessarily considered main contract logic. Let's now write +single test checking if execution emits events:

+
use crate::error::ContractError;
+use crate::msg::{AdminsListResp, ExecuteMsg, GreetResp, InstantiateMsg, QueryMsg};
+use crate::state::ADMINS;
+use cosmwasm_std::{
+    to_binary, Binary, Deps, DepsMut, Env, Event, MessageInfo, Response, StdResult,
+};
+
+pub fn instantiate(
+    deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    let admins: StdResult<Vec<_>> = msg
+        .admins
+        .into_iter()
+        .map(|addr| deps.api.addr_validate(&addr))
+        .collect();
+    ADMINS.save(deps.storage, &admins?)?;
+
+    Ok(Response::new())
+}
+
+pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+        AdminsList {} => to_binary(&query::admins_list(deps)?),
+    }
+}
+
+pub fn execute(
+    deps: DepsMut,
+    _env: Env,
+    info: MessageInfo,
+    msg: ExecuteMsg,
+) -> Result<Response, ContractError> {
+    use ExecuteMsg::*;
+
+    match msg {
+        AddMembers { admins } => exec::add_members(deps, info, admins),
+        Leave {} => exec::leave(deps, info).map_err(Into::into),
+    }
+}
+
+mod exec {
+    use super::*;
+
+    pub fn add_members(
+        deps: DepsMut,
+        info: MessageInfo,
+        admins: Vec<String>,
+    ) -> Result<Response, ContractError> {
+        let mut curr_admins = ADMINS.load(deps.storage)?;
+        if !curr_admins.contains(&info.sender) {
+            return Err(ContractError::Unauthorized {
+                sender: info.sender,
+            });
+        }
+
+        let events = admins
+            .iter()
+            .map(|admin| Event::new("admin_added").add_attribute("addr", admin));
+        let resp = Response::new()
+            .add_events(events)
+            .add_attribute("action", "add_members")
+            .add_attribute("added_count", admins.len().to_string());
+
+        let admins: StdResult<Vec<_>> = admins
+            .into_iter()
+            .map(|addr| deps.api.addr_validate(&addr))
+            .collect();
+
+        curr_admins.append(&mut admins?);
+        ADMINS.save(deps.storage, &curr_admins)?;
+
+        Ok(resp)
+    }
+
+    pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult<Response> {
+        ADMINS.update(deps.storage, move |admins| -> StdResult<_> {
+            let admins = admins
+                .into_iter()
+                .filter(|admin| *admin != info.sender)
+                .collect();
+            Ok(admins)
+        })?;
+
+        Ok(Response::new())
+    }
+}
+
+mod query {
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+
+    pub fn admins_list(deps: Deps) -> StdResult<AdminsListResp> {
+        let admins = ADMINS.load(deps.storage)?;
+        let resp = AdminsListResp { admins };
+        Ok(resp)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use cosmwasm_std::Addr;
+    use cw_multi_test::{App, ContractWrapper, Executor};
+
+    use crate::msg::AdminsListResp;
+
+    use super::*;
+
+    #[test]
+    fn instantiation() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(resp, AdminsListResp { admins: vec![] });
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec!["admin1".to_owned(), "admin2".to_owned()],
+                },
+                &[],
+                "Contract 2",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            AdminsListResp {
+                admins: vec![Addr::unchecked("admin1"), Addr::unchecked("admin2")],
+            }
+        );
+    }
+
+    #[test]
+    fn greet_query() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: GreetResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::Greet {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            GreetResp {
+                message: "Hello World".to_owned()
+            }
+        );
+    }
+
+    #[test]
+    fn unauthorized() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let err = app
+            .execute_contract(
+                Addr::unchecked("user"),
+                addr,
+                &ExecuteMsg::AddMembers {
+                    admins: vec!["user".to_owned()],
+                },
+                &[],
+            )
+            .unwrap_err();
+
+        assert_eq!(
+            ContractError::Unauthorized {
+                sender: Addr::unchecked("user")
+            },
+            err.downcast().unwrap()
+        );
+    }
+
+    #[test]
+    fn add_members() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec!["owner".to_owned()],
+                },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp = app
+            .execute_contract(
+                Addr::unchecked("owner"),
+                addr,
+                &ExecuteMsg::AddMembers {
+                    admins: vec!["user".to_owned()],
+                },
+                &[],
+            )
+            .unwrap();
+
+        let wasm = resp.events.iter().find(|ev| ev.ty == "wasm").unwrap();
+        assert_eq!(
+            wasm.attributes
+                .iter()
+                .find(|attr| attr.key == "action")
+                .unwrap()
+                .value,
+            "add_members"
+        );
+        assert_eq!(
+            wasm.attributes
+                .iter()
+                .find(|attr| attr.key == "added_count")
+                .unwrap()
+                .value,
+            "1"
+        );
+
+        let admin_added: Vec<_> = resp
+            .events
+            .iter()
+            .filter(|ev| ev.ty == "wasm-admin_added")
+            .collect();
+        assert_eq!(admin_added.len(), 1);
+
+        assert_eq!(
+            admin_added[0]
+                .attributes
+                .iter()
+                .find(|attr| attr.key == "addr")
+                .unwrap()
+                .value,
+            "user"
+        );
+    }
+}
+
+

As you can see, testing events on a simple test made it clunky. First of all, +every string is heavily string-based - a lack of type control makes writing +such tests difficult. Also, even types are prefixed with "wasm-" - it may not +be a huge problem, but it doesn't clarify verification. But the problem is, how +layered events structure are, which makes verifying them tricky. Also, the +"wasm" event is particularly tricky, as it contains an implied attribute - +_contract_addr containing an address called a contract. My general rule is - +do not test emitted events unless some logic depends on them.

+

Data

+

Besides events, any smart contract execution may produce a data object. In contrast to events, data +can be structured. It makes it a way better choice to perform any communication logic relies on. On the +other hand, it turns out it is very rarely helpful outside of contract-to-contract communication. Data +is always only one single object on the response, which is set using the +set_data function. +Because of its low usefulness in a single contract environment, we will not spend time on it right now - an +example of it will be covered later when contract-to-contract communication will be discussed. Until then, +it is just helpful to know such an entity exists.

+

Dealing with funds

+

When you hear smart contracts, you think blockchain. When you hear blockchain, +you often think of cryptocurrencies. It is not the same, but crypto assets, or +as we often call them: tokens, are very closely connected to the blockchain. +CosmWasm has a notion of a native token. Native tokens are assets managed by +the blockchain core instead of smart contracts. Often such assets have some +special meaning, like being used for paying gas +fees or +staking for consensus +algorithm, but can be just arbitrary assets.

+

Native tokens are assigned to their owners but can be transferred by their +nature. Everything had an address in the blockchain is eligible to have its +native tokens. As a consequence - tokens can be assigned to smart contracts! +Every message sent to the smart contract can have some funds sent with it. In +this chapter, we will take advantage of that and create a way to reward hard +work performed by admins. We will create a new message - Donate, which will be +used by anyone to donate some funds to admins, divided equally.

+

Preparing messages

+

Traditionally we need to prepare our messages. We need to create a new +ExecuteMsg variant, but we will also modify the Instantiate message a bit - +we need to have some way of defining the name of a native token we would use +for donations. It would be possible to allow users to send any tokens they +want, but we want to simplify things for now.

+
use cosmwasm_std::Addr;
+use serde::{Deserialize, Serialize};
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub struct InstantiateMsg {
+    pub admins: Vec<String>,
+    pub donation_denom: String,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub enum ExecuteMsg {
+    AddMembers { admins: Vec<String> },
+    Leave {},
+    Donate {},
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub struct GreetResp {
+    pub message: String,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub struct AdminsListResp {
+    pub admins: Vec<Addr>,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+pub enum QueryMsg {
+    Greet {},
+    AdminsList {},
+}
+
+

We also need to add a new state part, to keep the donation_denom:

+
use cosmwasm_std::Addr;
+use cw_storage_plus::Item;
+
+pub const ADMINS: Item<Vec<Addr>> = Item::new("admins");
+pub const DONATION_DENOM: Item<String> = Item::new("donation_denom");
+
+

And instantiate it properly:

+
use crate::error::ContractError;
+use crate::msg::{AdminsListResp, ExecuteMsg, GreetResp, InstantiateMsg, QueryMsg};
+use crate::state::{ADMINS, DONATION_DENOM};
+use cosmwasm_std::{
+    to_binary, Binary, Deps, DepsMut, Env, Event, MessageInfo, Response, StdResult,
+};
+
+pub fn instantiate(
+    deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    let admins: StdResult<Vec<_>> = msg
+        .admins
+        .into_iter()
+        .map(|addr| deps.api.addr_validate(&addr))
+        .collect();
+    ADMINS.save(deps.storage, &admins?)?;
+    DONATION_DENOM.save(deps.storage, &msg.donation_denom)?;
+
+    Ok(Response::new())
+}
+
+pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+        AdminsList {} => to_binary(&query::admins_list(deps)?),
+    }
+}
+
+pub fn execute(
+    deps: DepsMut,
+    _env: Env,
+    info: MessageInfo,
+    msg: ExecuteMsg,
+) -> Result<Response, ContractError> {
+    use ExecuteMsg::*;
+
+    match msg {
+        AddMembers { admins } => exec::add_members(deps, info, admins),
+        Leave {} => exec::leave(deps, info).map_err(Into::into),
+    }
+}
+
+mod exec {
+    use super::*;
+
+    pub fn add_members(
+        deps: DepsMut,
+        info: MessageInfo,
+        admins: Vec<String>,
+    ) -> Result<Response, ContractError> {
+        let mut curr_admins = ADMINS.load(deps.storage)?;
+        if !curr_admins.contains(&info.sender) {
+            return Err(ContractError::Unauthorized {
+                sender: info.sender,
+            });
+        }
+
+        let events = admins
+            .iter()
+            .map(|admin| Event::new("admin_added").add_attribute("addr", admin));
+        let resp = Response::new()
+            .add_events(events)
+            .add_attribute("action", "add_members")
+            .add_attribute("added_count", admins.len().to_string());
+
+        let admins: StdResult<Vec<_>> = admins
+            .into_iter()
+            .map(|addr| deps.api.addr_validate(&addr))
+            .collect();
+
+        curr_admins.append(&mut admins?);
+        ADMINS.save(deps.storage, &curr_admins)?;
+
+        Ok(resp)
+    }
+
+    pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult<Response> {
+        ADMINS.update(deps.storage, move |admins| -> StdResult<_> {
+            let admins = admins
+                .into_iter()
+                .filter(|admin| *admin != info.sender)
+                .collect();
+            Ok(admins)
+        })?;
+
+        Ok(Response::new())
+    }
+}
+
+mod query {
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+
+    pub fn admins_list(deps: Deps) -> StdResult<AdminsListResp> {
+        let admins = ADMINS.load(deps.storage)?;
+        let resp = AdminsListResp { admins };
+        Ok(resp)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use cosmwasm_std::Addr;
+    use cw_multi_test::{App, ContractWrapper, Executor};
+
+    use crate::msg::AdminsListResp;
+
+    use super::*;
+
+    #[test]
+    fn instantiation() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(resp, AdminsListResp { admins: vec![] });
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec!["admin1".to_owned(), "admin2".to_owned()],
+                },
+                &[],
+                "Contract 2",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            AdminsListResp {
+                admins: vec![Addr::unchecked("admin1"), Addr::unchecked("admin2")],
+            }
+        );
+    }
+
+    #[test]
+    fn greet_query() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: GreetResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::Greet {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            GreetResp {
+                message: "Hello World".to_owned()
+            }
+        );
+    }
+
+    #[test]
+    fn unauthorized() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg { admins: vec![] },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let err = app
+            .execute_contract(
+                Addr::unchecked("user"),
+                addr,
+                &ExecuteMsg::AddMembers {
+                    admins: vec!["user".to_owned()],
+                },
+                &[],
+            )
+            .unwrap_err();
+
+        assert_eq!(
+            ContractError::Unauthorized {
+                sender: Addr::unchecked("user")
+            },
+            err.downcast().unwrap()
+        );
+    }
+
+    #[test]
+    fn add_members() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec!["owner".to_owned()],
+                },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp = app
+            .execute_contract(
+                Addr::unchecked("owner"),
+                addr,
+                &ExecuteMsg::AddMembers {
+                    admins: vec!["user".to_owned()],
+                },
+                &[],
+            )
+            .unwrap();
+
+        let wasm = resp.events.iter().find(|ev| ev.ty == "wasm").unwrap();
+        assert_eq!(
+            wasm.attributes
+                .iter()
+                .find(|attr| attr.key == "action")
+                .unwrap()
+                .value,
+            "add_members"
+        );
+        assert_eq!(
+            wasm.attributes
+                .iter()
+                .find(|attr| attr.key == "added_count")
+                .unwrap()
+                .value,
+            "1"
+        );
+
+        let admin_added: Vec<_> = resp
+            .events
+            .iter()
+            .filter(|ev| ev.ty == "wasm-admin_added")
+            .collect();
+        assert_eq!(admin_added.len(), 1);
+
+        assert_eq!(
+            admin_added[0]
+                .attributes
+                .iter()
+                .find(|attr| attr.key == "addr")
+                .unwrap()
+                .value,
+            "user"
+        );
+    }
+}
+
+

What also needs some corrections are tests - instantiate messages have a new field. I leave it to you as an exercise. +Now we have everything we need to implement donating funds to admins. First, a minor update to the Cargo.toml - we +will use an additional utility crate:

+
[package]
+name = "contract"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib", "rlib"]
+
+[features]
+library = []
+
+[dependencies]
+cosmwasm-std = { version = "1.0.0-beta8", features = ["staking"] }
+serde = { version = "1.0.103", default-features = false, features = ["derive"] }
+cw-storage-plus = "0.13.4"
+thiserror = "1"
+schemars = "0.8.1"
+cw-utils = "0.13"
+
+[dev-dependencies]
+cw-multi-test = "0.13.4"
+cosmwasm-schema = { version = "1.0.0" }
+
+

Then we can implement the donate handler:

+
use crate::error::ContractError;
+use crate::msg::{AdminsListResp, ExecuteMsg, GreetResp, InstantiateMsg, QueryMsg};
+use crate::state::{ADMINS, DONATION_DENOM};
+use cosmwasm_std::{
+    coins, to_binary, BankMsg, Binary, Deps, DepsMut, Env, Event, MessageInfo,
+    Response, StdResult,
+};
+ 
+pub fn instantiate(
+    deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    let admins: StdResult<Vec<_>> = msg
+        .admins
+        .into_iter()
+        .map(|addr| deps.api.addr_validate(&addr))
+        .collect();
+    ADMINS.save(deps.storage, &admins?)?;
+    DONATION_DENOM.save(deps.storage, &msg.donation_denom)?;
+
+    Ok(Response::new())
+}
+
+pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+        AdminsList {} => to_binary(&query::admins_list(deps)?),
+    }
+}
+
+pub fn execute(
+    deps: DepsMut,
+    _env: Env,
+    info: MessageInfo,
+    msg: ExecuteMsg,
+) -> Result<Response, ContractError> {
+    use ExecuteMsg::*;
+
+    match msg {
+        AddMembers { admins } => exec::add_members(deps, info, admins),
+        Leave {} => exec::leave(deps, info).map_err(Into::into),
+        Donate {} => exec::donate(deps, info),
+    }
+}
+
+mod exec {
+    use super::*;
+
+    pub fn add_members(
+        deps: DepsMut,
+        info: MessageInfo,
+        admins: Vec<String>,
+    ) -> Result<Response, ContractError> {
+        let mut curr_admins = ADMINS.load(deps.storage)?;
+        if !curr_admins.contains(&info.sender) {
+            return Err(ContractError::Unauthorized {
+                sender: info.sender,
+            });
+        }
+
+        let events = admins
+            .iter()
+            .map(|admin| Event::new("admin_added").add_attribute("addr", admin));
+        let resp = Response::new()
+            .add_events(events)
+            .add_attribute("action", "add_members")
+            .add_attribute("added_count", admins.len().to_string());
+
+        let admins: StdResult<Vec<_>> = admins
+            .into_iter()
+            .map(|addr| deps.api.addr_validate(&addr))
+            .collect();
+
+        curr_admins.append(&mut admins?);
+        ADMINS.save(deps.storage, &curr_admins)?;
+
+        Ok(resp)
+    }
+
+    pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult<Response> {
+        ADMINS.update(deps.storage, move |admins| -> StdResult<_> {
+            let admins = admins
+                .into_iter()
+                .filter(|admin| *admin != info.sender)
+                .collect();
+            Ok(admins)
+        })?;
+
+        Ok(Response::new())
+    }
+
+    pub fn donate(deps: DepsMut, info: MessageInfo) -> Result<Response, ContractError> {
+        let denom = DONATION_DENOM.load(deps.storage)?;
+        let admins = ADMINS.load(deps.storage)?;
+
+        let donation = cw_utils::must_pay(&info, &denom)?.u128();
+
+        let donation_per_admin = donation / (admins.len() as u128);
+
+        let messages = admins.into_iter().map(|admin| BankMsg::Send {
+            to_address: admin.to_string(),
+            amount: coins(donation_per_admin, &denom),
+        });
+
+        let resp = Response::new()
+            .add_messages(messages)
+            .add_attribute("action", "donate")
+            .add_attribute("amount", donation.to_string())
+            .add_attribute("per_admin", donation_per_admin.to_string());
+
+        Ok(resp)
+    }
+}
+
+mod query {
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+
+    pub fn admins_list(deps: Deps) -> StdResult<AdminsListResp> {
+        let admins = ADMINS.load(deps.storage)?;
+        let resp = AdminsListResp { admins };
+        Ok(resp)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use cosmwasm_std::Addr;
+    use cw_multi_test::{App, ContractWrapper, Executor};
+
+    use crate::msg::AdminsListResp;
+
+    use super::*;
+
+    #[test]
+    fn instantiation() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec![],
+                    donation_denom: "eth".to_owned(),
+                },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(resp, AdminsListResp { admins: vec![] });
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec!["admin1".to_owned(), "admin2".to_owned()],
+                    donation_denom: "eth".to_owned(),
+                },
+                &[],
+                "Contract 2",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            AdminsListResp {
+                admins: vec![Addr::unchecked("admin1"), Addr::unchecked("admin2")],
+            }
+        );
+    }
+
+    #[test]
+    fn greet_query() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec![],
+                    donation_denom: "eth".to_owned(),
+                },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: GreetResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::Greet {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            GreetResp {
+                message: "Hello World".to_owned()
+            }
+        );
+    }
+
+    #[test]
+    fn unauthorized() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec![],
+                    donation_denom: "eth".to_owned(),
+                },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let err = app
+            .execute_contract(
+                Addr::unchecked("user"),
+                addr,
+                &ExecuteMsg::AddMembers {
+                    admins: vec!["user".to_owned()],
+                },
+                &[],
+            )
+            .unwrap_err();
+
+        assert_eq!(
+            ContractError::Unauthorized {
+                sender: Addr::unchecked("user")
+            },
+            err.downcast().unwrap()
+        );
+    }
+
+    #[test]
+    fn add_members() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec!["owner".to_owned()],
+                    donation_denom: "eth".to_owned(),
+                },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp = app
+            .execute_contract(
+                Addr::unchecked("owner"),
+                addr,
+                &ExecuteMsg::AddMembers {
+                    admins: vec!["user".to_owned()],
+                },
+                &[],
+            )
+            .unwrap();
+
+        let wasm = resp.events.iter().find(|ev| ev.ty == "wasm").unwrap();
+        assert_eq!(
+            wasm.attributes
+                .iter()
+                .find(|attr| attr.key == "action")
+                .unwrap()
+                .value,
+            "add_members"
+        );
+        assert_eq!(
+            wasm.attributes
+                .iter()
+                .find(|attr| attr.key == "added_count")
+                .unwrap()
+                .value,
+            "1"
+        );
+
+        let admin_added: Vec<_> = resp
+            .events
+            .iter()
+            .filter(|ev| ev.ty == "wasm-admin_added")
+            .collect();
+        assert_eq!(admin_added.len(), 1);
+
+        assert_eq!(
+            admin_added[0]
+                .attributes
+                .iter()
+                .find(|attr| attr.key == "addr")
+                .unwrap()
+                .value,
+            "user"
+        );
+    }
+}
+
+

Sending the funds to another contract is performed by adding bank messages to +the response. The blockchain would expect any message which is returned in +contract response as a part of an execution. This design is related to an actor +model implemented by CosmWasm. The whole actor model will be described in +detail later. For now, you can assume this is a way to handle token transfers. +Before sending tokens to admins, we have to calculate the amount of donation +per admin. It is done by searching funds for an entry describing our donation +token and dividing the number of tokens sent by the number of admins. Note that +because the integral division is always rounding down.

+

As a consequence, it is possible that not all tokens sent as a donation would +end up with no admins accounts. Any leftover would be left on our contract +account forever. There are plenty of ways of dealing with this issue - figuring +out one of them would be a great exercise.

+

The last missing part is updating the ContractError - the must_pay call +returns a cw_utils::PaymentError which we can't convert to our error type +yet:

+
use cosmwasm_std::{Addr, StdError};
+use cw_utils::PaymentError;
+use thiserror::Error;
+
+#[derive(Error, Debug, PartialEq)]
+pub enum ContractError {
+    #[error("{0}")]
+    StdError(#[from] StdError),
+    #[error("{sender} is not contract admin")]
+    Unauthorized { sender: Addr },
+    #[error("Payment error: {0}")]
+    Payment(#[from] PaymentError),
+}
+
+

As you can see, to handle incoming funds, I used the utility function - I +encourage you to take a look at its +implementation - +this would give you a good understanding of how incoming funds are structured +in MessageInfo.

+

Now it's time to check if the funds are distributed correctly. The way for that +is to write a test.

+
use crate::error::ContractError;
+use crate::msg::{AdminsListResp, ExecuteMsg, GreetResp, InstantiateMsg, QueryMsg};
+use crate::state::{ADMINS, DONATION_DENOM};
+use cosmwasm_std::{
+    coins, to_binary, BankMsg, Binary, Deps, DepsMut, Env, Event, MessageInfo, Response, StdResult,
+};
+
+pub fn instantiate(
+    deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    let admins: StdResult<Vec<_>> = msg
+        .admins
+        .into_iter()
+        .map(|addr| deps.api.addr_validate(&addr))
+        .collect();
+    ADMINS.save(deps.storage, &admins?)?;
+    DONATION_DENOM.save(deps.storage, &msg.donation_denom)?;
+
+    Ok(Response::new())
+}
+
+pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        Greet {} => to_binary(&query::greet()?),
+        AdminsList {} => to_binary(&query::admins_list(deps)?),
+    }
+}
+
+pub fn execute(
+    deps: DepsMut,
+    _env: Env,
+    info: MessageInfo,
+    msg: ExecuteMsg,
+) -> Result<Response, ContractError> {
+    use ExecuteMsg::*;
+
+    match msg {
+        AddMembers { admins } => exec::add_members(deps, info, admins),
+        Leave {} => exec::leave(deps, info).map_err(Into::into),
+        Donate {} => exec::donate(deps, info),
+    }
+}
+
+mod exec {
+    use super::*;
+
+    pub fn add_members(
+        deps: DepsMut,
+        info: MessageInfo,
+        admins: Vec<String>,
+    ) -> Result<Response, ContractError> {
+        let mut curr_admins = ADMINS.load(deps.storage)?;
+        if !curr_admins.contains(&info.sender) {
+            return Err(ContractError::Unauthorized {
+                sender: info.sender,
+            });
+        }
+
+        let events = admins
+            .iter()
+            .map(|admin| Event::new("admin_added").add_attribute("addr", admin));
+        let resp = Response::new()
+            .add_events(events)
+            .add_attribute("action", "add_members")
+            .add_attribute("added_count", admins.len().to_string());
+
+        let admins: StdResult<Vec<_>> = admins
+            .into_iter()
+            .map(|addr| deps.api.addr_validate(&addr))
+            .collect();
+
+        curr_admins.append(&mut admins?);
+        ADMINS.save(deps.storage, &curr_admins)?;
+
+        Ok(resp)
+    }
+
+    pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult<Response> {
+        ADMINS.update(deps.storage, move |admins| -> StdResult<_> {
+            let admins = admins
+                .into_iter()
+                .filter(|admin| *admin != info.sender)
+                .collect();
+            Ok(admins)
+        })?;
+
+        Ok(Response::new())
+    }
+
+    pub fn donate(deps: DepsMut, info: MessageInfo) -> Result<Response, ContractError> {
+        let denom = DONATION_DENOM.load(deps.storage)?;
+        let admins = ADMINS.load(deps.storage)?;
+
+        let donation = cw_utils::must_pay(&info, &denom)
+            .map_err(|err| StdError::generic_err(err.to_string()))?
+            .u128();
+
+        let donation_per_admin = donation / (admins.len() as u128);
+
+        let messages = admins.into_iter().map(|admin| BankMsg::Send {
+            to_address: admin.to_string(),
+            amount: coins(donation_per_admin, &denom),
+        });
+
+        let resp = Response::new()
+            .add_messages(messages)
+            .add_attribute("action", "donate")
+            .add_attribute("amount", donation.to_string())
+            .add_attribute("per_admin", donation_per_admin.to_string());
+
+        Ok(resp)
+    }
+}
+
+mod query {
+    use super::*;
+
+    pub fn greet() -> StdResult<GreetResp> {
+        let resp = GreetResp {
+            message: "Hello World".to_owned(),
+        };
+
+        Ok(resp)
+    }
+
+    pub fn admins_list(deps: Deps) -> StdResult<AdminsListResp> {
+        let admins = ADMINS.load(deps.storage)?;
+        let resp = AdminsListResp { admins };
+        Ok(resp)
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use cosmwasm_std::Addr;
+    use cw_multi_test::{App, ContractWrapper, Executor};
+
+    use crate::msg::AdminsListResp;
+
+    use super::*;
+
+    #[test]
+    fn instantiation() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec![],
+                    donation_denom: "eth".to_owned(),
+                },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(resp, AdminsListResp { admins: vec![] });
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec!["admin1".to_owned(), "admin2".to_owned()],
+                    donation_denom: "eth".to_owned(),
+                },
+                &[],
+                "Contract 2",
+                None,
+            )
+            .unwrap();
+
+        let resp: AdminsListResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::AdminsList {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            AdminsListResp {
+                admins: vec![Addr::unchecked("admin1"), Addr::unchecked("admin2")],
+            }
+        );
+    }
+
+    #[test]
+    fn greet_query() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec![],
+                    donation_denom: "eth".to_owned(),
+                },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp: GreetResp = app
+            .wrap()
+            .query_wasm_smart(addr, &QueryMsg::Greet {})
+            .unwrap();
+
+        assert_eq!(
+            resp,
+            GreetResp {
+                message: "Hello World".to_owned()
+            }
+        );
+    }
+
+    #[test]
+    fn unauthorized() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec![],
+                    donation_denom: "eth".to_owned(),
+                },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let err = app
+            .execute_contract(
+                Addr::unchecked("user"),
+                addr,
+                &ExecuteMsg::AddMembers {
+                    admins: vec!["user".to_owned()],
+                },
+                &[],
+            )
+            .unwrap_err();
+
+        assert_eq!(
+            ContractError::Unauthorized {
+                sender: Addr::unchecked("user")
+            },
+            err.downcast().unwrap()
+        );
+    }
+
+    #[test]
+    fn add_members() {
+        let mut app = App::default();
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec!["owner".to_owned()],
+                    donation_denom: "eth".to_owned(),
+                },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        let resp = app
+            .execute_contract(
+                Addr::unchecked("owner"),
+                addr,
+                &ExecuteMsg::AddMembers {
+                    admins: vec!["user".to_owned()],
+                },
+                &[],
+            )
+            .unwrap();
+
+        let wasm = resp.events.iter().find(|ev| ev.ty == "wasm").unwrap();
+        assert_eq!(
+            wasm.attributes
+                .iter()
+                .find(|attr| attr.key == "action")
+                .unwrap()
+                .value,
+            "add_members"
+        );
+        assert_eq!(
+            wasm.attributes
+                .iter()
+                .find(|attr| attr.key == "added_count")
+                .unwrap()
+                .value,
+            "1"
+        );
+
+        let admin_added: Vec<_> = resp
+            .events
+            .iter()
+            .filter(|ev| ev.ty == "wasm-admin_added")
+            .collect();
+        assert_eq!(admin_added.len(), 1);
+
+        assert_eq!(
+            admin_added[0]
+                .attributes
+                .iter()
+                .find(|attr| attr.key == "addr")
+                .unwrap()
+                .value,
+            "user"
+        );
+    }
+
+    #[test]
+    fn donations() {
+        let mut app = App::new(|router, _, storage| {
+            router
+                .bank
+                .init_balance(storage, &Addr::unchecked("user"), coins(5, "eth"))
+                .unwrap()
+        });
+
+        let code = ContractWrapper::new(execute, instantiate, query);
+        let code_id = app.store_code(Box::new(code));
+
+        let addr = app
+            .instantiate_contract(
+                code_id,
+                Addr::unchecked("owner"),
+                &InstantiateMsg {
+                    admins: vec!["admin1".to_owned(), "admin2".to_owned()],
+                    donation_denom: "eth".to_owned(),
+                },
+                &[],
+                "Contract",
+                None,
+            )
+            .unwrap();
+
+        app.execute_contract(
+            Addr::unchecked("user"),
+            addr.clone(),
+            &ExecuteMsg::Donate {},
+            &coins(5, "eth"),
+        )
+        .unwrap();
+
+        assert_eq!(
+            app.wrap()
+                .query_balance("user", "eth")
+                .unwrap()
+                .amount
+                .u128(),
+            0
+        );
+
+        assert_eq!(
+            app.wrap()
+                .query_balance(&addr, "eth")
+                .unwrap()
+                .amount
+                .u128(),
+            1
+        );
+
+        assert_eq!(
+            app.wrap()
+                .query_balance("admin1", "eth")
+                .unwrap()
+                .amount
+                .u128(),
+            2
+        );
+
+        assert_eq!(
+            app.wrap()
+                .query_balance("admin2", "eth")
+                .unwrap()
+                .amount
+                .u128(),
+            2
+        );
+    }
+}
+
+

Fairly simple. I don't particularly appreciate that every balance check is +eight lines of code, but it can be improved by enclosing this assertion into a +separate function, probably with the +#[track_caller] +attribute.

+

The critical thing to talk about is how app creation changed. Because we need +some initial tokens on a user account, instead of using the default +constructor, we have to provide it with an initializer function. Unfortunately, +new +documentation is not easy to follow - even if a function is not very +complicated. What it takes as an argument is a closure with three arguments - +the +Router +with all modules supported by multi-test, the API object, and the state. This +function is called once during contract instantiation. The router object +contains some generic fields - we are interested in bank in particular. It +has a type of +BankKeeper, +where the +init_balance +function sits.

+

Plot Twist!

+

As we covered most of the important basics about building Rust smart contracts, I have a serious exercise for you.

+

The contract we built has an exploitable bug. All donations are distributed equally across admins. However, every +admin is eligible to add another admin. And nothing is preventing the admin from adding himself to the list and +receiving twice as many rewards as others!

+

Try to write a test that detects such a bug, then fix it and ensure the bug nevermore occurs.

+

Even if the admin cannot add the same address to the list, he can always create new accounts and add them, but this +is something unpreventable on the contract level, so do not prevent that. Handling this kind of case is done by +properly designing whole applications, which is out of this chapter's scope.

+

Good practices

+

All the relevant basics are covered. Now let's talk about some good practices.

+

JSON renaming

+

Due to Rust style, all our message variants are spelled in a +camel-case. It is standard practice, +but it has a drawback - all messages are serialized and deserialized by serde +using those variant names. The problem is that it is more common to use snake +cases for field names in the JSON +world. Fortunately, there is an effortless way to tell serde, to change the names +casing for serialization purposes. Let's update our messages with a #[serde] +attribute:

+
use cosmwasm_std::Addr;
+use serde::{Deserialize, Serialize};
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+#[serde(rename_all = "snake_case")]
+pub struct InstantiateMsg {
+    pub admins: Vec<String>,
+    pub donation_denom: String,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+#[serde(rename_all = "snake_case")]
+pub enum ExecuteMsg {
+    AddMembers { admins: Vec<String> },
+    Leave {},
+    Donate {},
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+#[serde(rename_all = "snake_case")]
+pub struct GreetResp {
+    pub message: String,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+#[serde(rename_all = "snake_case")]
+pub struct AdminsListResp {
+    pub admins: Vec<Addr>,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
+#[serde(rename_all = "snake_case")]
+pub enum QueryMsg {
+    Greet {},
+    AdminsList {},
+}
+
+

JSON schema

+

Talking about JSON API, it is worth mentioning JSON Schema. It is a way of defining a shape for JSON messages. +It is good practice to provide a way to generate schemas for contract API. The problem is that writing JSON +schemas by hand is a pain. The good news is that there is a crate that would help us with that. Go to the Cargo.toml:

+
[package]
+name = "contract"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib", "rlib"]
+
+[dependencies]
+cosmwasm-std = { version = "1.1.4", features = ["staking"] }
+serde = { version = "1.0.103", default-features = false, features = ["derive"] }
+cw-storage-plus = "0.15.1"
+thiserror = "1"
+schemars = "0.8.1"
+cosmwasm-schema = "1.1.4"
+
+[dev-dependencies]
+cw-multi-test = "0.13.4"
+
+

There is one additional change in this file - in crate-type I added "rlib". "cdylib" crates cannot be used as typical +Rust dependencies. As a consequence, it is impossible to create examples for such crates.

+

Now go back to src/msg.rs and add a new derive for all messages:

+
use cosmwasm_std::Addr;
+use schemars::JsonSchema;
+use serde::{Deserialize, Serialize};
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
+#[serde(rename_all = "snake_case")]
+pub struct InstantiateMsg {
+    pub admins: Vec<String>,
+    pub donation_denom: String,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
+#[serde(rename_all = "snake_case")]
+pub enum ExecuteMsg {
+    AddMembers { admins: Vec<String> },
+    Leave {},
+    Donate {},
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
+#[serde(rename_all = "snake_case")]
+pub struct GreetResp {
+    pub message: String,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
+#[serde(rename_all = "snake_case")]
+pub struct AdminsListResp {
+    pub admins: Vec<Addr>,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
+#[serde(rename_all = "snake_case")]
+pub enum QueryMsg {
+    Greet {},
+    AdminsList {},
+}
+
+

You may argue that all those derives look slightly clunky, and I agree. +Fortunately, the +cosmwasm-schema +crate delivers a utility cw_serde macro, which we can use to reduce a +boilerplate:

+
use cosmwasm_std::Addr;
+use cosmwasm_schema::cw_serde
+
+#[cw_serde]
+pub struct InstantiateMsg {
+    pub admins: Vec<String>,
+    pub donation_denom: String,
+}
+
+#[cw_serde]
+pub enum ExecuteMsg {
+    AddMembers { admins: Vec<String> },
+    Leave {},
+    Donate {},
+}
+
+#[cw_serde]
+pub struct GreetResp {
+    pub message: String,
+}
+
+#[cw_serde]
+pub struct AdminsListResp {
+    pub admins: Vec<Addr>,
+}
+
+#[cw_serde]
+pub enum QueryMsg {
+    Greet {},
+    AdminsList {},
+}
+
+

Additionally, we have to derive the additional QueryResponses trait for our +query message to correlate the message variants with responses we would +generate for them:

+
use cosmwasm_std::Addr;
+use cosmwasm_schema::{cw_serde, QueryResponses}
+
+#[cw_serde]
+pub struct InstantiateMsg {
+    pub admins: Vec<String>,
+    pub donation_denom: String,
+}
+
+#[cw_serde]
+pub enum ExecuteMsg {
+    AddMembers { admins: Vec<String> },
+    Leave {},
+    Donate {},
+}
+
+#[cw_serde]
+pub struct GreetResp {
+    pub message: String,
+}
+
+#[cw_serde]
+pub struct AdminsListResp {
+    pub admins: Vec<Addr>,
+}
+
+#[cw_serde]
+#[derive(QueryResponses)]
+pub enum QueryMsg {
+    #[returns(GreetResp)]
+    Greet {},
+    #[returns(AdminsListResp)]
+    AdminsList {},
+}
+
+

The QueryResponses is a trait that requires the #[returns(...)] attribute +to all your query variants to generate additional information about the +query-response relationship.

+

Now, we want to make the msg module public and accessible by crates depending +on our contract (in this case - for schema example). Update a src/lib.rs:

+
use cosmwasm_std::{entry_point, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};
+use error::ContractError;
+use msg::{ExecuteMsg, InstantiateMsg, QueryMsg};
+
+pub mod contract;
+pub mod error;
+pub mod msg;
+pub mod state;
+
+#[entry_point]
+pub fn instantiate(
+    deps: DepsMut,
+    env: Env,
+    info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    contract::instantiate(deps, env, info, msg)
+}
+
+#[entry_point]
+pub fn execute(
+    deps: DepsMut,
+    env: Env,
+    info: MessageInfo,
+    msg: ExecuteMsg,
+) -> Result<Response, ContractError> {
+    contract::execute(deps, env, info, msg)
+}
+
+#[entry_point]
+pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    contract::query(deps, env, msg)
+}
+
+

I changed the visibility of all modules - as our crate can now be used as a dependency. +If someone would like to do so, he may need access to handlers or state.

+

The next step is to create a tool generating actual schemas. We will do it by creating +an binary in our crate. Create a new bin/schema.rs file:

+
use contract::msg::{ExecuteMsg, InstantiateMsg, QueryMsg};
+use cosmwasm_schema::write_api;
+
+fn main() {
+    write_api! {
+        instantiate: InstantiateMsg,
+        execute: ExecuteMsg,
+        query: QueryMsg
+    }
+}
+
+

Cargo is smart enough to recognize files in src/bin directory as utility +binaries for the crate. Now we can generate our schemas:

+
$ cargo run schema
+    Finished dev [unoptimized + debuginfo] target(s) in 0.52s
+     Running `target/debug/schema schema`
+Removing "/home/hashed/confio/git/book/examples/03-basics/schema/contract.json" …
+Exported the full API as /home/hashed/confio/git/book/examples/03-basics/schema/contract.json
+
+

I encourage you to go to generated file to see what the schema looks like.

+

The problem is that, unfortunately, creating this binary makes our project fail +to compile on the Wasm target - which is, in the end, the most important one. +Fortunately, we don't need to build the schema binary for the Wasm target - let's +align the .cargo/config file:

+
[alias]
+wasm = "build --target wasm32-unknown-unknown --release --lib"
+wasm-debug = "build --target wasm32-unknown-unknown --lib"
+schema = "run schema"
+
+

The --lib flag added to wasm cargo aliases tells the toolchain to build +only the library target - it would skip building any binaries. Additionally, I +added the convenience schema alias so that one can generate schema calling +simply cargo schema.

+

Disabling entry points for libraries

+

Since we added the "rlib" target for the contract, it is, as mentioned before, useable as a dependency. +The problem is that the contract depended on ours would have Wasm entry points generated twice - once +in the dependency and once in the final contract. We can work this around by disabling generating Wasm +entry points for the contract if the crate is used as a dependency. We would use +feature flags for that.

+

Start with updating Cargo.toml:

+
[features]
+library = []
+
+

This way, we created a new feature for our crate. Now we want to disable the entry_point attribute on +entry points - we will do it by a slight update of src/lib.rs:

+
use cosmwasm_std::{entry_point, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};
+use error::ContractError;
+use msg::{ExecuteMsg, InstantiateMsg, QueryMsg};
+
+pub mod contract;
+pub mod error;
+pub mod msg;
+pub mod state;
+
+#[cfg_attr(not(feature = "library"), entry_point)]
+pub fn instantiate(
+    deps: DepsMut,
+    env: Env,
+    info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    contract::instantiate(deps, env, info, msg)
+}
+
+#[cfg_attr(not(feature = "library"), entry_point)]
+pub fn execute(
+    deps: DepsMut,
+    env: Env,
+    info: MessageInfo,
+    msg: ExecuteMsg,
+) -> Result<Response, ContractError> {
+    contract::execute(deps, env, info, msg)
+}
+
+#[cfg_attr(not(feature = "library"), entry_point)]
+pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    contract::query(deps, env, msg)
+}
+
+

The cfg_attr attribute is +a conditional compilation attribute, similar to the cfg we used before for the test. It expands to the given attribute if +the condition expands to true. In our case - it would expand to nothing if the feature "library" is enabled, or it +would expand just to #[entry_point] in another case.

+

Since now to add this contract as a dependency, don't forget to enable the feature like this:

+
[dependencies]
+my_contract = { version = "0.1", features = ["library"] }
+
+

Floating point types

+

Now you are ready to create smart contracts on your own. It is time to discuss an important limitation of CosmWasm +smart contracts - floating-point numbers.

+

The story is short: you cannot use floating-point types in smart contracts. Never. CosmWasm virtual machine on purpose +does not implement floating-point Wasm instructions, even such basics as F32Load. The reasoning is simple: they are +not safe to work with in the blockchain world.

+

The biggest problem is that contract will compile, but uploading it to the blockchain would fail with an error message claiming there is a floating-point operation in the contract. A tool that verifies if the contract is valid (it does not contain any fp operations but also has all needed entry points and so on) is called cosmwasm-check utility.

+

This limitation has two implications. First, you always have to use decimal of fixed-point arithmetic in your contracts. +It is not a problem, considering that cosmwasm-std provides you with the +Decimal and +Decimal256 types.

+

The other implication is tricky - you must be careful with the crates you use. In particular, one gotcha in the serde +crate - deserialization of usize type is using floating-point operations. That means you can never use usize (or isize) +types in your deserialized messages in the contract.

+

Another thing that will not work with serde is untagged enums deserialization. The workaround is to create custom +deserialization of such enums using serde-cw-value crate. It is a fork of +serde-value crate which avoids generating floating-point instructions.

+

Actor model

+

This section describes the fundaments of CosmWasm smart contracts architecture, which determines how do they communicate +with each other. I want to go through this before teaching step by step how to create multiple contracts relating to each +other, to give you a grasp of what to expect. Don't worry if it will not be clear after the first read - I suggest going +through this chapter once now and maybe giving it another take in the future when you know the practical part of this.

+

The whole thing described here is officially documented in the +SEMANTICS.md, of the cosmwasm repository.

+

Idea behind an Actor Model

+

The actor model is the solution to the problem of communication between smart +contracts. Let's take a look at the reasons why this particular solution is +chosen in CosmWasm, and what are the consequences of that.

+

The problem

+

Smart contracts can be imagined as sandboxed microservices. Due to +SOLID principles, it is valuable to +split responsibilities between entities. However, to split the work between +contracts themselves, there is a need to communicate between them, so if one +contract is responsible for managing group membership, it is possible to call +its functionality from another contract.

+

The traditional way to solve this problem in SW engineering is to model +services as functions that would be called with some RPC mechanism, and return +its result as a response. Even though this approach looks nice, it creates sort +of problems, in particular with shared state consistency.

+

The other approach which is far more popular in business-level modeling is to +treat entities as actors, which can perform some tasks, but without +interrupting it with calls to other contracts. Any calls to other contracts can +only be called after the whole execution is performed. When "subcall" is +finished, it will call the original contract back.

+

This solution may feel unnatural, and it requires different kinds of design +solutions, but it turns out to work pretty well for smart contract execution. +I will try to explain how to reason about it, and how it maps to contract +structure step by step.

+

The Actor

+

The most important thing in the whole model is an Actor itself. So, what is +this? The Actor is a single instantiation of a contract, which can perform +several actions. When the actor finishes his job, he prepares a summary of it, +which includes the list of things that have to be done, to complete the whole +scheduled task.

+

An example of an actor is the Seller in the KFC restaurant. The first thing you +do is order your BSmart, so you are requesting action from him. So, from the +system user, you can think about this task as "sell and prepare my meal", but +the action performed by the seller is just "Charge payment and create order". +The first part of this operation is to create a bill and charge you for it, and +then it requests the Sandwich and Fries to be prepared by other actors, +probably chefs. Then when the chef is done with his part of the meal, he checks +if all meals are ready. If so, it calls the last actor, the waiter, to deliver +the food to you. At this point, you can receive your delivery, and the task is +considered complete.

+

The above-described workflow is kind of simplified. In particular - in a +typical restaurant, a waiter would observe the kitchen instead of being +triggered by a chef, but in the Actor model, it is not possible. Here, entities +of the system are passive and cannot observe the environment actively - they +only react to messages from other system participants. Also in KFC, the seller +would not schedule subtasks for particular chefs; instead, he would leave tasks +to be taken by them, when they are free. It is not the case, because as before - +chefs cannot actively listen to the environment. However, it would be possible +to create a contract for being a chef's dispatcher which would collect all +orders from sellers, and balance them across chefs for some reason.

+

The Action

+

Actors are the model entities, but to properly communicate with them, we need +some kind of protocol. Every actor is capable of performing several actions. In +my previous KFC example, the only action seller can do is "Charge payment and +create order". However, it is not always the case - our chefs were proficient +at performing both "Prepare fries" and "Prepare Sandwich" actions - and also +many more.

+

So, when we want to do something in an actor system, we schedule some action to +the actor being the closest to us, very often with some additional parameters +(as we can pick if we want to exchange fries with salad).

+

However, naming the action after the exact thing which happened in the very +contract would be misleading. Take a look at the KFC example once again. As I +mentioned, the action performed by a seller is "Charge payment and create +order". The problem is, that for the client who schedules this action, it +doesn't matter what exactly is the responsibility of the actor himself - what +the client is scheduling is "Prepare Meal" with some description of what +exactly to prepare. So, we can say, that the action is the thing performed by +the contract itself, plus all the sub-actions it schedules.

+

Multi-stage Actions

+

So as the whole idea makes some sense, there is the problem created by the +actor model: what if I want to perform some action in my contract, but to +completely finalize some steps, the contract has to make sure that some +sub-action he scheduled are finished?

+

Imagine that in the previous KFC situation, there is no dedicated Waiter. +Instead the Seller was serving you a meal when the Chefs finished their job.

+

This kind of pattern is so important and common that in CosmWasm, we developed +a special way to handle it, which is dedicated Reply action.

+

So when Seller is scheduling actions for chefs, he assigns some number to this +action (like order id) and passes it to chefs. He also remembers how many +actions he scheduled for every order id. Now every time chef is finished with +his action; he would call the special Reply action on Seller, in which he +would pass back the order id. Then, Seller would decrease the number of actions +left for this order, and if it reached zero, he would serve a meal.

+

Now you can say, that the Reply action is completely not needed, as Chefs +could just schedule any arbitrary action on Seller, like Serve, why is there +the special Reply for? The reason is abstraction and reusability. The Chefs +task is to prepare a meal, and that is all. There is no reason for him to know +why he is even preparing Fries - if it is part of the bigger task (like order +for a client), or the seller is just hungry. It is possible that not only the +seller is eligible to call the chef for food - possibly any restaurant employee +can do that just for themselves. Therefore, we need a way to be able to react +to an actor finishing his job in some universal way, to handle this situation +properly in any context.

+

It is worth noting that the Reply can contain some additional data. The id +assigned previously is the only required information in the Reply call, but +the actor can pass some additional data - events emitted, which are mostly +metadata (to be observed by non-blockchain applications mostly), and any +arbitrary data it wants to pass.

+

State

+

Up until this point, we were considering actors as entities performing some +job, like preparing the meal. If we are considering computer programs, such a +job would be to show something on the screen, maybe print something. This is +not the case with Smart Contracts. The only thing which can be affected by the +Smart Contract is their internal state. So, the state is arbitrary data that is +kept by the contract. Previously in the KFC example I mentioned, the Seller is +keeping in mind how many actions he scheduled for chefs are not yet finished - +this number is part of the Seller's state.

+

To give a more realistic example of a contract state, let's think about a more +real-life Smart Contract than the restaurant. Let's imagine we want to create +our currency - maybe we want to create some smart contracts-based market for +some MMORPG game. So, we need some way to be able to at least transfer currency +between players. We can do that, by creating the contract we would call +MmoCurrency, which would support the Transfer action to transfer money to +another player. Then what would be the state of such a contract? It would be +just a table mapping player names to the amount of currency they own. The +contract we just invited exists in CosmWasm examples, and it is called the +cw20-base +contract +(it is a bit more complicated, but it is its core idea).

+

And now there is a question - how is this helpful to transfer currency if I +cannot check how much of it do I own? It is a very good question, and the +answer to that is simple - the whole state of every contract in our system is +public. It is not universal for every Actor model, but it is how it works in +CosmWasm, and it is kind of forced by the nature of blockchain. Everything +happening in blockchain has to be public, and if some information should be +hidden, it has to be stored indirectly.

+

There is one very important thing about the state in CosmWasm, and it is the +state being transactional. Any updates to the state are not applied +immediately, but only when the whole action succeeds. It is very important, as +it guarantees that if something goes wrong in the contract, it is always left +in some proper state. Let's consider our MmoCurrency case. Imagine, that in +the Transfer action we first increase the receiver currency amount (by +updating the state), and only then do we decrease the sender amount. However, +before decreasing it, we need to check if a sender possesses enough funds to +perform the transaction. In case we realize that we cannot do it, we don't need +to do any rolling back by hand - we would just return a failure from the action +execution, and the state would not be updated. So, when in the contract state +is updated, it is just a local copy of this state being altered, but the +partial changes would never be visible by other contracts.

+

Queries

+

There is one building block in the CosmWasm approach to the Actor model, which +I haven't yet cover. As I said, the whole state of every contract is public and +available for everyone to look at. The problem is that this way of looking at +state is not very convenient - it requires users of contracts to know its +internal structure, which kind of violates the SOLID rules (Liskov substitution +principle in particular). If, for example a contract is updated and its state +structure changes a bit, another contract looking at its state would just +nevermore work. Also, it is often the case, that the contract state is kind of +simplified, and information that is relevant to the observer would be +calculated from the state.

+

This is where queries come into play. Queries are the type of messages to +contract, which does not perform any actions, so do not update any state, but +can return an answer immediately.

+

In our KFC comparison, the query would be if Seller goes to Chef to ask "Do we +still have pickles available for our cheeseburgers"? It can be done while +operating, and response can be used in it. It is possible because queries can +never update their state, so they do not need to be handled in a transactional +manner.

+

However, the existence of queries doesn't mean that we cannot look at the +contract's state directly - the state is still public, and the technique of +looking at them directly is called Raw Queries. For clarity, non-raw queries +are sometimes denoted as Smart Queries.

+

Wrapping everything together - transactional call flow

+

So, we touched on many things here, and I know it may be kind of confusing. +Because of that, I would like to go through some more complicated calls to the +CosmWasm contract to visualize what the "transactional state" means.

+

Let's imagine two contracts:

+
    +
  1. The MmoCurrency contract mentioned before, which can perform the +Transfer action, allows transferring some amount of currency to some +receiver.
  2. +
  3. The WarriorNpc contract, which would have some amount of our currency, and +he would be used by our MMO engine to pay the reward out for some quest +player could perform. It would be triggered by Payout action, which can be +called only by a specific client (which would be our game engine).
  4. +
+

Now here is an interesting thing - this model forces us to make our MMO more +realistic in terms of the economy that we traditionally see - it is because +WarriorNpc has some amount of currency, and cannot create more out of +anything. It is not always the case (the previously mentioned cw20 has a +notion of Minting for this case), but for the sake of simplicity let's assume this +is what we want.

+

To make the quest reasonable for longer, we would make a reward for it to be +always between 1 mmo and 100 mmo, but it would be ideally 15% of what +Warrior owns. This means that the quest reward decreases for every subsequent +player, until Warrior would be broke, left with nothing, and will no longer be +able to payout players.

+

So, what would the flow look like? The first game would send a Payout message +to the WarriorNpc contract, with info on who should get the reward. Warrior +would keep track of players who fulfilled the quest, to not pay out the same +person twice - there would be a list of players in his state. First, he would +check the list looking for players to pay out - if he is there, he will finish +the transaction with an error.

+

However, in most cases the player would not be on the list - so then +WarriorNpc would add him to the list. Now the Warrior would finish his part +of the task, and schedule the Transfer action to be performed by +MmoCurrency.

+

But there is the important thing - because Transfer action is actually part +of the bigger Payout flow, it would not be executed on the original +blockchain state, but on the local copy of it, to which the player's list is +already applied to. So if the MmoCurrency would for any reason takes a look +at WarriorNpc internal list, it would be already updated.

+

Now MmoCurrency is doing its job, updating the state of Warrior and player +balance (note, that our Warrior is here just treated as another player!). When +it finishes, two things may happen:

+
    +
  1. There was an error - possibly Warrior is out of cash, and it can nevermore +pay for the task. In such case, none of the changes - neither updating the +list of players succeeding, nor balance changes are not applied to the +original blockchain storage, so they are like they never happened. In the +database world, it is denoted as rolling back the transaction.
  2. +
  3. Operation succeed - all changes on the state are now applied to the +blockchain, and any further observation of MmoCurrency or WarriorNpc by +the external world would see updated data.
  4. +
+

There is one problem - in this model, our list is not a list of players who +fulfilled the quest (as we wanted it to be), but the list of players who paid +out (as in transfer failure, the list is not updated). We can do better.

+

Different ways of handling responses

+

Note that we didn't mention a Reply operation at all. So why was it not +called by MmoCurrency on WarriorNpc? The reason is that this operation is +optional. When scheduling sub-actions on another contract we may choose when +Reply how the result should be handled:

+
    +
  1. Never call Reply, action fails if sub-message fails
  2. +
  3. Call Reply on success
  4. +
  5. Call Reply on failure
  6. +
  7. Always call Reply
  8. +
+

So, if we do not request Reply to be called by subsequent contract, it will +not happen. In such a case if a sub-call fails, the whole transaction is rolled +back - sub-message failure transitively causes the original message failure. It +is probably a bit complicated for now, but I promise it would be simple if you +would did some practice with that.

+

When handling the reply, it is important to remember, that although changes are +not yet applied to the blockchain (the transaction still can be failed), the +reply handler is already working on the copy of the state with all changes made +by sub-message so far applied. In most cases, it would be a good thing, but it +has a tricky consequence - if the contract is calling itself recursively, it is +possible that subsequent call overwrote things set up in the original message. +It rarely happens, but may need special treatment in some cases - for now I +don't want to go deeply into details, but I want you to remember about what to +expect after state in the actor's flow.

+

Now let's take a look at handling results with 2-4 options. It is actually +interesting, that using 2, even if the transaction is performed by sub-call +succeed, we may now take a look at the data it returned with Reply, and on +its final state after it finished, and we can still decide, that act as a +whole is a failure, in which case everything would be rolled back - even +currency transfer performed by external contract.

+

In our case, an interesting option is 3. So, if the contract would call +Reply on failure, we can decide to claim success, and commit a transaction on +the state if the sub call failed. Why may it be relevant for us? Possibly +because our internal list was supposed to keep the list of players succeeding +with the quest, not paid out! So, if we have no more currency, we still want to +update the list!

+

The most common way to use the replies (option 2 in particular) is to +instantiate another contract, managed by the one called. The idea is that in +those use cases, the creator contract wants to keep the address of the created +contract in its state. To do so it has to create an Instantiate sub-message, +and subscribe for its success response, which contains the address of the freshly +created contract.

+

In the end, you can see that performing actions in CosmWasm is built with +hierarchical state change transactions. The sub-transaction can be applied to +the blockchain only if everything succeeds, but in case that sub-transaction +failed, only its part may be rolled back, end other changes may be applied. It +is very similar to how most database systems work.

+

Conclusion

+

Now you have seen the power of the actor model to avoid reentrancy, properly +handle errors, and safely sandbox contracts. This helps us provide the solid +security guarantees of the CosmWasm platform. Let’s get started playing around +with real contracts in the wasmd blockchain.

+

Actors in blockchain

+

Previously we were talking about actors mostly in the abstraction of any +blockchain-specific terms. However, before we would dive into the code, we need +to establish some common language, and to do so we would look at contracts from +the perspective of external users, instead of their implementation.

+

In this part, I would use the wasmd binary to communicate with the malaga +testnet. To properly set it up, check the Quick start with +wasmd.

+

Blockchain as a database

+

It is kind of starting from the end, but I would start with the state part of +the actor model. Relating to traditional systems, there is one particular thing +I like to compare blockchain with - it is a database.

+

Going back to the previous section we learned that the most important part of +a contract is its state. Manipulating the state is the only way to persistently +manifest work performed to the world. But What is the thing which purpose is to +keep the state? It is a database!

+

So here is my (as a contract developer) point of view on contracts: it is a distributed +database, with some magical mechanisms to make it democratic. Those "magical +mechanisms" are crucial for BC's existence and they make they are reasons why even +use blockchain, but they are not relevant from the contract creator's point of +view - for us, everything that matters is the state.

+

But you can say: what about the financial part?! Isn't blockchain (wasmd in particular) +the currency implementation? With all of those gas costs, sending funds seems +very much like a money transfer, not database updates. And yes, you are kind of right, +but I have a solution for that too. Just imagine, that for every native token (by +"native tokens" we meant tokens handled directly by blockchain, in contradiction +to for example cw20 tokens) there is a special database bucket (or table if you prefer) +with mapping of address to how much of a token the address possesses. You can query +this table (querying for token balance), but you cannot modify it directly. To modify +it you just send a message to a special build-in bank contract. And everything +is still a database.

+

But if blockchain is a database, then where are smart contracts stored? +Obviously - in the database itself! So now imagine another special table - this +one would contain a single table of code-ids mapped to blobs of wasm binaries. And +again - to operate on this table, you use "special contract" which is not accessible +from another contract, but you can use it via wasmd binary.

+

Now there is a question - why do I even care about BC being a DB? So the reason +is that it makes reasoning about everything in blockchain very natural. Do you +remember that every message in the actor model is transactional? It perfectly +matches traditional database transactions (meaning: every message starts a new +transaction)! Also, when we later talk about migrations, it would turn out, that +migrations in CosmWasm are very much equivalents of schema migrations in +traditional databases.

+

So, the thing to remember - blockchain is very similar to a database, having some +specially reserved tables (like native tokens, code repository), with a special +bucket created for every contract. A contract can look at every table in every +bucket in the whole blockchain, but it can modify the only one he created.

+

Compile the contract

+

I will not go into the code for now, but to start with something we need compiled +contract binary. The cw4-group contract from +cw-plus is simple enough to work with, for +now, so we will start with compiling it. Start with cloning the repository:

+
$ git clone git@github.com:CosmWasm/cw-plus.git
+
+

Then go to cw4-group contract and build it:

+
$ cd cw-plus/contracts/cw4-group
+$ docker run --rm -v "$(pwd)":/code \
+  --mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target \
+  --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \
+  cosmwasm/workspace-optimizer:0.12.6
+
+

Your final binary should be located in the +cw-plus/artifacts folder (cw-plus being where you cloned your repository).

+

Contract code

+

When the contract binary is built, the first interaction with CosmWasm is uploading +it to the blockchain (assuming you have your wasm binary in the working directory):

+
$ wasmd tx wasm store ./cw4-group.wasm --from wallet $TXFLAG -y -b block
+
+

As a result of such an operation you would get json output like this:

+
..
+logs:
+..
+- events:
+  ..
+  - attributes:
+    - key: code_id
+      value: "1069"
+    type: store_code
+
+

I ignored most of not fields as they are not relevant for now - what we care +about is the event emitted by blockchain with information about code_id of +stored contract - in my case the contract code was stored in blockchain under +the id of 1069. I can now look at the code by querying for it:

+
$ wasmd query wasm code 1069 code.wasm
+
+

And now the important thing - the contract code is not an actor. So, what is a +contract code? I think that the easiest way to think about that is a class or +a type in programming. It defines some stuff about what can be done, but the +class itself is in most cases not very useful unless we create an instance +of a type, on which we can call class methods. So now let's move forward to +instances of such contract classes.

+

Contract instance

+

Now we have a contract code, but what we want is an actual contract itself. +To create it, we need to instantiate it. Relating to analogy to programming, +instantiation is calling a constructor. To do that, I would send an +instantiate message to my contract:

+
$ wasmd tx wasm instantiate 1069 '{"members": []}' --from wallet --label "Group 1" --no-admin $TXFLAG -y
+
+

What I do here is create a new contract and immediately call the Instantiate +message on it. The structure of such a message is different for every contract +code. In particular, the cw4-group Instantiate message contains two fields:

+
    +
  • members field which is the list of initial group members optional admin
  • +
  • field which defines an address of who can add or remove +a group member
  • +
+

In this case, I created an empty group with no admin - so which could never +change! It may seem like a not very useful contract, but it serves us as a +contract example.

+

As the result of instantiating, I got the result:

+
..
+logs:
+..
+- events:
+  ..
+  - attributes:
+    - key: _contract_address
+      value: wasm1u0grxl65reu6spujnf20ngcpz3jvjfsp5rs7lkavud3rhppnyhmqqnkcx6
+    - key: code_id
+      value: "1069"
+    type: instantiate
+
+

As you can see, we again look at logs[].events[] field, looking for +interesting event and extracting information from it - it is the common case. +I will talk about events and their attributes in the future but in general, +it is a way to notify the world that something happened. Do you remember the +KFC example? If a waiter is serving our dish, he would put a tray on the bar, +and she would yell (or put on the screen) the order number - this would be +announcing an event, so you know some summary of operation, so you can go and +do something useful with it.

+

So, what use can we do with the contract? We obviously can call it! But first +I want to tell you about addresses.

+

Addresses in CosmWasm

+

Address in CosmWasm is a way to refer to entities in the blockchain. There are +two types of addresses: contract addresses, and non-contracts. The difference +is that you can send messages to contract addresses, as there is some smart +contract code associated with them, and non-contracts are just users of the +system. In an actor model, contract addresses represent actors, and +non-contracts represent clients of the system.

+

When operating with blockchain using wasmd, you also have an address - you +got one when you added the key to wasmd:

+
# add wallets for testing
+$ wasmd keys add wallet3
+- name: wallet3
+  type: local
+  address: wasm1dk6sq0786m6ayg9kd0ylgugykxe0n6h0ts7d8t
+  pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"Ap5zuScYVRr5Clz7QLzu0CJNTg07+7GdAAh3uwgdig2X"}'
+  mnemonic: ""
+
+

You can always check your address:

+
$ wasmd keys show wallet
+- name: wallet
+  type: local
+  address: wasm1um59mldkdj8ayl5gknp9pnrdlw33v40sh5l4nx
+  pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"A5bBdhYS/4qouAfLUH9h9+ndRJKvK0co31w4lS4p5cTE"}'
+  mnemonic: ""
+
+

Having an address is very important because it is a requirement for being able +to call anything. When we send a message to a contract it always knows the +address which sends this message so it can identify it - not to mention that +this sender is an address that would play a gas cost.

+

Querying the contract

+

So, we have our contract, let's try to do something with it - query would be the +easiest thing to do. Let's do it:

+
$ wasmd query wasm contract-state smart wasm1u0grxl65reu6spujnf20ngcpz3jvjfsp5rs7lkavud3rhppnyhmqqnkcx6 '{ "list_members": {} }'
+data:
+  members: []
+
+

The wasm... string is the contract address, and you have to substitute it with +your contract address. { "list_members": {} } is query message we send to +contract. Typically, CW smart contract queries are in the form of a single JSON +object, with one field: the query name (list_members in our case). The value +of this field is another object, being query parameters - if there are any. +list_members query handles two parameters: limit, and start_after, which +are both optional and which support result pagination. However, in our case of +an empty group they don't matter.

+

The query result we got is in human-readable text form (if we want to get the +JSON from - for example, to process it further with jq, just pass the +-o json flag). As you can see response contains one field: members which is +an empty array.

+

So, can we do anything more with this contract? Not much. But let's try to do +something with a new one!

+

Executions to perform some actions

+

The problem with our previous contract is that for the cw4-group contract, +the only one who can perform executions on it is an admin, but our contract +doesn't have one. This is not true for every smart contract, but it is the +nature of this one.

+

So, let's make a new group contract, but this time we would +make ourselves an admin. First, check our wallet address:

+
$ wasmd keys show wallet
+
+

And instantiate a new group contract - this time with proper admin:

+
$ wasmd tx wasm instantiate 1069 '{"members": [], "admin": "wasm1um59mldkdj8ayl5gknp9pnrdlw33v40sh5l4nx"}' --from wallet --label "Group 1" --no-admin $TXFLAG -y
+..
+logs:
+- events:
+  ..
+  - attributes:
+    - key: _contract_address
+      value: wasm1n5x8hmstlzdzy5jxd70273tuptr4zsclrwx0nsqv7qns5gm4vraqeam24u
+    - key: code_id
+      value: "1069"
+    type: instantiate
+
+

You may ask, why do we pass some kind of --no-admin flag, if we just said, we +want to set an admin to the contract? The answer is sad and confusing, but... +it is a different admin. The admin we want to set is one checked by the +contract itself and managed by him. The admin which is declined with +--no-admin flag, is a wasmd-level admin, which can migrate the contract. You +don't need to worry about the second one at least until you learn about +contract migrations - until then you can always pass the --no-admin flag to +the contract.

+

Now let's query our new contract for the member's list:

+
$ wasmd query wasm contract-state smart wasm1n5x8hmstlzdzy5jxd70273tuptr4zsclrwx0nsqv7qns5gm4vraqeam24u '{ "list_members": {} }'
+data:
+  members: []
+
+

Just like before - no members initially. Now check an admin:

+
$ wasmd query wasm contract-state smart wasm1n5x8hmstlzdzy5jxd70273tuptr4zsclrwx0nsqv7qns5gm4vraqeam24u '{ "admin": {} }'
+data:
+  admin: wasm1um59mldkdj8ayl5gknp9pnrdlw33v40sh5l4nx
+
+

So, there is an admin, it seems like the one we wanted to have there. So now we +would add someone to the group - maybe ourselves?

+
wasmd tx wasm execute wasm1n5x8hmstlzdzy5jxd70273tuptr4zsclrwx0nsqv7qns5gm4vraqeam24u '{ "update_members": { "add": [{ "addr": "wasm1um59mldkdj8ayl5gkn
+p9pnrdlw33v40sh5l4nx", "weight": 1 }], "remove": [] } }' --from wallet $TXFLAG -y
+
+

The message for modifying the members is update_members and it has two +fields: members to remove, and members to add. Members to remove are +just addresses. Members to add have a bit more complex structure: they +are records with two fields: address and weight. Weight is not relevant +for us now, it is just metadata stored with every group member - for +us, it would always be 1.

+

Let's query the contract again to check if our message changed anything:

+
$ wasmd query wasm contract-state smart wasm1n5x8hmstlzdzy5jxd70273tuptr4zsclrwx0nsqv7qns5gm4vraqeam24u '{ "list_members": {} }'
+data:
+  members:
+  - addr: wasm1um59mldkdj8ayl5gknp9pnrdlw33v40sh5l4nx
+    weight: 1
+
+

As you can see, the contract updated its state. This is basically how +it works - sending messages to contracts causes them to update the state, +and the state can be queried at any time. For now, to keep things simple +we were just interacting with the contract directly by wasmd, but as described +before - contracts can communicate with each other. However, to investigate +this we need to understand how to write contracts. Next time we will look +at the contract structure and we will map it part by part to what we have learned +until now.

+

Smart contract as an actor

+

In previous chapters, we talked about the actor model and how it is implemented +in the blockchain. Now it is time to look closer into the typical contract +structure to understand how different features of the actor model are mapped to +it.

+

This will not be a step-by-step guide on contract creation, as it is a topic +for the series itself. It would be going through contract elements roughly to +visualize how to handle architecture in the actor model.

+

The state

+

As before we would start with the state. Previously we were working with +the cw4-group contract, so let's start by looking at its code. Go to +cw-plus/contracts/cw4-group/src. The folder structure should look like +this:

+
  src
+├──  contract.rs
+├──  error.rs
+├──  helpers.rs
+├──  lib.rs
+├──  msg.rs
+└──  state.rs
+
+

As you may already figure out, we want to check the state.rs first.

+

The most important thing here is a couple of constants: ADMIN, HOOKS, +TOTAL, and MEMBERS. Every one of such constants represents a single portion +of the contract state - as tables in databases. The types of those constants +represent what kind of table this is. The most basic ones are Item<T>, which +keeps zero or one element of a given type, and Map<K, T> which is a key-value +map.

+

You can see Item is used to keep an admin and some other data: HOOKS, and +TOTAL. HOOKS is used by the cw4-group to allow subscription to any +changes to a group - a contract can be added as a hook, so when the group +changes, a message is sent to it. The TOTAL is just a sum of all members' +weights.

+

The MEMBERS in the group contract is the SnapshotMap - as you can imagine, +it is a Map, with some steroids - this particular one, gives us access to the +state of the map at some point in history, accessing it by the blockchain +height. height is the count of blocks created since the beggining of +blockchain, and it is the most atomic time representation in smart contracts. +There is a way to access the clock time in them, but everything happening in a +single block is considered happening in the same moment.

+

Other types of storage objects not used in group contracts are:

+
    +
  • IndexedMap - another map type, that allows accessing values +by a variety of keys
  • +
  • IndexedSnapshotMap - IndexedMap and SnapshotMap married
  • +
+

What is very important - every state type in the contract is accessed using +some name. All of those types are not containers, just accessors to the state. +Do you remember that I told you before that blockchain is our database? And +that is correct! All those types are just ORM to this database - when we use +them to get actual data from it, we pass a special State object to them, so +they can retrieve items from it.

+

You may ask - why all that data for a contract are not auto-fetched by +whatever is running it. That is a good question. The reason is that we want +contracts to be lazy with fetching. Copying data is a very expensive operation, +and for everything happening on it, someone has to pay - it is realized by gas +cost. I told you before, that as a contract developer you don't need to worry +about gas at all, but it was only partially true. You don't need to know +exactly how gas is calculated, but by lowering your gas cost, you would may +execution of your contracts cheaper which is typically a good thing. One good +practice to achieve that is to avoid fetching data you will not use in a +particular call.

+

Messages

+

In a blockchain, contracts communicate with each other by some JSON +messages. They are defined in most contracts in the msg.rs file. Take +a look at it.

+

There are three types on it, let's go through them one by one. +The first one is an InstantiateMsg. This is the one, that is sent +on contract instantiation. It typically contains some data which +is needed to properly initialize it. In most cases, it is just a +simple structure.

+

Then there are two enums: ExecuteMsg, and QueryMsg. They are +enums because every single variant of them represents a different +message which can be sent. For example, the ExecuteMsg::UpdateAdmin +corresponds to the update_admin message we were sending previously.

+

Note, that all the messages are attributed with +#[derive(Serialize, Deserialize)], and +#[serde(rename_all="snake_case")]. Those attributes come from +the serde crate, and they help us with +deserialization of them (and serialization in case of sending +them to other contracts). The second one is not required, +but it allows us to keep a camel-case style in our Rust code, +and yet still have JSONs encoded with a snake-case style more +typical to this format.

+

I encourage you to take a closer look at the serde documentation, +like everything there, can be used with the messages.

+

One important thing to notice - empty variants of those enums, +tend to use the empty brackets, like Admin {} instead of +more Rusty Admin. It is on purpose, to make JSONs cleaner, +and it is related to how serde serializes enum.

+

Also worth noting is that those message types are not set in stone, +they can be anything. This is just a convention, but sometimes +you would see things like ExecuteCw4Msg, or similar. Just keep +in mind, to keep your message name obvious in terms of their +purpose - sticking to ExecuteMsg/QueryMsg is generally a good +idea.

+

Entry points

+

So now, when we have our contract message, we need a way to handle +them. They are sent to our contract via entry points. There are +three entry points in the cw4-group contract:

+

+#![allow(unused)]
+fn main() {
+#[cfg_attr(not(feature = "library"), entry_point)]
+pub fn instantiate(
+    deps: DepsMut,
+    env: Env,
+    _info: MessageInfo,
+    msg: InstantiateMsg,
+) -> Result<Response, ContractError> {
+    // ...
+}
+#[cfg_attr(not(feature = "library"), entry_point)]
+pub fn execute(
+    deps: DepsMut,
+    env: Env,
+    info: MessageInfo,
+    msg: ExecuteMsg,
+) -> Result<Response, ContractError> {
+    // ..
+}
+#[cfg_attr(not(feature = "library"), entry_point)]
+pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    // ..
+}
+}
+
+

Those functions are called by the CosmWasm virtual machine when +a message is to be handled by contract. You can think about them +as the main function of normal programs, except they have a signature +that better describes the blockchain itself.

+

What is very important is that the names of those entry points (similarly to +the main function) are fixed - it is relevant, so the virtual machine knows +exactly what to call.

+

So, let's start with the first line. Every entry point is attributed with +#[cfg_attr(not(feature = "library"), entry_point)]. It may look a bit +scary, but it is just a conditional equivalent of #[entry_point] - +the attribute would be there if and only if the "library" feature is not set. +We do this to be able to use our contracts as dependencies for other +contracts - the final binary can contain only one copy of each entry point, +so we make sure, that only the top-level one is compiled without this +feature.

+

The entry_point attribute is a macro that generates some boilerplate. +As the binary is run by WASM virtual machine, it doesn't know much about +Rust types - the actual entry point signatures are very inconvenient to +use. To overcome this issue, there is a macro created, which generates +entry points for us, and those entry points are just calling our functions.

+

Now take a look at functions arguments. Every single entry point takes as +the last argument a message which triggered the execution of it (except for +reply - I will explain it later). In addition to that, there are +additional arguments provided by blockchain:

+
    +
  • Deps or DepsMut object is the gateway to the world outside the smart contract context. It allows +accessing the contract state, as well as querying other contracts, and +also delivers an Api object with a couple of useful utility functions. +The difference is that DepsMut allows updating state, while Deps +allows only to look at it.
  • +
  • Env object delivers information about the blockchain state at the +moment of execution - its height, the timestamp of execution and information +about the executing contract itself.
  • +
  • MessageInfo object is information about the contract call - it +contains the address which sends the message, and the funds sent with the +message.
  • +
+

Keep in mind, that the signatures of those functions are fixed (except +the messages type), so you cannot interchange Deps with DepsMut to +update the contract state in the query call.

+

The last portion of entry points is the return type. Every entry point returns +a Result type, with any error which can be turned into a string - in case of +contract failure, the returned error is just logged. In most cases, the error +type is defined for a contract itself, typically using a +thiserror crate. Thiserror is +not required here, but is strongly recommended - using it makes the error +definition very straightforward, and also improves the testability of the +contract.

+

The important thing is the Ok part of Result. Let's start with the +query because this one is the simplest. The query always returns the Binary +object on the Ok case, which would contain just serialized response. +The common way to create it is just calling a to_binary method +on an object implementing serde::Serialize, and they are typically +defined in msg.rs next to message types.

+

Slightly more complex is the return type returned by any other entry +point - the cosmwasm_std::Response type. This one keep everything +needed to complete contract execution. There are three chunks of +information in that.

+

The first one is an events field. It contains all events, which would +be emitted to the blockchain as a result of the execution. Events have +a really simple structure: they have a type, which is just a string, +and a list of attributes which are just string-string key-value pairs.

+

You can notice that there is another attributes field on the Response. +This is just for convenience - most executions would return +only a single event, and to make it a bit easier to operate one, there +is a set of attributes directly on response. All of them would be converted +to a single wasm event which would be emitted. Because of that, I consider +events and attributes to be the same chunk of data.

+

Then we have the messages field, of SubMsg type. This one is the clue +of cross-contact communication. Those messages would be sent to the +contracts after processing. What is important - the whole execution is +not finished, unless the processing of all sub-messages scheduled by the contract +finishes. So, if the group contract sends some messages as a result of +update_members execution, the execution would be considered done only if +all the messages sent by it would also be handled (even if they failed).

+

So, when all the sub-messages sent by contract are processed, then all the +attributes generated by all sub-calls and top-level calls are collected and +reported to the blockchain. But there is one additional piece of information - +the data. So, this is another Binary field, just like the result of a query +call, and just like it, it typically contains serialized JSON. Every contract +call can return some additional information in any format. You may ask - in +this case, why do we even bother returning attributes? It is because of a +completely different way of emitting events and data. Any attributes emitted by +the contract would be visible on blockchain eventually (unless the whole +message handling fails). So, if your contract emitted some event as a result of +being sub-call of some bigger use case, the event would always be there visible +to everyone. This is not true for data. Every contract call would return only +a single data chunk, and it has to decide if it would just forward the data +field of one of the sub-calls, or maybe it would construct something by itself. +I would explain it in a bit more detail in a while.

+

Sending submessages

+

I don't want to go into details of the Response API, as it can be read +directly from documentation, but I want to take a bit closer look at the part +about sending messages.

+

The first function to use here is add_message, which takes as an argument the +CosmosMsg (or rather anything convertible to it). A message added to response +this way would be sent and processed, and its execution would not affect the +result of the contract at all.

+

The other function to use is add_submessage, taking a SubMsg argument. It +doesn't differ much from add_message - SubMsg just wraps the CosmosMsg, +adding some info to it: the id field, and reply_on. There is also a +gas_limit thing, but it is not so important - it just causes sub-message +processing to fail early if the gas threshold is reached.

+

The simple thing is reply_on - it describes if the reply message should be +sent on processing success, on failure, or both.

+

The id field is an equivalent of the order id in our KFC example from the +very beginning. If you send multiple different sub-messages, it would be +impossible to distinguish them without that field. It would not even be +possible to figure out what type of original message reply handling is! This is +why the id field is there - sending a sub-message you can set it to any +value, and then on the reply, you can figure out what is happening based on +this field.

+

An important note here - you don't need to worry about some sophisticated way +of generating ids. Remember, that the whole processing is atomic, and only one +execution can be in progress at once. In most cases, your contract sends a +fixed number of sub-messages on very concrete executions. Because of that, you +can hardcode most of those ids while sending (preferably using some constant).

+

To easily create submessages, instead of setting all the fields separately, +you would typically use helper constructors: SubMsg::reply_on_success, +SubMsg::reply_on_error and SubMsg::reply_always.

+

CosmosMsg

+

If you took a look at the CosmosMsg type, you could be very surprised - there +are so many variants of them, and it is not obvious how they relate to +communication with other contracts.

+

The message you are looking for is the WasmMsg (CosmosMsg::Wasm variant). +This one is very much similar to what we already know - it has a couple of +variants of operation to be performed by contracts: Execute, but also +Instantiate (so we can create new contracts in contract executions), and also +Migrate, UpdateAdmin, and ClearAdmin - those are used to manage +migrations (will tell a bit about them at the end of this chapter).

+

Another interesting message is the BankMsg (CosmosMsg::Bank). This one +allows a contract to transfer native tokens to other contracts (or burn them - +equivalent to transferring them to some black whole contract). I like to think +about it as sending a message to a very special contract responsible for handling +native tokens - this is not a true contract, as it is handled by the blockchain +itself, but at least to me it simplifies things.

+

Other variants of CosmosMsg are not very interesting for now. The Custom +one is there to allow other CosmWasm-based blockchains to add some +blockchain-handled variant of the message. This is a reason why most +message-related types in CosmWasm are generic over some T - this is just a +blockchain-specific type of message. We will never use it in the wasmd. All +other messages are related to advanced CosmWasm features, and I will not +describe them here.

+

Reply handling

+

So now that we know how to send a submessage, it is time to talk about +handling the reply. When sub-message processing is finished, and it is +requested to reply, the contract is called with an entry point:

+

+#![allow(unused)]
+fn main() {
+#[cfg_attr(not(feature = "library"), entry_point)]
+pub fn reply(deps: DepsMut, env: Env, msg: Reply) -> Result<Response, ContractError> {
+    // ...
+}
+}
+
+

The DepsMut, and Env arguments are already familiar, but there is a new +one, substituting the typical message argument: the cosmwasm_std::Reply.

+

This is a type representing the execution status of the sub-message. It is +slightly processed cosmwasm_std::Response. The first important thing it contains +is an id - the same, which you set sending sub-message, so now you can +identify your response. The other one is the ContractResult, which is very +similar to the Rust Result<T, String> type, except it is there for +serialization purposes. You can easily convert it into a Result with an +into_result function.

+

In the error case of ContracResult, there is a string - as I mentioned +before, errors are converted to strings right after execution. The Ok case +contains SubMsgExecutionResponse with two fields: events emitted by +sub-call, and the data field embedded on response.

+

As said before, you never need to worry about forwarding events - CosmWasm +would do it anyway. The data however, is another story. As mentioned before, +every call would return only a single data object. In the case of sending +sub-messages and not capturing a reply, it would always be whatever is returned +by the top-level message. But it is not the case when reply is called. If a +a reply is called, then it is a function deciding about the final data. It can +decide to either forward the data from the sub-message (by returning None) or +to overwrite it. It cannot choose, to return data from the original execution +processing - if the contract sends sub-messages waiting for replies, it is +supposed to not return any data, unless replies are called.

+

But what happens if multiple sub-messages are sent? What would the final +data contain? The rule is - the last non-None. All sub-messages are always +called in the order of adding them to the Response. As the order is +deterministic and well defined, it is always easy to predict which reply would +be used.

+

Migrations

+

I mentioned migrations earlier when describing the WasmMsg. So, migration +is another action possible to be performed by contracts, which is kind +of similar to instantiate. In software engineering, it is a common thing to +release an updated version of applications. It is also a case in the blockchain - +SmartContract can be updated with some new features. In such cases, a new +code is uploaded, and the contract is migrated - so it knows that from +this point, its messages are handled by another, updated contract code.

+

However, it may be that the contract state used by the older version of the +contract differs from the new one. It is not a problem if some info was +added (for example some additional map - it would be just empty right +after migration). But the problem is, when the state changes, +for example, the field is renamed. In such a case, every contract execution +would fail because of (de)serialization problems. Or even more subtle +cases, like adding a map, but one which should be synchronized with the whole +contract state, not empty.

+

This is the purpose of the migration entry point. It looks like this:

+

+#![allow(unused)]
+fn main() {
+#[cfg_attr(not(feature = "library"), entry_point)]
+pub fn migrate(deps: DepsMut, env: Env, msg: MigrateMsg) -> Result<Response<T>, ContracError> {
+    // ..
+}
+}
+
+

MigrateMsg is the type defined by the contract in msg.rs. +The migrate entry point would be called at the moment of performing +the migration, and it is responsible for making sure the state is correct +after the migration. It is very similar to schema migrations in traditional +database applications. And it is also kind of difficult, because of version +management involved - you can never assume, that you are migrating a contract +from the previous version - it can be migrated from any version, released +anytime - even later than that version we are migrating to!

+

It is worth bringing back one issue from the past - the contract admin. Do you +remember the --no-admin flag we set previously on every contract +instantiation? It made our contract unmigrateable. Migrations can be performed +only by contract admin. To be able to use it, you should pass --admin address +flag instead, with the address being the address that would be able to +perform migrations.

+

Sudo

+

Sudo is the last basic entry point in CosmWasm, and it is the one we would +never use in wasmd. It is equivalent to CosmosMsg::Custom, but instead of +being a special blockchain-specific message to be sent and handled by a +blockchain itself, it is now a special blockchain-specific message sent by the +blockchain to contract in some conditions. There are many uses for those, but I +will not cover them, because would not be related to CosmWasm itself. The +signature of sudo looks like this:

+

+#![allow(unused)]
+fn main() {
+#[cfg_attr(not(feature = "library"), entry_point)]
+pub fn sudo(deps: DepsMut, env: Env, msg: SudoMsg) -> Result<Response, ContractError> {
+    // ..
+}
+}
+
+

The important difference is that because sudo messages are blockchain +specific, the SudoMsg type is typically defined by some blockchain helper +crate, not the contract itself.

+

Cross contract communication

+

We already covered creating a single isolating contract. However, SOLID principles tell us that +entities should be as small as reasonably possible - such as they have a +single responsibility. Entities +we are focusing on now are smart contracts, and we want to make sure that every smart contract has +a sole responsibility it takes care of.

+

But we also want to build complex systems using smart contracts. To do so, we need to be able to +communicate between them. We already talked about what such communication looks like using an actor +model. Now it's time to use this knowledge in practice.

+

In this chapter, we will improve the previously created administration group model to solve the problem +I brought - the possibility of adding own multiple addresses by a single admin to take bigger donation parts.

+

We would also give admins some work to do besides being admins.

+

Design

+

This time we will start discussing the design of our system a bit. Building multi-contract systems tend to +be a bit more complicated than just isolated contracts, so I want to give you some anchor on what we are +building in this chapter. If you feel lost with a design, don't worry - it will get clear while implementing +contracts. For now, go through it to get a general idea.

+

First, let's think about the problem we want to solve. Our admins are a vector of addresses. Anyone already +an admin can add anyone he wants to the list. But this "anyone" can be a second instance of the same admin +account, so he counts twice for donations!

+

This issue is relatively simple to fix, but there is another problem - as we already learned, the admin could +create a smart contract which he and only he can withdraw tokens from and register as another admin in the +group! Instantiating it multiple times, he can achieve his goal even if we prevent adding the same address +multiple times. There would be many distinct addresses that the same person owns.

+

It looks like an unpleasant situation, but there are ways to manage it. The one we would implement is voting. +Instead of being able to add another admin to the list, admins would be allowed to propose their colleagues +as new admins. It would start a voting process - everyone who was an admin at the time of the proposal creation +would be able to support it. If more than half admins would support the new candidate, he would immediately +become an admin.

+

It is not the most convoluted voting process, but it would be enough for our purposes.

+

Voting process

+

To achieve this goal, we would create two smart contracts. First, one would be reused contract from the +Basics chapter - it would be an admin contract. Additionally, we would add a voting contract. +It would be responsible for managing a single voting process. It would be instantiated by an admin contract +whenever an admin wants to add his friend to a list. Here is a diagram of the contracts relationship:

+

+

Here is adding an admin flowchart - assuming there are 5 admins on the contract already, but 2 of them did nothing:

+

+

I already put some hints about contracts implementation, but I will not go into them yet.

+

Messages forwarding

+

There is one other thing we want to add - some way to give admins work. The admin contract would behave like +a proxy to call another contract. That means that some other external contract would just set our admin instance +as a specific address that can perform executions on it, and admins would perform actions this way. The external +contract would see execution as the admin contract would do it. Here is an updated contracts diagram:

+

+

And calling external contract flowchart:

+

+

Note that the msg on execute admin contract message is some arbitrary message just forwarded +to the external contract. It would be a base64-encoded message in the real world, but it is +just an implementation detail.

+

Ultimately, we will create a simple example of an external contract to understand how to use such a pattern.

+

Fixing admin contract

+

Now that we know what we want to achieve, we can start by aligning the +contract we already have to become an admin contract. It is primarily +fine at this point, but we want to do a cleanup.

+

Cleaning up queries

+

The first thing to do is to get rid of the Greet query - it was good as a +starter query example, but it has no practical purpose and only generates noise.

+

We want to remove the unnecessary variant from the query enum:

+

+#![allow(unused)]
+fn main() {
+use cosmwasm_schema::{cw_serde, QueryResponses};
+use cosmwasm_std::Addr;
+
+#[cw_serde]
+pub struct InstantiateMsg {
+    pub admins: Vec<String>,
+    pub donation_denom: String,
+}
+
+#[cw_serde]
+pub enum ExecuteMsg {
+    Leave {},
+    Donate {},
+}
+
+#[cw_serde]
+pub struct AdminsListResp {
+    pub admins: Vec<Addr>,
+}
+
+#[cw_serde]
+#[derive(QueryResponses)]
+pub enum QueryMsg {
+    #[returns(AdminsListResp)]
+    AdminsList {},
+}
+}
+
+

Then we also remove the invalid path in the query dispatcher:

+

+#![allow(unused)]
+fn main() {
+pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
+    use QueryMsg::*;
+
+    match msg {
+        AdminsList {} => to_binary(&query::admins_list(deps)?),
+    }
+}
+}
+
+

Finally, we remove the irrelevant handler from the contract::query module. +We also need to make sure all references to it are gone (eg. if there are any +in the tests).

+

Generating the library output

+

At the very beginning of the book, we set the crate-type in Cargo.toml as +"cdylib". It was required to generate the wasm output, but it comes with a +drawback - the dynamic libraries, as this cannot be used as dependencies in +other crates. It was not a problem before, but in practice we often want to +depend contract on others to get access to some types of them - for example, +defined messages.

+

Good for us. It is easy to fix. You might notice that the crate-type is an array, +not a single string. The reason for that is that our project can emit several +targets - in particular, we can add there the default "rlib" crate type to +make it generate a "rust library" output - which is what we need to use as a +dependency. Let's update our Cargo.toml:

+
[package]
+name = "admin"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib", "rlib"]
+# 
+# [features]
+# library = []
+# 
+# [dependencies]
+# cosmwasm-std = { version = "1.1.4", features = ["staking"] }
+# serde = { version = "1.0.103", default-features = false, features = ["derive"] }
+# cw-storage-plus = "0.15.1"
+# thiserror = "1"
+# schemars = "0.8.1"
+# cw-utils = "0.15.1"
+# cosmwasm-schema = "1.1.4"
+# 
+# [dev-dependencies]
+# cw-multi-test = "0.15.1"
+
+

Also, note I changed the contract name - "contract" is not very descriptive, so +I updated it to "admin".

+

Project structure

+

Last but not least - we want to better structure our project. So far, we have +only one contract, so we just worked on it as a whole project. Now we want some +directory tree that reflects relations between contracts we create.

+

First, create a directory for the project. Then we want to create a "contracts" +subdirectory in it. It is not technically required from Rust's POV, but there +are tools in our environment, like the workspace optimizer, which would assume +it is where it should look for a contract. It is a common pattern you will see +in CosmWasm contracts repos.

+

Then we copy the whole project directory from the previous chapter into the +contracts, renaming it to admin.

+

Finally, we want to couple all our projects (for now, it is just one, but we know +there will be more there). To do so, we create the workspace-level Cargo.toml +file in the top-level project directory:

+
[workspace]
+members = ["contracts/*"]
+resolver = "2"
+
+

This Cargo.toml differs slightly from the typical project-level one - it +defines the workspace. The most important field here is the members - it +defines projects being part of the workspace.

+

The other field is the resolver. It is something to remember to add - it +instructs cargo to use version 2 of the dependency resolver. This has been the +default for non-workspaces since Rust 2021, but because of compatibility reasons, +the default couldn't be changed for workspaces - but it is advised to add it to +every single newly created workspace.

+

The last field which might be useful for workspaces is exclude - it allows to +create projects in the workspace directory tree, which is not a part of this +workspace - we will not use it, but it is good to know about it.

+

Now just for clarity, let's see the top-level directory structure:

+
.
+├── Cargo.lock
+├── Cargo.toml
+├── contracts
+│  └── admin
+└── target
+   ├── CACHEDIR.TAG
+   └── debug
+
+

You can see the target directory and Cargo.lock files existing in the tree - it is +because I already built and ran tests for the admin contract - in Rust workspaces, +`cargo`` knows to build everything in the top level, even if it would be built from +the inner directory.

+

Map storage

+

There is one thing to be immediately improved in the admin contract. Let's +check the contract state:

+

+#![allow(unused)]
+fn main() {
+use cosmwasm_std::Addr;
+use cw_storage_plus::Item;
+
+pub const ADMINS: Item<Vec<Addr>> = Item::new("admins");
+pub const DONATION_DENOM: Item<String> = Item::new("donation_denom");
+}
+
+

Note that we keep our admin list as a single vector. However, in the whole +contract, in most cases, we access only a single element of this vector.

+

This is not ideal, as now, whenever we want to access the single admin entry, +we have first to deserialize the list containing all of them and then iterate +over them until we find the interesting one. This might consume a serious +amount of gas and is completely unnecessary overhead - we can avoid that using +the Map +storage accessor.

+

The Map storage

+

First, let's define a map - in this context, it would be a set of keys with values +assigned to them, just like a HashMap in Rust or dictionaries in many languages. +We define it as similar to an Item, but this time we need two types - the key type +and the value type:

+

+#![allow(unused)]
+fn main() {
+use cw_storage_plus::Map;
+
+pub const STR_TO_INT_MAP: Map<String, u64> = Map::new("str_to_int_map");
+}
+
+

Then to store some items on the Map, +we use a +save +method - same as for an Item:

+

+#![allow(unused)]
+fn main() {
+STR_TO_INT_MAP.save(deps.storage, "ten".to_owned(), 10);
+STR_TO_INT_MAP.save(deps.storage, "one".to_owned(), 1);
+}
+
+

Accessing entries in the map is also as easy as reading an item:

+

+#![allow(unused)]
+fn main() {
+let ten = STR_TO_INT_MAP.load(deps.storage, "ten".to_owned())?;
+assert_eq!(ten, 10);
+
+let two = STR_TO_INT_MAP.may_load(deps.storage, "two".to_owned())?;
+assert_eq!(two, None);
+}
+
+

Obviously, if the element is missing in the map, the +load +function will result in an error - just like for an item. On the other hand - +may_load +returns a Some variant when element exits.

+

Another very useful accessor that is specific to the map is the +has +function, which checks for the existence of the key in the map:

+

+#![allow(unused)]
+fn main() {
+let contains = STR_TO_INT_MAP.has(deps.storage, "three".to_owned())?;
+assert!(!contains);
+}
+
+

Finally, we can iterate over elements of the maps - either its keys or key-value +pairs:

+

+#![allow(unused)]
+fn main() {
+use cosmwasm_std::Order;
+
+for k in STR_TO_INT_MAP.keys(deps.storage, None, None, Order::Ascending) {
+    let _addr = deps.api.addr_validate(k?);
+}
+
+for item in STR_TO_INT_MAP.range(deps.storage, None, None, Order::Ascending) {
+    let (_key, _value) = item?;
+}
+}
+
+

First, you might wonder about extra values passed to +keys +and +range - +those are in order: lower and higher bounds of iterated elements, and the order +elements should be traversed.

+

While working with typical Rust iterators, you would probably first create an +iterator over all the elements and then somehow skip those you are not +interested in. After that, you will stop after the last interesting element.

+

It would more often than not require accessing elements you filter out, and +this is the problem - it requires reading the element from the storage. And +reading it from the storage is the expensive part of working with data, which +we try to avoid as much as possible. One way to do it is to instruct the Map +where to start and stop deserializing elements from storage so it never reaches +those outside the range.

+

Another critical thing to notice is that the iterator returned by both keys and +range functions are not iterators over elements - they are iterators over Results. +It is a thing because, as it is rare, it might be that item is supposed to exist, +but there is some error while reading from storage - maybe the stored value is +serialized in a way we didn't expect, and deserialization fails. This is actually +a real thing that happened in one of the contracts I worked on in the past - we +changed the value type of the Map, and then forgot to migrate it, which caused +all sorts of problems.

+

Maps as sets

+

So I imagine you can call me crazy right now - why do I spam about a Map, while +we are working with vector? It is clear that those two represent two distinct +things! Or do they?

+

Let's reconsider what we keep in the ADMINS vector - we have a list of objects +which we expect to be unique, which is a definition of a mathematical set. So +now let me bring back my initial definition of the map:

+
+

First, let's define a map - in this context, it would be a set of keys with +values assigned to them, just like a HashMap in Rust or dictionaries in many languages.

+
+

I purposely used the word "set" here - the map has the set built into it. It is +a generalization of a set or reversing the logic - the set is a particular case +of a map. If you imagine a set that map every single key to the same value, then +the values become irrelevant, and such a map becomes a set semantically.

+

How can you make a map mapping all the keys to the same value? We pick a type +with a single value. Typically in Rust, it would be a unit type (()), but in +CosmWasm, we tend to use the +Empty +type from CW standard crate:

+

+#![allow(unused)]
+fn main() {
+use cosmwasm_std::{Addr, Empty};
+use cw_storage_plus::Map;
+
+pub const ADMINS: Map<Addr, Empty> = Map::new("admins");
+}
+
+

We now need to fix the usage of the map in our contract. Let's start with contract +instantiation:

+

+#![allow(unused)]
+fn main() {
+use crate::msg::InstantiateMsg;
+use crate::state::{ADMINS, DONATION_DENOM};
+use cosmwasm_std::{
+    DepsMut, Empty, Env, MessageInfo, Response, StdResult,
+};
+
+pub fn instantiate(
+    deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    for addr in msg.admins {
+        let admin = deps.api.addr_validate(&addr)?;
+        ADMINS.save(deps.storage, admin, &Empty {})?;
+    }
+    DONATION_DENOM.save(deps.storage, &msg.donation_denom)?;
+
+    Ok(Response::new())
+}
+}
+
+

It didn't simplify much, but we no longer need to collect our address. Then +let's move to the leaving logic:

+

+#![allow(unused)]
+fn main() {
+use crate::state::ADMINS;
+use cosmwasm_std::{DepsMut, MessageInfo};
+
+pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult<Response> {
+    ADMINS.remove(deps.storage, info.sender.clone());
+
+    let resp = Response::new()
+        .add_attribute("action", "leave")
+        .add_attribute("sender", info.sender.as_str());
+
+    Ok(resp)
+}
+}
+
+

Here we see a difference - we don't need to load a whole vector. We remove a +single entry with the +remove +function.

+

What I didn't emphasize before, and what is relevant, is that Map stores every +single key as a distinct item. This way, accessing a single element will be +cheaper than using a vector.

+

However, this has its downside - accessing all the elements is more +gas-consuming using Map! In general, we tend to avoid such situations - the +linear complexity of the contract might lead to very expensive executions +(gas-wise) and potential vulnerabilities - if the user finds a way to create +many dummy elements in such a vector, he may make the execution cost exceeding +any gas limit.

+

Unfortunately, we have such an iteration in our contract - the distribution flow +becomes as follows:

+

+#![allow(unused)]
+fn main() {
+use crate::error::ContractError;
+use crate::state::{ADMINS, DONATION_DENOM};
+use cosmwasm_std::{
+    coins, BankMsg,DepsMut, MessageInfo, Order, Response
+};
+
+pub fn donate(deps: DepsMut, info: MessageInfo) -> Result<Response, ContractError> {
+    let denom = DONATION_DENOM.load(deps.storage)?;
+    let admins: Result<Vec<_>, _> = ADMINS
+        .keys(deps.storage, None, None, Order::Ascending)
+        .collect();
+    let admins = admins?;
+
+    let donation = cw_utils::must_pay(&info, &denom)?.u128();
+
+    let donation_per_admin = donation / (admins.len() as u128);
+
+    let messages = admins.into_iter().map(|admin| BankMsg::Send {
+        to_address: admin.to_string(),
+        amount: coins(donation_per_admin, &denom),
+    });
+
+    let resp = Response::new()
+        .add_messages(messages)
+        .add_attribute("action", "donate")
+        .add_attribute("amount", donation.to_string())
+        .add_attribute("per_admin", donation_per_admin.to_string());
+
+    Ok(resp)
+}
+}
+
+

If I had to write a contract like this, and this donate would be a critical, +often called flow, I would advocate for going for an Item<Vec<Addr>> here. +Fortunately, it is not the case - the distribution does not have to be linear in +complexity! It might sound a bit crazy, as we have to iterate over all receivers +to distribute funds, but this is not true - there is a pretty nice way to do so +in constant time, which I will describe later in the book. For now, we will +leave it as it is, acknowledging the flaw of the contract, which we will fix later.

+

The final function to fix is the admins_list query handler:

+

+#![allow(unused)]
+fn main() {
+use crate::state::ADMINS;
+use cosmwasm_std::{Deps, Order, StdResult};
+
+pub fn admins_list(deps: Deps) -> StdResult<AdminsListResp> {
+    let admins: Result<Vec<_>, _> = ADMINS
+        .keys(deps.storage, None, None, Order::Ascending)
+        .collect();
+    let admins = admins?;
+    let resp = AdminsListResp { admins };
+    Ok(resp)
+}
+}
+
+

Here we also have an issue with linear complexity, but it is far less of a problem.

+

First, queries are often purposed to be called on local nodes, with no gas cost - +we can query contracts as much as we want.

+

And then, even if we have some limit on execution time/cost, there is no reason to +query all the items every single time! We will fix this function later, adding +pagination - to limit the execution time/cost of the query caller would be able to +ask for a limited amount of items starting from the given one. Knowing this chapter, +you can probably figure implementation of it right now, but I will show the common +way we do that when I go through common CosmWasm practices.

+

Reference keys

+

There is one subtlety to improve in our map usage.

+

The thing is that right now, we index the map with the owned Addr key. That forces +us to clone it if we want to reuse the key (particularly in the leave implementation). +This is not a huge cost, but we can avoid it - we can define the key of the map +to be a reference:

+

+#![allow(unused)]
+fn main() {
+use cosmwasm_std::{Addr, Empty};
+use cw_storage_plus::Map;
+
+pub const ADMINS: Map<&Addr, Empty> = Map::new("admins");
+pub const DONATION_DENOM: Item<String> = Item::new("donation_denom");
+}
+
+

Finally, we need to fix the usages of the map in two places:

+

+#![allow(unused)]
+fn main() {
+use crate::state::{ADMINS, DONATION_DENOM};
+use cosmwasm_std::{
+    DepsMut, Empty, Env, MessageInfo, Response, StdResult,
+};
+
+pub fn instantiate(
+    deps: DepsMut,
+    _env: Env,
+    _info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    for addr in msg.admins {
+        let admin = deps.api.addr_validate(&addr)?;
+        ADMINS.save(deps.storage, &admin, &Empty {})?;
+    }
+
+    // ...
+
+   DONATION_DENOM.save(deps.storage, &msg.donation_denom)?;
+
+   Ok(Response::new())
+}
+
+pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult<Response> {
+    ADMINS.remove(deps.storage, &info.sender);
+
+    // ...
+
+   let resp = Response::new()
+       .add_attribute("action", "leave")
+       .add_attribute("sender", info.sender.as_str());
+
+   Ok(resp)
+}
+}
+
+

Working with time

+

The concept of time in the blockchain is tricky - as in +every distributed system, it is not easy to synchronize the +clocks of all the nodes.

+

However, there is the notion of a time that is even +monotonic - which means that it should never go "backward" +between executions. Also, what is important is - time is +always unique throughout the whole transaction - and even +the entire block, which is built of multiple transactions.

+

The time is encoded in the +Env +type in its +block +field, which looks like this:

+

+#![allow(unused)]
+fn main() {
+pub struct BlockInfo {
+    pub height: u64,
+    pub time: Timestamp,
+    pub chain_id: String,
+}
+}
+
+

You can see the time field, which is the timestamp of the +processed block. The height field is also worth +mentioning - it contains a sequence number of the processed +block. It is sometimes more useful than time, as it is +guaranteed that the height field is guaranteed to increase +between blocks, while two blocks may be executed with the +same time (even though it is rather not probable).

+

Also, many transactions might be executed in a single block. +That means that if we need a unique id for the execution of +a particular message, we should look for something more. +This thing is a +transaction +field of the Env type:

+

+#![allow(unused)]
+fn main() {
+pub struct TransactionInfo {
+    pub index: u32,
+}
+}
+
+

The index here contains a unique index of the transaction +in the block. That means that to get the unique identifier +of a transaction through the whole block, we can use the +(height, transaction_index) pair.

+

Join time

+

We want to use the time in our system to keep track of the +join time of admins. We don't yet add new members to the +group, but we can already set the join time of initial +admins. Let's start updating our state:

+

+#![allow(unused)]
+fn main() {
+use cosmwasm_std::{Addr, Timestamp};
+use cw_storage_plus::Map;
+use cw_storage_plus::Item;
+
+pub const ADMINS: Map<&Addr, Timestamp> = Map::new("admins");
+pub const DONATION_DENOM: Item<String> = Item::new("donation_denom");
+}
+
+

As you can see, our admins set became a proper map - we will +assign the join time to every admin.

+

Now we need to update how we initialize a map - we stored the Empty data previously, but it nevermore matches our value type. Let's check an updated instantiation function:

+

You might argue to create a separate structure for the value +of this map, so in the future, if we would need to add +something there, but in my opinion, it would be premature - +we can also change the entire value type in the future, as +it would be the same breaking change.

+

Now we need to update how we initialize a map - we stored +the Empty data previously, but it nevermore matches our +value type. Let's check an updated instantiation function:

+

+#![allow(unused)]
+fn main() {
+use crate::state::{ADMINS, DONATION_DENOM};
+use cosmwasm_std::{
+    DepsMut, Env, MessageInfo, Response, StdResult,
+};
+
+pub fn instantiate(
+    deps: DepsMut,
+    env: Env,
+    _info: MessageInfo,
+    msg: InstantiateMsg,
+) -> StdResult<Response> {
+    for addr in msg.admins {
+        let admin = deps.api.addr_validate(&addr)?;
+        ADMINS.save(deps.storage, &admin, &env.block.time)?;
+    }
+    DONATION_DENOM.save(deps.storage, &msg.donation_denom)?;
+
+    Ok(Response::new())
+}
+}
+
+

Instead of storing &Empty {} as an admin value, we store +the join time, which we read from &env.block.time. Also, +note that I removed the underscore from the name of the +env block - it was there only to ensure the Rust compiler +the variable is purposely unused and not some kind of a bug.

+

Finally, remember to remove any obsolete Empty imports +through the project - the compiler should help you point out +unused imports.

+

Query and tests

+

The last thing to add regarding join time is the new query +asking for the join time of a particular admin. Everything +you need to do that was already discussed, I'll leave it for +you as an exercise. The query variant should look like:

+

+#![allow(unused)]
+fn main() {
+#[returns(JoinTimeResp)]
+JoinTime { admin: String },
+}
+
+

And the example response type:

+

+#![allow(unused)]
+fn main() {
+#[cw_serde]
+pub struct JoinTimeResp {
+    pub joined: Timestamp,
+}
+}
+
+

You may question that in response type, I suggest always returning a joined +value, but what to do when no such admin is added? Well, in such a case, I +would rely on the fact that load function returns a descriptive error of +missing value in storage - however, feel free to define your own error for such +a case or even make the joined field optional, and be returned if requested +admin exists.

+

Finally, there would be a good idea to make a test for new functionality - call +a new query right after instantiation to verify initial admins has proper join +time (possibly by extending the existing instantiation test).

+

One thing you might need help with in tests might be how to get the time of +execution. Using any OS-time would be doomed to fail - instead, you can call +the +block_info +function to reach the +BlockInfo +structure containing the block state at a particular moment in the app - calling +it just before instantiation would make you sure you are working with the same state +which would be simulated on the call.

+

Legal Information

+

Infomation according to § 5 TMG

+

Provider

+

Confio GmbH
+7th Floor
+Potsdamer Platz 1
+10785 Berlin

+

Managing Director

+

Simon Warta

+

Contact

+

hello@confio.gmbh

+

Commercial Register

+

HRB 221575, Amtsgericht Charlottenburg

+

VAT number

+

DE339802279

+

Responsible for the content

+

Simon Warta
+c/o Confio GmbH
+7th Floor
+Potsdamer Platz 1
+10785 Berlin

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + diff --git a/searcher.js b/searcher.js new file mode 100644 index 0000000..d2b0aee --- /dev/null +++ b/searcher.js @@ -0,0 +1,483 @@ +"use strict"; +window.search = window.search || {}; +(function search(search) { + // Search functionality + // + // You can use !hasFocus() to prevent keyhandling in your key + // event handlers while the user is typing their search. + + if (!Mark || !elasticlunr) { + return; + } + + //IE 11 Compatibility from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith + if (!String.prototype.startsWith) { + String.prototype.startsWith = function(search, pos) { + return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search; + }; + } + + var search_wrap = document.getElementById('search-wrapper'), + searchbar = document.getElementById('searchbar'), + searchbar_outer = document.getElementById('searchbar-outer'), + searchresults = document.getElementById('searchresults'), + searchresults_outer = document.getElementById('searchresults-outer'), + searchresults_header = document.getElementById('searchresults-header'), + searchicon = document.getElementById('search-toggle'), + content = document.getElementById('content'), + + searchindex = null, + doc_urls = [], + results_options = { + teaser_word_count: 30, + limit_results: 30, + }, + search_options = { + bool: "AND", + expand: true, + fields: { + title: {boost: 1}, + body: {boost: 1}, + breadcrumbs: {boost: 0} + } + }, + mark_exclude = [], + marker = new Mark(content), + current_searchterm = "", + URL_SEARCH_PARAM = 'search', + URL_MARK_PARAM = 'highlight', + teaser_count = 0, + + SEARCH_HOTKEY_KEYCODE = 83, + ESCAPE_KEYCODE = 27, + DOWN_KEYCODE = 40, + UP_KEYCODE = 38, + SELECT_KEYCODE = 13; + + function hasFocus() { + return searchbar === document.activeElement; + } + + function removeChildren(elem) { + while (elem.firstChild) { + elem.removeChild(elem.firstChild); + } + } + + // Helper to parse a url into its building blocks. + function parseURL(url) { + var a = document.createElement('a'); + a.href = url; + return { + source: url, + protocol: a.protocol.replace(':',''), + host: a.hostname, + port: a.port, + params: (function(){ + var ret = {}; + var seg = a.search.replace(/^\?/,'').split('&'); + var len = seg.length, i = 0, s; + for (;i': '>', + '"': '"', + "'": ''' + }; + var repl = function(c) { return MAP[c]; }; + return function(s) { + return s.replace(/[&<>'"]/g, repl); + }; + })(); + + function formatSearchMetric(count, searchterm) { + if (count == 1) { + return count + " search result for '" + searchterm + "':"; + } else if (count == 0) { + return "No search results for '" + searchterm + "'."; + } else { + return count + " search results for '" + searchterm + "':"; + } + } + + function formatSearchResult(result, searchterms) { + var teaser = makeTeaser(escapeHTML(result.doc.body), searchterms); + teaser_count++; + + // The ?URL_MARK_PARAM= parameter belongs inbetween the page and the #heading-anchor + var url = doc_urls[result.ref].split("#"); + if (url.length == 1) { // no anchor found + url.push(""); + } + + // encodeURIComponent escapes all chars that could allow an XSS except + // for '. Due to that we also manually replace ' with its url-encoded + // representation (%27). + var searchterms = encodeURIComponent(searchterms.join(" ")).replace(/\'/g, "%27"); + + return '' + result.doc.breadcrumbs + '' + + '' + + teaser + ''; + } + + function makeTeaser(body, searchterms) { + // The strategy is as follows: + // First, assign a value to each word in the document: + // Words that correspond to search terms (stemmer aware): 40 + // Normal words: 2 + // First word in a sentence: 8 + // Then use a sliding window with a constant number of words and count the + // sum of the values of the words within the window. Then use the window that got the + // maximum sum. If there are multiple maximas, then get the last one. + // Enclose the terms in . + var stemmed_searchterms = searchterms.map(function(w) { + return elasticlunr.stemmer(w.toLowerCase()); + }); + var searchterm_weight = 40; + var weighted = []; // contains elements of ["word", weight, index_in_document] + // split in sentences, then words + var sentences = body.toLowerCase().split('. '); + var index = 0; + var value = 0; + var searchterm_found = false; + for (var sentenceindex in sentences) { + var words = sentences[sentenceindex].split(' '); + value = 8; + for (var wordindex in words) { + var word = words[wordindex]; + if (word.length > 0) { + for (var searchtermindex in stemmed_searchterms) { + if (elasticlunr.stemmer(word).startsWith(stemmed_searchterms[searchtermindex])) { + value = searchterm_weight; + searchterm_found = true; + } + }; + weighted.push([word, value, index]); + value = 2; + } + index += word.length; + index += 1; // ' ' or '.' if last word in sentence + }; + index += 1; // because we split at a two-char boundary '. ' + }; + + if (weighted.length == 0) { + return body; + } + + var window_weight = []; + var window_size = Math.min(weighted.length, results_options.teaser_word_count); + + var cur_sum = 0; + for (var wordindex = 0; wordindex < window_size; wordindex++) { + cur_sum += weighted[wordindex][1]; + }; + window_weight.push(cur_sum); + for (var wordindex = 0; wordindex < weighted.length - window_size; wordindex++) { + cur_sum -= weighted[wordindex][1]; + cur_sum += weighted[wordindex + window_size][1]; + window_weight.push(cur_sum); + }; + + if (searchterm_found) { + var max_sum = 0; + var max_sum_window_index = 0; + // backwards + for (var i = window_weight.length - 1; i >= 0; i--) { + if (window_weight[i] > max_sum) { + max_sum = window_weight[i]; + max_sum_window_index = i; + } + }; + } else { + max_sum_window_index = 0; + } + + // add around searchterms + var teaser_split = []; + var index = weighted[max_sum_window_index][2]; + for (var i = max_sum_window_index; i < max_sum_window_index+window_size; i++) { + var word = weighted[i]; + if (index < word[2]) { + // missing text from index to start of `word` + teaser_split.push(body.substring(index, word[2])); + index = word[2]; + } + if (word[1] == searchterm_weight) { + teaser_split.push("") + } + index = word[2] + word[0].length; + teaser_split.push(body.substring(word[2], index)); + if (word[1] == searchterm_weight) { + teaser_split.push("") + } + }; + + return teaser_split.join(''); + } + + function init(config) { + results_options = config.results_options; + search_options = config.search_options; + searchbar_outer = config.searchbar_outer; + doc_urls = config.doc_urls; + searchindex = elasticlunr.Index.load(config.index); + + // Set up events + searchicon.addEventListener('click', function(e) { searchIconClickHandler(); }, false); + searchbar.addEventListener('keyup', function(e) { searchbarKeyUpHandler(); }, false); + document.addEventListener('keydown', function(e) { globalKeyHandler(e); }, false); + // If the user uses the browser buttons, do the same as if a reload happened + window.onpopstate = function(e) { doSearchOrMarkFromUrl(); }; + // Suppress "submit" events so the page doesn't reload when the user presses Enter + document.addEventListener('submit', function(e) { e.preventDefault(); }, false); + + // If reloaded, do the search or mark again, depending on the current url parameters + doSearchOrMarkFromUrl(); + } + + function unfocusSearchbar() { + // hacky, but just focusing a div only works once + var tmp = document.createElement('input'); + tmp.setAttribute('style', 'position: absolute; opacity: 0;'); + searchicon.appendChild(tmp); + tmp.focus(); + tmp.remove(); + } + + // On reload or browser history backwards/forwards events, parse the url and do search or mark + function doSearchOrMarkFromUrl() { + // Check current URL for search request + var url = parseURL(window.location.href); + if (url.params.hasOwnProperty(URL_SEARCH_PARAM) + && url.params[URL_SEARCH_PARAM] != "") { + showSearch(true); + searchbar.value = decodeURIComponent( + (url.params[URL_SEARCH_PARAM]+'').replace(/\+/g, '%20')); + searchbarKeyUpHandler(); // -> doSearch() + } else { + showSearch(false); + } + + if (url.params.hasOwnProperty(URL_MARK_PARAM)) { + var words = decodeURIComponent(url.params[URL_MARK_PARAM]).split(' '); + marker.mark(words, { + exclude: mark_exclude + }); + + var markers = document.querySelectorAll("mark"); + function hide() { + for (var i = 0; i < markers.length; i++) { + markers[i].classList.add("fade-out"); + window.setTimeout(function(e) { marker.unmark(); }, 300); + } + } + for (var i = 0; i < markers.length; i++) { + markers[i].addEventListener('click', hide); + } + } + } + + // Eventhandler for keyevents on `document` + function globalKeyHandler(e) { + if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey || e.target.type === 'textarea' || e.target.type === 'text') { return; } + + if (e.keyCode === ESCAPE_KEYCODE) { + e.preventDefault(); + searchbar.classList.remove("active"); + setSearchUrlParameters("", + (searchbar.value.trim() !== "") ? "push" : "replace"); + if (hasFocus()) { + unfocusSearchbar(); + } + showSearch(false); + marker.unmark(); + } else if (!hasFocus() && e.keyCode === SEARCH_HOTKEY_KEYCODE) { + e.preventDefault(); + showSearch(true); + window.scrollTo(0, 0); + searchbar.select(); + } else if (hasFocus() && e.keyCode === DOWN_KEYCODE) { + e.preventDefault(); + unfocusSearchbar(); + searchresults.firstElementChild.classList.add("focus"); + } else if (!hasFocus() && (e.keyCode === DOWN_KEYCODE + || e.keyCode === UP_KEYCODE + || e.keyCode === SELECT_KEYCODE)) { + // not `:focus` because browser does annoying scrolling + var focused = searchresults.querySelector("li.focus"); + if (!focused) return; + e.preventDefault(); + if (e.keyCode === DOWN_KEYCODE) { + var next = focused.nextElementSibling; + if (next) { + focused.classList.remove("focus"); + next.classList.add("focus"); + } + } else if (e.keyCode === UP_KEYCODE) { + focused.classList.remove("focus"); + var prev = focused.previousElementSibling; + if (prev) { + prev.classList.add("focus"); + } else { + searchbar.select(); + } + } else { // SELECT_KEYCODE + window.location.assign(focused.querySelector('a')); + } + } + } + + function showSearch(yes) { + if (yes) { + search_wrap.classList.remove('hidden'); + searchicon.setAttribute('aria-expanded', 'true'); + } else { + search_wrap.classList.add('hidden'); + searchicon.setAttribute('aria-expanded', 'false'); + var results = searchresults.children; + for (var i = 0; i < results.length; i++) { + results[i].classList.remove("focus"); + } + } + } + + function showResults(yes) { + if (yes) { + searchresults_outer.classList.remove('hidden'); + } else { + searchresults_outer.classList.add('hidden'); + } + } + + // Eventhandler for search icon + function searchIconClickHandler() { + if (search_wrap.classList.contains('hidden')) { + showSearch(true); + window.scrollTo(0, 0); + searchbar.select(); + } else { + showSearch(false); + } + } + + // Eventhandler for keyevents while the searchbar is focused + function searchbarKeyUpHandler() { + var searchterm = searchbar.value.trim(); + if (searchterm != "") { + searchbar.classList.add("active"); + doSearch(searchterm); + } else { + searchbar.classList.remove("active"); + showResults(false); + removeChildren(searchresults); + } + + setSearchUrlParameters(searchterm, "push_if_new_search_else_replace"); + + // Remove marks + marker.unmark(); + } + + // Update current url with ?URL_SEARCH_PARAM= parameter, remove ?URL_MARK_PARAM and #heading-anchor . + // `action` can be one of "push", "replace", "push_if_new_search_else_replace" + // and replaces or pushes a new browser history item. + // "push_if_new_search_else_replace" pushes if there is no `?URL_SEARCH_PARAM=abc` yet. + function setSearchUrlParameters(searchterm, action) { + var url = parseURL(window.location.href); + var first_search = ! url.params.hasOwnProperty(URL_SEARCH_PARAM); + if (searchterm != "" || action == "push_if_new_search_else_replace") { + url.params[URL_SEARCH_PARAM] = searchterm; + delete url.params[URL_MARK_PARAM]; + url.hash = ""; + } else { + delete url.params[URL_MARK_PARAM]; + delete url.params[URL_SEARCH_PARAM]; + } + // A new search will also add a new history item, so the user can go back + // to the page prior to searching. A updated search term will only replace + // the url. + if (action == "push" || (action == "push_if_new_search_else_replace" && first_search) ) { + history.pushState({}, document.title, renderURL(url)); + } else if (action == "replace" || (action == "push_if_new_search_else_replace" && !first_search) ) { + history.replaceState({}, document.title, renderURL(url)); + } + } + + function doSearch(searchterm) { + + // Don't search the same twice + if (current_searchterm == searchterm) { return; } + else { current_searchterm = searchterm; } + + if (searchindex == null) { return; } + + // Do the actual search + var results = searchindex.search(searchterm, search_options); + var resultcount = Math.min(results.length, results_options.limit_results); + + // Display search metrics + searchresults_header.innerText = formatSearchMetric(resultcount, searchterm); + + // Clear and insert results + var searchterms = searchterm.split(' '); + removeChildren(searchresults); + for(var i = 0; i < resultcount ; i++){ + var resultElem = document.createElement('li'); + resultElem.innerHTML = formatSearchResult(results[i], searchterms); + searchresults.appendChild(resultElem); + } + + // Display results + showResults(true); + } + + fetch(path_to_root + 'searchindex.json') + .then(response => response.json()) + .then(json => init(json)) + .catch(error => { // Try to load searchindex.js if fetch failed + var script = document.createElement('script'); + script.src = path_to_root + 'searchindex.js'; + script.onload = () => init(window.search); + document.head.appendChild(script); + }); + + // Exported functions + search.hasFocus = hasFocus; +})(window.search); diff --git a/searchindex.js b/searchindex.js new file mode 100644 index 0000000..57eaebb --- /dev/null +++ b/searchindex.js @@ -0,0 +1 @@ +Object.assign(window.search, {"doc_urls":["index.html#introduction","index.html#prerequirements","index.html#cosmwasm-api-documentation","index.html#contributing-to-the-book","setting-up-env.html#setting-up-the-environment","setting-up-env.html#cosmwasm-check-utility","setting-up-env.html#verifying-the-installation","wasmd-quick-start.html#quick-start-with-wasmd","basics.html#basics","basics/rust-project.html#create-a-rust-project","basics/entry-points.html#entry-points","basics/building-contract.html#building-the-contract","basics/building-contract.html#aliasing-build-command","basics/building-contract.html#checking-contract-validity","basics/query.html#creating-a-query","basics/query.html#improving-the-message","basics/query.html#structuring-the-contract","basics/query-testing.html#testing-a-query","basics/query-testing.html#contract-as-a-black-box","basics/multitest-intro.html#introducing-multitest","basics/state.html#contract-state","basics/state.html#testing-state","basics/execute.html#execution-messages","basics/execute.html#error-handling","basics/execute.html#custom-error-and-multi-test","basics/events.html#events-attributes-and-data","basics/events.html#returning-events","basics/events.html#data","basics/funds.html#dealing-with-funds","basics/funds.html#preparing-messages","basics/funds.html#plot-twist","basics/good-practices.html#good-practices","basics/good-practices.html#json-renaming","basics/good-practices.html#json-schema","basics/good-practices.html#disabling-entry-points-for-libraries","basics/fp-types.html#floating-point-types","actor-model.html#actor-model","actor-model/idea.html#idea-behind-an-actor-model","actor-model/idea.html#the-problem","actor-model/idea.html#the-actor","actor-model/idea.html#the-action","actor-model/idea.html#multi-stage-actions","actor-model/idea.html#state","actor-model/idea.html#queries","actor-model/idea.html#wrapping-everything-together---transactional-call-flow","actor-model/idea.html#different-ways-of-handling-responses","actor-model/idea.html#conclusion","actor-model/actors-in-blockchain.html#actors-in-blockchain","actor-model/actors-in-blockchain.html#blockchain-as-a-database","actor-model/actors-in-blockchain.html#compile-the-contract","actor-model/actors-in-blockchain.html#contract-code","actor-model/actors-in-blockchain.html#contract-instance","actor-model/actors-in-blockchain.html#addresses-in-cosmwasm","actor-model/actors-in-blockchain.html#querying-the-contract","actor-model/actors-in-blockchain.html#executions-to-perform-some-actions","actor-model/contract-as-actor.html#smart-contract-as-an-actor","actor-model/contract-as-actor.html#the-state","actor-model/contract-as-actor.html#messages","actor-model/contract-as-actor.html#entry-points","actor-model/contract-as-actor.html#sending-submessages","actor-model/contract-as-actor.html#cosmosmsg","actor-model/contract-as-actor.html#reply-handling","actor-model/contract-as-actor.html#migrations","actor-model/contract-as-actor.html#sudo","cross-contract.html#cross-contract-communication","cross-contract/design.html#design","cross-contract/design.html#voting-process","cross-contract/design.html#messages-forwarding","cross-contract/fixing-admin.html#fixing-admin-contract","cross-contract/fixing-admin.html#cleaning-up-queries","cross-contract/fixing-admin.html#generating-the-library-output","cross-contract/fixing-admin.html#project-structure","cross-contract/map-storage.html#map-storage","cross-contract/map-storage.html#the-map-storage","cross-contract/map-storage.html#maps-as-sets","cross-contract/map-storage.html#reference-keys","cross-contract/working-with-time.html#working-with-time","cross-contract/working-with-time.html#join-time","cross-contract/working-with-time.html#query-and-tests","impressum.html#legal-information","impressum.html#provider","impressum.html#managing-director","impressum.html#contact","impressum.html#commercial-register","impressum.html#vat-number","impressum.html#responsible-for-the-content"],"index":{"documentStore":{"docInfo":{"0":{"body":32,"breadcrumbs":2,"title":1},"1":{"body":29,"breadcrumbs":2,"title":1},"10":{"body":353,"breadcrumbs":5,"title":2},"11":{"body":106,"breadcrumbs":5,"title":2},"12":{"body":69,"breadcrumbs":6,"title":3},"13":{"body":29,"breadcrumbs":6,"title":3},"14":{"body":310,"breadcrumbs":5,"title":2},"15":{"body":374,"breadcrumbs":5,"title":2},"16":{"body":252,"breadcrumbs":5,"title":2},"17":{"body":241,"breadcrumbs":5,"title":2},"18":{"body":427,"breadcrumbs":6,"title":3},"19":{"body":391,"breadcrumbs":5,"title":2},"2":{"body":21,"breadcrumbs":4,"title":3},"20":{"body":884,"breadcrumbs":5,"title":2},"21":{"body":479,"breadcrumbs":5,"title":2},"22":{"body":569,"breadcrumbs":5,"title":2},"23":{"body":560,"breadcrumbs":5,"title":2},"24":{"body":450,"breadcrumbs":7,"title":4},"25":{"body":44,"breadcrumbs":7,"title":3},"26":{"body":881,"breadcrumbs":6,"title":2},"27":{"body":62,"breadcrumbs":5,"title":1},"28":{"body":89,"breadcrumbs":5,"title":2},"29":{"body":1820,"breadcrumbs":5,"title":2},"3":{"body":14,"breadcrumbs":3,"title":2},"30":{"body":71,"breadcrumbs":5,"title":2},"31":{"body":8,"breadcrumbs":5,"title":2},"32":{"body":118,"breadcrumbs":5,"title":2},"33":{"body":560,"breadcrumbs":5,"title":2},"34":{"body":177,"breadcrumbs":7,"title":4},"35":{"body":143,"breadcrumbs":7,"title":3},"36":{"body":53,"breadcrumbs":4,"title":2},"37":{"body":17,"breadcrumbs":7,"title":4},"38":{"body":111,"breadcrumbs":4,"title":1},"39":{"body":141,"breadcrumbs":4,"title":1},"4":{"body":104,"breadcrumbs":6,"title":3},"40":{"body":100,"breadcrumbs":4,"title":1},"41":{"body":172,"breadcrumbs":6,"title":3},"42":{"body":233,"breadcrumbs":4,"title":1},"43":{"body":122,"breadcrumbs":4,"title":1},"44":{"body":281,"breadcrumbs":9,"title":6},"45":{"body":271,"breadcrumbs":7,"title":4},"46":{"body":28,"breadcrumbs":4,"title":1},"47":{"body":36,"breadcrumbs":6,"title":2},"48":{"body":242,"breadcrumbs":6,"title":2},"49":{"body":59,"breadcrumbs":6,"title":2},"5":{"body":38,"breadcrumbs":6,"title":3},"50":{"body":106,"breadcrumbs":6,"title":2},"51":{"body":152,"breadcrumbs":6,"title":2},"52":{"body":101,"breadcrumbs":6,"title":2},"53":{"body":102,"breadcrumbs":6,"title":2},"54":{"body":275,"breadcrumbs":7,"title":3},"55":{"body":38,"breadcrumbs":7,"title":3},"56":{"body":252,"breadcrumbs":5,"title":1},"57":{"body":150,"breadcrumbs":5,"title":1},"58":{"body":557,"breadcrumbs":6,"title":2},"59":{"body":167,"breadcrumbs":6,"title":2},"6":{"body":122,"breadcrumbs":5,"title":2},"60":{"body":119,"breadcrumbs":5,"title":1},"61":{"body":199,"breadcrumbs":6,"title":2},"62":{"body":181,"breadcrumbs":5,"title":1},"63":{"body":69,"breadcrumbs":5,"title":1},"64":{"body":80,"breadcrumbs":6,"title":3},"65":{"body":137,"breadcrumbs":5,"title":1},"66":{"body":52,"breadcrumbs":6,"title":2},"67":{"body":71,"breadcrumbs":6,"title":2},"68":{"body":16,"breadcrumbs":9,"title":3},"69":{"body":87,"breadcrumbs":9,"title":3},"7":{"body":34,"breadcrumbs":6,"title":3},"70":{"body":120,"breadcrumbs":9,"title":3},"71":{"body":179,"breadcrumbs":8,"title":2},"72":{"body":67,"breadcrumbs":7,"title":2},"73":{"body":239,"breadcrumbs":7,"title":2},"74":{"body":455,"breadcrumbs":7,"title":2},"75":{"body":100,"breadcrumbs":7,"title":2},"76":{"body":130,"breadcrumbs":7,"title":2},"77":{"body":178,"breadcrumbs":7,"title":2},"78":{"body":134,"breadcrumbs":7,"title":2},"79":{"body":4,"breadcrumbs":4,"title":2},"8":{"body":18,"breadcrumbs":2,"title":1},"80":{"body":9,"breadcrumbs":3,"title":1},"81":{"body":2,"breadcrumbs":4,"title":2},"82":{"body":1,"breadcrumbs":3,"title":1},"83":{"body":4,"breadcrumbs":4,"title":2},"84":{"body":1,"breadcrumbs":4,"title":2},"85":{"body":12,"breadcrumbs":4,"title":2},"9":{"body":102,"breadcrumbs":7,"title":3}},"docs":{"0":{"body":"This book is a guide for creating CosmWasm smart contracts. It will lead you step by step, and explain relevant topics from the easiest to the trickier ones. The idea of the book is not only to tell you about smart contracts API but also to show you how to do it in a clean and maintainable way. We will show you patterns that CosmWasm creators established and encouraged you to use.","breadcrumbs":"Introduction » Introduction","id":"0","title":"Introduction"},"1":{"body":"This book explores CosmWasm smart contracts. It is not a Rust tutorial, and it assumes basic Rust knowledge. As you will probably learn it alongside this book, I strongly recommend grasping the language itself first. You can find great resources to start with Rust on Learn Rust page.","breadcrumbs":"Introduction » Prerequirements","id":"1","title":"Prerequirements"},"10":{"body":"Typical Rust application starts with the fn main() function called by the operating system. Smart contracts are not significantly different. When the message is sent to the contract, a function called \"entry point\" is called. Unlike native applications, which have only a single main entry point, smart contracts have a couple corresponding to different message types: instantiate, execute, query, sudo, migrate and more. To start, we will go with three basic entry points: instantiate which is called once per smart contract lifetime - you can think about it as a constructor or initializer of a contract. execute for handling messages which are able to modify contract state - they are used to perform some actual actions. query for handling messages requesting some information from a contract; unlike execute, they can never affect any contract state, and are used just like database queries. Go to your src/lib.rs file, and start with an instantiate entry point: use cosmwasm_std::{ entry_point, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n}; #[entry_point]\npub fn instantiate( _deps: DepsMut, _env: Env, _info: MessageInfo, _msg: Empty,\n) -> StdResult { Ok(Response::new())\n} In fact, instantiate is the only entry point required for a smart contract to be valid. It is not very useful in this form, but it is a start. Let's take a closer look at the entry point structure. First, we start with importing couple of types just for more consistent usage. Then we define our entry point. The instantiate takes four arguments: deps: DepsMut is a utility type for communicating with the outer world - it allows querying and updating the contract state, querying other contracts state, and gives access to an Api object with a couple of helper functions for dealing with CW addresses. env: Env is an object representing the blockchains state when executing the message - the chain height and id, current timestamp, and the called contract address. info: MessageInfo contains metainformation about the message which triggered an execution - an address that sends the message, and chain native tokens sent with the message. msg: Empty is the message triggering execution itself - for now, it is Empty type that represents {} JSON, but the type of this argument can be anything that is deserializable, and we will pass more complex types here in the future. If you are new to the blockchain, those arguments may not have much sense to you, but while progressing with this guide, I will explain their usage one by one. Notice an essential attribute decorating our entry point #[entry_point] . Its purpose is to wrap the whole entry point to the form Wasm runtime understands. The proper Wasm entry points can use only basic types supported natively by Wasm specification, and Rust structures and enums are not in this set. Working with such entry points would be rather overcomplicated, so CosmWasm creators delivered the entry_point macro. It creates the raw Wasm entry point, calling the decorated function internally and doing all the magic required to build our high-level Rust arguments from arguments passed by Wasm runtime. The next thing to look at is the return type. I used StdResult for this simple example, which is an alias for Result. The return entry point type would always be a Result type, with some error type implementing ToString trait and a well-defined type for success case. For most entry points, an \"Ok\" case would be the Response type that allows fitting the contract into our actor model, which we will discuss very soon. The body of the entry point is as simple as it could be - it always succeeds with a trivial empty response.","breadcrumbs":"Basics » Entry points » Entry points","id":"10","title":"Entry points"},"11":{"body":"Now it is time to build our contract. We can use a traditional cargo build pipeline for local testing purposes: cargo build for compiling it and cargo test for running all tests (which we don't have yet, but we will work on that soon). However, we need to create a wasm binary to upload the contract to blockchain. We can do it by passing an additional argument to the build command: $ cargo build --target wasm32-unknown-unknown --release The --target argument tells cargo to perform cross-compilation for a given target instead of building a native binary for an OS it is running on - in this case, wasm32-unknown-unknown, which is a fancy name for Wasm target. Additionally, I passed the --release argument to the command - it is not required, but in most cases, debug information is not very useful while running on-chain. It is crucial to reduce the uploaded binary size for gas cost minimization. It is worth knowing that there is a CosmWasm Rust Optimizer tool that takes care of building even smaller binaries. For production, all the contracts should be compiled using this tool, but for learning purposes, it is not an essential thing to do.","breadcrumbs":"Basics » Building the contract » Building the contract","id":"11","title":"Building the contract"},"12":{"body":"Now I can see you are disappointed in building your contracts with some overcomplicated command instead of simple cargo build. Fortunately, it is not the case. The common practice is to alias the building command to make it as simple as building a native app. Let's create the .cargo/config file in your contract project directory with the following content: [alias]\nwasm = \"build --target wasm32-unknown-unknown --release\"\nwasm-debug = \"build --target wasm32-unknown-unknown\" Now, building your Wasm binary is as easy as executing cargo wasm. We also added the additional wasm-debug command for rare cases when we want to build the wasm binary, including debug information.","breadcrumbs":"Basics » Building the contract » Aliasing build command","id":"12","title":"Aliasing build command"},"13":{"body":"When the contract is built, the last step is to ensure it is a valid CosmWasm contract is to call cosmwasm-check on it: $ cargo wasm\n...\n$ cosmwasm-check ./target/wasm32-unknown-unknown/release/contract.wasm\nAvailable capabilities: {\"cosmwasm_1_1\", \"staking\", \"stargate\", \"iterator\", \"cosmwasm_1_2\"} ./target/wasm32-unknown-unknown/release/contract.wasm: pass","breadcrumbs":"Basics » Building the contract » Checking contract validity","id":"13","title":"Checking contract validity"},"14":{"body":"We have already created a simple contract reacting to an empty instantiate message. Unfortunately, it is not very useful. Let's make it a bit reactive. First, we need to add serde crate to our dependencies. It would help us with the serialization and deserialization of query messages. Update the Cargo.toml: [package]\nname = \"contract\"\nversion = \"0.1.0\"\nedition = \"2021\" [lib]\ncrate-type = [\"cdylib\"] [dependencies]\ncosmwasm-std = { version = \"1.0.0-beta8\", features = [\"staking\"] }\nserde = { version = \"1.0.103\", default-features = false, features = [\"derive\"] } [dev-dependencies]\ncw-multi-test = \"0.13.4\" Now go to your src/lib.rs file, and add a new query entry point: use cosmwasm_std::{ entry_point, to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n};\nuse serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize)]\nstruct QueryResp { message: String,\n} # #[entry_point]\n# pub fn instantiate(\n# _deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# _msg: Empty,\n# ) -> StdResult {\n# Ok(Response::new())\n# }\n#\n#[entry_point]\npub fn query(_deps: Deps, _env: Env, _msg: Empty) -> StdResult { let resp = QueryResp { message: \"Hello World\".to_owned(), }; to_binary(&resp)\n} Note that I omitted the previously created instantiate endpoint for simplicity - not to overload you with code, I will always only show lines that changed in the code. We first need a structure we will return from our query. We always want to return something which is serializable. We are just deriving the Serialize and Deserialize traits from serde crate. Then we need to implement our entry point. It is very similar to the instantiate one. The first significant difference is a type of deps argument. For instantiate, it was a DepMut, but here we went with a Deps object. That is because the query can never alter the smart contract's internal state. It can only read the state. It comes with some consequences - for example, it is impossible to implement caching for future queries (as it would require some data cache to write to). The other difference is the lack of the info argument. The reason here is that the entry point which performs actions (like instantiation or execution) can differ how an action is performed based on the message metadata - for example, they can limit who can perform an action (and do so by checking the message sender). It is not a case for queries. Queries are supposed just purely to return some transformed contract state. It can be calculated based on some chain metadata (so the state can \"automatically\" change after some time), but not on message info. Note that our entry point still has the same Empty type for its msg argument - it means that the query message we would send to the contract is still an empty JSON: {} The last thing that changed is the return type. Instead of returning the Response type on the success case, we return an arbitrary serializable object. This is because queries are not using a typical actor model message flow - they cannot trigger any actions nor communicate with other contracts in ways different than querying them (which is handled by the deps argument). The query always returns plain data, which should be presented directly to the querier. Now take a look at the implementation. Nothing complicated happens there - we create an object we want to return and encode it to the Binary type using the to_binary function.","breadcrumbs":"Basics » Creating a query » Creating a query","id":"14","title":"Creating a query"},"15":{"body":"We have a query, but there is a problem with the query message. It is always an empty JSON. It is terrible - if we would like to add another query in the future, it would be difficult to have any reasonable distinction between query variants. In practice, we address this by using a non-empty query message type. Improve our contract: # use cosmwasm_std::{\n# entry_point, to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n# };\n# use serde::{Deserialize, Serialize};\n# # #[derive(Serialize, Deserialize)]\n# struct QueryResp {\n# message: String,\n# }\n#\n#[derive(Serialize, Deserialize)]\npub enum QueryMsg { Greet {},\n} # #[entry_point]\n# pub fn instantiate(\n# _deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# _msg: Empty,\n# ) -> StdResult {\n# Ok(Response::new())\n# }\n#\n#[entry_point]\npub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { use QueryMsg::*; match msg { Greet {} => { let resp = QueryResp { message: \"Hello World\".to_owned(), }; to_binary(&resp) } }\n} Now we introduced a proper message type for the query message. It is an enum , and by default, it would serialize to a JSON with a single field - the name of the field will be an enum variant (in our case - always \"greet\" - at least for now), and the value of this field would be an object assigned to this enum variant. Note that our enum has no type assigned to the only Greet variant. Typically in Rust, we create such variants without additional {} after the variant name. Here the curly braces have a purpose - without them, the variant would serialize to just a string type - so instead of { \"greet\": {} }, the JSON representation of this variant would be \"greet\". This behavior brings inconsistency in the message schema. It is, generally, a good habit to always add the {} to serde serializable empty enum variants - for better JSON representation. But now, we can still improve the code further. Right now, the query function has two responsibilities. The first is obvious - handling the query itself. It was the first assumption, and it is still there. But there is a new thing happening there - the query message dispatching. It may not be obvious, as there is a single variant, but the query function is an excellent way to become a massive unreadable match statement. To make the code more SOLID , we will refactor it and take out handling the greet message to a separate function. # use cosmwasm_std::{\n# entry_point, to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n# };\n# use serde::{Deserialize, Serialize};\n# #[derive(Serialize, Deserialize)]\npub struct GreetResp { message: String,\n} # #[derive(Serialize, Deserialize)]\n# pub enum QueryMsg {\n# Greet {},\n# }\n# # #[entry_point]\n# pub fn instantiate(\n# _deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# _msg: Empty,\n# ) -> StdResult {\n# Ok(Response::new())\n# }\n# #[entry_point]\npub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { use QueryMsg::*; match msg { Greet {} => to_binary(&query::greet()?), }\n} mod query { use super::*; pub fn greet() -> StdResult { let resp = GreetResp { message: \"Hello World\".to_owned(), }; Ok(resp) }\n} Now it looks much better. Note there are a couple of additional improvements. I renamed the query-response type GreetResp as I may have different responses for different queries. I want the name to relate only to the variant, not the whole message. Next is enclosing my new function in the module query. It makes it easier to avoid name collisions - I can have the same variant for queries and execution messages in the future, and their handlers would lie in separate namespaces. A questionable decision may be returning StdResult instead of GreetResp from greet function, as it would never return an error. It is a matter of style, but I prefer consistency over the message handler, and the majority of them would have failure cases - e.g. when reading the state. Also, you might pass deps and env arguments to all your query handlers for consistency. I'm not too fond of this, as it introduces unnecessary boilerplate which doesn't read well, but I also agree with the consistency argument - I leave it to your judgment.","breadcrumbs":"Basics » Creating a query » Improving the message","id":"15","title":"Improving the message"},"16":{"body":"You can see that our contract is becoming a bit bigger now. About 50 lines are maybe not so much, but there are many different entities in a single file, and I think we can do better. I can already distinguish three different types of entities in the code: entry points, messages, and handlers. In most contracts, we would divide them across three files. Start with extracting all the messages to src/msg.rs: use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize)]\npub struct GreetResp { pub message: String,\n} #[derive(Serialize, Deserialize)]\npub enum QueryMsg { Greet {},\n} You probably noticed that I made my GreetResp fields public. It is because they have to be now accessed from a different module. Now move forward to the src/contract.rs file: use crate::msg::{GreetResp, QueryMsg};\nuse cosmwasm_std::{ to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n}; pub fn instantiate( _deps: DepsMut, _env: Env, _info: MessageInfo, _msg: Empty,\n) -> StdResult { Ok(Response::new())\n} pub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { use QueryMsg::*; match msg { Greet {} => to_binary(&query::greet()?), }\n} mod query { use super::*; pub fn greet() -> StdResult { let resp = GreetResp { message: \"Hello World\".to_owned(), }; Ok(resp) }\n} I moved most of the logic here, so my src/lib.rs is just a very thin library entry with nothing else but module definitions and entry points definition. I removed the #[entry_point] attribute from my query function in src/contract.rs. I will have a function with this attribute. Still, I wanted to split functions' responsibility further - not the contract::query function is the top-level query handler responsible for dispatching the query message. The query function on crate-level is only an entry point. It is a subtle distinction, but it will make sense in the future when we would like not to generate the entry points but to keep the dispatching functions. I introduced the split now to show you the typical contract structure. Now the last part, the src/lib.rs file: use cosmwasm_std::{ entry_point, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n}; mod contract;\nmod msg; #[entry_point]\npub fn instantiate(deps: DepsMut, env: Env, info: MessageInfo, msg: Empty) -> StdResult\n{ contract::instantiate(deps, env, info, msg)\n} #[entry_point]\npub fn query(deps: Deps, env: Env, msg: msg::QueryMsg) -> StdResult\n{ contract::query(deps, env, msg)\n} Straightforward top-level module. Definition of submodules and entry points, nothing more. Now, when we have the contract ready to do something, let's go and test it.","breadcrumbs":"Basics » Creating a query » Structuring the contract","id":"16","title":"Structuring the contract"},"17":{"body":"Last time we created a new query, now it is time to test it out. We will start with the basics - the unit test. This approach is simple and doesn't require knowledge besides Rust. Go to the src/contract.rs and add a test in its module: # use crate::msg::{GreetResp, QueryMsg};\n# use cosmwasm_std::{\n# to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n# };\n# # pub fn instantiate(\n# _deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# _msg: Empty,\n# ) -> StdResult {\n# Ok(Response::new())\n# }\n# # pub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult {\n# use QueryMsg::*;\n# # match msg {\n# Greet {} => to_binary(&query::greet()?),\n# }\n# }\n# # mod query {\n# use super::*;\n# # pub fn greet() -> StdResult {\n# let resp = GreetResp {\n# message: \"Hello World\".to_owned(),\n# };\n# # Ok(resp)\n# }\n# }\n# #[cfg(test)]\nmod tests { use super::*; #[test] fn greet_query() { let resp = query::greet().unwrap(); assert_eq!( resp, GreetResp { message: \"Hello World\".to_owned() } ); }\n} If you ever wrote a unit test in Rust, nothing should surprise you here. Just a simple test-only module contains local function unit tests. The problem is - this test doesn't build yet. We need to tweak our message types a bit. Update the src/msg.rs: # use serde::{Deserialize, Serialize};\n# #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\npub struct GreetResp { pub message: String,\n} #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\npub enum QueryMsg { Greet {},\n} I added three new derives to both message types. PartialEq is required to allow comparing types for equality - so we can check if they are equal. The Debug is a trait generating debug-printing utilities. It is used by assert_eq! to display information about mismatch if an assertion fails. Note that because we are not testing the QueryMsg in any way, the additional trait derives are optional. Still, it is a good practice to make all messages both PartialEq and Debug for testability and consistency. The last one, Clone is not needed for now yet, but it is also good practice to allow messages to be cloned around. We will also require that later, so I added it already not to go back and forth. Now we are ready to run our test: $ cargo test ...\nrunning 1 test\ntest contract::tests::greet_query ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Yay! Test passed!","breadcrumbs":"Basics » Testing a query » Testing a query","id":"17","title":"Testing a query"},"18":{"body":"Now let's go a step further. The Rust testing utility is a friendly tool for building even higher-level tests. We are currently testing smart contract internals, but if you think about how your smart contract is visible from the outside world. It is a single entity that is triggered by some input messages. We can create tests that treat the whole contract as a black box by testing it via our query function. Let's update our test: # use crate::msg::{GreetResp, QueryMsg};\n# use cosmwasm_std::{\n# to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n# };\n# # pub fn instantiate(\n# _deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# _msg: Empty,\n# ) -> StdResult {\n# Ok(Response::new())\n# }\n# # pub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult {\n# use QueryMsg::*;\n# # match msg {\n# Greet {} => to_binary(&query::greet()?),\n# }\n# }\n# # mod query {\n# use super::*;\n# # pub fn greet() -> StdResult {\n# let resp = GreetResp {\n# message: \"Hello World\".to_owned(),\n# };\n# # Ok(resp)\n# }\n# }\n# #[cfg(test)]\nmod tests { use cosmwasm_std::from_binary; use cosmwasm_std::testing::{mock_dependencies, mock_env}; use super::*; #[test] fn greet_query() { let resp = query( mock_dependencies().as_ref(), mock_env(), QueryMsg::Greet {} ).unwrap(); let resp: GreetResp = from_binary(&resp).unwrap(); assert_eq!( resp, GreetResp { message: \"Hello World\".to_owned() } ); }\n} We needed to produce two entities for the query functions: the deps and env instances. Fortunately, cosmwasm-std provides utilities for testing those - mock_dependencies and mock_env functions. You may notice the dependencies mock of a type OwnedDeps instead of Deps, which we need here - this is why the as_ref function is called on it. If we looked for a DepsMut object, we would use as_mut instead. We can rerun the test, and it should still pass. But when we think about that test reflecting the actual use case, it is inaccurate. The contract is queried, but it was never instantiated! In software engineering, it is equivalent to calling a getter without constructing an object - taking it out of nowhere. It is a lousy testing approach. We can do better: # use crate::msg::{GreetResp, QueryMsg};\n# use cosmwasm_std::{\n# to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n# };\n# # pub fn instantiate(\n# _deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# _msg: Empty,\n# ) -> StdResult {\n# Ok(Response::new())\n# }\n# # pub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult {\n# use QueryMsg::*;\n# # match msg {\n# Greet {} => to_binary(&query::greet()?),\n# }\n# }\n# # mod query {\n# use super::*;\n# # pub fn greet() -> StdResult {\n# let resp = GreetResp {\n# message: \"Hello World\".to_owned(),\n# };\n# # Ok(resp)\n# }\n# }\n# #[cfg(test)]\nmod tests { use cosmwasm_std::from_binary; use cosmwasm_std::testing::{mock_dependencies, mock_env, mock_info}; use super::*; #[test] fn greet_query() { let mut deps = mock_dependencies(); let env = mock_env(); instantiate( deps.as_mut(), env.clone(), mock_info(\"sender\", &[]), Empty {}, ) .unwrap(); let resp = query(deps.as_ref(), env, QueryMsg::Greet {}).unwrap(); let resp: GreetResp = from_binary(&resp).unwrap(); assert_eq!( resp, GreetResp { message: \"Hello World\".to_owned() } ); }\n} A couple of new things here. First, I extracted the deps and env variables to their variables and passed them to calls. The idea is that those variables represent some blockchain persistent state, and we don't want to create them for every call. We want any changes to the contract state occurring in instantiate to be visible in the query. Also, we want to control how the environment differs on the query and instantiation. The info argument is another story. The message info is unique for each message sent. To create the info mock, we must pass two arguments to the mock_info function. First is the address performing a call. It may look strange to pass sender as an address instead of some mysterious wasm followed by hash, but it is a valid address. For testing purposes, such addresses are typically better, as they are way more verbose in case of failing tests. The second argument is funds sent with the message. For now, we leave it as an empty slice, as I don't want to talk about token transfers yet - we will cover it later. So now it is more a real-case scenario. I see just one problem. I say that the contract is a single black box. But here, nothing connects the instantiate call to the corresponding query. It seems that we assume there is some global contract. But it seems that if we would like to have two contracts instantiated differently in a single test case, it would become a mess. If only there would be some tool to abstract this for us, wouldn't it be nice?","breadcrumbs":"Basics » Testing a query » Contract as a black box","id":"18","title":"Contract as a black box"},"19":{"body":"Let me introduce the multitest - library for creating tests for smart contracts in Rust. The core idea of multitest is abstracting an entity of contract and simulating the blockchain environment for testing purposes. The purpose of this is to be able to test communication between smart contracts. It does its job well, but it is also an excellent tool for testing single-contract scenarios. First, we need to add a multitest to our Cargo.toml. [package]\nname = \"contract\"\nversion = \"0.1.0\"\nedition = \"2021\" [lib]\ncrate-type = [\"cdylib\"] [dependencies]\ncosmwasm-std = { version = \"1.0.0-beta8\", features = [\"staking\"] }\nserde = { version = \"1.0.103\", default-features = false, features = [\"derive\"] } [dev-dependencies]\ncw-multi-test = \"0.13.4\" I added a new [dev-dependencies] section with dependencies not used by the final binary but which may be used by tools around the development process - for example, tests. When we have the dependency ready, update our test to use the framework: # use crate::msg::{GreetResp, QueryMsg};\n# use cosmwasm_std::{\n# to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n# };\n# # pub fn instantiate(\n# _deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# _msg: Empty,\n# ) -> StdResult {\n# Ok(Response::new())\n# }\n# # pub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult {\n# use QueryMsg::*;\n# # match msg {\n# Greet {} => to_binary(&query::greet()?),\n# }\n# }\n# #[allow(dead_code)]\npub fn execute( _deps: DepsMut, _env: Env, _info: MessageInfo, _msg: Empty\n) -> StdResult { unimplemented!()\n} # mod query {\n# use super::*;\n# # pub fn greet() -> StdResult {\n# let resp = GreetResp {\n# message: \"Hello World\".to_owned(),\n# };\n# # Ok(resp)\n# }\n# }\n# #[cfg(test)]\nmod tests { use cosmwasm_std::Addr; use cw_multi_test::{App, ContractWrapper, Executor}; use super::*; #[test] fn greet_query() { let mut app = App::default(); let code = ContractWrapper::new(execute, instantiate, query); let code_id = app.store_code(Box::new(code)); let addr = app .instantiate_contract( code_id, Addr::unchecked(\"owner\"), &Empty {}, &[], \"Contract\", None, ) .unwrap(); let resp: GreetResp = app .wrap() .query_wasm_smart(addr, &QueryMsg::Greet {}) .unwrap(); assert_eq!( resp, GreetResp { message: \"Hello World\".to_owned() } ); }\n} You probably notice that I added the function for an execute entry point. I didn't add the entry point itself or the function's implementation, but for the multitest purposes contract has to contain at least instantiate, query, and execute handlers. I attributed the function as #[allow(dead_code)] , so, cargo will not complain about it not being used anywhere. Enabling it for tests only with #[cfg(test)] would also be a way. Then at the beginning of the test, I created the App object. It is a core multitest entity representing the virtual blockchain on which we will run our contracts. As you can see, we can call functions on it just like we would interact with blockchain using wasmd! Right after creating app, I prepared the representation of the code, which would be \"uploaded\" to the blockchain. As multitests are just native Rust tests, they do not involve any Wasm binaries, but this name matches well what happens in a real-life scenario. We store this object in the blockchain with the store_code function, and as a result, we are getting the code id - we would need it to instantiate a contract. Instantiation is the next step. In a single instantiate_contract call, we provide everything we would provide via wasmd - the contract code id, the address which performs instantiation, the message triggering it, and any funds sent with the message (again - empty for now). We are adding the contract label and its admin for migrations - None, as we don't need it yet. And after the contract is online, we can query it. The wrap function is an accessor for querying Api (queries are handled a bit differently than other calls), and the query_wasm_smart queries are given a contract with the message. Also, we don't need to care about query results as Binary - multitest assumes that we would like to deserialize them to some response type, so it takes advantage of Rust type elision to provide us with a nice Api. Now it's time to rerun the test. It should still pass, but now we nicely abstracted the testing contract as a whole, not some internal functions. The next thing we should probably cover is making the contract more interesting by adding some state.","breadcrumbs":"Basics » Introducing multitest » Introducing multitest","id":"19","title":"Introducing multitest"},"2":{"body":"This is the guide-like documentation. If you are looking for the API documentation, you may be interested in checking one of the following: cosmwasm-std cw-storage-plus cw-multi-test cw-utils sylvia framework","breadcrumbs":"Introduction » CosmWasm API documentation","id":"2","title":"CosmWasm API documentation"},"20":{"body":"The contract we are working on already has some behavior that can answer a query. Unfortunately, it is very predictable with its answers, and it has nothing to alter them. In this chapter, I introduce the notion of state, which would allow us to bring true life to a smart contract. The state would still be static for now - it would be initialized on contract instantiation. The state would contain a list of admins who would be eligible to execute messages in the future. The first thing to do is to update Cargo.toml with yet another dependency - the storage-plus crate with high-level bindings for CosmWasm smart contracts state management: [package]\nname = \"contract\"\nversion = \"0.1.0\"\nedition = \"2021\" [lib]\ncrate-type = [\"cdylib\"] [dependencies]\ncosmwasm-std = { version = \"1.0.0-beta8\", features = [\"staking\"] }\nserde = { version = \"1.0.103\", default-features = false, features = [\"derive\"] }\ncw-storage-plus = \"0.13.4\" [dev-dependencies]\ncw-multi-test = \"0.13.4\" Now create a new file where you will keep a state for the contract - we typically call it src/state.rs: use cosmwasm_std::Addr;\nuse cw_storage_plus::Item; pub const ADMINS: Item> = Item::new(\"admins\"); And make sure we declare the module in src/lib.rs: # use cosmwasm_std::{\n# entry_point, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n# };\n# # mod contract;\n# mod msg;\nmod state;\n#\n# #[entry_point]\n# pub fn instantiate(deps: DepsMut, env: Env, info: MessageInfo, msg: Empty)\n# -> StdResult\n# {\n# contract::instantiate(deps, env, info, msg)\n# }\n#\n# #[entry_point]\n# pub fn query(deps: Deps, env: Env, msg: msg::QueryMsg)\n# -> StdResult\n# {\n# contract::query(deps, env, msg)\n# } The new thing we have here is the ADMINS constant of type Item>. You could ask an excellent question here - how is the state constant? How do I modify it if it is a constant value? The answer is tricky - this constant is not keeping the state itself. The state is stored in the blockchain and is accessed via the deps argument passed to entry points. The storage-plus constants are just accessor utilities helping us access this state in a structured way. In CosmWasm, the blockchain state is just massive key-value storage. The keys are prefixed with metainformation pointing to the contract which owns them (so no other contract can alter them in any way), but even after removing the prefixes, the single contract state is a smaller key-value pair. storage-plus handles more complex state structures by additionally prefixing items keys intelligently. For now, we just used the simplest storage entity - an Item<_> , which holds a single optional value of a given type - Vec in this case. And what would be a key to this item in the storage? It doesn't matter to us - it would be figured out to be unique, based on a unique string passed to the new function. Before we would go into initializing our state, we need some better instantiate message. Go to src/msg.rs and create one: # use cosmwasm_std::Addr;\n# use serde::{Deserialize, Serialize};\n# #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\npub struct InstantiateMsg { pub admins: Vec,\n}\n# # #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\n# pub struct GreetResp {\n# pub message: String,\n# }\n# # #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\n# pub enum QueryMsg {\n# Greet {},\n# } Now go forward to instantiate the entry point in src/contract.rs, and initialize our state to whatever we got in the instantiation message: # use crate::msg::{GreetResp, InstantiateMsg, QueryMsg};\nuse crate::state::ADMINS;\n// --snip--\n# use cosmwasm_std::{\n# to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n# };\n# pub fn instantiate( deps: DepsMut, _env: Env, _info: MessageInfo, msg: InstantiateMsg,\n) -> StdResult { let admins: StdResult> = msg .admins .into_iter() .map(|addr| deps.api.addr_validate(&addr)) .collect(); ADMINS.save(deps.storage, &admins?)?; Ok(Response::new())\n}\n# # pub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult {\n# use QueryMsg::*;\n# # match msg {\n# Greet {} => to_binary(&query::greet()?),\n# }\n# }\n# # #[allow(dead_code)]\n# pub fn execute(_deps: DepsMut, _env: Env, _info: MessageInfo, _msg: Empty) -> StdResult {\n# unimplemented!()\n# }\n# # mod query {\n# use super::*;\n# # pub fn greet() -> StdResult {\n# let resp = GreetResp {\n# message: \"Hello World\".to_owned(),\n# };\n# # Ok(resp)\n# }\n# }\n# # #[cfg(test)]\n# mod tests {\n# use cosmwasm_std::Addr;\n# use cw_multi_test::{App, ContractWrapper, Executor};\n# # use super::*;\n# # #[test]\n# fn greet_query() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &Empty {},\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: GreetResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::Greet {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# GreetResp {\n# message: \"Hello World\".to_owned()\n# }\n# );\n# }\n# } We also need to update the message type on entry point in src/lib.rs: # use cosmwasm_std::{entry_point, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};\nuse msg::InstantiateMsg;\n// --snip--\n# # mod contract;\n# mod msg;\n# mod state;\n# #[entry_point]\npub fn instantiate( deps: DepsMut, env: Env, info: MessageInfo, msg: InstantiateMsg,\n) -> StdResult { contract::instantiate(deps, env, info, msg)\n}\n# # #[entry_point]\n# pub fn query(deps: Deps, env: Env, msg: msg::QueryMsg) -> StdResult {\n# contract::query(deps, env, msg)\n# } Voila, that's all that is needed to update the state! First, we need to transform the vector of strings into the vector of addresses to be stored. We cannot take addresses as a message argument because not every string is a valid address. It might be a bit confusing when we were working on tests. Any string could be used in the place of address. Let me explain. Every string can be technically considered an address. However, not every string is an actual existing blockchain address. When we keep anything of type Addr in the contract, we assume it is a proper address in the blockchain. That is why the addr_validate function exits - to check this precondition. Having data to store, we use the save function to write it into the contract state. Note that the first argument of save is &mut Storage , which is actual blockchain storage. As emphasized, the Item object stores nothing and is just an accessor. It determines how to store the data in the storage given to it. The second argument is the serializable data to be stored. It is a good time to check if the regression we have passes - try running our tests: > cargo test ... running 1 test\ntest contract::tests::greet_query ... FAILED failures: ---- contract::tests::greet_query stdout ----\nthread 'contract::tests::greet_query' panicked at 'called `Result::unwrap()` on an `Err` value: error executing WasmMsg:\nsender: owner\nInstantiate { admin: None, code_id: 1, msg: Binary(7b7d), funds: [], label: \"Contract\" } Caused by: Error parsing into type contract::msg::InstantiateMsg: missing field `admins`', src/contract.rs:80:14\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace failures: contract::tests::greet_query test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s error: test failed, to rerun pass '--lib' Damn, we broke something! But be calm. Let's start with carefully reading an error message: Error parsing into type contract::msg::InstantiateMsg: missing field admins', src/contract.rs:80:14 The problem is that in the test, we send an empty instantiation message in our test, but right now, our endpoint expects to have an admin field. Multi-test framework tests contract from the entry point to results, so sending messages using MT functions first serializes them. Then the contract deserializes them on the entry. But now it tries to deserialize the empty JSON to some non-empty message! We can quickly fix it by updating the test: # use crate::msg::{GreetResp, InstantiateMsg, QueryMsg};\n# use crate::state::ADMINS;\n# use cosmwasm_std::{\n# to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n# };\n# # pub fn instantiate(\n# deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# msg: InstantiateMsg,\n# ) -> StdResult {\n# let admins: StdResult> = msg\n# .admins\n# .into_iter()\n# .map(|addr| deps.api.addr_validate(&addr))\n# .collect();\n# ADMINS.save(deps.storage, &admins?)?;\n# # Ok(Response::new())\n# }\n# # pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult {\n# use QueryMsg::*;\n# # match msg {\n# Greet {} => to_binary(&query::greet()?),\n# AdminsList {} => to_binary(&query::admins_list(deps)?),\n# }\n# }\n# # #[allow(dead_code)]\n# pub fn execute(_deps: DepsMut, _env: Env, _info: MessageInfo, _msg: Empty) -> StdResult {\n# unimplemented!()\n# }\n# # mod query {\n# use crate::msg::AdminsListResp;\n# # use super::*;\n# # pub fn greet() -> StdResult {\n# let resp = GreetResp {\n# message: \"Hello World\".to_owned(),\n# };\n# # Ok(resp)\n# }\n# # pub fn admins_list(deps: Deps) -> StdResult {\n# let admins = ADMINS.load(deps.storage)?;\n# let resp = AdminsListResp { admins };\n# Ok(resp)\n# }\n# }\n# # #[cfg(test)]\n# mod tests {\n# use cosmwasm_std::Addr;\n# use cw_multi_test::{App, ContractWrapper, Executor};\n# # use super::*;\n# #[test] fn greet_query() { let mut app = App::default(); let code = ContractWrapper::new(execute, instantiate, query); let code_id = app.store_code(Box::new(code)); let addr = app .instantiate_contract( code_id, Addr::unchecked(\"owner\"), &InstantiateMsg { admins: vec![] }, &[], \"Contract\", None, ) .unwrap(); let resp: GreetResp = app .wrap() .query_wasm_smart(addr, &QueryMsg::Greet {}) .unwrap(); assert_eq!( resp, GreetResp { message: \"Hello World\".to_owned() } ); }\n# }","breadcrumbs":"Basics » Contract state » Contract state","id":"20","title":"Contract state"},"21":{"body":"When the state is initialized, we want a way to test it. We want to provide a query to check if the instantiation affects the state. Just create a simple one listing all admins. Start with adding a variant for query message and a corresponding response message in src/msg.rs. We'll call the variant AdminsList, the response AdminsListResp, and have it return a vector of cosmwasm_std::Addr: # use cosmwasm_std::Addr;\n# use serde::{Deserialize, Serialize};\n# # #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\n# pub struct InstantiateMsg {\n# pub admins: Vec,\n# }\n# # #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\n# pub struct GreetResp {\n# pub message: String,\n# }\n# #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\npub struct AdminsListResp { pub admins: Vec,\n} [derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\npub enum QueryMsg { Greet {}, AdminsList {},\n} And implement it in src/contract.rs: use crate::msg::{AdminsListResp, GreetResp, InstantiateMsg, QueryMsg};\n# use crate::state::ADMINS;\n# use cosmwasm_std::{\n# to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n# };\n# # pub fn instantiate(\n# deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# msg: InstantiateMsg,\n# ) -> StdResult {\n# let admins: StdResult> = msg\n# .admins\n# .into_iter()\n# .map(|addr| deps.api.addr_validate(&addr))\n# .collect();\n# ADMINS.save(deps.storage, &admins?)?;\n# # Ok(Response::new())\n# }\n# pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { use QueryMsg::*; match msg { Greet {} => to_binary(&query::greet()?), AdminsList {} => to_binary(&query::admins_list(deps)?), }\n} # #[allow(dead_code)]\n# pub fn execute(_deps: DepsMut, _env: Env, _info: MessageInfo, _msg: Empty) -> StdResult {\n# unimplemented!()\n# }\n#\nmod query {\n# use super::*;\n#\n# pub fn greet() -> StdResult {\n# let resp = GreetResp {\n# message: \"Hello World\".to_owned(),\n# };\n#\n# Ok(resp)\n# }\n# pub fn admins_list(deps: Deps) -> StdResult { let admins = ADMINS.load(deps.storage)?; let resp = AdminsListResp { admins }; Ok(resp) }\n} # #[cfg(test)]\n# mod tests {\n# use cosmwasm_std::Addr;\n# use cw_multi_test::{App, ContractWrapper, Executor};\n# # use super::*;\n# # #[test]\n# fn greet_query() {\n# let mut app = App::default();\n#\n# let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n#\n# let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n#\n# let resp: GreetResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::Greet {})\n# .unwrap();\n#\n# assert_eq!(\n# resp,\n# GreetResp {\n# message: \"Hello World\".to_owned()\n# }\n# );\n# }\n# } Now when we have the tools to test the instantiation, let's write a test case: use crate::msg::{AdminsListResp, GreetResp, InstantiateMsg, QueryMsg};\n# use crate::state::ADMINS;\n# use cosmwasm_std::{\n# to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n# };\n# # pub fn instantiate(\n# deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# msg: InstantiateMsg,\n# ) -> StdResult {\n# let admins: StdResult> = msg\n# .admins\n# .into_iter()\n# .map(|addr| deps.api.addr_validate(&addr))\n# .collect();\n# ADMINS.save(deps.storage, &admins?)?;\n# # Ok(Response::new())\n# }\n# # pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult {\n# use QueryMsg::*;\n# # match msg {\n# Greet {} => to_binary(&query::greet()?),\n# AdminsList {} => to_binary(&query::admins_list(deps)?),\n# }\n# }\n# # #[allow(dead_code)]\n# pub fn execute(_deps: DepsMut, _env: Env, _info: MessageInfo, _msg: Empty) -> StdResult {\n# unimplemented!()\n# }\n# # mod query {\n# use super::*;\n# # pub fn greet() -> StdResult {\n# let resp = GreetResp {\n# message: \"Hello World\".to_owned(),\n# };\n# # Ok(resp)\n# }\n# # pub fn admins_list(deps: Deps) -> StdResult {\n# let admins = ADMINS.load(deps.storage)?;\n# let resp = AdminsListResp { admins };\n# Ok(resp)\n# }\n# }\n# #[cfg(test)]\nmod tests {\n# use cosmwasm_std::Addr;\n# use cw_multi_test::{App, ContractWrapper, Executor};\n# # use super::*;\n# #[test] fn instantiation() { let mut app = App::default(); let code = ContractWrapper::new(execute, instantiate, query); let code_id = app.store_code(Box::new(code)); let addr = app .instantiate_contract( code_id, Addr::unchecked(\"owner\"), &InstantiateMsg { admins: vec![] }, &[], \"Contract\", None, ) .unwrap(); let resp: AdminsListResp = app .wrap() .query_wasm_smart(addr, &QueryMsg::AdminsList {}) .unwrap(); assert_eq!(resp, AdminsListResp { admins: vec![] }); let addr = app .instantiate_contract( code_id, Addr::unchecked(\"owner\"), &InstantiateMsg { admins: vec![\"admin1\".to_owned(), \"admin2\".to_owned()], }, &[], \"Contract 2\", None, ) .unwrap(); let resp: AdminsListResp = app .wrap() .query_wasm_smart(addr, &QueryMsg::AdminsList {}) .unwrap(); assert_eq!( resp, AdminsListResp { admins: vec![Addr::unchecked(\"admin1\"), Addr::unchecked(\"admin2\")], } ); }\n# # #[test]\n# fn greet_query() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: GreetResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::Greet {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# GreetResp {\n# message: \"Hello World\".to_owned()\n# }\n# );\n# }\n} The test is simple - instantiate the contract twice with different initial admins, and ensure the query result is proper each time. This is often the way we test our contract - we execute bunch o messages on the contract, and then we query it for some data, verifying if query responses are like expected. We are doing a pretty good job developing our contract. Now it is time to use the state and allow for some executions.","breadcrumbs":"Basics » Contract state » Testing state","id":"21","title":"Testing state"},"22":{"body":"We went through instantiate and query messages. It is finally time to introduce the last basic entry point - the execute messages. It is similar to what we have done so far that I expect this to be just chilling and revisiting our knowledge. I encourage you to try implementing what I am describing here on your own as an exercise - without checking out the source code. The idea of the contract will be easy - every contract admin would be eligible to call two execute messages: AddMembers message would allow the admin to add another address to the admin's list Leave would allow and admin to remove himself from the list Not too complicated. Let's go coding. Start with defining messages: # use cosmwasm_std::Addr;\n# use serde::{Deserialize, Serialize};\n# # #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\n# pub struct InstantiateMsg {\n# pub admins: Vec,\n# }\n# #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\npub enum ExecuteMsg { AddMembers { admins: Vec }, Leave {},\n}\n# # #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\n# pub struct GreetResp {\n# pub message: String,\n# }\n# # #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\n# pub struct AdminsListResp {\n# pub admins: Vec,\n# }\n# # #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\n# pub enum QueryMsg {\n# Greet {},\n# AdminsList {},\n# } And implement entry point: use crate::msg::{AdminsListResp, ExecuteMsg, GreetResp, InstantiateMsg, QueryMsg};\n# use crate::state::ADMINS;\n# use cosmwasm_std::{to_binary, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};\n# # pub fn instantiate(\n# deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# msg: InstantiateMsg,\n# ) -> StdResult {\n# let admins: StdResult> = msg\n# .admins\n# .into_iter()\n# .map(|addr| deps.api.addr_validate(&addr))\n# .collect();\n# ADMINS.save(deps.storage, &admins?)?;\n# # Ok(Response::new())\n# }\n# # pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult {\n# use QueryMsg::*;\n# # match msg {\n# Greet {} => to_binary(&query::greet()?),\n# AdminsList {} => to_binary(&query::admins_list(deps)?),\n# }\n# } #[allow(dead_code)]\npub fn execute( deps: DepsMut, _env: Env, info: MessageInfo, msg: ExecuteMsg,\n) -> StdResult { use ExecuteMsg::*; match msg { AddMembers { admins } => exec::add_members(deps, info, admins), Leave {} => exec::leave(deps, info), }\n} mod exec { use cosmwasm_std::StdError; use super::*; pub fn add_members( deps: DepsMut, info: MessageInfo, admins: Vec, ) -> StdResult { let mut curr_admins = ADMINS.load(deps.storage)?; if !curr_admins.contains(&info.sender) { return Err(StdError::generic_err(\"Unauthorised access\")); } let admins: StdResult> = admins .into_iter() .map(|addr| deps.api.addr_validate(&addr)) .collect(); curr_admins.append(&mut admins?); ADMINS.save(deps.storage, &curr_admins)?; Ok(Response::new()) } pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult { ADMINS.update(deps.storage, move |admins| -> StdResult<_> { let admins = admins .into_iter() .filter(|admin| *admin != info.sender) .collect(); Ok(admins) })?; Ok(Response::new()) }\n}\n# # mod query {\n# use super::*;\n# # pub fn greet() -> StdResult {\n# let resp = GreetResp {\n# message: \"Hello World\".to_owned(),\n# };\n# # Ok(resp)\n# }\n# # pub fn admins_list(deps: Deps) -> StdResult {\n# let admins = ADMINS.load(deps.storage)?;\n# let resp = AdminsListResp { admins };\n# Ok(resp)\n# }\n# }\n# # #[cfg(test)]\n# mod tests {\n# use cosmwasm_std::Addr;\n# use cw_multi_test::{App, ContractWrapper, Executor};\n# # use crate::msg::AdminsListResp;\n# # use super::*;\n# # #[test]\n# fn instantiation() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: AdminsListResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::AdminsList {})\n# .unwrap();\n# # assert_eq!(resp, AdminsListResp { admins: vec![] });\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![\"admin1\".to_owned(), \"admin2\".to_owned()],\n# },\n# &[],\n# \"Contract 2\",\n# None,\n# )\n# .unwrap();\n# # let resp: AdminsListResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::AdminsList {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# AdminsListResp {\n# admins: vec![Addr::unchecked(\"admin1\"), Addr::unchecked(\"admin2\")],\n# }\n# );\n# }\n# # #[test]\n# fn greet_query() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: GreetResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::Greet {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# GreetResp {\n# message: \"Hello World\".to_owned()\n# }\n# );\n# }\n# } The entry point itself also has to be created in src/lib.rs: use cosmwasm_std::{entry_point, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};\nuse msg::{ExecuteMsg, InstantiateMsg, QueryMsg}; mod contract;\nmod msg;\nmod state; #[entry_point]\npub fn instantiate( deps: DepsMut, env: Env, info: MessageInfo, msg: InstantiateMsg,\n) -> StdResult { contract::instantiate(deps, env, info, msg)\n} #[entry_point]\npub fn execute(deps: DepsMut, env: Env, info: MessageInfo, msg: ExecuteMsg) -> StdResult { contract::execute(deps, env, info, msg)\n} #[entry_point]\npub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult { contract::query(deps, env, msg)\n} There are a couple of new things, but nothing significant. First is how do I reach the message sender to verify he is an admin or remove him from the list - I used the info.sender field of MessageInfo, which is how it looks like - the member. As the message is always sent from the proper address, the sender is already of the Addr type - no need to validate it. Another new thing is the update function on an Item - it makes a read and update of an entity potentially more efficient. It is possible to do it by reading admins first, then updating and storing the result. You probably noticed that when working with Item, we always assume something is there. But nothing forces us to initialize the ADMINS value on instantiation! So what happens there? Well, both load and update functions would return an error. But there is a may_load function, which returns StdResult> - it would return Ok(None) in case of empty storage. There is even a possibility to remove an existing item from storage with the remove function. One thing to improve is error handling. While validating the sender to be admin, we are returning some arbitrary string as an error. We can do better.","breadcrumbs":"Basics » Execution messages » Execution messages","id":"22","title":"Execution messages"},"23":{"body":"In our contract, we now have an error situation when a user tries to execute AddMembers not being an admin himself. There is no proper error case in StdError to report this situation, so we have to return a generic error with a message. It is not the best approach. For error reporting, we encourage using thiserror crate. Start with updating your dependencies: [package]\nname = \"contract\"\nversion = \"0.1.0\"\nedition = \"2021\" [lib]\ncrate-type = [\"cdylib\"] [dependencies]\ncosmwasm-std = { version = \"1.0.0-beta8\", features = [\"staking\"] }\nserde = { version = \"1.0.103\", default-features = false, features = [\"derive\"] }\ncw-storage-plus = \"0.13.4\"\nthiserror = \"1\" [dev-dependencies]\ncw-multi-test = \"0.13.4\" Now we define an error type in src/error.rs: use cosmwasm_std::{Addr, StdError};\nuse thiserror::Error; #[derive(Error, Debug, PartialEq)]\npub enum ContractError { #[error(\"{0}\")] StdError(#[from] StdError), #[error(\"{sender} is not contract admin\")] Unauthorized { sender: Addr },\n} We also need to add the new module to src/lib.rs: # use cosmwasm_std::{entry_point, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};\n# use msg::{ExecuteMsg, InstantiateMsg, QueryMsg};\n# mod contract;\nmod error;\nmod msg;\nmod state;\n# # #[entry_point]\n# pub fn instantiate(\n# deps: DepsMut,\n# env: Env,\n# info: MessageInfo,\n# msg: InstantiateMsg,\n# ) -> StdResult {\n# contract::instantiate(deps, env, info, msg)\n# }\n# # #[entry_point]\n# pub fn execute(deps: DepsMut, env: Env, info: MessageInfo, msg: ExecuteMsg) -> StdResult {\n# contract::execute(deps, env, info, msg)\n# }\n# # #[entry_point]\n# pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult {\n# contract::query(deps, env, msg)\n# } Using thiserror we define errors like a simple enum, and the crate ensures that the type implements std::error::Error trait. A very nice feature of this crate is the inline definition of Display trait by an #[error] attribute. Also, another helpful thing is the #[from] attribute, which automatically generates proper From implementation, so it is easy to use ? operator with thiserror types. Now update the execute endpoint to use our new error type: use crate::error::ContractError;\nuse crate::msg::{AdminsListResp, ExecuteMsg, GreetResp, InstantiateMsg, QueryMsg};\n# use crate::state::ADMINS;\n# use cosmwasm_std::{to_binary, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};\n# # pub fn instantiate(\n# deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# msg: InstantiateMsg,\n# ) -> StdResult {\n# let admins: StdResult> = msg\n# .admins\n# .into_iter()\n# .map(|addr| deps.api.addr_validate(&addr))\n# .collect();\n# ADMINS.save(deps.storage, &admins?)?;\n# # Ok(Response::new())\n# }\n# # pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult {\n# use QueryMsg::*;\n# # match msg {\n# Greet {} => to_binary(&query::greet()?),\n# AdminsList {} => to_binary(&query::admins_list(deps)?),\n# }\n# } pub fn execute( deps: DepsMut, _env: Env, info: MessageInfo, msg: ExecuteMsg,\n) -> Result { use ExecuteMsg::*; match msg { AddMembers { admins } => exec::add_members(deps, info, admins), Leave {} => exec::leave(deps, info).map_err(Into::into), }\n} mod exec { use super::*; pub fn add_members( deps: DepsMut, info: MessageInfo, admins: Vec, ) -> Result { let mut curr_admins = ADMINS.load(deps.storage)?; if !curr_admins.contains(&info.sender) { return Err(ContractError::Unauthorized { sender: info.sender, }); } let admins: StdResult> = admins .into_iter() .map(|addr| deps.api.addr_validate(&addr)) .collect(); curr_admins.append(&mut admins?); ADMINS.save(deps.storage, &curr_admins)?; Ok(Response::new()) }\n# # pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult {\n# ADMINS.update(deps.storage, move |admins| -> StdResult<_> {\n# let admins = admins\n# .into_iter()\n# .filter(|admin| *admin != info.sender)\n# .collect();\n# Ok(admins)\n# })?;\n# # Ok(Response::new())\n# }\n}\n#\n# mod query {\n# use super::*;\n# # pub fn greet() -> StdResult {\n# let resp = GreetResp {\n# message: \"Hello World\".to_owned(),\n# };\n# # Ok(resp)\n# }\n# # pub fn admins_list(deps: Deps) -> StdResult {\n# let admins = ADMINS.load(deps.storage)?;\n# let resp = AdminsListResp { admins };\n# Ok(resp)\n# }\n# }\n# # #[cfg(test)]\n# mod tests {\n# use cosmwasm_std::Addr;\n# use cw_multi_test::{App, ContractWrapper, Executor};\n# # use crate::msg::AdminsListResp;\n# # use super::*;\n# # #[test]\n# fn instantiation() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: AdminsListResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::AdminsList {})\n# .unwrap();\n# # assert_eq!(resp, AdminsListResp { admins: vec![] });\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![\"admin1\".to_owned(), \"admin2\".to_owned()],\n# },\n# &[],\n# \"Contract 2\",\n# None,\n# )\n# .unwrap();\n# # let resp: AdminsListResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::AdminsList {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# AdminsListResp {\n# admins: vec![Addr::unchecked(\"admin1\"), Addr::unchecked(\"admin2\")],\n# }\n# );\n# }\n# # #[test]\n# fn greet_query() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: GreetResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::Greet {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# GreetResp {\n# message: \"Hello World\".to_owned()\n# }\n# );\n# }\n# } The entry point return type also has to be updated: # use cosmwasm_std::{entry_point, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};\nuse error::ContractError;\n# use msg::{ExecuteMsg, InstantiateMsg, QueryMsg}; # mod contract;\n# mod error;\n# mod msg;\n# mod state;\n# # #[entry_point]\n# pub fn instantiate(\n# deps: DepsMut,\n# env: Env,\n# info: MessageInfo,\n# msg: InstantiateMsg,\n# ) -> StdResult {\n# contract::instantiate(deps, env, info, msg)\n# }\n# #[entry_point]\npub fn execute( deps: DepsMut, env: Env, info: MessageInfo, msg: ExecuteMsg,\n) -> Result { contract::execute(deps, env, info, msg)\n}\n# # #[entry_point]\n# pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult {\n# contract::query(deps, env, msg)\n# }","breadcrumbs":"Basics » Execution messages » Error handling","id":"23","title":"Error handling"},"24":{"body":"Using proper custom error type has one nice upside - multi-test is maintaining error type using the anyhow crate. It is a sibling of thiserror, designed to implement type-erased errors in a way that allows getting the original error back. Let's write a test that verifies that a non-admin cannot add himself to a list: # use crate::error::ContractError;\n# use crate::msg::{AdminsListResp, ExecuteMsg, GreetResp, InstantiateMsg, QueryMsg};\n# use crate::state::ADMINS;\n# use cosmwasm_std::{to_binary, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};\n# # pub fn instantiate(\n# deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# msg: InstantiateMsg,\n# ) -> StdResult {\n# let admins: StdResult> = msg\n# .admins\n# .into_iter()\n# .map(|addr| deps.api.addr_validate(&addr))\n# .collect();\n# ADMINS.save(deps.storage, &admins?)?;\n# # Ok(Response::new())\n# }\n# # pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult {\n# use QueryMsg::*;\n# # match msg {\n# Greet {} => to_binary(&query::greet()?),\n# AdminsList {} => to_binary(&query::admins_list(deps)?),\n# }\n# }\n# # pub fn execute(\n# deps: DepsMut,\n# _env: Env,\n# info: MessageInfo,\n# msg: ExecuteMsg,\n# ) -> Result {\n# use ExecuteMsg::*;\n# # match msg {\n# AddMembers { admins } => exec::add_members(deps, info, admins),\n# Leave {} => exec::leave(deps, info).map_err(Into::into),\n# }\n# }\n# # mod exec {\n# use super::*;\n# # pub fn add_members(\n# deps: DepsMut,\n# info: MessageInfo,\n# admins: Vec,\n# ) -> Result {\n# let mut curr_admins = ADMINS.load(deps.storage)?;\n# if !curr_admins.contains(&info.sender) {\n# return Err(ContractError::Unauthorized {\n# sender: info.sender,\n# });\n# }\n# # let admins: StdResult> = admins\n# .into_iter()\n# .map(|addr| deps.api.addr_validate(&addr))\n# .collect();\n# # curr_admins.append(&mut admins?);\n# ADMINS.save(deps.storage, &curr_admins)?;\n# # Ok(Response::new())\n# }\n# # pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult {\n# ADMINS.update(deps.storage, move |admins| -> StdResult<_> {\n# let admins = admins\n# .into_iter()\n# .filter(|admin| *admin != info.sender)\n# .collect();\n# Ok(admins)\n# })?;\n# # Ok(Response::new())\n# }\n# }\n# # mod query {\n# use super::*;\n# # pub fn greet() -> StdResult {\n# let resp = GreetResp {\n# message: \"Hello World\".to_owned(),\n# };\n# # Ok(resp)\n# }\n# # pub fn admins_list(deps: Deps) -> StdResult {\n# let admins = ADMINS.load(deps.storage)?;\n# let resp = AdminsListResp { admins };\n# Ok(resp)\n# }\n# }\n# #[cfg(test)]\nmod tests {\n# use cosmwasm_std::Addr;\n# use cw_multi_test::{App, ContractWrapper, Executor};\n# # use crate::msg::AdminsListResp;\n# # use super::*;\n# # #[test]\n# fn instantiation() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: AdminsListResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::AdminsList {})\n# .unwrap();\n# # assert_eq!(resp, AdminsListResp { admins: vec![] });\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![\"admin1\".to_owned(), \"admin2\".to_owned()],\n# },\n# &[],\n# \"Contract 2\",\n# None,\n# )\n# .unwrap();\n# # let resp: AdminsListResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::AdminsList {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# AdminsListResp {\n# admins: vec![Addr::unchecked(\"admin1\"), Addr::unchecked(\"admin2\")],\n# }\n# );\n# }\n# # #[test]\n# fn greet_query() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: GreetResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::Greet {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# GreetResp {\n# message: \"Hello World\".to_owned()\n# }\n# );\n# }\n# #[test] fn unauthorized() { let mut app = App::default(); let code = ContractWrapper::new(execute, instantiate, query); let code_id = app.store_code(Box::new(code)); let addr = app .instantiate_contract( code_id, Addr::unchecked(\"owner\"), &InstantiateMsg { admins: vec![] }, &[], \"Contract\", None, ) .unwrap(); let err = app .execute_contract( Addr::unchecked(\"user\"), addr, &ExecuteMsg::AddMembers { admins: vec![\"user\".to_owned()], }, &[], ) .unwrap_err(); assert_eq!( ContractError::Unauthorized { sender: Addr::unchecked(\"user\") }, err.downcast().unwrap() ); }\n} Executing a contract is very similar to any other call - we use an execute_contract function. As the execution may fail, we get an error type out of this call, but instead of calling unwrap to extract a value out of it, we expect an error to occur - this is the purpose of the unwrap_err call. Now, as we have an error value, we can check if it matches what we expected with an assert_eq!. There is a slight complication - the error returned from execute_contract is an anyhow::Error error, but we expect it to be a ContractError. Fortunately, as I said before, anyhow errors can recover their original type using the downcast function. The unwrap right after it is needed because downcasting may fail. The reason is that downcast doesn't magically know the type kept in the underlying error. It deduces it by some context - here, it knows we expect it to be a ContractError, because of being compared to it - type elision miracles. But if the underlying error would not be a ContractError, then unwrap would panic. We just created a simple failure test for execution, but it is not enough to claim the contract is production-ready. All reasonable ok-cases should be covered for that. I encourage you to create some tests and experiment with them as an exercise after this chapter.","breadcrumbs":"Basics » Execution messages » Custom error and multi-test","id":"24","title":"Custom error and multi-test"},"25":{"body":"The only way our contract can communicate to the world, for now, is by queries. Smart contracts are passive - they cannot invoke any action by themselves. They can do it only as a reaction to a call. But if you tried playing with wasmd, you know that execution on the blockchain can return some metadata. There are two things the contract can return to the caller: events and data. Events are something produced by almost every real-life smart contract. In contrast, data is rarely used, designed for contract-to-contract communication.","breadcrumbs":"Basics » Events, attributes and data » Events attributes and data","id":"25","title":"Events attributes and data"},"26":{"body":"As an example, we would add an event admin_added emitted by our contract on the execution of AddMembers: # use crate::error::ContractError;\n# use crate::msg::{AdminsListResp, ExecuteMsg, GreetResp, InstantiateMsg, QueryMsg};\n# use crate::state::ADMINS;\nuse cosmwasm_std::{ to_binary, Binary, Deps, DepsMut, Env, Event, MessageInfo, Response, StdResult,\n}; # pub fn instantiate(\n# deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# msg: InstantiateMsg,\n# ) -> StdResult {\n# let admins: StdResult> = msg\n# .admins\n# .map(|addr| deps.api.addr_validate(&addr))\n# .collect();\n# ADMINS.save(deps.storage, &admins?)?;\n# # Ok(Response::new())\n# }\n# # pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult {\n# use QueryMsg::*;\n# # match msg {\n# Greet {} => to_binary(&query::greet()?),\n# AdminsList {} => to_binary(&query::admins_list(deps)?),\n# }\n# }\n# # pub fn execute(\n# deps: DepsMut,\n# _env: Env,\n# info: MessageInfo,\n# msg: ExecuteMsg,\n# ) -> Result {\n# use ExecuteMsg::*;\n# # match msg {\n# AddMembers { admins } => exec::add_members(deps, info, admins),\n# Leave {} => exec::leave(deps, info).map_err(Into::into),\n# }\n# }\n# mod exec {\n# use super::*;\n# pub fn add_members( deps: DepsMut, info: MessageInfo, admins: Vec, ) -> Result { let mut curr_admins = ADMINS.load(deps.storage)?; if !curr_admins.contains(&info.sender) { return Err(ContractError::Unauthorized { sender: info.sender, }); } let events = admins .iter() .map(|admin| Event::new(\"admin_added\").add_attribute(\"addr\", admin)); let resp = Response::new() .add_events(events) .add_attribute(\"action\", \"add_members\") .add_attribute(\"added_count\", admins.len().to_string()); let admins: StdResult> = admins .into_iter() .map(|addr| deps.api.addr_validate(&addr)) .collect(); curr_admins.append(&mut admins?); ADMINS.save(deps.storage, &curr_admins)?; Ok(resp) }\n# # pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult {\n# ADMINS.update(deps.storage, move |admins| -> StdResult<_> {\n# let admins = admins\n# .into_iter()\n# .filter(|admin| *admin != info.sender)\n# .collect();\n# Ok(admins)\n# })?;\n# # Ok(Response::new())\n# }\n}\n# # mod query {\n# use super::*;\n# # pub fn greet() -> StdResult {\n# let resp = GreetResp {\n# message: \"Hello World\".to_owned(),\n# };\n# # Ok(resp)\n# }\n# # pub fn admins_list(deps: Deps) -> StdResult {\n# let admins = ADMINS.load(deps.storage)?;\n# let resp = AdminsListResp { admins };\n# Ok(resp)\n# }\n# }\n# # #[cfg(test)]\n# mod tests {\n# use cosmwasm_std::Addr;\n# use cw_multi_test::{App, ContractWrapper, Executor};\n# # use crate::msg::AdminsListResp;\n# # use super::*;\n# # #[test]\n# fn instantiation() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: AdminsListResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::AdminsList {})\n# .unwrap();\n# # assert_eq!(resp, AdminsListResp { admins: vec![] });\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![\"admin1\".to_owned(), \"admin2\".to_owned()],\n# },\n# &[],\n# \"Contract 2\",\n# None,\n# )\n# .unwrap();\n# # let resp: AdminsListResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::AdminsList {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# AdminsListResp {\n# admins: vec![Addr::unchecked(\"admin1\"), Addr::unchecked(\"admin2\")],\n# }\n# );\n# }\n# # #[test]\n# fn greet_query() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: GreetResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::Greet {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# GreetResp {\n# message: \"Hello World\".to_owned()\n# }\n# );\n# }\n# # #[test]\n# fn unauthorized() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let err = app\n# .execute_contract(\n# Addr::unchecked(\"user\"),\n# addr,\n# &ExecuteMsg::AddMembers {\n# admins: vec![\"user\".to_owned()],\n# },\n# &[],\n# )\n# .unwrap_err();\n# # assert_eq!(\n# ContractError::Unauthorized {\n# sender: Addr::unchecked(\"user\")\n# },\n# err.downcast().unwrap()\n# );\n# }\n# } An event is built from two things: an event type provided in the new function and attributes. Attributes are added to an event with the add_attributes or the add_attribute call. Attributes are key-value pairs. Because an event cannot contain any list, to achieve reporting multiple similar actions taking place, we need to emit multiple small events instead of a collective one. Events are emitted by adding them to the response with add_event or add_events call. Additionally, there is a possibility to add attributes directly to the response. It is just sugar. By default, every execution emits a standard \"wasm\" event. Adding attributes to the result adds them to the default event. We can check if events are properly emitted by contract. It is not always done, as it is much of boilerplate in test, but events are, generally, more like logs - not necessarily considered main contract logic. Let's now write single test checking if execution emits events: # use crate::error::ContractError;\n# use crate::msg::{AdminsListResp, ExecuteMsg, GreetResp, InstantiateMsg, QueryMsg};\n# use crate::state::ADMINS;\n# use cosmwasm_std::{\n# to_binary, Binary, Deps, DepsMut, Env, Event, MessageInfo, Response, StdResult,\n# };\n# # pub fn instantiate(\n# deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# msg: InstantiateMsg,\n# ) -> StdResult {\n# let admins: StdResult> = msg\n# .admins\n# .into_iter()\n# .map(|addr| deps.api.addr_validate(&addr))\n# .collect();\n# ADMINS.save(deps.storage, &admins?)?;\n# # Ok(Response::new())\n# }\n# # pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult {\n# use QueryMsg::*;\n# # match msg {\n# Greet {} => to_binary(&query::greet()?),\n# AdminsList {} => to_binary(&query::admins_list(deps)?),\n# }\n# }\n# # pub fn execute(\n# deps: DepsMut,\n# _env: Env,\n# info: MessageInfo,\n# msg: ExecuteMsg,\n# ) -> Result {\n# use ExecuteMsg::*;\n# # match msg {\n# AddMembers { admins } => exec::add_members(deps, info, admins),\n# Leave {} => exec::leave(deps, info).map_err(Into::into),\n# }\n# }\n# # mod exec {\n# use super::*;\n# # pub fn add_members(\n# deps: DepsMut,\n# info: MessageInfo,\n# admins: Vec,\n# ) -> Result {\n# let mut curr_admins = ADMINS.load(deps.storage)?;\n# if !curr_admins.contains(&info.sender) {\n# return Err(ContractError::Unauthorized {\n# sender: info.sender,\n# });\n# }\n# # let events = admins\n# .iter()\n# .map(|admin| Event::new(\"admin_added\").add_attribute(\"addr\", admin));\n# let resp = Response::new()\n# .add_events(events)\n# .add_attribute(\"action\", \"add_members\")\n# .add_attribute(\"added_count\", admins.len().to_string());\n# # let admins: StdResult> = admins\n# .into_iter()\n# .map(|addr| deps.api.addr_validate(&addr))\n# .collect();\n# # curr_admins.append(&mut admins?);\n# ADMINS.save(deps.storage, &curr_admins)?;\n# # Ok(resp)\n# }\n# # pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult {\n# ADMINS.update(deps.storage, move |admins| -> StdResult<_> {\n# let admins = admins\n# .into_iter()\n# .filter(|admin| *admin != info.sender)\n# .collect();\n# Ok(admins)\n# })?;\n# # Ok(Response::new())\n# }\n# }\n# # mod query {\n# use super::*;\n# # pub fn greet() -> StdResult {\n# let resp = GreetResp {\n# message: \"Hello World\".to_owned(),\n# };\n# # Ok(resp)\n# }\n# # pub fn admins_list(deps: Deps) -> StdResult {\n# let admins = ADMINS.load(deps.storage)?;\n# let resp = AdminsListResp { admins };\n# Ok(resp)\n# }\n# }\n# #[cfg(test)]\nmod tests {\n# use cosmwasm_std::Addr;\n# use cw_multi_test::{App, ContractWrapper, Executor};\n# # use crate::msg::AdminsListResp;\n# # use super::*;\n# # #[test]\n# fn instantiation() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: AdminsListResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::AdminsList {})\n# .unwrap();\n# # assert_eq!(resp, AdminsListResp { admins: vec![] });\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![\"admin1\".to_owned(), \"admin2\".to_owned()],\n# },\n# &[],\n# \"Contract 2\",\n# None,\n# )\n# .unwrap();\n# # let resp: AdminsListResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::AdminsList {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# AdminsListResp {\n# admins: vec![Addr::unchecked(\"admin1\"), Addr::unchecked(\"admin2\")],\n# }\n# );\n# }\n# # #[test]\n# fn greet_query() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: GreetResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::Greet {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# GreetResp {\n# message: \"Hello World\".to_owned()\n# }\n# );\n# }\n# # #[test]\n# fn unauthorized() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let err = app\n# .execute_contract(\n# Addr::unchecked(\"user\"),\n# addr,\n# &ExecuteMsg::AddMembers {\n# admins: vec![\"user\".to_owned()],\n# },\n# &[],\n# )\n# .unwrap_err();\n# # assert_eq!(\n# ContractError::Unauthorized {\n# sender: Addr::unchecked(\"user\")\n# },\n# err.downcast().unwrap()\n# );\n# }\n# #[test] fn add_members() { let mut app = App::default(); let code = ContractWrapper::new(execute, instantiate, query); let code_id = app.store_code(Box::new(code)); let addr = app .instantiate_contract( code_id, Addr::unchecked(\"owner\"), &InstantiateMsg { admins: vec![\"owner\".to_owned()], }, &[], \"Contract\", None, ) .unwrap(); let resp = app .execute_contract( Addr::unchecked(\"owner\"), addr, &ExecuteMsg::AddMembers { admins: vec![\"user\".to_owned()], }, &[], ) .unwrap(); let wasm = resp.events.iter().find(|ev| ev.ty == \"wasm\").unwrap(); assert_eq!( wasm.attributes .iter() .find(|attr| attr.key == \"action\") .unwrap() .value, \"add_members\" ); assert_eq!( wasm.attributes .iter() .find(|attr| attr.key == \"added_count\") .unwrap() .value, \"1\" ); let admin_added: Vec<_> = resp .events .iter() .filter(|ev| ev.ty == \"wasm-admin_added\") .collect(); assert_eq!(admin_added.len(), 1); assert_eq!( admin_added[0] .attributes .iter() .find(|attr| attr.key == \"addr\") .unwrap() .value, \"user\" ); }\n} As you can see, testing events on a simple test made it clunky. First of all, every string is heavily string-based - a lack of type control makes writing such tests difficult. Also, even types are prefixed with \"wasm-\" - it may not be a huge problem, but it doesn't clarify verification. But the problem is, how layered events structure are, which makes verifying them tricky. Also, the \"wasm\" event is particularly tricky, as it contains an implied attribute - _contract_addr containing an address called a contract. My general rule is - do not test emitted events unless some logic depends on them.","breadcrumbs":"Basics » Events, attributes and data » Returning events","id":"26","title":"Returning events"},"27":{"body":"Besides events, any smart contract execution may produce a data object. In contrast to events, data can be structured. It makes it a way better choice to perform any communication logic relies on. On the other hand, it turns out it is very rarely helpful outside of contract-to-contract communication. Data is always only one single object on the response, which is set using the set_data function. Because of its low usefulness in a single contract environment, we will not spend time on it right now - an example of it will be covered later when contract-to-contract communication will be discussed. Until then, it is just helpful to know such an entity exists.","breadcrumbs":"Basics » Events, attributes and data » Data","id":"27","title":"Data"},"28":{"body":"When you hear smart contracts, you think blockchain. When you hear blockchain, you often think of cryptocurrencies. It is not the same, but crypto assets, or as we often call them: tokens, are very closely connected to the blockchain. CosmWasm has a notion of a native token. Native tokens are assets managed by the blockchain core instead of smart contracts. Often such assets have some special meaning, like being used for paying gas fees or staking for consensus algorithm, but can be just arbitrary assets. Native tokens are assigned to their owners but can be transferred by their nature. Everything had an address in the blockchain is eligible to have its native tokens. As a consequence - tokens can be assigned to smart contracts! Every message sent to the smart contract can have some funds sent with it. In this chapter, we will take advantage of that and create a way to reward hard work performed by admins. We will create a new message - Donate, which will be used by anyone to donate some funds to admins, divided equally.","breadcrumbs":"Basics » Dealing with funds » Dealing with funds","id":"28","title":"Dealing with funds"},"29":{"body":"Traditionally we need to prepare our messages. We need to create a new ExecuteMsg variant, but we will also modify the Instantiate message a bit - we need to have some way of defining the name of a native token we would use for donations. It would be possible to allow users to send any tokens they want, but we want to simplify things for now. # use cosmwasm_std::Addr;\n# use serde::{Deserialize, Serialize};\n# #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\npub struct InstantiateMsg { pub admins: Vec, pub donation_denom: String,\n} #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\npub enum ExecuteMsg { AddMembers { admins: Vec }, Leave {}, Donate {},\n}\n# # #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\n# pub struct GreetResp {\n# pub message: String,\n# }\n# # #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\n# pub struct AdminsListResp {\n# pub admins: Vec,\n# }\n# # #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\n# pub enum QueryMsg {\n# Greet {},\n# AdminsList {},\n# } We also need to add a new state part, to keep the donation_denom: use cosmwasm_std::Addr;\nuse cw_storage_plus::Item; pub const ADMINS: Item> = Item::new(\"admins\");\npub const DONATION_DENOM: Item = Item::new(\"donation_denom\"); And instantiate it properly: # use crate::error::ContractError;\n# use crate::msg::{AdminsListResp, ExecuteMsg, GreetResp, InstantiateMsg, QueryMsg};\nuse crate::state::{ADMINS, DONATION_DENOM};\n# use cosmwasm_std::{\n# to_binary, Binary, Deps, DepsMut, Env, Event, MessageInfo, Response, StdResult,\n# }; pub fn instantiate( deps: DepsMut, _env: Env, _info: MessageInfo, msg: InstantiateMsg,\n) -> StdResult { let admins: StdResult> = msg .admins .into_iter() .map(|addr| deps.api.addr_validate(&addr)) .collect(); ADMINS.save(deps.storage, &admins?)?; DONATION_DENOM.save(deps.storage, &msg.donation_denom)?; Ok(Response::new())\n}\n# # pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult {\n# use QueryMsg::*;\n# # match msg {\n# Greet {} => to_binary(&query::greet()?),\n# AdminsList {} => to_binary(&query::admins_list(deps)?),\n# }\n# }\n# # pub fn execute(\n# deps: DepsMut,\n# _env: Env,\n# info: MessageInfo,\n# msg: ExecuteMsg,\n# ) -> Result {\n# use ExecuteMsg::*;\n# # match msg {\n# AddMembers { admins } => exec::add_members(deps, info, admins),\n# Leave {} => exec::leave(deps, info).map_err(Into::into),\n# }\n# }\n# # mod exec {\n# use super::*;\n# # pub fn add_members(\n# deps: DepsMut,\n# info: MessageInfo,\n# admins: Vec,\n# ) -> Result {\n# let mut curr_admins = ADMINS.load(deps.storage)?;\n# if !curr_admins.contains(&info.sender) {\n# return Err(ContractError::Unauthorized {\n# sender: info.sender,\n# });\n# }\n# # let events = admins\n# .iter()\n# .map(|admin| Event::new(\"admin_added\").add_attribute(\"addr\", admin));\n# let resp = Response::new()\n# .add_events(events)\n# .add_attribute(\"action\", \"add_members\")\n# .add_attribute(\"added_count\", admins.len().to_string());\n# # let admins: StdResult> = admins\n# .into_iter()\n# .map(|addr| deps.api.addr_validate(&addr))\n# .collect();\n# # curr_admins.append(&mut admins?);\n# ADMINS.save(deps.storage, &curr_admins)?;\n# # Ok(resp)\n# }\n# # pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult {\n# ADMINS.update(deps.storage, move |admins| -> StdResult<_> {\n# let admins = admins\n# .into_iter()\n# .filter(|admin| *admin != info.sender)\n# .collect();\n# Ok(admins)\n# })?;\n# # Ok(Response::new())\n# }\n# }\n# # mod query {\n# use super::*;\n# # pub fn greet() -> StdResult {\n# let resp = GreetResp {\n# message: \"Hello World\".to_owned(),\n# };\n# # Ok(resp)\n# }\n# # pub fn admins_list(deps: Deps) -> StdResult {\n# let admins = ADMINS.load(deps.storage)?;\n# let resp = AdminsListResp { admins };\n# Ok(resp)\n# }\n# }\n# # #[cfg(test)]\n# mod tests {\n# use cosmwasm_std::Addr;\n# use cw_multi_test::{App, ContractWrapper, Executor};\n# # use crate::msg::AdminsListResp;\n# # use super::*;\n# # #[test]\n# fn instantiation() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: AdminsListResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::AdminsList {})\n# .unwrap();\n# # assert_eq!(resp, AdminsListResp { admins: vec![] });\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![\"admin1\".to_owned(), \"admin2\".to_owned()],\n# },\n# &[],\n# \"Contract 2\",\n# None,\n# )\n# .unwrap();\n# # let resp: AdminsListResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::AdminsList {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# AdminsListResp {\n# admins: vec![Addr::unchecked(\"admin1\"), Addr::unchecked(\"admin2\")],\n# }\n# );\n# }\n# # #[test]\n# fn greet_query() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: GreetResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::Greet {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# GreetResp {\n# message: \"Hello World\".to_owned()\n# }\n# );\n# }\n# # #[test]\n# fn unauthorized() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let err = app\n# .execute_contract(\n# Addr::unchecked(\"user\"),\n# addr,\n# &ExecuteMsg::AddMembers {\n# admins: vec![\"user\".to_owned()],\n# },\n# &[],\n# )\n# .unwrap_err();\n# # assert_eq!(\n# ContractError::Unauthorized {\n# sender: Addr::unchecked(\"user\")\n# },\n# err.downcast().unwrap()\n# );\n# }\n# # #[test]\n# fn add_members() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![\"owner\".to_owned()],\n# },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp = app\n# .execute_contract(\n# Addr::unchecked(\"owner\"),\n# addr,\n# &ExecuteMsg::AddMembers {\n# admins: vec![\"user\".to_owned()],\n# },\n# &[],\n# )\n# .unwrap();\n# # let wasm = resp.events.iter().find(|ev| ev.ty == \"wasm\").unwrap();\n# assert_eq!(\n# wasm.attributes\n# .iter()\n# .find(|attr| attr.key == \"action\")\n# .unwrap()\n# .value,\n# \"add_members\"\n# );\n# assert_eq!(\n# wasm.attributes\n# .iter()\n# .find(|attr| attr.key == \"added_count\")\n# .unwrap()\n# .value,\n# \"1\"\n# );\n# # let admin_added: Vec<_> = resp\n# .events\n# .iter()\n# .filter(|ev| ev.ty == \"wasm-admin_added\")\n# .collect();\n# assert_eq!(admin_added.len(), 1);\n# # assert_eq!(\n# admin_added[0]\n# .attributes\n# .iter()\n# .find(|attr| attr.key == \"addr\")\n# .unwrap()\n# .value,\n# \"user\"\n# );\n# }\n# } What also needs some corrections are tests - instantiate messages have a new field. I leave it to you as an exercise. Now we have everything we need to implement donating funds to admins. First, a minor update to the Cargo.toml - we will use an additional utility crate: [package]\nname = \"contract\"\nversion = \"0.1.0\"\nedition = \"2021\" [lib]\ncrate-type = [\"cdylib\", \"rlib\"] [features]\nlibrary = [] [dependencies]\ncosmwasm-std = { version = \"1.0.0-beta8\", features = [\"staking\"] }\nserde = { version = \"1.0.103\", default-features = false, features = [\"derive\"] }\ncw-storage-plus = \"0.13.4\"\nthiserror = \"1\"\nschemars = \"0.8.1\"\ncw-utils = \"0.13\" [dev-dependencies]\ncw-multi-test = \"0.13.4\"\ncosmwasm-schema = { version = \"1.0.0\" } Then we can implement the donate handler: # use crate::error::ContractError;\n# use crate::msg::{AdminsListResp, ExecuteMsg, GreetResp, InstantiateMsg, QueryMsg};\n# use crate::state::{ADMINS, DONATION_DENOM};\nuse cosmwasm_std::{ coins, to_binary, BankMsg, Binary, Deps, DepsMut, Env, Event, MessageInfo, Response, StdResult,\n}; # pub fn instantiate(\n# deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# msg: InstantiateMsg,\n# ) -> StdResult {\n# let admins: StdResult> = msg\n# .admins\n# .into_iter()\n# .map(|addr| deps.api.addr_validate(&addr))\n# .collect();\n# ADMINS.save(deps.storage, &admins?)?;\n# DONATION_DENOM.save(deps.storage, &msg.donation_denom)?;\n# # Ok(Response::new())\n# }\n# # pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult {\n# use QueryMsg::*;\n# # match msg {\n# Greet {} => to_binary(&query::greet()?),\n# AdminsList {} => to_binary(&query::admins_list(deps)?),\n# }\n# }\n# pub fn execute( deps: DepsMut, _env: Env, info: MessageInfo, msg: ExecuteMsg,\n) -> Result { use ExecuteMsg::*; match msg { AddMembers { admins } => exec::add_members(deps, info, admins), Leave {} => exec::leave(deps, info).map_err(Into::into), Donate {} => exec::donate(deps, info), }\n} mod exec {\n# use super::*;\n# # pub fn add_members(\n# deps: DepsMut,\n# info: MessageInfo,\n# admins: Vec,\n# ) -> Result {\n# let mut curr_admins = ADMINS.load(deps.storage)?;\n# if !curr_admins.contains(&info.sender) {\n# return Err(ContractError::Unauthorized {\n# sender: info.sender,\n# });\n# }\n# # let events = admins\n# .iter()\n# .map(|admin| Event::new(\"admin_added\").add_attribute(\"addr\", admin));\n# let resp = Response::new()\n# .add_events(events)\n# .add_attribute(\"action\", \"add_members\")\n# .add_attribute(\"added_count\", admins.len().to_string());\n# # let admins: StdResult> = admins\n# .into_iter()\n# .map(|addr| deps.api.addr_validate(&addr))\n# .collect();\n# # curr_admins.append(&mut admins?);\n# ADMINS.save(deps.storage, &curr_admins)?;\n# # Ok(resp)\n# }\n# # pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult {\n# ADMINS.update(deps.storage, move |admins| -> StdResult<_> {\n# let admins = admins\n# .into_iter()\n# .filter(|admin| *admin != info.sender)\n# .collect();\n# Ok(admins)\n# })?;\n# # Ok(Response::new())\n# }\n# pub fn donate(deps: DepsMut, info: MessageInfo) -> Result { let denom = DONATION_DENOM.load(deps.storage)?; let admins = ADMINS.load(deps.storage)?; let donation = cw_utils::must_pay(&info, &denom)?.u128(); let donation_per_admin = donation / (admins.len() as u128); let messages = admins.into_iter().map(|admin| BankMsg::Send { to_address: admin.to_string(), amount: coins(donation_per_admin, &denom), }); let resp = Response::new() .add_messages(messages) .add_attribute(\"action\", \"donate\") .add_attribute(\"amount\", donation.to_string()) .add_attribute(\"per_admin\", donation_per_admin.to_string()); Ok(resp) }\n}\n# # mod query {\n# use super::*;\n# # pub fn greet() -> StdResult {\n# let resp = GreetResp {\n# message: \"Hello World\".to_owned(),\n# };\n# # Ok(resp)\n# }\n# # pub fn admins_list(deps: Deps) -> StdResult {\n# let admins = ADMINS.load(deps.storage)?;\n# let resp = AdminsListResp { admins };\n# Ok(resp)\n# }\n# }\n# # #[cfg(test)]\n# mod tests {\n# use cosmwasm_std::Addr;\n# use cw_multi_test::{App, ContractWrapper, Executor};\n# # use crate::msg::AdminsListResp;\n# # use super::*;\n# # #[test]\n# fn instantiation() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![],\n# donation_denom: \"eth\".to_owned(),\n# },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: AdminsListResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::AdminsList {})\n# .unwrap();\n# # assert_eq!(resp, AdminsListResp { admins: vec![] });\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![\"admin1\".to_owned(), \"admin2\".to_owned()],\n# donation_denom: \"eth\".to_owned(),\n# },\n# &[],\n# \"Contract 2\",\n# None,\n# )\n# .unwrap();\n# # let resp: AdminsListResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::AdminsList {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# AdminsListResp {\n# admins: vec![Addr::unchecked(\"admin1\"), Addr::unchecked(\"admin2\")],\n# }\n# );\n# }\n# # #[test]\n# fn greet_query() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![],\n# donation_denom: \"eth\".to_owned(),\n# },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: GreetResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::Greet {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# GreetResp {\n# message: \"Hello World\".to_owned()\n# }\n# );\n# }\n# # #[test]\n# fn unauthorized() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![],\n# donation_denom: \"eth\".to_owned(),\n# },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let err = app\n# .execute_contract(\n# Addr::unchecked(\"user\"),\n# addr,\n# &ExecuteMsg::AddMembers {\n# admins: vec![\"user\".to_owned()],\n# },\n# &[],\n# )\n# .unwrap_err();\n# # assert_eq!(\n# ContractError::Unauthorized {\n# sender: Addr::unchecked(\"user\")\n# },\n# err.downcast().unwrap()\n# );\n# }\n# # #[test]\n# fn add_members() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![\"owner\".to_owned()],\n# donation_denom: \"eth\".to_owned(),\n# },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp = app\n# .execute_contract(\n# Addr::unchecked(\"owner\"),\n# addr,\n# &ExecuteMsg::AddMembers {\n# admins: vec![\"user\".to_owned()],\n# },\n# &[],\n# )\n# .unwrap();\n# # let wasm = resp.events.iter().find(|ev| ev.ty == \"wasm\").unwrap();\n# assert_eq!(\n# wasm.attributes\n# .iter()\n# .find(|attr| attr.key == \"action\")\n# .unwrap()\n# .value,\n# \"add_members\"\n# );\n# assert_eq!(\n# wasm.attributes\n# .iter()\n# .find(|attr| attr.key == \"added_count\")\n# .unwrap()\n# .value,\n# \"1\"\n# );\n# # let admin_added: Vec<_> = resp\n# .events\n# .iter()\n# .filter(|ev| ev.ty == \"wasm-admin_added\")\n# .collect();\n# assert_eq!(admin_added.len(), 1);\n# # assert_eq!(\n# admin_added[0]\n# .attributes\n# .iter()\n# .find(|attr| attr.key == \"addr\")\n# .unwrap()\n# .value,\n# \"user\"\n# );\n# }\n# } Sending the funds to another contract is performed by adding bank messages to the response. The blockchain would expect any message which is returned in contract response as a part of an execution. This design is related to an actor model implemented by CosmWasm. The whole actor model will be described in detail later. For now, you can assume this is a way to handle token transfers. Before sending tokens to admins, we have to calculate the amount of donation per admin. It is done by searching funds for an entry describing our donation token and dividing the number of tokens sent by the number of admins. Note that because the integral division is always rounding down. As a consequence, it is possible that not all tokens sent as a donation would end up with no admins accounts. Any leftover would be left on our contract account forever. There are plenty of ways of dealing with this issue - figuring out one of them would be a great exercise. The last missing part is updating the ContractError - the must_pay call returns a cw_utils::PaymentError which we can't convert to our error type yet: use cosmwasm_std::{Addr, StdError};\nuse cw_utils::PaymentError;\nuse thiserror::Error; #[derive(Error, Debug, PartialEq)]\npub enum ContractError { #[error(\"{0}\")] StdError(#[from] StdError), #[error(\"{sender} is not contract admin\")] Unauthorized { sender: Addr }, #[error(\"Payment error: {0}\")] Payment(#[from] PaymentError),\n} As you can see, to handle incoming funds, I used the utility function - I encourage you to take a look at its implementation - this would give you a good understanding of how incoming funds are structured in MessageInfo. Now it's time to check if the funds are distributed correctly. The way for that is to write a test. # use crate::error::ContractError;\n# use crate::msg::{AdminsListResp, ExecuteMsg, GreetResp, InstantiateMsg, QueryMsg};\n# use crate::state::{ADMINS, DONATION_DENOM};\n# use cosmwasm_std::{\n# coins, to_binary, BankMsg, Binary, Deps, DepsMut, Env, Event, MessageInfo, Response, StdResult,\n# };\n# # pub fn instantiate(\n# deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# msg: InstantiateMsg,\n# ) -> StdResult {\n# let admins: StdResult> = msg\n# .admins\n# .into_iter()\n# .map(|addr| deps.api.addr_validate(&addr))\n# .collect();\n# ADMINS.save(deps.storage, &admins?)?;\n# DONATION_DENOM.save(deps.storage, &msg.donation_denom)?;\n# # Ok(Response::new())\n# }\n# # pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult {\n# use QueryMsg::*;\n# # match msg {\n# Greet {} => to_binary(&query::greet()?),\n# AdminsList {} => to_binary(&query::admins_list(deps)?),\n# }\n# }\n# # pub fn execute(\n# deps: DepsMut,\n# _env: Env,\n# info: MessageInfo,\n# msg: ExecuteMsg,\n# ) -> Result {\n# use ExecuteMsg::*;\n# # match msg {\n# AddMembers { admins } => exec::add_members(deps, info, admins),\n# Leave {} => exec::leave(deps, info).map_err(Into::into),\n# Donate {} => exec::donate(deps, info),\n# }\n# }\n# # mod exec {\n# use super::*;\n# # pub fn add_members(\n# deps: DepsMut,\n# info: MessageInfo,\n# admins: Vec,\n# ) -> Result {\n# let mut curr_admins = ADMINS.load(deps.storage)?;\n# if !curr_admins.contains(&info.sender) {\n# return Err(ContractError::Unauthorized {\n# sender: info.sender,\n# });\n# }\n# # let events = admins\n# .iter()\n# .map(|admin| Event::new(\"admin_added\").add_attribute(\"addr\", admin));\n# let resp = Response::new()\n# .add_events(events)\n# .add_attribute(\"action\", \"add_members\")\n# .add_attribute(\"added_count\", admins.len().to_string());\n# # let admins: StdResult> = admins\n# .into_iter()\n# .map(|addr| deps.api.addr_validate(&addr))\n# .collect();\n# # curr_admins.append(&mut admins?);\n# ADMINS.save(deps.storage, &curr_admins)?;\n# # Ok(resp)\n# }\n# # pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult {\n# ADMINS.update(deps.storage, move |admins| -> StdResult<_> {\n# let admins = admins\n# .into_iter()\n# .filter(|admin| *admin != info.sender)\n# .collect();\n# Ok(admins)\n# })?;\n# # Ok(Response::new())\n# }\n# # pub fn donate(deps: DepsMut, info: MessageInfo) -> Result {\n# let denom = DONATION_DENOM.load(deps.storage)?;\n# let admins = ADMINS.load(deps.storage)?;\n# # let donation = cw_utils::must_pay(&info, &denom)\n# .map_err(|err| StdError::generic_err(err.to_string()))?\n# .u128();\n# # let donation_per_admin = donation / (admins.len() as u128);\n# # let messages = admins.into_iter().map(|admin| BankMsg::Send {\n# to_address: admin.to_string(),\n# amount: coins(donation_per_admin, &denom),\n# });\n# # let resp = Response::new()\n# .add_messages(messages)\n# .add_attribute(\"action\", \"donate\")\n# .add_attribute(\"amount\", donation.to_string())\n# .add_attribute(\"per_admin\", donation_per_admin.to_string());\n# # Ok(resp)\n# }\n# }\n# # mod query {\n# use super::*;\n# # pub fn greet() -> StdResult {\n# let resp = GreetResp {\n# message: \"Hello World\".to_owned(),\n# };\n# # Ok(resp)\n# }\n# # pub fn admins_list(deps: Deps) -> StdResult {\n# let admins = ADMINS.load(deps.storage)?;\n# let resp = AdminsListResp { admins };\n# Ok(resp)\n# }\n# }\n# #[cfg(test)]\nmod tests {\n# use cosmwasm_std::Addr;\n# use cw_multi_test::{App, ContractWrapper, Executor};\n# # use crate::msg::AdminsListResp;\n# # use super::*;\n# # #[test]\n# fn instantiation() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![],\n# donation_denom: \"eth\".to_owned(),\n# },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: AdminsListResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::AdminsList {})\n# .unwrap();\n# # assert_eq!(resp, AdminsListResp { admins: vec![] });\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![\"admin1\".to_owned(), \"admin2\".to_owned()],\n# donation_denom: \"eth\".to_owned(),\n# },\n# &[],\n# \"Contract 2\",\n# None,\n# )\n# .unwrap();\n# # let resp: AdminsListResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::AdminsList {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# AdminsListResp {\n# admins: vec![Addr::unchecked(\"admin1\"), Addr::unchecked(\"admin2\")],\n# }\n# );\n# }\n# # #[test]\n# fn greet_query() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![],\n# donation_denom: \"eth\".to_owned(),\n# },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: GreetResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::Greet {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# GreetResp {\n# message: \"Hello World\".to_owned()\n# }\n# );\n# }\n# # #[test]\n# fn unauthorized() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![],\n# donation_denom: \"eth\".to_owned(),\n# },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let err = app\n# .execute_contract(\n# Addr::unchecked(\"user\"),\n# addr,\n# &ExecuteMsg::AddMembers {\n# admins: vec![\"user\".to_owned()],\n# },\n# &[],\n# )\n# .unwrap_err();\n# # assert_eq!(\n# ContractError::Unauthorized {\n# sender: Addr::unchecked(\"user\")\n# },\n# err.downcast().unwrap()\n# );\n# }\n# # #[test]\n# fn add_members() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![\"owner\".to_owned()],\n# donation_denom: \"eth\".to_owned(),\n# },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp = app\n# .execute_contract(\n# Addr::unchecked(\"owner\"),\n# addr,\n# &ExecuteMsg::AddMembers {\n# admins: vec![\"user\".to_owned()],\n# },\n# &[],\n# )\n# .unwrap();\n# # let wasm = resp.events.iter().find(|ev| ev.ty == \"wasm\").unwrap();\n# assert_eq!(\n# wasm.attributes\n# .iter()\n# .find(|attr| attr.key == \"action\")\n# .unwrap()\n# .value,\n# \"add_members\"\n# );\n# assert_eq!(\n# wasm.attributes\n# .iter()\n# .find(|attr| attr.key == \"added_count\")\n# .unwrap()\n# .value,\n# \"1\"\n# );\n# # let admin_added: Vec<_> = resp\n# .events\n# .iter()\n# .filter(|ev| ev.ty == \"wasm-admin_added\")\n# .collect();\n# assert_eq!(admin_added.len(), 1);\n# # assert_eq!(\n# admin_added[0]\n# .attributes\n# .iter()\n# .find(|attr| attr.key == \"addr\")\n# .unwrap()\n# .value,\n# \"user\"\n# );\n# }\n# #[test] fn donations() { let mut app = App::new(|router, _, storage| { router .bank .init_balance(storage, &Addr::unchecked(\"user\"), coins(5, \"eth\")) .unwrap() }); let code = ContractWrapper::new(execute, instantiate, query); let code_id = app.store_code(Box::new(code)); let addr = app .instantiate_contract( code_id, Addr::unchecked(\"owner\"), &InstantiateMsg { admins: vec![\"admin1\".to_owned(), \"admin2\".to_owned()], donation_denom: \"eth\".to_owned(), }, &[], \"Contract\", None, ) .unwrap(); app.execute_contract( Addr::unchecked(\"user\"), addr.clone(), &ExecuteMsg::Donate {}, &coins(5, \"eth\"), ) .unwrap(); assert_eq!( app.wrap() .query_balance(\"user\", \"eth\") .unwrap() .amount .u128(), 0 ); assert_eq!( app.wrap() .query_balance(&addr, \"eth\") .unwrap() .amount .u128(), 1 ); assert_eq!( app.wrap() .query_balance(\"admin1\", \"eth\") .unwrap() .amount .u128(), 2 ); assert_eq!( app.wrap() .query_balance(\"admin2\", \"eth\") .unwrap() .amount .u128(), 2 ); }\n} Fairly simple. I don't particularly appreciate that every balance check is eight lines of code, but it can be improved by enclosing this assertion into a separate function, probably with the #[track_caller] attribute. The critical thing to talk about is how app creation changed. Because we need some initial tokens on a user account, instead of using the default constructor, we have to provide it with an initializer function. Unfortunately, new documentation is not easy to follow - even if a function is not very complicated. What it takes as an argument is a closure with three arguments - the Router with all modules supported by multi-test, the API object, and the state. This function is called once during contract instantiation. The router object contains some generic fields - we are interested in bank in particular. It has a type of BankKeeper , where the init_balance function sits.","breadcrumbs":"Basics » Dealing with funds » Preparing messages","id":"29","title":"Preparing messages"},"3":{"body":"This book is maintained on Github and auto deployed from there. Please create an issue or pull request if you find any mistakes, bugs, or ambiguities.","breadcrumbs":"Introduction » Contributing to the book","id":"3","title":"Contributing to the book"},"30":{"body":"As we covered most of the important basics about building Rust smart contracts, I have a serious exercise for you. The contract we built has an exploitable bug. All donations are distributed equally across admins. However, every admin is eligible to add another admin. And nothing is preventing the admin from adding himself to the list and receiving twice as many rewards as others! Try to write a test that detects such a bug, then fix it and ensure the bug nevermore occurs. Even if the admin cannot add the same address to the list, he can always create new accounts and add them, but this is something unpreventable on the contract level, so do not prevent that. Handling this kind of case is done by properly designing whole applications, which is out of this chapter's scope.","breadcrumbs":"Basics » Dealing with funds » Plot Twist!","id":"30","title":"Plot Twist!"},"31":{"body":"All the relevant basics are covered. Now let's talk about some good practices.","breadcrumbs":"Basics » Good practices » Good practices","id":"31","title":"Good practices"},"32":{"body":"Due to Rust style, all our message variants are spelled in a camel-case . It is standard practice, but it has a drawback - all messages are serialized and deserialized by serde using those variant names. The problem is that it is more common to use snake cases for field names in the JSON world. Fortunately, there is an effortless way to tell serde, to change the names casing for serialization purposes. Let's update our messages with a #[serde] attribute: use cosmwasm_std::Addr;\nuse serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\n#[serde(rename_all = \"snake_case\")]\npub struct InstantiateMsg { pub admins: Vec, pub donation_denom: String,\n} #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\n#[serde(rename_all = \"snake_case\")]\npub enum ExecuteMsg { AddMembers { admins: Vec }, Leave {}, Donate {},\n} #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\n#[serde(rename_all = \"snake_case\")]\npub struct GreetResp { pub message: String,\n} #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\n#[serde(rename_all = \"snake_case\")]\npub struct AdminsListResp { pub admins: Vec,\n} #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\n#[serde(rename_all = \"snake_case\")]\npub enum QueryMsg { Greet {}, AdminsList {},\n}","breadcrumbs":"Basics » Good practices » JSON renaming","id":"32","title":"JSON renaming"},"33":{"body":"Talking about JSON API, it is worth mentioning JSON Schema. It is a way of defining a shape for JSON messages. It is good practice to provide a way to generate schemas for contract API. The problem is that writing JSON schemas by hand is a pain. The good news is that there is a crate that would help us with that. Go to the Cargo.toml: [package]\nname = \"contract\"\nversion = \"0.1.0\"\nedition = \"2021\" [lib]\ncrate-type = [\"cdylib\", \"rlib\"] [dependencies]\ncosmwasm-std = { version = \"1.1.4\", features = [\"staking\"] }\nserde = { version = \"1.0.103\", default-features = false, features = [\"derive\"] }\ncw-storage-plus = \"0.15.1\"\nthiserror = \"1\"\nschemars = \"0.8.1\"\ncosmwasm-schema = \"1.1.4\" [dev-dependencies]\ncw-multi-test = \"0.13.4\" There is one additional change in this file - in crate-type I added \"rlib\". \"cdylib\" crates cannot be used as typical Rust dependencies. As a consequence, it is impossible to create examples for such crates. Now go back to src/msg.rs and add a new derive for all messages: # use cosmwasm_std::Addr;\nuse schemars::JsonSchema;\n# use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]\n#[serde(rename_all = \"snake_case\")]\npub struct InstantiateMsg { pub admins: Vec, pub donation_denom: String,\n} #[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]\n#[serde(rename_all = \"snake_case\")]\npub enum ExecuteMsg { AddMembers { admins: Vec }, Leave {}, Donate {},\n} #[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]\n#[serde(rename_all = \"snake_case\")]\npub struct GreetResp { pub message: String,\n} #[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]\n#[serde(rename_all = \"snake_case\")]\npub struct AdminsListResp { pub admins: Vec,\n} #[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]\n#[serde(rename_all = \"snake_case\")]\npub enum QueryMsg { Greet {}, AdminsList {},\n} You may argue that all those derives look slightly clunky, and I agree. Fortunately, the cosmwasm-schema crate delivers a utility cw_serde macro, which we can use to reduce a boilerplate: # use cosmwasm_std::Addr;\nuse cosmwasm_schema::cw_serde #[cw_serde]\npub struct InstantiateMsg { pub admins: Vec, pub donation_denom: String,\n} #[cw_serde]\npub enum ExecuteMsg { AddMembers { admins: Vec }, Leave {}, Donate {},\n} #[cw_serde]\npub struct GreetResp { pub message: String,\n} #[cw_serde]\npub struct AdminsListResp { pub admins: Vec,\n} #[cw_serde]\npub enum QueryMsg { Greet {}, AdminsList {},\n} Additionally, we have to derive the additional QueryResponses trait for our query message to correlate the message variants with responses we would generate for them: # use cosmwasm_std::Addr;\nuse cosmwasm_schema::{cw_serde, QueryResponses} # #[cw_serde]\n# pub struct InstantiateMsg {\n# pub admins: Vec,\n# pub donation_denom: String,\n# }\n# # #[cw_serde]\n# pub enum ExecuteMsg {\n# AddMembers { admins: Vec },\n# Leave {},\n# Donate {},\n# }\n# # #[cw_serde]\n# pub struct GreetResp {\n# pub message: String,\n# }\n# # #[cw_serde]\n# pub struct AdminsListResp {\n# pub admins: Vec,\n# }\n# #[cw_serde]\n#[derive(QueryResponses)]\npub enum QueryMsg { #[returns(GreetResp)] Greet {}, #[returns(AdminsListResp)] AdminsList {},\n} The QueryResponses is a trait that requires the #[returns(...)] attribute to all your query variants to generate additional information about the query-response relationship. Now, we want to make the msg module public and accessible by crates depending on our contract (in this case - for schema example). Update a src/lib.rs: # use cosmwasm_std::{entry_point, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};\n# use error::ContractError;\n# use msg::{ExecuteMsg, InstantiateMsg, QueryMsg};\n# pub mod contract;\npub mod error;\npub mod msg;\npub mod state;\n# # #[entry_point]\n# pub fn instantiate(\n# deps: DepsMut,\n# env: Env,\n# info: MessageInfo,\n# msg: InstantiateMsg,\n# ) -> StdResult {\n# contract::instantiate(deps, env, info, msg)\n# }\n# # #[entry_point]\n# pub fn execute(\n# deps: DepsMut,\n# env: Env,\n# info: MessageInfo,\n# msg: ExecuteMsg,\n# ) -> Result {\n# contract::execute(deps, env, info, msg)\n# }\n# # #[entry_point]\n# pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult {\n# contract::query(deps, env, msg)\n# } I changed the visibility of all modules - as our crate can now be used as a dependency. If someone would like to do so, he may need access to handlers or state. The next step is to create a tool generating actual schemas. We will do it by creating an binary in our crate. Create a new bin/schema.rs file: use contract::msg::{ExecuteMsg, InstantiateMsg, QueryMsg};\nuse cosmwasm_schema::write_api; fn main() { write_api! { instantiate: InstantiateMsg, execute: ExecuteMsg, query: QueryMsg }\n} Cargo is smart enough to recognize files in src/bin directory as utility binaries for the crate. Now we can generate our schemas: $ cargo run schema Finished dev [unoptimized + debuginfo] target(s) in 0.52s Running `target/debug/schema schema`\nRemoving \"/home/hashed/confio/git/book/examples/03-basics/schema/contract.json\" …\nExported the full API as /home/hashed/confio/git/book/examples/03-basics/schema/contract.json I encourage you to go to generated file to see what the schema looks like. The problem is that, unfortunately, creating this binary makes our project fail to compile on the Wasm target - which is, in the end, the most important one. Fortunately, we don't need to build the schema binary for the Wasm target - let's align the .cargo/config file: [alias]\nwasm = \"build --target wasm32-unknown-unknown --release --lib\"\nwasm-debug = \"build --target wasm32-unknown-unknown --lib\"\nschema = \"run schema\" The --lib flag added to wasm cargo aliases tells the toolchain to build only the library target - it would skip building any binaries. Additionally, I added the convenience schema alias so that one can generate schema calling simply cargo schema.","breadcrumbs":"Basics » Good practices » JSON schema","id":"33","title":"JSON schema"},"34":{"body":"Since we added the \"rlib\" target for the contract, it is, as mentioned before, useable as a dependency. The problem is that the contract depended on ours would have Wasm entry points generated twice - once in the dependency and once in the final contract. We can work this around by disabling generating Wasm entry points for the contract if the crate is used as a dependency. We would use feature flags for that. Start with updating Cargo.toml: [features]\nlibrary = [] This way, we created a new feature for our crate. Now we want to disable the entry_point attribute on entry points - we will do it by a slight update of src/lib.rs: # use cosmwasm_std::{entry_point, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};\n# use error::ContractError;\n# use msg::{ExecuteMsg, InstantiateMsg, QueryMsg};\n# # pub mod contract;\n# pub mod error;\n# pub mod msg;\n# pub mod state;\n# #[cfg_attr(not(feature = \"library\"), entry_point)]\npub fn instantiate( deps: DepsMut, env: Env, info: MessageInfo, msg: InstantiateMsg,\n) -> StdResult { contract::instantiate(deps, env, info, msg)\n} #[cfg_attr(not(feature = \"library\"), entry_point)]\npub fn execute( deps: DepsMut, env: Env, info: MessageInfo, msg: ExecuteMsg,\n) -> Result { contract::execute(deps, env, info, msg)\n} #[cfg_attr(not(feature = \"library\"), entry_point)]\npub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult { contract::query(deps, env, msg)\n} The cfg_attr attribute is a conditional compilation attribute, similar to the cfg we used before for the test. It expands to the given attribute if the condition expands to true. In our case - it would expand to nothing if the feature \"library\" is enabled, or it would expand just to #[entry_point] in another case. Since now to add this contract as a dependency, don't forget to enable the feature like this: [dependencies]\nmy_contract = { version = \"0.1\", features = [\"library\"] }","breadcrumbs":"Basics » Good practices » Disabling entry points for libraries","id":"34","title":"Disabling entry points for libraries"},"35":{"body":"Now you are ready to create smart contracts on your own. It is time to discuss an important limitation of CosmWasm smart contracts - floating-point numbers. The story is short: you cannot use floating-point types in smart contracts. Never. CosmWasm virtual machine on purpose does not implement floating-point Wasm instructions, even such basics as F32Load. The reasoning is simple: they are not safe to work with in the blockchain world. The biggest problem is that contract will compile, but uploading it to the blockchain would fail with an error message claiming there is a floating-point operation in the contract. A tool that verifies if the contract is valid (it does not contain any fp operations but also has all needed entry points and so on) is called cosmwasm-check utility . This limitation has two implications. First, you always have to use decimal of fixed-point arithmetic in your contracts. It is not a problem, considering that cosmwasm-std provides you with the Decimal and Decimal256 types. The other implication is tricky - you must be careful with the crates you use. In particular, one gotcha in the serde crate - deserialization of usize type is using floating-point operations. That means you can never use usize (or isize) types in your deserialized messages in the contract. Another thing that will not work with serde is untagged enums deserialization. The workaround is to create custom deserialization of such enums using serde-cw-value crate. It is a fork of serde-value crate which avoids generating floating-point instructions.","breadcrumbs":"Basics » Floating point types » Floating point types","id":"35","title":"Floating point types"},"36":{"body":"This section describes the fundaments of CosmWasm smart contracts architecture, which determines how do they communicate with each other. I want to go through this before teaching step by step how to create multiple contracts relating to each other, to give you a grasp of what to expect. Don't worry if it will not be clear after the first read - I suggest going through this chapter once now and maybe giving it another take in the future when you know the practical part of this. The whole thing described here is officially documented in the SEMANTICS.md , of the cosmwasm repository.","breadcrumbs":"The Actor Model » Actor model","id":"36","title":"Actor model"},"37":{"body":"The actor model is the solution to the problem of communication between smart contracts. Let's take a look at the reasons why this particular solution is chosen in CosmWasm, and what are the consequences of that.","breadcrumbs":"The Actor Model » The idea » Idea behind an Actor Model","id":"37","title":"Idea behind an Actor Model"},"38":{"body":"Smart contracts can be imagined as sandboxed microservices. Due to SOLID principles, it is valuable to split responsibilities between entities. However, to split the work between contracts themselves, there is a need to communicate between them, so if one contract is responsible for managing group membership, it is possible to call its functionality from another contract. The traditional way to solve this problem in SW engineering is to model services as functions that would be called with some RPC mechanism, and return its result as a response. Even though this approach looks nice, it creates sort of problems, in particular with shared state consistency. The other approach which is far more popular in business-level modeling is to treat entities as actors, which can perform some tasks, but without interrupting it with calls to other contracts. Any calls to other contracts can only be called after the whole execution is performed. When \"subcall\" is finished, it will call the original contract back. This solution may feel unnatural, and it requires different kinds of design solutions, but it turns out to work pretty well for smart contract execution. I will try to explain how to reason about it, and how it maps to contract structure step by step.","breadcrumbs":"The Actor Model » The idea » The problem","id":"38","title":"The problem"},"39":{"body":"The most important thing in the whole model is an Actor itself. So, what is this? The Actor is a single instantiation of a contract, which can perform several actions. When the actor finishes his job, he prepares a summary of it, which includes the list of things that have to be done, to complete the whole scheduled task. An example of an actor is the Seller in the KFC restaurant. The first thing you do is order your BSmart, so you are requesting action from him. So, from the system user, you can think about this task as \"sell and prepare my meal\", but the action performed by the seller is just \"Charge payment and create order\". The first part of this operation is to create a bill and charge you for it, and then it requests the Sandwich and Fries to be prepared by other actors, probably chefs. Then when the chef is done with his part of the meal, he checks if all meals are ready. If so, it calls the last actor, the waiter, to deliver the food to you. At this point, you can receive your delivery, and the task is considered complete. The above-described workflow is kind of simplified. In particular - in a typical restaurant, a waiter would observe the kitchen instead of being triggered by a chef, but in the Actor model, it is not possible. Here, entities of the system are passive and cannot observe the environment actively - they only react to messages from other system participants. Also in KFC, the seller would not schedule subtasks for particular chefs; instead, he would leave tasks to be taken by them, when they are free. It is not the case, because as before - chefs cannot actively listen to the environment. However, it would be possible to create a contract for being a chef's dispatcher which would collect all orders from sellers, and balance them across chefs for some reason.","breadcrumbs":"The Actor Model » The idea » The Actor","id":"39","title":"The Actor"},"4":{"body":"To work with CosmWasm smart contract, you will need rust installed on your machine. If you don't have one, you can find installation instructions on the Rust website . I assume you are working with a stable Rust channel in this book. Additionally, you will need the Wasm rust compiler backend installed to build Wasm binaries. To install it, run: rustup target add wasm32-unknown-unknown Optionally if you want to try out your contracts on a testnet, you will need a wasmd binary. We would focus on testing contracts with Rust unit testing utility throughout the book, so it is not required to follow. However, seeing the product working in a real-world environment may be nice. To install wasmd, first install the golang . Then clone the wasmd and install it: $ git clone git@github.com:CosmWasm/wasmd.git\n$ cd ./wasmd\n$ make install Also, to be able to upload Rust Wasm Contracts into the blockchain, you will need to install docker . To minimize your contract sizes, it will be required to run CosmWasm Rust Optimizer; without that, more complex contracts might exceed a size limit.","breadcrumbs":"Setting up the environment » Setting up the environment","id":"4","title":"Setting up the environment"},"40":{"body":"Actors are the model entities, but to properly communicate with them, we need some kind of protocol. Every actor is capable of performing several actions. In my previous KFC example, the only action seller can do is \"Charge payment and create order\". However, it is not always the case - our chefs were proficient at performing both \"Prepare fries\" and \"Prepare Sandwich\" actions - and also many more. So, when we want to do something in an actor system, we schedule some action to the actor being the closest to us, very often with some additional parameters (as we can pick if we want to exchange fries with salad). However, naming the action after the exact thing which happened in the very contract would be misleading. Take a look at the KFC example once again. As I mentioned, the action performed by a seller is \"Charge payment and create order\". The problem is, that for the client who schedules this action, it doesn't matter what exactly is the responsibility of the actor himself - what the client is scheduling is \"Prepare Meal\" with some description of what exactly to prepare. So, we can say, that the action is the thing performed by the contract itself, plus all the sub-actions it schedules.","breadcrumbs":"The Actor Model » The idea » The Action","id":"40","title":"The Action"},"41":{"body":"So as the whole idea makes some sense, there is the problem created by the actor model: what if I want to perform some action in my contract, but to completely finalize some steps, the contract has to make sure that some sub-action he scheduled are finished? Imagine that in the previous KFC situation, there is no dedicated Waiter. Instead the Seller was serving you a meal when the Chefs finished their job. This kind of pattern is so important and common that in CosmWasm, we developed a special way to handle it, which is dedicated Reply action. So when Seller is scheduling actions for chefs, he assigns some number to this action (like order id) and passes it to chefs. He also remembers how many actions he scheduled for every order id. Now every time chef is finished with his action; he would call the special Reply action on Seller, in which he would pass back the order id. Then, Seller would decrease the number of actions left for this order, and if it reached zero, he would serve a meal. Now you can say, that the Reply action is completely not needed, as Chefs could just schedule any arbitrary action on Seller, like Serve, why is there the special Reply for? The reason is abstraction and reusability. The Chefs task is to prepare a meal, and that is all. There is no reason for him to know why he is even preparing Fries - if it is part of the bigger task (like order for a client), or the seller is just hungry. It is possible that not only the seller is eligible to call the chef for food - possibly any restaurant employee can do that just for themselves. Therefore, we need a way to be able to react to an actor finishing his job in some universal way, to handle this situation properly in any context. It is worth noting that the Reply can contain some additional data. The id assigned previously is the only required information in the Reply call, but the actor can pass some additional data - events emitted, which are mostly metadata (to be observed by non-blockchain applications mostly), and any arbitrary data it wants to pass.","breadcrumbs":"The Actor Model » The idea » Multi-stage Actions","id":"41","title":"Multi-stage Actions"},"42":{"body":"Up until this point, we were considering actors as entities performing some job, like preparing the meal. If we are considering computer programs, such a job would be to show something on the screen, maybe print something. This is not the case with Smart Contracts. The only thing which can be affected by the Smart Contract is their internal state. So, the state is arbitrary data that is kept by the contract. Previously in the KFC example I mentioned, the Seller is keeping in mind how many actions he scheduled for chefs are not yet finished - this number is part of the Seller's state. To give a more realistic example of a contract state, let's think about a more real-life Smart Contract than the restaurant. Let's imagine we want to create our currency - maybe we want to create some smart contracts-based market for some MMORPG game. So, we need some way to be able to at least transfer currency between players. We can do that, by creating the contract we would call MmoCurrency, which would support the Transfer action to transfer money to another player. Then what would be the state of such a contract? It would be just a table mapping player names to the amount of currency they own. The contract we just invited exists in CosmWasm examples, and it is called the cw20-base contract (it is a bit more complicated, but it is its core idea). And now there is a question - how is this helpful to transfer currency if I cannot check how much of it do I own? It is a very good question, and the answer to that is simple - the whole state of every contract in our system is public. It is not universal for every Actor model, but it is how it works in CosmWasm, and it is kind of forced by the nature of blockchain. Everything happening in blockchain has to be public, and if some information should be hidden, it has to be stored indirectly. There is one very important thing about the state in CosmWasm, and it is the state being transactional. Any updates to the state are not applied immediately, but only when the whole action succeeds. It is very important, as it guarantees that if something goes wrong in the contract, it is always left in some proper state. Let's consider our MmoCurrency case. Imagine, that in the Transfer action we first increase the receiver currency amount (by updating the state), and only then do we decrease the sender amount. However, before decreasing it, we need to check if a sender possesses enough funds to perform the transaction. In case we realize that we cannot do it, we don't need to do any rolling back by hand - we would just return a failure from the action execution, and the state would not be updated. So, when in the contract state is updated, it is just a local copy of this state being altered, but the partial changes would never be visible by other contracts.","breadcrumbs":"The Actor Model » The idea » State","id":"42","title":"State"},"43":{"body":"There is one building block in the CosmWasm approach to the Actor model, which I haven't yet cover. As I said, the whole state of every contract is public and available for everyone to look at. The problem is that this way of looking at state is not very convenient - it requires users of contracts to know its internal structure, which kind of violates the SOLID rules (Liskov substitution principle in particular). If, for example a contract is updated and its state structure changes a bit, another contract looking at its state would just nevermore work. Also, it is often the case, that the contract state is kind of simplified, and information that is relevant to the observer would be calculated from the state. This is where queries come into play. Queries are the type of messages to contract, which does not perform any actions, so do not update any state, but can return an answer immediately. In our KFC comparison, the query would be if Seller goes to Chef to ask \"Do we still have pickles available for our cheeseburgers\"? It can be done while operating, and response can be used in it. It is possible because queries can never update their state, so they do not need to be handled in a transactional manner. However, the existence of queries doesn't mean that we cannot look at the contract's state directly - the state is still public, and the technique of looking at them directly is called Raw Queries. For clarity, non-raw queries are sometimes denoted as Smart Queries.","breadcrumbs":"The Actor Model » The idea » Queries","id":"43","title":"Queries"},"44":{"body":"So, we touched on many things here, and I know it may be kind of confusing. Because of that, I would like to go through some more complicated calls to the CosmWasm contract to visualize what the \"transactional state\" means. Let's imagine two contracts: The MmoCurrency contract mentioned before, which can perform the Transfer action, allows transferring some amount of currency to some receiver. The WarriorNpc contract, which would have some amount of our currency, and he would be used by our MMO engine to pay the reward out for some quest player could perform. It would be triggered by Payout action, which can be called only by a specific client (which would be our game engine). Now here is an interesting thing - this model forces us to make our MMO more realistic in terms of the economy that we traditionally see - it is because WarriorNpc has some amount of currency, and cannot create more out of anything. It is not always the case (the previously mentioned cw20 has a notion of Minting for this case), but for the sake of simplicity let's assume this is what we want. To make the quest reasonable for longer, we would make a reward for it to be always between 1 mmo and 100 mmo, but it would be ideally 15% of what Warrior owns. This means that the quest reward decreases for every subsequent player, until Warrior would be broke, left with nothing, and will no longer be able to payout players. So, what would the flow look like? The first game would send a Payout message to the WarriorNpc contract, with info on who should get the reward. Warrior would keep track of players who fulfilled the quest, to not pay out the same person twice - there would be a list of players in his state. First, he would check the list looking for players to pay out - if he is there, he will finish the transaction with an error. However, in most cases the player would not be on the list - so then WarriorNpc would add him to the list. Now the Warrior would finish his part of the task, and schedule the Transfer action to be performed by MmoCurrency. But there is the important thing - because Transfer action is actually part of the bigger Payout flow, it would not be executed on the original blockchain state, but on the local copy of it, to which the player's list is already applied to. So if the MmoCurrency would for any reason takes a look at WarriorNpc internal list, it would be already updated. Now MmoCurrency is doing its job, updating the state of Warrior and player balance (note, that our Warrior is here just treated as another player!). When it finishes, two things may happen: There was an error - possibly Warrior is out of cash, and it can nevermore pay for the task. In such case, none of the changes - neither updating the list of players succeeding, nor balance changes are not applied to the original blockchain storage, so they are like they never happened. In the database world, it is denoted as rolling back the transaction. Operation succeed - all changes on the state are now applied to the blockchain, and any further observation of MmoCurrency or WarriorNpc by the external world would see updated data. There is one problem - in this model, our list is not a list of players who fulfilled the quest (as we wanted it to be), but the list of players who paid out (as in transfer failure, the list is not updated). We can do better.","breadcrumbs":"The Actor Model » The idea » Wrapping everything together - transactional call flow","id":"44","title":"Wrapping everything together - transactional call flow"},"45":{"body":"Note that we didn't mention a Reply operation at all. So why was it not called by MmoCurrency on WarriorNpc? The reason is that this operation is optional. When scheduling sub-actions on another contract we may choose when Reply how the result should be handled: Never call Reply, action fails if sub-message fails Call Reply on success Call Reply on failure Always call Reply So, if we do not request Reply to be called by subsequent contract, it will not happen. In such a case if a sub-call fails, the whole transaction is rolled back - sub-message failure transitively causes the original message failure. It is probably a bit complicated for now, but I promise it would be simple if you would did some practice with that. When handling the reply, it is important to remember, that although changes are not yet applied to the blockchain (the transaction still can be failed), the reply handler is already working on the copy of the state with all changes made by sub-message so far applied. In most cases, it would be a good thing, but it has a tricky consequence - if the contract is calling itself recursively, it is possible that subsequent call overwrote things set up in the original message. It rarely happens, but may need special treatment in some cases - for now I don't want to go deeply into details, but I want you to remember about what to expect after state in the actor's flow. Now let's take a look at handling results with 2-4 options. It is actually interesting, that using 2, even if the transaction is performed by sub-call succeed, we may now take a look at the data it returned with Reply, and on its final state after it finished, and we can still decide, that act as a whole is a failure, in which case everything would be rolled back - even currency transfer performed by external contract. In our case, an interesting option is 3. So, if the contract would call Reply on failure, we can decide to claim success, and commit a transaction on the state if the sub call failed. Why may it be relevant for us? Possibly because our internal list was supposed to keep the list of players succeeding with the quest, not paid out! So, if we have no more currency, we still want to update the list! The most common way to use the replies (option 2 in particular) is to instantiate another contract, managed by the one called. The idea is that in those use cases, the creator contract wants to keep the address of the created contract in its state. To do so it has to create an Instantiate sub-message, and subscribe for its success response, which contains the address of the freshly created contract. In the end, you can see that performing actions in CosmWasm is built with hierarchical state change transactions. The sub-transaction can be applied to the blockchain only if everything succeeds, but in case that sub-transaction failed, only its part may be rolled back, end other changes may be applied. It is very similar to how most database systems work.","breadcrumbs":"The Actor Model » The idea » Different ways of handling responses","id":"45","title":"Different ways of handling responses"},"46":{"body":"Now you have seen the power of the actor model to avoid reentrancy, properly handle errors, and safely sandbox contracts. This helps us provide the solid security guarantees of the CosmWasm platform. Let’s get started playing around with real contracts in the wasmd blockchain.","breadcrumbs":"The Actor Model » The idea » Conclusion","id":"46","title":"Conclusion"},"47":{"body":"Previously we were talking about actors mostly in the abstraction of any blockchain-specific terms. However, before we would dive into the code, we need to establish some common language, and to do so we would look at contracts from the perspective of external users, instead of their implementation. In this part, I would use the wasmd binary to communicate with the malaga testnet. To properly set it up, check the Quick start with wasmd .","breadcrumbs":"The Actor Model » Actors in the blockchain » Actors in blockchain","id":"47","title":"Actors in blockchain"},"48":{"body":"It is kind of starting from the end, but I would start with the state part of the actor model. Relating to traditional systems, there is one particular thing I like to compare blockchain with - it is a database. Going back to the previous section we learned that the most important part of a contract is its state. Manipulating the state is the only way to persistently manifest work performed to the world. But What is the thing which purpose is to keep the state? It is a database! So here is my (as a contract developer) point of view on contracts: it is a distributed database, with some magical mechanisms to make it democratic. Those \"magical mechanisms\" are crucial for BC's existence and they make they are reasons why even use blockchain, but they are not relevant from the contract creator's point of view - for us, everything that matters is the state. But you can say: what about the financial part?! Isn't blockchain (wasmd in particular) the currency implementation? With all of those gas costs, sending funds seems very much like a money transfer, not database updates. And yes, you are kind of right, but I have a solution for that too. Just imagine, that for every native token (by \"native tokens\" we meant tokens handled directly by blockchain, in contradiction to for example cw20 tokens) there is a special database bucket (or table if you prefer) with mapping of address to how much of a token the address possesses. You can query this table (querying for token balance), but you cannot modify it directly. To modify it you just send a message to a special build-in bank contract. And everything is still a database. But if blockchain is a database, then where are smart contracts stored? Obviously - in the database itself! So now imagine another special table - this one would contain a single table of code-ids mapped to blobs of wasm binaries. And again - to operate on this table, you use \"special contract\" which is not accessible from another contract, but you can use it via wasmd binary. Now there is a question - why do I even care about BC being a DB? So the reason is that it makes reasoning about everything in blockchain very natural. Do you remember that every message in the actor model is transactional? It perfectly matches traditional database transactions (meaning: every message starts a new transaction)! Also, when we later talk about migrations, it would turn out, that migrations in CosmWasm are very much equivalents of schema migrations in traditional databases. So, the thing to remember - blockchain is very similar to a database, having some specially reserved tables (like native tokens, code repository), with a special bucket created for every contract. A contract can look at every table in every bucket in the whole blockchain, but it can modify the only one he created.","breadcrumbs":"The Actor Model » Actors in the blockchain » Blockchain as a database","id":"48","title":"Blockchain as a database"},"49":{"body":"I will not go into the code for now, but to start with something we need compiled contract binary. The cw4-group contract from cw-plus is simple enough to work with, for now, so we will start with compiling it. Start with cloning the repository: $ git clone git@github.com:CosmWasm/cw-plus.git Then go to cw4-group contract and build it: $ cd cw-plus/contracts/cw4-group\n$ docker run --rm -v \"$(pwd)\":/code \\ --mount type=volume,source=\"$(basename \"$(pwd)\")_cache\",target=/code/target \\ --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \\ cosmwasm/workspace-optimizer:0.12.6 Your final binary should be located in the cw-plus/artifacts folder (cw-plus being where you cloned your repository).","breadcrumbs":"The Actor Model » Actors in the blockchain » Compile the contract","id":"49","title":"Compile the contract"},"5":{"body":"An additional helpful tool for building smart contracts is the cosmwasm-check utility . It allows you to check if the wasm binary is a proper smart contract ready to upload into the blockchain. You can install it using cargo: $ cargo install cosmwasm-check If the installation succeeds, you should be able to execute the utility from your command line. $ cosmwasm-check --version\nContract checking 1.2.3","breadcrumbs":"Setting up the environment » cosmwasm-check utility","id":"5","title":"cosmwasm-check utility"},"50":{"body":"When the contract binary is built, the first interaction with CosmWasm is uploading it to the blockchain (assuming you have your wasm binary in the working directory): $ wasmd tx wasm store ./cw4-group.wasm --from wallet $TXFLAG -y -b block As a result of such an operation you would get json output like this: ..\nlogs:\n..\n- events: .. - attributes: - key: code_id value: \"1069\" type: store_code I ignored most of not fields as they are not relevant for now - what we care about is the event emitted by blockchain with information about code_id of stored contract - in my case the contract code was stored in blockchain under the id of 1069. I can now look at the code by querying for it: $ wasmd query wasm code 1069 code.wasm And now the important thing - the contract code is not an actor. So, what is a contract code? I think that the easiest way to think about that is a class or a type in programming. It defines some stuff about what can be done, but the class itself is in most cases not very useful unless we create an instance of a type, on which we can call class methods. So now let's move forward to instances of such contract classes.","breadcrumbs":"The Actor Model » Actors in the blockchain » Contract code","id":"50","title":"Contract code"},"51":{"body":"Now we have a contract code, but what we want is an actual contract itself. To create it, we need to instantiate it. Relating to analogy to programming, instantiation is calling a constructor. To do that, I would send an instantiate message to my contract: $ wasmd tx wasm instantiate 1069 '{\"members\": []}' --from wallet --label \"Group 1\" --no-admin $TXFLAG -y What I do here is create a new contract and immediately call the Instantiate message on it. The structure of such a message is different for every contract code. In particular, the cw4-group Instantiate message contains two fields: members field which is the list of initial group members optional admin field which defines an address of who can add or remove a group member In this case, I created an empty group with no admin - so which could never change! It may seem like a not very useful contract, but it serves us as a contract example. As the result of instantiating, I got the result: ..\nlogs:\n..\n- events: .. - attributes: - key: _contract_address value: wasm1u0grxl65reu6spujnf20ngcpz3jvjfsp5rs7lkavud3rhppnyhmqqnkcx6 - key: code_id value: \"1069\" type: instantiate As you can see, we again look at logs[].events[] field, looking for interesting event and extracting information from it - it is the common case. I will talk about events and their attributes in the future but in general, it is a way to notify the world that something happened. Do you remember the KFC example? If a waiter is serving our dish, he would put a tray on the bar, and she would yell (or put on the screen) the order number - this would be announcing an event, so you know some summary of operation, so you can go and do something useful with it. So, what use can we do with the contract? We obviously can call it! But first I want to tell you about addresses.","breadcrumbs":"The Actor Model » Actors in the blockchain » Contract instance","id":"51","title":"Contract instance"},"52":{"body":"Address in CosmWasm is a way to refer to entities in the blockchain. There are two types of addresses: contract addresses, and non-contracts. The difference is that you can send messages to contract addresses, as there is some smart contract code associated with them, and non-contracts are just users of the system. In an actor model, contract addresses represent actors, and non-contracts represent clients of the system. When operating with blockchain using wasmd, you also have an address - you got one when you added the key to wasmd: # add wallets for testing\n$ wasmd keys add wallet3\n- name: wallet3 type: local address: wasm1dk6sq0786m6ayg9kd0ylgugykxe0n6h0ts7d8t pubkey: '{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"Ap5zuScYVRr5Clz7QLzu0CJNTg07+7GdAAh3uwgdig2X\"}' mnemonic: \"\" You can always check your address: $ wasmd keys show wallet\n- name: wallet type: local address: wasm1um59mldkdj8ayl5gknp9pnrdlw33v40sh5l4nx pubkey: '{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"A5bBdhYS/4qouAfLUH9h9+ndRJKvK0co31w4lS4p5cTE\"}' mnemonic: \"\" Having an address is very important because it is a requirement for being able to call anything. When we send a message to a contract it always knows the address which sends this message so it can identify it - not to mention that this sender is an address that would play a gas cost.","breadcrumbs":"The Actor Model » Actors in the blockchain » Addresses in CosmWasm","id":"52","title":"Addresses in CosmWasm"},"53":{"body":"So, we have our contract, let's try to do something with it - query would be the easiest thing to do. Let's do it: $ wasmd query wasm contract-state smart wasm1u0grxl65reu6spujnf20ngcpz3jvjfsp5rs7lkavud3rhppnyhmqqnkcx6 '{ \"list_members\": {} }'\ndata: members: [] The wasm... string is the contract address, and you have to substitute it with your contract address. { \"list_members\": {} } is query message we send to contract. Typically, CW smart contract queries are in the form of a single JSON object, with one field: the query name (list_members in our case). The value of this field is another object, being query parameters - if there are any. list_members query handles two parameters: limit, and start_after, which are both optional and which support result pagination. However, in our case of an empty group they don't matter. The query result we got is in human-readable text form (if we want to get the JSON from - for example, to process it further with jq, just pass the -o json flag). As you can see response contains one field: members which is an empty array. So, can we do anything more with this contract? Not much. But let's try to do something with a new one!","breadcrumbs":"The Actor Model » Actors in the blockchain » Querying the contract","id":"53","title":"Querying the contract"},"54":{"body":"The problem with our previous contract is that for the cw4-group contract, the only one who can perform executions on it is an admin, but our contract doesn't have one. This is not true for every smart contract, but it is the nature of this one. So, let's make a new group contract, but this time we would make ourselves an admin. First, check our wallet address: $ wasmd keys show wallet And instantiate a new group contract - this time with proper admin: $ wasmd tx wasm instantiate 1069 '{\"members\": [], \"admin\": \"wasm1um59mldkdj8ayl5gknp9pnrdlw33v40sh5l4nx\"}' --from wallet --label \"Group 1\" --no-admin $TXFLAG -y\n..\nlogs:\n- events: .. - attributes: - key: _contract_address value: wasm1n5x8hmstlzdzy5jxd70273tuptr4zsclrwx0nsqv7qns5gm4vraqeam24u - key: code_id value: \"1069\" type: instantiate You may ask, why do we pass some kind of --no-admin flag, if we just said, we want to set an admin to the contract? The answer is sad and confusing, but... it is a different admin. The admin we want to set is one checked by the contract itself and managed by him. The admin which is declined with --no-admin flag, is a wasmd-level admin, which can migrate the contract. You don't need to worry about the second one at least until you learn about contract migrations - until then you can always pass the --no-admin flag to the contract. Now let's query our new contract for the member's list: $ wasmd query wasm contract-state smart wasm1n5x8hmstlzdzy5jxd70273tuptr4zsclrwx0nsqv7qns5gm4vraqeam24u '{ \"list_members\": {} }'\ndata: members: [] Just like before - no members initially. Now check an admin: $ wasmd query wasm contract-state smart wasm1n5x8hmstlzdzy5jxd70273tuptr4zsclrwx0nsqv7qns5gm4vraqeam24u '{ \"admin\": {} }'\ndata: admin: wasm1um59mldkdj8ayl5gknp9pnrdlw33v40sh5l4nx So, there is an admin, it seems like the one we wanted to have there. So now we would add someone to the group - maybe ourselves? wasmd tx wasm execute wasm1n5x8hmstlzdzy5jxd70273tuptr4zsclrwx0nsqv7qns5gm4vraqeam24u '{ \"update_members\": { \"add\": [{ \"addr\": \"wasm1um59mldkdj8ayl5gkn\np9pnrdlw33v40sh5l4nx\", \"weight\": 1 }], \"remove\": [] } }' --from wallet $TXFLAG -y The message for modifying the members is update_members and it has two fields: members to remove, and members to add. Members to remove are just addresses. Members to add have a bit more complex structure: they are records with two fields: address and weight. Weight is not relevant for us now, it is just metadata stored with every group member - for us, it would always be 1. Let's query the contract again to check if our message changed anything: $ wasmd query wasm contract-state smart wasm1n5x8hmstlzdzy5jxd70273tuptr4zsclrwx0nsqv7qns5gm4vraqeam24u '{ \"list_members\": {} }'\ndata: members: - addr: wasm1um59mldkdj8ayl5gknp9pnrdlw33v40sh5l4nx weight: 1 As you can see, the contract updated its state. This is basically how it works - sending messages to contracts causes them to update the state, and the state can be queried at any time. For now, to keep things simple we were just interacting with the contract directly by wasmd, but as described before - contracts can communicate with each other. However, to investigate this we need to understand how to write contracts. Next time we will look at the contract structure and we will map it part by part to what we have learned until now.","breadcrumbs":"The Actor Model » Actors in the blockchain » Executions to perform some actions","id":"54","title":"Executions to perform some actions"},"55":{"body":"In previous chapters, we talked about the actor model and how it is implemented in the blockchain. Now it is time to look closer into the typical contract structure to understand how different features of the actor model are mapped to it. This will not be a step-by-step guide on contract creation, as it is a topic for the series itself. It would be going through contract elements roughly to visualize how to handle architecture in the actor model.","breadcrumbs":"The Actor Model » Contract as an actor » Smart contract as an actor","id":"55","title":"Smart contract as an actor"},"56":{"body":"As before we would start with the state. Previously we were working with the cw4-group contract, so let's start by looking at its code. Go to cw-plus/contracts/cw4-group/src. The folder structure should look like this:  src\n├──  contract.rs\n├──  error.rs\n├──  helpers.rs\n├──  lib.rs\n├──  msg.rs\n└──  state.rs As you may already figure out, we want to check the state.rs first. The most important thing here is a couple of constants: ADMIN, HOOKS, TOTAL, and MEMBERS. Every one of such constants represents a single portion of the contract state - as tables in databases. The types of those constants represent what kind of table this is. The most basic ones are Item, which keeps zero or one element of a given type, and Map which is a key-value map. You can see Item is used to keep an admin and some other data: HOOKS, and TOTAL. HOOKS is used by the cw4-group to allow subscription to any changes to a group - a contract can be added as a hook, so when the group changes, a message is sent to it. The TOTAL is just a sum of all members' weights. The MEMBERS in the group contract is the SnapshotMap - as you can imagine, it is a Map, with some steroids - this particular one, gives us access to the state of the map at some point in history, accessing it by the blockchain height. height is the count of blocks created since the beggining of blockchain, and it is the most atomic time representation in smart contracts. There is a way to access the clock time in them, but everything happening in a single block is considered happening in the same moment. Other types of storage objects not used in group contracts are: IndexedMap - another map type, that allows accessing values by a variety of keys IndexedSnapshotMap - IndexedMap and SnapshotMap married What is very important - every state type in the contract is accessed using some name. All of those types are not containers, just accessors to the state. Do you remember that I told you before that blockchain is our database? And that is correct! All those types are just ORM to this database - when we use them to get actual data from it, we pass a special State object to them, so they can retrieve items from it. You may ask - why all that data for a contract are not auto-fetched by whatever is running it. That is a good question. The reason is that we want contracts to be lazy with fetching. Copying data is a very expensive operation, and for everything happening on it, someone has to pay - it is realized by gas cost. I told you before, that as a contract developer you don't need to worry about gas at all, but it was only partially true. You don't need to know exactly how gas is calculated, but by lowering your gas cost, you would may execution of your contracts cheaper which is typically a good thing. One good practice to achieve that is to avoid fetching data you will not use in a particular call.","breadcrumbs":"The Actor Model » Contract as an actor » The state","id":"56","title":"The state"},"57":{"body":"In a blockchain, contracts communicate with each other by some JSON messages. They are defined in most contracts in the msg.rs file. Take a look at it. There are three types on it, let's go through them one by one. The first one is an InstantiateMsg. This is the one, that is sent on contract instantiation. It typically contains some data which is needed to properly initialize it. In most cases, it is just a simple structure. Then there are two enums: ExecuteMsg, and QueryMsg. They are enums because every single variant of them represents a different message which can be sent. For example, the ExecuteMsg::UpdateAdmin corresponds to the update_admin message we were sending previously. Note, that all the messages are attributed with #[derive(Serialize, Deserialize)], and #[serde(rename_all=\"snake_case\")]. Those attributes come from the serde crate, and they help us with deserialization of them (and serialization in case of sending them to other contracts). The second one is not required, but it allows us to keep a camel-case style in our Rust code, and yet still have JSONs encoded with a snake-case style more typical to this format. I encourage you to take a closer look at the serde documentation, like everything there, can be used with the messages. One important thing to notice - empty variants of those enums, tend to use the empty brackets, like Admin {} instead of more Rusty Admin. It is on purpose, to make JSONs cleaner, and it is related to how serde serializes enum. Also worth noting is that those message types are not set in stone, they can be anything. This is just a convention, but sometimes you would see things like ExecuteCw4Msg, or similar. Just keep in mind, to keep your message name obvious in terms of their purpose - sticking to ExecuteMsg/QueryMsg is generally a good idea.","breadcrumbs":"The Actor Model » Contract as an actor » Messages","id":"57","title":"Messages"},"58":{"body":"So now, when we have our contract message, we need a way to handle them. They are sent to our contract via entry points. There are three entry points in the cw4-group contract: #[cfg_attr(not(feature = \"library\"), entry_point)]\npub fn instantiate( deps: DepsMut, env: Env, _info: MessageInfo, msg: InstantiateMsg,\n) -> Result { // ...\n}\n#[cfg_attr(not(feature = \"library\"), entry_point)]\npub fn execute( deps: DepsMut, env: Env, info: MessageInfo, msg: ExecuteMsg,\n) -> Result { // ..\n}\n#[cfg_attr(not(feature = \"library\"), entry_point)]\npub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { // ..\n} Those functions are called by the CosmWasm virtual machine when a message is to be handled by contract. You can think about them as the main function of normal programs, except they have a signature that better describes the blockchain itself. What is very important is that the names of those entry points (similarly to the main function) are fixed - it is relevant, so the virtual machine knows exactly what to call. So, let's start with the first line. Every entry point is attributed with #[cfg_attr(not(feature = \"library\"), entry_point)]. It may look a bit scary, but it is just a conditional equivalent of #[entry_point] - the attribute would be there if and only if the \"library\" feature is not set. We do this to be able to use our contracts as dependencies for other contracts - the final binary can contain only one copy of each entry point, so we make sure, that only the top-level one is compiled without this feature. The entry_point attribute is a macro that generates some boilerplate. As the binary is run by WASM virtual machine, it doesn't know much about Rust types - the actual entry point signatures are very inconvenient to use. To overcome this issue, there is a macro created, which generates entry points for us, and those entry points are just calling our functions. Now take a look at functions arguments. Every single entry point takes as the last argument a message which triggered the execution of it (except for reply - I will explain it later). In addition to that, there are additional arguments provided by blockchain: Deps or DepsMut object is the gateway to the world outside the smart contract context. It allows accessing the contract state, as well as querying other contracts, and also delivers an Api object with a couple of useful utility functions. The difference is that DepsMut allows updating state, while Deps allows only to look at it. Env object delivers information about the blockchain state at the moment of execution - its height, the timestamp of execution and information about the executing contract itself. MessageInfo object is information about the contract call - it contains the address which sends the message, and the funds sent with the message. Keep in mind, that the signatures of those functions are fixed (except the messages type), so you cannot interchange Deps with DepsMut to update the contract state in the query call. The last portion of entry points is the return type. Every entry point returns a Result type, with any error which can be turned into a string - in case of contract failure, the returned error is just logged. In most cases, the error type is defined for a contract itself, typically using a thiserror crate. Thiserror is not required here, but is strongly recommended - using it makes the error definition very straightforward, and also improves the testability of the contract. The important thing is the Ok part of Result. Let's start with the query because this one is the simplest. The query always returns the Binary object on the Ok case, which would contain just serialized response. The common way to create it is just calling a to_binary method on an object implementing serde::Serialize, and they are typically defined in msg.rs next to message types. Slightly more complex is the return type returned by any other entry point - the cosmwasm_std::Response type. This one keep everything needed to complete contract execution. There are three chunks of information in that. The first one is an events field. It contains all events, which would be emitted to the blockchain as a result of the execution. Events have a really simple structure: they have a type, which is just a string, and a list of attributes which are just string-string key-value pairs. You can notice that there is another attributes field on the Response. This is just for convenience - most executions would return only a single event, and to make it a bit easier to operate one, there is a set of attributes directly on response. All of them would be converted to a single wasm event which would be emitted. Because of that, I consider events and attributes to be the same chunk of data. Then we have the messages field, of SubMsg type. This one is the clue of cross-contact communication. Those messages would be sent to the contracts after processing. What is important - the whole execution is not finished, unless the processing of all sub-messages scheduled by the contract finishes. So, if the group contract sends some messages as a result of update_members execution, the execution would be considered done only if all the messages sent by it would also be handled (even if they failed). So, when all the sub-messages sent by contract are processed, then all the attributes generated by all sub-calls and top-level calls are collected and reported to the blockchain. But there is one additional piece of information - the data. So, this is another Binary field, just like the result of a query call, and just like it, it typically contains serialized JSON. Every contract call can return some additional information in any format. You may ask - in this case, why do we even bother returning attributes? It is because of a completely different way of emitting events and data. Any attributes emitted by the contract would be visible on blockchain eventually (unless the whole message handling fails). So, if your contract emitted some event as a result of being sub-call of some bigger use case, the event would always be there visible to everyone. This is not true for data. Every contract call would return only a single data chunk, and it has to decide if it would just forward the data field of one of the sub-calls, or maybe it would construct something by itself. I would explain it in a bit more detail in a while.","breadcrumbs":"The Actor Model » Contract as an actor » Entry points","id":"58","title":"Entry points"},"59":{"body":"I don't want to go into details of the Response API, as it can be read directly from documentation, but I want to take a bit closer look at the part about sending messages. The first function to use here is add_message, which takes as an argument the CosmosMsg (or rather anything convertible to it). A message added to response this way would be sent and processed, and its execution would not affect the result of the contract at all. The other function to use is add_submessage, taking a SubMsg argument. It doesn't differ much from add_message - SubMsg just wraps the CosmosMsg, adding some info to it: the id field, and reply_on. There is also a gas_limit thing, but it is not so important - it just causes sub-message processing to fail early if the gas threshold is reached. The simple thing is reply_on - it describes if the reply message should be sent on processing success, on failure, or both. The id field is an equivalent of the order id in our KFC example from the very beginning. If you send multiple different sub-messages, it would be impossible to distinguish them without that field. It would not even be possible to figure out what type of original message reply handling is! This is why the id field is there - sending a sub-message you can set it to any value, and then on the reply, you can figure out what is happening based on this field. An important note here - you don't need to worry about some sophisticated way of generating ids. Remember, that the whole processing is atomic, and only one execution can be in progress at once. In most cases, your contract sends a fixed number of sub-messages on very concrete executions. Because of that, you can hardcode most of those ids while sending (preferably using some constant). To easily create submessages, instead of setting all the fields separately, you would typically use helper constructors: SubMsg::reply_on_success, SubMsg::reply_on_error and SubMsg::reply_always.","breadcrumbs":"The Actor Model » Contract as an actor » Sending submessages","id":"59","title":"Sending submessages"},"6":{"body":"To guarantee you are ready to build your smart contracts, you need to make sure you can build examples. Checkout the cw-plus repository and run the testing command in its folder: $ git clone git@github.com:CosmWasm/cw-plus.git\n$ cd ./cw-plus\ncw-plus $ cargo test You should see that everything in the repository gets compiled, and all tests pass. cw-plus is a great place to find example contracts - look for them in contracts directory. The repository is maintained by CosmWasm creators, so contracts in there should follow good practices. To verify the cosmwasm-check utility, first, you need to build a smart contract. Go to some contract directory, for example, contracts/cw1-whitelist, and call cargo wasm: cw-plus $ cd contracts/cw1-whitelist\ncw-plus/contracts/cw1-whitelist $ cargo wasm You should be able to find your output binary in the target/wasm32-unknown-unknown/release/ of the root repo directory - not in the contract directory itself! Now you can check if contract validation passes: cw-plus/contracts/cw1-whitelist $ cosmwasm-check ../../target/wasm32-unknown-unknown/release/cw1_whitelist.wasm\nAvailable capabilities: {\"iterator\", \"cosmwasm_1_1\", \"cosmwasm_1_2\", \"stargate\", \"staking\"} ../../target/wasm32-unknown-unknown/release/cw1_whitelist.wasm: pass All contracts (1) passed checks!","breadcrumbs":"Setting up the environment » Verifying the installation","id":"6","title":"Verifying the installation"},"60":{"body":"If you took a look at the CosmosMsg type, you could be very surprised - there are so many variants of them, and it is not obvious how they relate to communication with other contracts. The message you are looking for is the WasmMsg (CosmosMsg::Wasm variant). This one is very much similar to what we already know - it has a couple of variants of operation to be performed by contracts: Execute, but also Instantiate (so we can create new contracts in contract executions), and also Migrate, UpdateAdmin, and ClearAdmin - those are used to manage migrations (will tell a bit about them at the end of this chapter). Another interesting message is the BankMsg (CosmosMsg::Bank). This one allows a contract to transfer native tokens to other contracts (or burn them - equivalent to transferring them to some black whole contract). I like to think about it as sending a message to a very special contract responsible for handling native tokens - this is not a true contract, as it is handled by the blockchain itself, but at least to me it simplifies things. Other variants of CosmosMsg are not very interesting for now. The Custom one is there to allow other CosmWasm-based blockchains to add some blockchain-handled variant of the message. This is a reason why most message-related types in CosmWasm are generic over some T - this is just a blockchain-specific type of message. We will never use it in the wasmd. All other messages are related to advanced CosmWasm features, and I will not describe them here.","breadcrumbs":"The Actor Model » Contract as an actor » CosmosMsg","id":"60","title":"CosmosMsg"},"61":{"body":"So now that we know how to send a submessage, it is time to talk about handling the reply. When sub-message processing is finished, and it is requested to reply, the contract is called with an entry point: #[cfg_attr(not(feature = \"library\"), entry_point)]\npub fn reply(deps: DepsMut, env: Env, msg: Reply) -> Result { // ...\n} The DepsMut, and Env arguments are already familiar, but there is a new one, substituting the typical message argument: the cosmwasm_std::Reply. This is a type representing the execution status of the sub-message. It is slightly processed cosmwasm_std::Response. The first important thing it contains is an id - the same, which you set sending sub-message, so now you can identify your response. The other one is the ContractResult, which is very similar to the Rust Result type, except it is there for serialization purposes. You can easily convert it into a Result with an into_result function. In the error case of ContracResult, there is a string - as I mentioned before, errors are converted to strings right after execution. The Ok case contains SubMsgExecutionResponse with two fields: events emitted by sub-call, and the data field embedded on response. As said before, you never need to worry about forwarding events - CosmWasm would do it anyway. The data however, is another story. As mentioned before, every call would return only a single data object. In the case of sending sub-messages and not capturing a reply, it would always be whatever is returned by the top-level message. But it is not the case when reply is called. If a a reply is called, then it is a function deciding about the final data. It can decide to either forward the data from the sub-message (by returning None) or to overwrite it. It cannot choose, to return data from the original execution processing - if the contract sends sub-messages waiting for replies, it is supposed to not return any data, unless replies are called. But what happens if multiple sub-messages are sent? What would the final data contain? The rule is - the last non-None. All sub-messages are always called in the order of adding them to the Response. As the order is deterministic and well defined, it is always easy to predict which reply would be used.","breadcrumbs":"The Actor Model » Contract as an actor » Reply handling","id":"61","title":"Reply handling"},"62":{"body":"I mentioned migrations earlier when describing the WasmMsg. So, migration is another action possible to be performed by contracts, which is kind of similar to instantiate. In software engineering, it is a common thing to release an updated version of applications. It is also a case in the blockchain - SmartContract can be updated with some new features. In such cases, a new code is uploaded, and the contract is migrated - so it knows that from this point, its messages are handled by another, updated contract code. However, it may be that the contract state used by the older version of the contract differs from the new one. It is not a problem if some info was added (for example some additional map - it would be just empty right after migration). But the problem is, when the state changes, for example, the field is renamed. In such a case, every contract execution would fail because of (de)serialization problems. Or even more subtle cases, like adding a map, but one which should be synchronized with the whole contract state, not empty. This is the purpose of the migration entry point. It looks like this: #[cfg_attr(not(feature = \"library\"), entry_point)]\npub fn migrate(deps: DepsMut, env: Env, msg: MigrateMsg) -> Result, ContracError> { // ..\n} MigrateMsg is the type defined by the contract in msg.rs. The migrate entry point would be called at the moment of performing the migration, and it is responsible for making sure the state is correct after the migration. It is very similar to schema migrations in traditional database applications. And it is also kind of difficult, because of version management involved - you can never assume, that you are migrating a contract from the previous version - it can be migrated from any version, released anytime - even later than that version we are migrating to! It is worth bringing back one issue from the past - the contract admin. Do you remember the --no-admin flag we set previously on every contract instantiation? It made our contract unmigrateable. Migrations can be performed only by contract admin. To be able to use it, you should pass --admin address flag instead, with the address being the address that would be able to perform migrations.","breadcrumbs":"The Actor Model » Contract as an actor » Migrations","id":"62","title":"Migrations"},"63":{"body":"Sudo is the last basic entry point in CosmWasm, and it is the one we would never use in wasmd. It is equivalent to CosmosMsg::Custom, but instead of being a special blockchain-specific message to be sent and handled by a blockchain itself, it is now a special blockchain-specific message sent by the blockchain to contract in some conditions. There are many uses for those, but I will not cover them, because would not be related to CosmWasm itself. The signature of sudo looks like this: #[cfg_attr(not(feature = \"library\"), entry_point)]\npub fn sudo(deps: DepsMut, env: Env, msg: SudoMsg) -> Result { // ..\n} The important difference is that because sudo messages are blockchain specific, the SudoMsg type is typically defined by some blockchain helper crate, not the contract itself.","breadcrumbs":"The Actor Model » Contract as an actor » Sudo","id":"63","title":"Sudo"},"64":{"body":"We already covered creating a single isolating contract. However, SOLID principles tell us that entities should be as small as reasonably possible - such as they have a single responsibility . Entities we are focusing on now are smart contracts, and we want to make sure that every smart contract has a sole responsibility it takes care of. But we also want to build complex systems using smart contracts. To do so, we need to be able to communicate between them. We already talked about what such communication looks like using an actor model. Now it's time to use this knowledge in practice. In this chapter, we will improve the previously created administration group model to solve the problem I brought - the possibility of adding own multiple addresses by a single admin to take bigger donation parts. We would also give admins some work to do besides being admins.","breadcrumbs":"Cross contract communication » Cross contract communication","id":"64","title":"Cross contract communication"},"65":{"body":"This time we will start discussing the design of our system a bit. Building multi-contract systems tend to be a bit more complicated than just isolated contracts, so I want to give you some anchor on what we are building in this chapter. If you feel lost with a design, don't worry - it will get clear while implementing contracts. For now, go through it to get a general idea. First, let's think about the problem we want to solve. Our admins are a vector of addresses. Anyone already an admin can add anyone he wants to the list. But this \"anyone\" can be a second instance of the same admin account, so he counts twice for donations! This issue is relatively simple to fix, but there is another problem - as we already learned, the admin could create a smart contract which he and only he can withdraw tokens from and register as another admin in the group! Instantiating it multiple times, he can achieve his goal even if we prevent adding the same address multiple times. There would be many distinct addresses that the same person owns. It looks like an unpleasant situation, but there are ways to manage it. The one we would implement is voting. Instead of being able to add another admin to the list, admins would be allowed to propose their colleagues as new admins. It would start a voting process - everyone who was an admin at the time of the proposal creation would be able to support it. If more than half admins would support the new candidate, he would immediately become an admin. It is not the most convoluted voting process, but it would be enough for our purposes.","breadcrumbs":"Cross contract communication » Design » Design","id":"65","title":"Design"},"66":{"body":"To achieve this goal, we would create two smart contracts. First, one would be reused contract from the Basics chapter - it would be an admin contract. Additionally, we would add a voting contract. It would be responsible for managing a single voting process. It would be instantiated by an admin contract whenever an admin wants to add his friend to a list. Here is a diagram of the contracts relationship: Here is adding an admin flowchart - assuming there are 5 admins on the contract already, but 2 of them did nothing: I already put some hints about contracts implementation, but I will not go into them yet.","breadcrumbs":"Cross contract communication » Design » Voting process","id":"66","title":"Voting process"},"67":{"body":"There is one other thing we want to add - some way to give admins work. The admin contract would behave like a proxy to call another contract. That means that some other external contract would just set our admin instance as a specific address that can perform executions on it, and admins would perform actions this way. The external contract would see execution as the admin contract would do it. Here is an updated contracts diagram: And calling external contract flowchart: Note that the msg on execute admin contract message is some arbitrary message just forwarded to the external contract. It would be a base64-encoded message in the real world, but it is just an implementation detail. Ultimately, we will create a simple example of an external contract to understand how to use such a pattern.","breadcrumbs":"Cross contract communication » Design » Messages forwarding","id":"67","title":"Messages forwarding"},"68":{"body":"Now that we know what we want to achieve, we can start by aligning the contract we already have to become an admin contract. It is primarily fine at this point, but we want to do a cleanup.","breadcrumbs":"Cross contract communication » Fixing admin contract » Fixing admin contract","id":"68","title":"Fixing admin contract"},"69":{"body":"The first thing to do is to get rid of the Greet query - it was good as a starter query example, but it has no practical purpose and only generates noise. We want to remove the unnecessary variant from the query enum: # use cosmwasm_schema::{cw_serde, QueryResponses};\n# use cosmwasm_std::Addr;\n# # #[cw_serde]\n# pub struct InstantiateMsg {\n# pub admins: Vec,\n# pub donation_denom: String,\n# }\n# # #[cw_serde]\n# pub enum ExecuteMsg {\n# Leave {},\n# Donate {},\n# }\n# # #[cw_serde]\n# pub struct AdminsListResp {\n# pub admins: Vec,\n# }\n#\n#[cw_serde]\n#[derive(QueryResponses)]\npub enum QueryMsg { #[returns(AdminsListResp)] AdminsList {},\n} Then we also remove the invalid path in the query dispatcher: pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { use QueryMsg::*; match msg { AdminsList {} => to_binary(&query::admins_list(deps)?), }\n} Finally, we remove the irrelevant handler from the contract::query module. We also need to make sure all references to it are gone (eg. if there are any in the tests).","breadcrumbs":"Cross contract communication » Fixing admin contract » Cleaning up queries","id":"69","title":"Cleaning up queries"},"7":{"body":"In the past, we suggested playing with contracts on the malaga testnet using wasmd. Now malaga is no longer operative, and the best way to test the contract in the real environment is to use one of the big CosmWasm chains testnets - Osmosis, Juno, Terra, or other ones. Here is the recommended introduction on how to start with the Osmosis testnet.","breadcrumbs":"Quick start with wasmd » Quick start with wasmd","id":"7","title":"Quick start with wasmd"},"70":{"body":"At the very beginning of the book, we set the crate-type in Cargo.toml as \"cdylib\". It was required to generate the wasm output, but it comes with a drawback - the dynamic libraries, as this cannot be used as dependencies in other crates. It was not a problem before, but in practice we often want to depend contract on others to get access to some types of them - for example, defined messages. Good for us. It is easy to fix. You might notice that the crate-type is an array, not a single string. The reason for that is that our project can emit several targets - in particular, we can add there the default \"rlib\" crate type to make it generate a \"rust library\" output - which is what we need to use as a dependency. Let's update our Cargo.toml: [package]\nname = \"admin\"\nversion = \"0.1.0\"\nedition = \"2021\" [lib]\ncrate-type = [\"cdylib\", \"rlib\"]\n# # [features]\n# library = []\n# # [dependencies]\n# cosmwasm-std = { version = \"1.1.4\", features = [\"staking\"] }\n# serde = { version = \"1.0.103\", default-features = false, features = [\"derive\"] }\n# cw-storage-plus = \"0.15.1\"\n# thiserror = \"1\"\n# schemars = \"0.8.1\"\n# cw-utils = \"0.15.1\"\n# cosmwasm-schema = \"1.1.4\"\n# # [dev-dependencies]\n# cw-multi-test = \"0.15.1\" Also, note I changed the contract name - \"contract\" is not very descriptive, so I updated it to \"admin\".","breadcrumbs":"Cross contract communication » Fixing admin contract » Generating the library output","id":"70","title":"Generating the library output"},"71":{"body":"Last but not least - we want to better structure our project. So far, we have only one contract, so we just worked on it as a whole project. Now we want some directory tree that reflects relations between contracts we create. First, create a directory for the project. Then we want to create a \"contracts\" subdirectory in it. It is not technically required from Rust's POV, but there are tools in our environment, like the workspace optimizer, which would assume it is where it should look for a contract. It is a common pattern you will see in CosmWasm contracts repos. Then we copy the whole project directory from the previous chapter into the contracts, renaming it to admin. Finally, we want to couple all our projects (for now, it is just one, but we know there will be more there). To do so, we create the workspace-level Cargo.toml file in the top-level project directory: [workspace]\nmembers = [\"contracts/*\"]\nresolver = \"2\" This Cargo.toml differs slightly from the typical project-level one - it defines the workspace. The most important field here is the members - it defines projects being part of the workspace. The other field is the resolver. It is something to remember to add - it instructs cargo to use version 2 of the dependency resolver. This has been the default for non-workspaces since Rust 2021, but because of compatibility reasons, the default couldn't be changed for workspaces - but it is advised to add it to every single newly created workspace. The last field which might be useful for workspaces is exclude - it allows to create projects in the workspace directory tree, which is not a part of this workspace - we will not use it, but it is good to know about it. Now just for clarity, let's see the top-level directory structure: .\n├── Cargo.lock\n├── Cargo.toml\n├── contracts\n│ └── admin\n└── target ├── CACHEDIR.TAG └── debug You can see the target directory and Cargo.lock files existing in the tree - it is because I already built and ran tests for the admin contract - in Rust workspaces, `cargo`` knows to build everything in the top level, even if it would be built from the inner directory.","breadcrumbs":"Cross contract communication » Fixing admin contract » Project structure","id":"71","title":"Project structure"},"72":{"body":"There is one thing to be immediately improved in the admin contract. Let's check the contract state: # use cosmwasm_std::Addr;\n# use cw_storage_plus::Item;\n# pub const ADMINS: Item> = Item::new(\"admins\");\npub const DONATION_DENOM: Item = Item::new(\"donation_denom\"); Note that we keep our admin list as a single vector. However, in the whole contract, in most cases, we access only a single element of this vector. This is not ideal, as now, whenever we want to access the single admin entry, we have first to deserialize the list containing all of them and then iterate over them until we find the interesting one. This might consume a serious amount of gas and is completely unnecessary overhead - we can avoid that using the Map storage accessor.","breadcrumbs":"Cross contract communication » Map storage » Map storage","id":"72","title":"Map storage"},"73":{"body":"First, let's define a map - in this context, it would be a set of keys with values assigned to them, just like a HashMap in Rust or dictionaries in many languages. We define it as similar to an Item, but this time we need two types - the key type and the value type: use cw_storage_plus::Map; pub const STR_TO_INT_MAP: Map = Map::new(\"str_to_int_map\"); Then to store some items on the Map , we use a save method - same as for an Item: STR_TO_INT_MAP.save(deps.storage, \"ten\".to_owned(), 10);\nSTR_TO_INT_MAP.save(deps.storage, \"one\".to_owned(), 1); Accessing entries in the map is also as easy as reading an item: let ten = STR_TO_INT_MAP.load(deps.storage, \"ten\".to_owned())?;\nassert_eq!(ten, 10); let two = STR_TO_INT_MAP.may_load(deps.storage, \"two\".to_owned())?;\nassert_eq!(two, None); Obviously, if the element is missing in the map, the load function will result in an error - just like for an item. On the other hand - may_load returns a Some variant when element exits. Another very useful accessor that is specific to the map is the has function, which checks for the existence of the key in the map: let contains = STR_TO_INT_MAP.has(deps.storage, \"three\".to_owned())?;\nassert!(!contains); Finally, we can iterate over elements of the maps - either its keys or key-value pairs: use cosmwasm_std::Order; for k in STR_TO_INT_MAP.keys(deps.storage, None, None, Order::Ascending) { let _addr = deps.api.addr_validate(k?);\n} for item in STR_TO_INT_MAP.range(deps.storage, None, None, Order::Ascending) { let (_key, _value) = item?;\n} First, you might wonder about extra values passed to keys and range - those are in order: lower and higher bounds of iterated elements, and the order elements should be traversed. While working with typical Rust iterators, you would probably first create an iterator over all the elements and then somehow skip those you are not interested in. After that, you will stop after the last interesting element. It would more often than not require accessing elements you filter out, and this is the problem - it requires reading the element from the storage. And reading it from the storage is the expensive part of working with data, which we try to avoid as much as possible. One way to do it is to instruct the Map where to start and stop deserializing elements from storage so it never reaches those outside the range. Another critical thing to notice is that the iterator returned by both keys and range functions are not iterators over elements - they are iterators over Results. It is a thing because, as it is rare, it might be that item is supposed to exist, but there is some error while reading from storage - maybe the stored value is serialized in a way we didn't expect, and deserialization fails. This is actually a real thing that happened in one of the contracts I worked on in the past - we changed the value type of the Map, and then forgot to migrate it, which caused all sorts of problems.","breadcrumbs":"Cross contract communication » Map storage » The Map storage","id":"73","title":"The Map storage"},"74":{"body":"So I imagine you can call me crazy right now - why do I spam about a Map, while we are working with vector? It is clear that those two represent two distinct things! Or do they? Let's reconsider what we keep in the ADMINS vector - we have a list of objects which we expect to be unique, which is a definition of a mathematical set. So now let me bring back my initial definition of the map: First, let's define a map - in this context, it would be a set of keys with values assigned to them, just like a HashMap in Rust or dictionaries in many languages. I purposely used the word \"set\" here - the map has the set built into it. It is a generalization of a set or reversing the logic - the set is a particular case of a map. If you imagine a set that map every single key to the same value, then the values become irrelevant, and such a map becomes a set semantically. How can you make a map mapping all the keys to the same value? We pick a type with a single value. Typically in Rust, it would be a unit type (()), but in CosmWasm, we tend to use the Empty type from CW standard crate: use cosmwasm_std::{Addr, Empty};\nuse cw_storage_plus::Map; pub const ADMINS: Map = Map::new(\"admins\"); We now need to fix the usage of the map in our contract. Let's start with contract instantiation: use crate::msg::InstantiateMsg;\nuse crate::state::{ADMINS, DONATION_DENOM};\nuse cosmwasm_std::{ DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n}; pub fn instantiate( deps: DepsMut, _env: Env, _info: MessageInfo, msg: InstantiateMsg,\n) -> StdResult { for addr in msg.admins { let admin = deps.api.addr_validate(&addr)?; ADMINS.save(deps.storage, admin, &Empty {})?; } DONATION_DENOM.save(deps.storage, &msg.donation_denom)?; Ok(Response::new())\n} It didn't simplify much, but we no longer need to collect our address. Then let's move to the leaving logic: use crate::state::ADMINS;\nuse cosmwasm_std::{DepsMut, MessageInfo}; pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult { ADMINS.remove(deps.storage, info.sender.clone()); let resp = Response::new() .add_attribute(\"action\", \"leave\") .add_attribute(\"sender\", info.sender.as_str()); Ok(resp)\n} Here we see a difference - we don't need to load a whole vector. We remove a single entry with the remove function. What I didn't emphasize before, and what is relevant, is that Map stores every single key as a distinct item. This way, accessing a single element will be cheaper than using a vector. However, this has its downside - accessing all the elements is more gas-consuming using Map! In general, we tend to avoid such situations - the linear complexity of the contract might lead to very expensive executions (gas-wise) and potential vulnerabilities - if the user finds a way to create many dummy elements in such a vector, he may make the execution cost exceeding any gas limit. Unfortunately, we have such an iteration in our contract - the distribution flow becomes as follows: use crate::error::ContractError;\nuse crate::state::{ADMINS, DONATION_DENOM};\nuse cosmwasm_std::{ coins, BankMsg,DepsMut, MessageInfo, Order, Response\n}; pub fn donate(deps: DepsMut, info: MessageInfo) -> Result { let denom = DONATION_DENOM.load(deps.storage)?; let admins: Result, _> = ADMINS .keys(deps.storage, None, None, Order::Ascending) .collect(); let admins = admins?; let donation = cw_utils::must_pay(&info, &denom)?.u128(); let donation_per_admin = donation / (admins.len() as u128); let messages = admins.into_iter().map(|admin| BankMsg::Send { to_address: admin.to_string(), amount: coins(donation_per_admin, &denom), }); let resp = Response::new() .add_messages(messages) .add_attribute(\"action\", \"donate\") .add_attribute(\"amount\", donation.to_string()) .add_attribute(\"per_admin\", donation_per_admin.to_string()); Ok(resp)\n} If I had to write a contract like this, and this donate would be a critical, often called flow, I would advocate for going for an Item> here. Fortunately, it is not the case - the distribution does not have to be linear in complexity! It might sound a bit crazy, as we have to iterate over all receivers to distribute funds, but this is not true - there is a pretty nice way to do so in constant time, which I will describe later in the book. For now, we will leave it as it is, acknowledging the flaw of the contract, which we will fix later. The final function to fix is the admins_list query handler: use crate::state::ADMINS;\nuse cosmwasm_std::{Deps, Order, StdResult}; pub fn admins_list(deps: Deps) -> StdResult { let admins: Result, _> = ADMINS .keys(deps.storage, None, None, Order::Ascending) .collect(); let admins = admins?; let resp = AdminsListResp { admins }; Ok(resp)\n} Here we also have an issue with linear complexity, but it is far less of a problem. First, queries are often purposed to be called on local nodes, with no gas cost - we can query contracts as much as we want. And then, even if we have some limit on execution time/cost, there is no reason to query all the items every single time! We will fix this function later, adding pagination - to limit the execution time/cost of the query caller would be able to ask for a limited amount of items starting from the given one. Knowing this chapter, you can probably figure implementation of it right now, but I will show the common way we do that when I go through common CosmWasm practices.","breadcrumbs":"Cross contract communication » Map storage » Maps as sets","id":"74","title":"Maps as sets"},"75":{"body":"There is one subtlety to improve in our map usage. The thing is that right now, we index the map with the owned Addr key. That forces us to clone it if we want to reuse the key (particularly in the leave implementation). This is not a huge cost, but we can avoid it - we can define the key of the map to be a reference: use cosmwasm_std::{Addr, Empty};\nuse cw_storage_plus::Map; pub const ADMINS: Map<&Addr, Empty> = Map::new(\"admins\");\npub const DONATION_DENOM: Item = Item::new(\"donation_denom\"); Finally, we need to fix the usages of the map in two places: # use crate::state::{ADMINS, DONATION_DENOM};\n# use cosmwasm_std::{\n# DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n# };\n#\npub fn instantiate( deps: DepsMut, _env: Env, _info: MessageInfo, msg: InstantiateMsg,\n) -> StdResult { for addr in msg.admins { let admin = deps.api.addr_validate(&addr)?; ADMINS.save(deps.storage, &admin, &Empty {})?; } // ... # DONATION_DENOM.save(deps.storage, &msg.donation_denom)?;\n# Ok(Response::new())\n} pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult { ADMINS.remove(deps.storage, &info.sender); // ... # let resp = Response::new()\n# .add_attribute(\"action\", \"leave\")\n# .add_attribute(\"sender\", info.sender.as_str());\n# Ok(resp)\n}","breadcrumbs":"Cross contract communication » Map storage » Reference keys","id":"75","title":"Reference keys"},"76":{"body":"The concept of time in the blockchain is tricky - as in every distributed system, it is not easy to synchronize the clocks of all the nodes. However, there is the notion of a time that is even monotonic - which means that it should never go \"backward\" between executions. Also, what is important is - time is always unique throughout the whole transaction - and even the entire block, which is built of multiple transactions. The time is encoded in the Env type in its block field, which looks like this: pub struct BlockInfo { pub height: u64, pub time: Timestamp, pub chain_id: String,\n} You can see the time field, which is the timestamp of the processed block. The height field is also worth mentioning - it contains a sequence number of the processed block. It is sometimes more useful than time, as it is guaranteed that the height field is guaranteed to increase between blocks, while two blocks may be executed with the same time (even though it is rather not probable). Also, many transactions might be executed in a single block. That means that if we need a unique id for the execution of a particular message, we should look for something more. This thing is a transaction field of the Env type: pub struct TransactionInfo { pub index: u32,\n} The index here contains a unique index of the transaction in the block. That means that to get the unique identifier of a transaction through the whole block, we can use the (height, transaction_index) pair.","breadcrumbs":"Cross contract communication » Working with time » Working with time","id":"76","title":"Working with time"},"77":{"body":"We want to use the time in our system to keep track of the join time of admins. We don't yet add new members to the group, but we can already set the join time of initial admins. Let's start updating our state: use cosmwasm_std::{Addr, Timestamp};\nuse cw_storage_plus::Map;\n# use cw_storage_plus::Item; pub const ADMINS: Map<&Addr, Timestamp> = Map::new(\"admins\");\n# pub const DONATION_DENOM: Item = Item::new(\"donation_denom\"); As you can see, our admins set became a proper map - we will assign the join time to every admin. Now we need to update how we initialize a map - we stored the Empty data previously, but it nevermore matches our value type. Let's check an updated instantiation function: You might argue to create a separate structure for the value of this map, so in the future, if we would need to add something there, but in my opinion, it would be premature - we can also change the entire value type in the future, as it would be the same breaking change. Now we need to update how we initialize a map - we stored the Empty data previously, but it nevermore matches our value type. Let's check an updated instantiation function: use crate::state::{ADMINS, DONATION_DENOM};\nuse cosmwasm_std::{ DepsMut, Env, MessageInfo, Response, StdResult,\n}; pub fn instantiate( deps: DepsMut, env: Env, _info: MessageInfo, msg: InstantiateMsg,\n) -> StdResult { for addr in msg.admins { let admin = deps.api.addr_validate(&addr)?; ADMINS.save(deps.storage, &admin, &env.block.time)?; } DONATION_DENOM.save(deps.storage, &msg.donation_denom)?; Ok(Response::new())\n} Instead of storing &Empty {} as an admin value, we store the join time, which we read from &env.block.time. Also, note that I removed the underscore from the name of the env block - it was there only to ensure the Rust compiler the variable is purposely unused and not some kind of a bug. Finally, remember to remove any obsolete Empty imports through the project - the compiler should help you point out unused imports.","breadcrumbs":"Cross contract communication » Working with time » Join time","id":"77","title":"Join time"},"78":{"body":"The last thing to add regarding join time is the new query asking for the join time of a particular admin. Everything you need to do that was already discussed, I'll leave it for you as an exercise. The query variant should look like: #[returns(JoinTimeResp)]\nJoinTime { admin: String }, And the example response type: #[cw_serde]\npub struct JoinTimeResp { pub joined: Timestamp,\n} You may question that in response type, I suggest always returning a joined value, but what to do when no such admin is added? Well, in such a case, I would rely on the fact that load function returns a descriptive error of missing value in storage - however, feel free to define your own error for such a case or even make the joined field optional, and be returned if requested admin exists. Finally, there would be a good idea to make a test for new functionality - call a new query right after instantiation to verify initial admins has proper join time (possibly by extending the existing instantiation test). One thing you might need help with in tests might be how to get the time of execution. Using any OS-time would be doomed to fail - instead, you can call the block_info function to reach the BlockInfo structure containing the block state at a particular moment in the app - calling it just before instantiation would make you sure you are working with the same state which would be simulated on the call.","breadcrumbs":"Cross contract communication » Working with time » Query and tests","id":"78","title":"Query and tests"},"79":{"body":"Infomation according to § 5 TMG","breadcrumbs":"Legal Information » Legal Information","id":"79","title":"Legal Information"},"8":{"body":"In this chapter, we will go through creating basic smart contracts step by step. I will try to explain the core ideas behind CosmWasm and the typical contract structure.","breadcrumbs":"Basics » Basics","id":"8","title":"Basics"},"80":{"body":"Confio GmbH 7th Floor Potsdamer Platz 1 10785 Berlin","breadcrumbs":"Legal Information » Provider","id":"80","title":"Provider"},"81":{"body":"Simon Warta","breadcrumbs":"Legal Information » Managing Director","id":"81","title":"Managing Director"},"82":{"body":"hello@confio.gmbh","breadcrumbs":"Legal Information » Contact","id":"82","title":"Contact"},"83":{"body":"HRB 221575, Amtsgericht Charlottenburg","breadcrumbs":"Legal Information » Commercial Register","id":"83","title":"Commercial Register"},"84":{"body":"DE339802279","breadcrumbs":"Legal Information » VAT number","id":"84","title":"VAT number"},"85":{"body":"Simon Warta c/o Confio GmbH 7th Floor Potsdamer Platz 1 10785 Berlin","breadcrumbs":"Legal Information » Responsible for the content","id":"85","title":"Responsible for the content"},"9":{"body":"As smart contracts are Rust library crates, we will start with creating one: $ cargo new --lib ./empty-contract You created a simple Rust library, but it is not yet ready to be a smart contract. The first thing to do is to update the Cargo.toml file: [package]\nname = \"contract\"\nversion = \"0.1.0\"\nedition = \"2021\" [lib]\ncrate-type = [\"cdylib\"] [dependencies]\ncosmwasm-std = { version = \"1.0.0-beta8\", features = [\"staking\"] } As you can see, I added a crate-type field for the library section. Generating the cdylib is required to create a proper web assembly binary. The downside of this is that such a library cannot be used as a dependency for other Rust crates - for now, it is not needed, but later we will show how to approach reusing contracts as dependencies. Additionally, there is one core dependency for smart contracts: the cosmwasm-std. This crate is a standard library for smart contracts. It provides essential utilities for communication with the outside world and a couple of helper functions and types. Every smart contract we will build will use this dependency.","breadcrumbs":"Basics » Create a Rust project » Create a Rust project","id":"9","title":"Create a Rust project"}},"length":86,"save":true},"fields":["title","body","breadcrumbs"],"index":{"body":{"root":{"0":{".":{"0":{"0":{"df":2,"docs":{"17":{"tf":1.0},"20":{"tf":1.0}}},"df":0,"docs":{}},"1":{".":{"0":{"df":8,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}},"3":{".":{"4":{"df":6,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"33":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"29":{"tf":1.0}}},"5":{".":{"1":{"df":2,"docs":{"33":{"tf":1.0},"70":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"34":{"tf":1.0}}},"5":{"2":{"df":1,"docs":{"33":{"tf":1.0}}},"df":0,"docs":{}},"8":{".":{"1":{"df":3,"docs":{"29":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"17":{"tf":2.0},"20":{"tf":2.0},"29":{"tf":1.4142135623730951}}},"1":{".":{"0":{".":{"0":{"df":6,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"1":{"0":{"3":{"df":7,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"1":{".":{"4":{"df":2,"docs":{"33":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{".":{"3":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"0":{"df":1,"docs":{"44":{"tf":1.0}}},"6":{"9":{"df":3,"docs":{"50":{"tf":1.7320508075688772},"51":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"7":{"8":{"5":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"73":{"tf":1.4142135623730951}}},"5":{"df":1,"docs":{"44":{"tf":1.0}}},"df":14,"docs":{"17":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"23":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.8284271247461903},"33":{"tf":1.0},"44":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":2.0},"6":{"tf":1.0},"70":{"tf":1.0},"73":{"tf":1.0},"80":{"tf":1.0},"85":{"tf":1.0}}},"2":{"0":{"2":{"1":{"df":9,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"1":{"5":{"7":{"5":{"df":1,"docs":{"83":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":9,"docs":{"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.23606797749979},"45":{"tf":1.7320508075688772},"66":{"tf":1.0},"71":{"tf":1.4142135623730951}}},"3":{"df":1,"docs":{"45":{"tf":1.0}}},"4":{"df":1,"docs":{"45":{"tf":1.0}}},"5":{"0":{"df":1,"docs":{"16":{"tf":1.0}}},"df":2,"docs":{"66":{"tf":1.0},"79":{"tf":1.0}}},"7":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}}}},"_":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"_":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"26":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"51":{"tf":1.0},"54":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":7,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951}}}}},"df":2,"docs":{"29":{"tf":1.0},"74":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":18,"docs":{"10":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":2.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.7320508075688772},"20":{"tf":2.449489742783178},"21":{"tf":2.449489742783178},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"26":{"tf":2.449489742783178},"29":{"tf":3.0},"58":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":18,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":2.0},"21":{"tf":2.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"58":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"73":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":9,"docs":{"10":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"73":{"tf":1.0}}}}},"df":0,"docs":{}}},"a":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":1,"docs":{"39":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"18":{"tf":1.0},"19":{"tf":1.4142135623730951},"41":{"tf":1.0},"47":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":12,"docs":{"10":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"33":{"tf":1.4142135623730951},"48":{"tf":1.0},"56":{"tf":2.23606797749979},"58":{"tf":1.0},"70":{"tf":1.0},"72":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951}},"o":{"df":0,"docs":{},"r":{"df":5,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"56":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"79":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"29":{"tf":1.7320508075688772},"30":{"tf":1.0},"65":{"tf":1.0}}}}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":5,"docs":{"26":{"tf":1.0},"56":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0}}}}}},"k":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"g":{"df":1,"docs":{"74":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"t":{"df":1,"docs":{"45":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":15,"docs":{"10":{"tf":1.0},"14":{"tf":2.0},"25":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"39":{"tf":1.7320508075688772},"40":{"tf":3.1622776601683795},"41":{"tf":3.4641016151377544},"42":{"tf":2.23606797749979},"43":{"tf":1.0},"44":{"tf":2.0},"45":{"tf":1.7320508075688772},"54":{"tf":1.0},"62":{"tf":1.0},"67":{"tf":1.0}}}},"v":{"df":1,"docs":{"39":{"tf":1.4142135623730951}}}},"o":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"45":{"tf":1.0}}},"df":18,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"29":{"tf":1.4142135623730951},"36":{"tf":1.0},"37":{"tf":1.4142135623730951},"38":{"tf":1.0},"39":{"tf":2.8284271247461903},"40":{"tf":2.23606797749979},"41":{"tf":1.7320508075688772},"42":{"tf":1.4142135623730951},"43":{"tf":1.0},"46":{"tf":1.0},"47":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"50":{"tf":1.0},"52":{"tf":1.4142135623730951},"55":{"tf":2.0},"64":{"tf":1.0}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":10,"docs":{"10":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.4142135623730951},"33":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"51":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{}}}},"d":{"d":{"_":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"26":{"tf":1.4142135623730951}},"e":{"(":{"\"":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":2.23606797749979},"74":{"tf":1.4142135623730951},"75":{"tf":1.0}}}},"d":{"d":{"df":0,"docs":{},"e":{"d":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"74":{"tf":1.0},"75":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"26":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}}}}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":2.449489742783178},"29":{"tf":3.4641016151377544}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"59":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"59":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":25,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"17":{"tf":1.0},"19":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.7320508075688772},"29":{"tf":1.0},"30":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.0},"4":{"tf":1.0},"44":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.4142135623730951},"54":{"tf":2.0},"60":{"tf":1.0},"65":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"67":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.4142135623730951},"77":{"tf":1.4142135623730951},"78":{"tf":1.0}},"e":{"d":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"26":{"tf":1.0},"29":{"tf":1.7320508075688772}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"t":{"df":11,"docs":{"11":{"tf":1.0},"12":{"tf":1.0},"15":{"tf":1.4142135623730951},"17":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.7320508075688772},"40":{"tf":1.0},"41":{"tf":1.4142135623730951},"5":{"tf":1.0},"58":{"tf":2.0},"62":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":7,"docs":{"11":{"tf":1.0},"20":{"tf":1.0},"26":{"tf":1.0},"33":{"tf":1.4142135623730951},"4":{"tf":1.0},"66":{"tf":1.0},"9":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":7,"docs":{"22":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"26":{"tf":1.7320508075688772},"29":{"tf":2.0},"32":{"tf":1.0},"33":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}},"r":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"d":{"(":{"\"":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"2":{"df":6,"docs":{"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":8,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":2.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":2.0},"26":{"tf":3.1622776601683795},"29":{"tf":4.358898943540674}}}}},"u":{"df":0,"docs":{},"s":{"df":3,"docs":{"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.8284271247461903}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":12,"docs":{"19":{"tf":1.0},"20":{"tf":1.7320508075688772},"21":{"tf":2.0},"22":{"tf":2.0},"23":{"tf":2.0},"24":{"tf":2.23606797749979},"26":{"tf":3.605551275463989},"29":{"tf":5.0990195135927845},"54":{"tf":1.4142135623730951},"74":{"tf":1.0},"75":{"tf":1.4142135623730951},"77":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":21,"docs":{"10":{"tf":1.7320508075688772},"15":{"tf":1.0},"18":{"tf":2.0},"19":{"tf":1.0},"20":{"tf":2.6457513110645907},"22":{"tf":1.4142135623730951},"26":{"tf":1.0},"28":{"tf":1.0},"30":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"51":{"tf":1.4142135623730951},"52":{"tf":3.605551275463989},"53":{"tf":1.4142135623730951},"54":{"tf":1.7320508075688772},"58":{"tf":1.0},"62":{"tf":1.7320508075688772},"64":{"tf":1.0},"65":{"tf":1.7320508075688772},"67":{"tf":1.0},"74":{"tf":1.0}}}}}}},"df":20,"docs":{"12":{"tf":1.0},"17":{"tf":1.4142135623730951},"19":{"tf":2.0},"21":{"tf":1.0},"26":{"tf":1.7320508075688772},"29":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":1.7320508075688772},"34":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":1.0},"59":{"tf":1.4142135623730951},"61":{"tf":1.0},"62":{"tf":1.4142135623730951},"64":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"74":{"tf":1.0},"78":{"tf":1.0},"9":{"tf":1.0}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"'":{"df":1,"docs":{"22":{"tf":1.0}}},".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"2":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":6,"docs":{"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"a":{"d":{"d":{"df":0,"docs":{},"e":{"d":{"[":{"0":{"df":2,"docs":{"26":{"tf":1.0},"29":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":2,"docs":{"26":{"tf":1.7320508075688772},"29":{"tf":2.449489742783178}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":30,"docs":{"19":{"tf":1.0},"20":{"tf":4.123105625617661},"21":{"tf":4.47213595499958},"22":{"tf":5.477225575051661},"23":{"tf":4.69041575982343},"24":{"tf":4.795831523312719},"26":{"tf":7.0710678118654755},"28":{"tf":1.4142135623730951},"29":{"tf":9.539392014169456},"30":{"tf":2.23606797749979},"32":{"tf":1.7320508075688772},"33":{"tf":3.0},"51":{"tf":1.7320508075688772},"54":{"tf":4.123105625617661},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"62":{"tf":2.0},"64":{"tf":1.7320508075688772},"65":{"tf":3.3166247903554},"66":{"tf":2.23606797749979},"67":{"tf":2.449489742783178},"68":{"tf":1.4142135623730951},"69":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951},"71":{"tf":1.7320508075688772},"72":{"tf":2.0},"74":{"tf":3.605551275463989},"75":{"tf":1.7320508075688772},"77":{"tf":2.8284271247461903},"78":{"tf":2.23606797749979}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"64":{"tf":1.0}}}}}},"s":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"(":{"df":0,"docs":{},"|":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"(":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}},"o":{"a":{"d":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":7,"docs":{"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.8284271247461903}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"74":{"tf":1.0},"75":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"s":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":10,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":8,"docs":{"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"74":{"tf":1.0}}}}},"df":0,"docs":{}},"df":1,"docs":{"74":{"tf":1.0}}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":10,"docs":{"20":{"tf":1.0},"21":{"tf":2.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.0},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"69":{"tf":1.4142135623730951}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":11,"docs":{"20":{"tf":1.0},"21":{"tf":2.8284271247461903},"22":{"tf":2.449489742783178},"23":{"tf":2.23606797749979},"24":{"tf":2.23606797749979},"26":{"tf":3.1622776601683795},"29":{"tf":4.0},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"69":{"tf":1.0},"74":{"tf":1.0}}}}}}}}}}}}}},"v":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"19":{"tf":1.0},"28":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"71":{"tf":1.0}}}},"o":{"c":{"df":1,"docs":{"74":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.0},"21":{"tf":1.0},"42":{"tf":1.0},"59":{"tf":1.0}}}},"df":0,"docs":{}}}},"g":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"19":{"tf":1.0},"40":{"tf":1.0},"48":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":2,"docs":{"15":{"tf":1.0},"33":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":1,"docs":{"28":{"tf":1.0}}}}}}}}},"i":{"a":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951}},"s":{"df":2,"docs":{"12":{"tf":1.0},"33":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":2,"docs":{"33":{"tf":1.0},"68":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"(":{"d":{"df":0,"docs":{},"e":{"a":{"d":{"_":{"c":{"df":0,"docs":{},"o":{"d":{"df":4,"docs":{"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":15,"docs":{"10":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.4142135623730951},"24":{"tf":1.0},"29":{"tf":1.0},"44":{"tf":1.0},"5":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951},"65":{"tf":1.0},"71":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"1":{"tf":1.0}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"i":{"df":17,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"56":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"64":{"tf":1.4142135623730951},"65":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"68":{"tf":1.0},"71":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"14":{"tf":1.0},"20":{"tf":1.4142135623730951},"42":{"tf":1.0}}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}},"w":{"a":{"df":0,"docs":{},"y":{"df":19,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.7320508075688772},"15":{"tf":1.7320508075688772},"22":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"52":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"61":{"tf":1.7320508075688772},"76":{"tf":1.0},"78":{"tf":1.0}}}},"df":0,"docs":{}}},"m":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":1,"docs":{"3":{"tf":1.0}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"29":{"tf":2.6457513110645907},"42":{"tf":1.7320508075688772},"44":{"tf":1.7320508075688772},"72":{"tf":1.0},"74":{"tf":1.4142135623730951}}}}}},"t":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"83":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"51":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"65":{"tf":1.0}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"51":{"tf":1.0}}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":25,"docs":{"15":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"38":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"53":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.4142135623730951},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.4142135623730951},"65":{"tf":1.7320508075688772},"67":{"tf":1.0},"73":{"tf":1.4142135623730951}}}}},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"20":{"tf":1.7320508075688772},"42":{"tf":1.0},"43":{"tf":1.0},"54":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"24":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"24":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"28":{"tf":1.0},"65":{"tf":1.7320508075688772}}}},"t":{"df":0,"docs":{},"h":{"df":8,"docs":{"10":{"tf":1.0},"20":{"tf":1.0},"44":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0}}},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"62":{"tf":1.0}}}}},"w":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"61":{"tf":1.0}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"19":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"i":{"df":8,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"19":{"tf":1.4142135623730951},"2":{"tf":1.4142135623730951},"29":{"tf":1.0},"33":{"tf":1.7320508075688772},"58":{"tf":1.0},"59":{"tf":1.0}}},"p":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"(":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"x":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"c":{"df":0,"docs":{},"o":{"d":{"df":8,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.7320508075688772},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.7320508075688772},"26":{"tf":2.6457513110645907},"29":{"tf":3.605551275463989}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"29":{"tf":2.0}}}},"df":0,"docs":{}}}},":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":8,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.7320508075688772},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.7320508075688772},"26":{"tf":2.6457513110645907},"29":{"tf":3.4641016151377544}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"df":0,"docs":{},"|":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"29":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":10,"docs":{"12":{"tf":1.0},"19":{"tf":2.23606797749979},"20":{"tf":2.449489742783178},"21":{"tf":3.3166247903554},"22":{"tf":2.8284271247461903},"23":{"tf":2.8284271247461903},"24":{"tf":3.3166247903554},"26":{"tf":5.0},"29":{"tf":6.708203932499369},"78":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"c":{"df":4,"docs":{"10":{"tf":1.4142135623730951},"30":{"tf":1.0},"41":{"tf":1.0},"62":{"tf":1.4142135623730951}}},"df":3,"docs":{"42":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":2.0}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"a":{"c":{"df":0,"docs":{},"h":{"df":6,"docs":{"17":{"tf":1.0},"18":{"tf":1.0},"23":{"tf":1.0},"38":{"tf":1.4142135623730951},"43":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"r":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":6,"docs":{"14":{"tf":1.0},"22":{"tf":1.0},"28":{"tf":1.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.0},"67":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"36":{"tf":1.0},"55":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":2,"docs":{"33":{"tf":1.0},"77":{"tf":1.0}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":10,"docs":{"10":{"tf":2.23606797749979},"11":{"tf":1.7320508075688772},"14":{"tf":2.0},"15":{"tf":1.4142135623730951},"18":{"tf":1.7320508075688772},"20":{"tf":2.0},"29":{"tf":1.4142135623730951},"58":{"tf":1.7320508075688772},"59":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951}}}}}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"35":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"17":{"tf":1.0},"19":{"tf":1.0},"34":{"tf":1.0},"46":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"y":{"df":2,"docs":{"53":{"tf":1.0},"70":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"18":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"18":{"tf":1.0}}}}}},"df":0,"docs":{},"k":{"df":7,"docs":{"20":{"tf":1.0},"43":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"74":{"tf":1.0},"78":{"tf":1.0}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"!":{"(":{"!":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"73":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"!":{"(":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"a":{"d":{"d":{"df":0,"docs":{},"e":{"d":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"26":{"tf":1.0},"29":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":6,"docs":{"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"73":{"tf":1.0}}}},"w":{"df":0,"docs":{},"o":{"df":1,"docs":{"73":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":10,"docs":{"17":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.7320508075688772},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":2.0},"26":{"tf":3.0},"29":{"tf":4.69041575982343}}}}},"df":2,"docs":{"17":{"tf":1.0},"29":{"tf":1.0}}}},"t":{"df":1,"docs":{"28":{"tf":2.0}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":6,"docs":{"15":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"41":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0}}}}},"o":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"52":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"m":{"df":12,"docs":{"1":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"29":{"tf":1.0},"4":{"tf":1.0},"44":{"tf":1.0},"50":{"tf":1.0},"62":{"tf":1.0},"66":{"tf":1.0},"71":{"tf":1.0}},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}}}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"56":{"tf":1.0},"59":{"tf":1.0}}}},"t":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":2,"docs":{"26":{"tf":1.7320508075688772},"29":{"tf":3.0}}}}}},"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":15,"docs":{"10":{"tf":1.0},"16":{"tf":1.4142135623730951},"19":{"tf":1.0},"23":{"tf":1.4142135623730951},"25":{"tf":1.0},"26":{"tf":2.6457513110645907},"29":{"tf":2.0},"32":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":2.0},"50":{"tf":1.0},"51":{"tf":1.4142135623730951},"54":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":3.1622776601683795}}}}},"df":0,"docs":{}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":2,"docs":{"3":{"tf":1.0},"56":{"tf":1.0}},"m":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"14":{"tf":1.0},"23":{"tf":1.0}}}},"df":0,"docs":{}}}}},"v":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"13":{"tf":1.0},"43":{"tf":1.4142135623730951},"6":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":8,"docs":{"15":{"tf":1.0},"35":{"tf":1.0},"46":{"tf":1.0},"56":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0}}},"df":0,"docs":{}}}}},"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":11,"docs":{"17":{"tf":1.0},"24":{"tf":1.0},"33":{"tf":1.0},"38":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"48":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"4":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"76":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":4,"docs":{"29":{"tf":1.0},"39":{"tf":1.0},"44":{"tf":1.4142135623730951},"48":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"k":{"df":2,"docs":{"29":{"tf":1.7320508075688772},"48":{"tf":1.0}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{",":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"74":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":2,"docs":{"29":{"tf":1.4142135623730951},"60":{"tf":1.0}}}}}}},"r":{"df":1,"docs":{"51":{"tf":1.0}}},"s":{"df":0,"docs":{},"e":{"6":{"4":{"df":1,"docs":{"67":{"tf":1.0}}},"df":0,"docs":{}},"df":6,"docs":{"14":{"tf":1.4142135623730951},"20":{"tf":1.0},"26":{"tf":1.0},"42":{"tf":1.4142135623730951},"59":{"tf":1.0},"60":{"tf":1.0}}},"i":{"c":{"df":12,"docs":{"1":{"tf":1.0},"10":{"tf":1.4142135623730951},"17":{"tf":1.0},"22":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0},"35":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"63":{"tf":1.0},"66":{"tf":1.0},"8":{"tf":1.4142135623730951}},"s":{"/":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"c":{"'":{"df":1,"docs":{"48":{"tf":1.0}}},"df":1,"docs":{"48":{"tf":1.0}}},"df":1,"docs":{"50":{"tf":1.0}},"e":{"c":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"77":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":6,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.0},"65":{"tf":1.0},"68":{"tf":1.0},"74":{"tf":1.7320508075688772}}}}},"df":17,"docs":{"19":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"28":{"tf":1.0},"39":{"tf":1.4142135623730951},"40":{"tf":1.0},"42":{"tf":1.4142135623730951},"48":{"tf":1.0},"49":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"58":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"71":{"tf":1.0}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":15,"docs":{"20":{"tf":1.0},"24":{"tf":1.0},"29":{"tf":1.0},"34":{"tf":1.4142135623730951},"36":{"tf":1.0},"39":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"47":{"tf":1.0},"54":{"tf":1.4142135623730951},"56":{"tf":1.7320508075688772},"61":{"tf":1.7320508075688772},"70":{"tf":1.0},"74":{"tf":1.0},"78":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"56":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"19":{"tf":1.0},"59":{"tf":1.0},"70":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"v":{"df":1,"docs":{"67":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"15":{"tf":1.0},"20":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"37":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"17":{"tf":1.0},"27":{"tf":1.0},"64":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":2,"docs":{"23":{"tf":1.0},"7":{"tf":1.0}}}},"t":{"a":{"8":{"df":6,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":9,"docs":{"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"18":{"tf":1.4142135623730951},"20":{"tf":1.0},"22":{"tf":1.0},"27":{"tf":1.0},"44":{"tf":1.0},"58":{"tf":1.0},"71":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":9,"docs":{"15":{"tf":1.0},"19":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.7320508075688772},"42":{"tf":1.0},"44":{"tf":1.0},"64":{"tf":1.0},"71":{"tf":1.0},"76":{"tf":1.4142135623730951}}}}}}}},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"7":{"tf":1.0}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"16":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.0},"58":{"tf":1.0},"64":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"35":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"39":{"tf":1.0}}}},"n":{"/":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"33":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":27,"docs":{"10":{"tf":1.0},"11":{"tf":2.0},"12":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":2.0},"20":{"tf":2.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"33":{"tf":2.449489742783178},"34":{"tf":1.0},"4":{"tf":1.4142135623730951},"47":{"tf":1.0},"48":{"tf":1.4142135623730951},"49":{"tf":1.4142135623730951},"5":{"tf":1.0},"50":{"tf":1.4142135623730951},"58":{"tf":2.0},"6":{"tf":1.0},"9":{"tf":1.0}}},"y":{"(":{"7":{"b":{"7":{"d":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"d":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":15,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"29":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.7320508075688772},"59":{"tf":1.0},"60":{"tf":1.0},"65":{"tf":1.4142135623730951},"74":{"tf":1.0}}}},"l":{"a":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"18":{"tf":1.7320508075688772},"60":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"48":{"tf":1.0}}},"c":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":1,"docs":{"78":{"tf":1.0}}}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":28,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":2.23606797749979},"20":{"tf":2.23606797749979},"25":{"tf":1.0},"28":{"tf":2.23606797749979},"29":{"tf":1.0},"35":{"tf":1.4142135623730951},"4":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951},"46":{"tf":1.0},"47":{"tf":1.4142135623730951},"48":{"tf":3.0},"5":{"tf":1.0},"50":{"tf":1.7320508075688772},"52":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":1.7320508075688772},"57":{"tf":1.0},"58":{"tf":2.449489742783178},"60":{"tf":2.0},"62":{"tf":1.0},"63":{"tf":2.449489742783178},"76":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":6,"docs":{"43":{"tf":1.0},"50":{"tf":1.0},"56":{"tf":1.4142135623730951},"76":{"tf":3.0},"77":{"tf":1.0},"78":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":2,"docs":{"76":{"tf":1.0},"78":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"o":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":4,"docs":{"15":{"tf":1.0},"26":{"tf":1.0},"33":{"tf":1.0},"58":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"k":{"df":6,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":1.4142135623730951},"3":{"tf":1.4142135623730951},"4":{"tf":1.4142135623730951},"70":{"tf":1.0},"74":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":6,"docs":{"17":{"tf":1.4142135623730951},"22":{"tf":1.0},"40":{"tf":1.0},"53":{"tf":1.0},"59":{"tf":1.0},"73":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"58":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"73":{"tf":1.0}}},"df":0,"docs":{}}},"x":{"df":1,"docs":{"18":{"tf":1.7320508075688772}}}},"r":{"a":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"15":{"tf":1.0}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"k":{"df":1,"docs":{"77":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":4,"docs":{"15":{"tf":1.0},"20":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":2,"docs":{"20":{"tf":1.0},"44":{"tf":1.0}}}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"64":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"39":{"tf":1.0}}}}},"df":0,"docs":{}}},"u":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"48":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{},"g":{"df":3,"docs":{"3":{"tf":1.0},"30":{"tf":1.7320508075688772},"77":{"tf":1.0}}},"i":{"df":0,"docs":{},"l":{"d":{"df":17,"docs":{"10":{"tf":1.0},"11":{"tf":2.8284271247461903},"12":{"tf":3.0},"17":{"tf":1.0},"18":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":2.23606797749979},"4":{"tf":1.0},"43":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.7320508075688772},"64":{"tf":1.0},"65":{"tf":1.4142135623730951},"71":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":8,"docs":{"13":{"tf":1.0},"26":{"tf":1.0},"30":{"tf":1.0},"45":{"tf":1.0},"50":{"tf":1.0},"71":{"tf":1.4142135623730951},"74":{"tf":1.0},"76":{"tf":1.0}}}}},"n":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"21":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"60":{"tf":1.0}}}},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"38":{"tf":1.0}}}}}},"c":{"/":{"df":0,"docs":{},"o":{"df":1,"docs":{"85":{"tf":1.0}}}},"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"14":{"tf":1.4142135623730951}},"e":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"71":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":4,"docs":{"14":{"tf":1.0},"29":{"tf":1.0},"43":{"tf":1.0},"56":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"df":32,"docs":{"10":{"tf":2.449489742783178},"13":{"tf":1.0},"18":{"tf":2.449489742783178},"19":{"tf":1.7320508075688772},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":2.0},"25":{"tf":1.0},"26":{"tf":1.7320508075688772},"28":{"tf":1.0},"29":{"tf":1.4142135623730951},"33":{"tf":1.0},"35":{"tf":1.0},"38":{"tf":2.449489742783178},"39":{"tf":1.0},"41":{"tf":1.7320508075688772},"42":{"tf":1.4142135623730951},"43":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":3.605551275463989},"50":{"tf":1.0},"51":{"tf":1.7320508075688772},"52":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":3.605551275463989},"6":{"tf":1.0},"61":{"tf":2.6457513110645907},"62":{"tf":1.0},"67":{"tf":1.4142135623730951},"74":{"tf":1.7320508075688772},"78":{"tf":2.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"25":{"tf":1.0},"74":{"tf":1.0}}}}},"m":{"df":1,"docs":{"20":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"32":{"tf":1.0},"57":{"tf":1.0}}}}},"n":{"'":{"df":0,"docs":{},"t":{"df":1,"docs":{"29":{"tf":1.0}}}},"d":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"65":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"p":{"a":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"13":{"tf":1.0},"40":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"61":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"df":6,"docs":{"11":{"tf":1.0},"19":{"tf":1.0},"35":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"64":{"tf":1.0}},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"20":{"tf":1.0}}}}}}}},"g":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"71":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":9,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.7320508075688772},"9":{"tf":1.0}}}}}}},"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":2,"docs":{"12":{"tf":1.0},"33":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":11,"docs":{"11":{"tf":2.23606797749979},"12":{"tf":1.4142135623730951},"13":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"33":{"tf":2.0},"5":{"tf":1.4142135623730951},"6":{"tf":1.7320508075688772},"71":{"tf":1.4142135623730951},"9":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":32,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"18":{"tf":2.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"30":{"tf":1.0},"32":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"39":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.7320508075688772},"43":{"tf":1.0},"44":{"tf":2.0},"45":{"tf":2.6457513110645907},"50":{"tf":1.4142135623730951},"51":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951},"57":{"tf":2.0},"58":{"tf":2.23606797749979},"59":{"tf":1.0},"61":{"tf":2.0},"62":{"tf":2.0},"72":{"tf":1.0},"74":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951}}},"h":{"df":1,"docs":{"44":{"tf":1.0}}}},"u":{"df":0,"docs":{},"s":{"df":5,"docs":{"20":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.0},"59":{"tf":1.0},"73":{"tf":1.0}}}}},"d":{"df":3,"docs":{"4":{"tf":1.0},"49":{"tf":1.0},"6":{"tf":1.4142135623730951}},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"b":{"df":8,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"g":{"(":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":10,"docs":{"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}},"_":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"(":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"34":{"tf":1.7320508075688772},"58":{"tf":2.0},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":1,"docs":{"34":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":1,"docs":{"34":{"tf":1.0}}}},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"76":{"tf":1.0}}},"df":0,"docs":{}}},"df":4,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.0},"14":{"tf":1.0},"7":{"tf":1.0}}}},"n":{"df":0,"docs":{},"g":{"df":17,"docs":{"14":{"tf":1.7320508075688772},"18":{"tf":1.0},"29":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.4142135623730951},"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":2.0},"51":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.4142135623730951},"62":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":1.4142135623730951}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"4":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"30":{"tf":1.0}}},"df":12,"docs":{"20":{"tf":1.0},"24":{"tf":1.0},"28":{"tf":1.0},"36":{"tf":1.0},"55":{"tf":1.0},"60":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"g":{"df":2,"docs":{"39":{"tf":1.4142135623730951},"40":{"tf":1.4142135623730951}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"83":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"56":{"tf":1.0},"74":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"k":{"df":23,"docs":{"13":{"tf":1.7320508075688772},"14":{"tf":1.0},"17":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"35":{"tf":1.0},"39":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.0},"47":{"tf":1.0},"5":{"tf":2.449489742783178},"52":{"tf":1.0},"54":{"tf":2.0},"56":{"tf":1.0},"6":{"tf":2.0},"72":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":1.4142135623730951}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"43":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"f":{"'":{"df":1,"docs":{"39":{"tf":1.0}}},"df":5,"docs":{"39":{"tf":2.449489742783178},"40":{"tf":1.0},"41":{"tf":2.6457513110645907},"42":{"tf":1.0},"43":{"tf":1.0}}}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"22":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"27":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"s":{"df":2,"docs":{"45":{"tf":1.0},"61":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"37":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":1,"docs":{"58":{"tf":1.7320508075688772}}}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":3,"docs":{"24":{"tf":1.0},"35":{"tf":1.0},"45":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"26":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"43":{"tf":1.0},"71":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"50":{"tf":2.0}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"n":{"df":2,"docs":{"0":{"tf":1.0},"69":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"57":{"tf":1.0}}}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"68":{"tf":1.0}}}}},"r":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":3,"docs":{"36":{"tf":1.0},"65":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"40":{"tf":1.4142135623730951},"41":{"tf":1.0},"44":{"tf":1.0},"52":{"tf":1.0}}}}}},"o":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"56":{"tf":1.0},"76":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":11,"docs":{"17":{"tf":2.0},"20":{"tf":1.7320508075688772},"21":{"tf":2.0},"22":{"tf":2.23606797749979},"29":{"tf":2.23606797749979},"32":{"tf":2.23606797749979},"33":{"tf":2.23606797749979},"4":{"tf":1.4142135623730951},"49":{"tf":1.7320508075688772},"6":{"tf":1.0},"75":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":1,"docs":{"28":{"tf":1.0}},"r":{"df":4,"docs":{"10":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"40":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"e":{"df":1,"docs":{"58":{"tf":1.0}}},"n":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":2,"docs":{"26":{"tf":1.0},"33":{"tf":1.0}}}}}}},"o":{"d":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"50":{"tf":1.0}}}}},"df":0,"docs":{}}},"_":{"df":0,"docs":{},"i":{"d":{"df":11,"docs":{"19":{"tf":1.4142135623730951},"20":{"tf":2.23606797749979},"21":{"tf":2.6457513110645907},"22":{"tf":2.23606797749979},"23":{"tf":2.23606797749979},"24":{"tf":2.6457513110645907},"26":{"tf":4.0},"29":{"tf":5.385164807134504},"50":{"tf":1.4142135623730951},"51":{"tf":1.0},"54":{"tf":1.0}}},"df":0,"docs":{}}},"df":20,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"19":{"tf":2.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.7320508075688772},"22":{"tf":2.0},"23":{"tf":1.4142135623730951},"24":{"tf":1.7320508075688772},"26":{"tf":2.6457513110645907},"29":{"tf":3.7416573867739413},"47":{"tf":1.0},"48":{"tf":1.4142135623730951},"49":{"tf":1.0},"50":{"tf":2.449489742783178},"51":{"tf":1.4142135623730951},"52":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"62":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}},"s":{"(":{"5":{"df":1,"docs":{"29":{"tf":1.4142135623730951}}},"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":1,"docs":{"65":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"t":{"df":10,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"26":{"tf":2.8284271247461903},"29":{"tf":3.4641016151377544},"39":{"tf":1.0},"58":{"tf":1.0},"74":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"15":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"e":{"df":4,"docs":{"14":{"tf":1.0},"43":{"tf":1.0},"57":{"tf":1.0},"70":{"tf":1.0}}},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":2.0},"5":{"tf":1.0},"6":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"83":{"tf":1.0}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"o":{"df":0,"docs":{},"n":{"df":10,"docs":{"12":{"tf":1.0},"32":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"51":{"tf":1.0},"58":{"tf":1.0},"62":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"n":{"df":16,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"19":{"tf":1.0},"25":{"tf":1.4142135623730951},"27":{"tf":1.7320508075688772},"36":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"40":{"tf":1.0},"47":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"64":{"tf":1.7320508075688772},"9":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":3,"docs":{"17":{"tf":1.0},"24":{"tf":1.0},"48":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"43":{"tf":1.0}}}}}}},"t":{"df":1,"docs":{"71":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":9,"docs":{"11":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.0},"4":{"tf":1.0},"49":{"tf":1.7320508075688772},"58":{"tf":1.0},"6":{"tf":1.0},"77":{"tf":1.4142135623730951}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"19":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":4,"docs":{"39":{"tf":1.4142135623730951},"41":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"72":{"tf":1.0}}},"x":{"df":7,"docs":{"10":{"tf":1.0},"20":{"tf":1.0},"4":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.0},"64":{"tf":1.0},"74":{"tf":1.7320508075688772}}}},"i":{"c":{"df":8,"docs":{"14":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.0},"29":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"65":{"tf":1.0}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"42":{"tf":1.0}}}}}},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"76":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"46":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"59":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"34":{"tf":1.4142135623730951},"58":{"tf":1.0},"63":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}}},"u":{"df":0,"docs":{},"s":{"df":3,"docs":{"20":{"tf":1.0},"44":{"tf":1.0},"54":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"18":{"tf":1.0},"28":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":1,"docs":{"28":{"tf":1.0}}}}},"q":{"df":0,"docs":{},"u":{"df":6,"docs":{"14":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":1.0},"45":{"tf":1.0}}}}},"i":{"d":{"df":7,"docs":{"20":{"tf":1.0},"26":{"tf":1.0},"35":{"tf":1.0},"39":{"tf":1.0},"42":{"tf":1.7320508075688772},"56":{"tf":1.0},"58":{"tf":1.4142135623730951}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.0},"15":{"tf":1.7320508075688772},"17":{"tf":1.0},"38":{"tf":1.0}}}}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"20":{"tf":2.23606797749979},"56":{"tf":1.7320508075688772},"59":{"tf":1.0},"74":{"tf":1.0}}}}},"df":7,"docs":{"20":{"tf":1.0},"29":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.4142135623730951},"77":{"tf":1.4142135623730951}},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"18":{"tf":1.0},"58":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"10":{"tf":1.0},"29":{"tf":1.0},"51":{"tf":1.0},"59":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"m":{"df":2,"docs":{"72":{"tf":1.0},"74":{"tf":1.0}}}}},"t":{"a":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"58":{"tf":1.0},"82":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":20,"docs":{"10":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"26":{"tf":1.7320508075688772},"29":{"tf":1.0},"35":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":2.23606797749979},"61":{"tf":1.7320508075688772},"72":{"tf":1.0},"73":{"tf":1.0},"76":{"tf":1.4142135623730951},"78":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"12":{"tf":1.0},"85":{"tf":1.0}}}},"x":{"df":0,"docs":{},"t":{"df":5,"docs":{"24":{"tf":1.0},"41":{"tf":1.0},"58":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0}}}}},"r":{"a":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"62":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"61":{"tf":1.0}}}}}}}},"t":{"'":{"df":2,"docs":{"14":{"tf":1.0},"43":{"tf":1.0}}},".":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.0}}}},":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":4,"docs":{"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":6,"docs":{"16":{"tf":1.0},"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"20":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"{":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"33":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"16":{"tf":1.0},"69":{"tf":1.0}}},"y":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":6,"docs":{"16":{"tf":1.0},"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"17":{"tf":1.0},"20":{"tf":2.0}}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":69,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":1.0},"10":{"tf":3.605551275463989},"11":{"tf":2.0},"12":{"tf":1.4142135623730951},"13":{"tf":1.7320508075688772},"14":{"tf":2.23606797749979},"15":{"tf":1.0},"16":{"tf":2.449489742783178},"18":{"tf":3.0},"19":{"tf":3.872983346207417},"20":{"tf":4.358898943540674},"21":{"tf":2.8284271247461903},"22":{"tf":2.449489742783178},"23":{"tf":2.8284271247461903},"24":{"tf":2.449489742783178},"25":{"tf":2.449489742783178},"26":{"tf":3.605551275463989},"27":{"tf":2.449489742783178},"28":{"tf":2.0},"29":{"tf":4.69041575982343},"30":{"tf":1.7320508075688772},"33":{"tf":2.0},"34":{"tf":2.449489742783178},"35":{"tf":2.8284271247461903},"36":{"tf":1.4142135623730951},"37":{"tf":1.0},"38":{"tf":3.0},"39":{"tf":1.4142135623730951},"4":{"tf":2.449489742783178},"40":{"tf":1.4142135623730951},"41":{"tf":1.4142135623730951},"42":{"tf":3.7416573867739413},"43":{"tf":2.449489742783178},"44":{"tf":2.23606797749979},"45":{"tf":3.0},"46":{"tf":1.4142135623730951},"47":{"tf":1.0},"48":{"tf":3.1622776601683795},"49":{"tf":2.0},"5":{"tf":1.7320508075688772},"50":{"tf":2.6457513110645907},"51":{"tf":3.0},"52":{"tf":2.8284271247461903},"53":{"tf":2.8284271247461903},"54":{"tf":4.69041575982343},"55":{"tf":2.0},"56":{"tf":3.3166247903554},"57":{"tf":2.0},"58":{"tf":4.898979485566356},"59":{"tf":1.4142135623730951},"6":{"tf":3.0},"60":{"tf":3.0},"61":{"tf":1.4142135623730951},"62":{"tf":3.605551275463989},"63":{"tf":1.4142135623730951},"64":{"tf":2.23606797749979},"65":{"tf":2.0},"66":{"tf":2.8284271247461903},"67":{"tf":3.1622776601683795},"68":{"tf":1.7320508075688772},"7":{"tf":1.4142135623730951},"70":{"tf":1.7320508075688772},"71":{"tf":3.0},"72":{"tf":1.7320508075688772},"73":{"tf":1.0},"74":{"tf":2.6457513110645907},"8":{"tf":1.4142135623730951},"9":{"tf":2.8284271247461903}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":10,"docs":{"23":{"tf":2.0},"24":{"tf":2.23606797749979},"26":{"tf":2.0},"29":{"tf":3.1622776601683795},"33":{"tf":1.0},"34":{"tf":1.0},"58":{"tf":1.4142135623730951},"61":{"tf":1.0},"63":{"tf":1.0},"74":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"61":{"tf":1.0}}}}}}}},"s":{"/":{"c":{"df":0,"docs":{},"w":{"1":{"df":1,"docs":{"6":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":8,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":8,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.7320508075688772},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.7320508075688772},"26":{"tf":2.6457513110645907},"29":{"tf":3.605551275463989}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"d":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"48":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"25":{"tf":1.0},"27":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"3":{"tf":1.0}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":2,"docs":{"18":{"tf":1.0},"26":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":3,"docs":{"33":{"tf":1.0},"43":{"tf":1.0},"58":{"tf":1.0}}},"t":{"df":1,"docs":{"57":{"tf":1.0}}}},"r":{"df":0,"docs":{},"t":{"df":4,"docs":{"29":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"65":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"i":{"df":6,"docs":{"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"71":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":5,"docs":{"19":{"tf":1.4142135623730951},"28":{"tf":1.0},"42":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":1.0}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"29":{"tf":1.0},"56":{"tf":1.0},"62":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"df":0,"docs":{},"l":{"df":1,"docs":{"33":{"tf":1.0}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"10":{"tf":1.0},"18":{"tf":1.0},"21":{"tf":1.0},"57":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{":":{":":{"b":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":1,"docs":{"60":{"tf":1.0}}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"63":{"tf":1.0}}}}}}}},"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"60":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":2,"docs":{"59":{"tf":1.4142135623730951},"60":{"tf":1.7320508075688772}}}}}}},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"/":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":1,"docs":{"49":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"_":{"1":{"_":{"1":{"df":2,"docs":{"13":{"tf":1.0},"6":{"tf":1.0}}},"2":{"df":2,"docs":{"13":{"tf":1.0},"6":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{":":{":":{"c":{"df":0,"docs":{},"w":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"33":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"33":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"{":{"c":{"df":0,"docs":{},"w":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"d":{"df":2,"docs":{"33":{"tf":1.0},"69":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"t":{"d":{":":{":":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":12,"docs":{"19":{"tf":1.0},"20":{"tf":2.0},"21":{"tf":2.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.23606797749979},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"69":{"tf":1.0},"72":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"73":{"tf":1.0}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"61":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"58":{"tf":1.0},"61":{"tf":1.0}}}}}}}}},"s":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"22":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"{":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"{":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":5,"docs":{"23":{"tf":1.0},"29":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"74":{"tf":1.0}},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"74":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"o":{"_":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":3,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":14,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.7320508075688772},"21":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"77":{"tf":1.0}}},"df":0,"docs":{}}}},"df":39,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":1.0},"10":{"tf":1.0},"11":{"tf":1.0},"13":{"tf":1.7320508075688772},"14":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"23":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.7320508075688772},"33":{"tf":1.7320508075688772},"35":{"tf":2.0},"36":{"tf":1.4142135623730951},"37":{"tf":1.0},"4":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.7320508075688772},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"5":{"tf":2.0},"50":{"tf":1.0},"52":{"tf":1.4142135623730951},"58":{"tf":1.0},"6":{"tf":1.7320508075688772},"60":{"tf":1.7320508075688772},"61":{"tf":1.0},"63":{"tf":1.4142135623730951},"7":{"tf":1.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.0},"74":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"t":{"df":6,"docs":{"11":{"tf":1.0},"48":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951},"75":{"tf":1.0}}}},"u":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"n":{"'":{"df":0,"docs":{},"t":{"df":1,"docs":{"71":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"56":{"tf":1.0},"65":{"tf":1.0}}}},"p":{"df":0,"docs":{},"l":{"df":9,"docs":{"10":{"tf":1.7320508075688772},"15":{"tf":1.0},"18":{"tf":1.0},"22":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"71":{"tf":1.0},"9":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":9,"docs":{"18":{"tf":1.0},"19":{"tf":1.0},"24":{"tf":1.0},"27":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0},"43":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0}}}}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{":":{":":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":5,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"74":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{":":{":":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":6,"docs":{"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"74":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"{":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":6,"docs":{"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":5,"docs":{"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.4142135623730951}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{":":{":":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":7,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"{":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"29":{"tf":1.7320508075688772},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"77":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":16,"docs":{"14":{"tf":1.7320508075688772},"16":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":2.0},"24":{"tf":1.0},"29":{"tf":1.4142135623730951},"33":{"tf":3.1622776601683795},"34":{"tf":1.4142135623730951},"35":{"tf":2.0},"57":{"tf":1.0},"58":{"tf":1.0},"63":{"tf":1.0},"70":{"tf":2.23606797749979},"74":{"tf":1.0},"9":{"tf":2.23606797749979}}}},"z":{"df":0,"docs":{},"i":{"df":1,"docs":{"74":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":45,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":1.0},"14":{"tf":2.0},"15":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.7320508075688772},"19":{"tf":1.7320508075688772},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"29":{"tf":1.0},"3":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":2.23606797749979},"34":{"tf":1.0},"35":{"tf":1.4142135623730951},"36":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.7320508075688772},"40":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.7320508075688772},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"48":{"tf":1.4142135623730951},"50":{"tf":1.0},"51":{"tf":1.7320508075688772},"56":{"tf":1.0},"58":{"tf":1.4142135623730951},"59":{"tf":1.0},"60":{"tf":1.0},"64":{"tf":1.4142135623730951},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"71":{"tf":2.449489742783178},"73":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":2.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"29":{"tf":1.0},"55":{"tf":1.0},"65":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"48":{"tf":1.0}}},"df":4,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"45":{"tf":1.0},"6":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":3,"docs":{"29":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"11":{"tf":1.0},"58":{"tf":1.0},"64":{"tf":1.0}}}}},"u":{"c":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"11":{"tf":1.0},"48":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"28":{"tf":1.0}}}}}},"df":1,"docs":{"28":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"15":{"tf":1.0}}}},"r":{"_":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178}},"s":{".":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"(":{"&":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"(":{"&":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":4,"docs":{"42":{"tf":2.23606797749979},"44":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951},"48":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":2,"docs":{"10":{"tf":1.0},"18":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":3,"docs":{"24":{"tf":1.4142135623730951},"35":{"tf":1.0},"60":{"tf":1.0}}}}}}},"w":{"2":{"0":{"df":3,"docs":{"42":{"tf":1.0},"44":{"tf":1.0},"48":{"tf":1.0}}},"df":0,"docs":{}},"4":{"df":6,"docs":{"49":{"tf":1.4142135623730951},"50":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.4142135623730951},"58":{"tf":1.0}}},"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"{":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":8,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"d":{"df":3,"docs":{"33":{"tf":3.3166247903554},"69":{"tf":2.0},"78":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":4,"docs":{"20":{"tf":1.0},"29":{"tf":1.0},"72":{"tf":1.0},"77":{"tf":1.0}}}}}},"m":{"a":{"df":0,"docs":{},"p":{"df":4,"docs":{"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"y":{"(":{"&":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"p":{"a":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.4142135623730951}}}}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":15,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.7320508075688772},"20":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"33":{"tf":1.4142135623730951},"35":{"tf":1.0},"49":{"tf":2.0},"53":{"tf":1.0},"56":{"tf":1.0},"6":{"tf":2.6457513110645907},"70":{"tf":1.7320508075688772},"74":{"tf":1.0}}}},"d":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"n":{"df":1,"docs":{"20":{"tf":1.0}}}},"t":{"a":{"b":{"a":{"df":0,"docs":{},"s":{"df":6,"docs":{"10":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":3.4641016151377544},"56":{"tf":1.7320508075688772},"62":{"tf":1.0}}}},"df":0,"docs":{}},"df":17,"docs":{"14":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"21":{"tf":1.0},"25":{"tf":1.7320508075688772},"27":{"tf":2.0},"41":{"tf":1.7320508075688772},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.7320508075688772},"56":{"tf":2.23606797749979},"57":{"tf":1.0},"58":{"tf":2.449489742783178},"61":{"tf":2.8284271247461903},"73":{"tf":1.0},"77":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"b":{"df":1,"docs":{"48":{"tf":1.0}}},"df":0,"docs":{},"e":{")":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"62":{"tf":1.0}}}}}}},"3":{"3":{"9":{"8":{"0":{"2":{"2":{"7":{"9":{"df":1,"docs":{"84":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"10":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0}}}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":11,"docs":{"11":{"tf":1.0},"12":{"tf":1.7320508075688772},"17":{"tf":2.23606797749979},"20":{"tf":1.7320508075688772},"21":{"tf":2.0},"22":{"tf":2.23606797749979},"23":{"tf":1.0},"29":{"tf":2.449489742783178},"32":{"tf":2.23606797749979},"33":{"tf":2.449489742783178},"71":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":1,"docs":{"33":{"tf":1.0}}}}}}}}},"c":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"45":{"tf":1.4142135623730951},"58":{"tf":1.0},"61":{"tf":1.4142135623730951}}},"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"l":{"2":{"5":{"6":{"df":1,"docs":{"35":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"35":{"tf":1.4142135623730951}}},"s":{"df":1,"docs":{"15":{"tf":1.0}}}},"l":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"54":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":3,"docs":{"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.0}}}},"df":0,"docs":{}}}},"d":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"41":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"u":{"c":{"df":1,"docs":{"24":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":10,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"33":{"tf":1.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":18,"docs":{"10":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"29":{"tf":1.0},"33":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.4142135623730951},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"74":{"tf":1.0},"75":{"tf":1.0},"78":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"16":{"tf":1.7320508075688772},"23":{"tf":1.0},"58":{"tf":1.0},"74":{"tf":1.4142135623730951}}}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":4,"docs":{"10":{"tf":1.0},"33":{"tf":1.0},"39":{"tf":1.0},"58":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"39":{"tf":1.0}}}}}}}},"m":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"48":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{")":{"?":{".":{"df":0,"docs":{},"u":{"1":{"2":{"8":{"df":2,"docs":{"29":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"29":{"tf":2.23606797749979},"74":{"tf":1.4142135623730951}}},"t":{"df":2,"docs":{"43":{"tf":1.0},"44":{"tf":1.0}}}}},"p":{"df":21,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":2.23606797749979},"15":{"tf":2.23606797749979},"16":{"tf":2.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.8284271247461903},"19":{"tf":1.4142135623730951},"20":{"tf":3.605551275463989},"21":{"tf":2.8284271247461903},"22":{"tf":3.0},"23":{"tf":3.605551275463989},"24":{"tf":2.449489742783178},"26":{"tf":3.4641016151377544},"29":{"tf":4.242640687119285},"33":{"tf":2.0},"34":{"tf":2.0},"58":{"tf":2.449489742783178},"69":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"77":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"d":{"df":13,"docs":{"14":{"tf":1.7320508075688772},"18":{"tf":1.0},"19":{"tf":2.23606797749979},"20":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"26":{"tf":1.0},"29":{"tf":1.4142135623730951},"33":{"tf":2.23606797749979},"34":{"tf":2.449489742783178},"58":{"tf":1.0},"70":{"tf":2.23606797749979},"71":{"tf":1.0},"9":{"tf":2.23606797749979}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"y":{"df":1,"docs":{"3":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"14":{"tf":1.0}}}}},"s":{".":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{".":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"&":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":10,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"k":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"18":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":23,"docs":{"10":{"tf":1.7320508075688772},"14":{"tf":1.4142135623730951},"15":{"tf":2.0},"16":{"tf":2.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.23606797749979},"19":{"tf":1.7320508075688772},"20":{"tf":3.1622776601683795},"21":{"tf":2.449489742783178},"22":{"tf":2.8284271247461903},"23":{"tf":3.3166247903554},"24":{"tf":2.23606797749979},"26":{"tf":3.1622776601683795},"29":{"tf":4.123105625617661},"33":{"tf":1.7320508075688772},"34":{"tf":1.7320508075688772},"58":{"tf":2.23606797749979},"61":{"tf":1.4142135623730951},"62":{"tf":1.0},"63":{"tf":1.0},"74":{"tf":2.0},"75":{"tf":1.7320508075688772},"77":{"tf":1.4142135623730951}}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":8,"docs":{"14":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":2.0},"70":{"tf":1.0}},"e":{"(":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"23":{"tf":1.0},"29":{"tf":1.0}}}}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"33":{"tf":1.0},"69":{"tf":1.0}}}}}}}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":11,"docs":{"14":{"tf":1.0},"15":{"tf":2.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"21":{"tf":2.0},"22":{"tf":2.23606797749979},"29":{"tf":2.23606797749979},"32":{"tf":2.23606797749979},"33":{"tf":2.23606797749979},"57":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":10,"docs":{"22":{"tf":1.0},"29":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"39":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":3,"docs":{"40":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"10":{"tf":1.0}}}}}},"df":15,"docs":{"14":{"tf":1.7320508075688772},"15":{"tf":2.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":2.23606797749979},"21":{"tf":2.0},"22":{"tf":2.23606797749979},"29":{"tf":2.23606797749979},"32":{"tf":2.449489742783178},"33":{"tf":2.23606797749979},"35":{"tf":2.0},"57":{"tf":1.4142135623730951},"72":{"tf":1.0},"73":{"tf":1.4142135623730951}}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":6,"docs":{"24":{"tf":1.0},"25":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"38":{"tf":1.0},"65":{"tf":1.7320508075688772}}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":5,"docs":{"29":{"tf":1.0},"45":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"67":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"30":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"20":{"tf":1.0},"36":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"61":{"tf":1.0}}}}}}}}}}},"v":{"df":7,"docs":{"14":{"tf":1.0},"19":{"tf":1.4142135623730951},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.4142135623730951},"70":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":5,"docs":{"19":{"tf":1.0},"21":{"tf":1.0},"41":{"tf":1.0},"48":{"tf":1.0},"56":{"tf":1.0}}}}}}}},"i":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"66":{"tf":1.0},"67":{"tf":1.0}}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"73":{"tf":1.0},"74":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"d":{"df":0,"docs":{},"n":{"'":{"df":0,"docs":{},"t":{"df":4,"docs":{"19":{"tf":1.0},"45":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":20,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":2.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.7320508075688772},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"21":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"62":{"tf":1.0},"63":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0}}}},"i":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":3,"docs":{"15":{"tf":1.0},"26":{"tf":1.0},"62":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":7,"docs":{"14":{"tf":1.0},"26":{"tf":1.0},"43":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"54":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"81":{"tf":1.0}},"i":{"df":5,"docs":{"12":{"tf":1.0},"33":{"tf":1.0},"50":{"tf":1.0},"6":{"tf":2.0},"71":{"tf":2.8284271247461903}}}}}}},"df":0,"docs":{}}},"s":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"34":{"tf":1.7320508075688772}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"12":{"tf":1.0}}}}}}}}},"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":5,"docs":{"10":{"tf":1.0},"27":{"tf":1.0},"35":{"tf":1.0},"65":{"tf":1.0},"78":{"tf":1.0}}}}}},"df":0,"docs":{},"h":{"df":1,"docs":{"51":{"tf":1.0}}},"p":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":4,"docs":{"15":{"tf":1.0},"16":{"tf":1.4142135623730951},"39":{"tf":1.0},"69":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"y":{"df":3,"docs":{"17":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"65":{"tf":1.0},"74":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"16":{"tf":1.0},"59":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":5,"docs":{"29":{"tf":1.0},"30":{"tf":1.0},"48":{"tf":1.0},"74":{"tf":1.7320508075688772},"76":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"47":{"tf":1.0}}},"i":{"d":{"df":3,"docs":{"16":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"4":{"tf":1.0},"49":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"2":{"tf":1.7320508075688772},"29":{"tf":1.0},"36":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0}}}}}}}},"df":3,"docs":{"10":{"tf":1.0},"21":{"tf":1.0},"44":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"n":{"'":{"df":0,"docs":{},"t":{"df":10,"docs":{"15":{"tf":1.0},"17":{"tf":1.4142135623730951},"20":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"40":{"tf":1.0},"43":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0}}}},"df":0,"docs":{}}}},"n":{"'":{"df":0,"docs":{},"t":{"df":17,"docs":{"11":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"29":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"36":{"tf":1.0},"4":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"65":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0}}}},"a":{"df":0,"docs":{},"t":{"df":9,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":4.0},"30":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"64":{"tf":1.0},"65":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":2.0}},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":4,"docs":{"29":{"tf":1.7320508075688772},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":8,"docs":{"29":{"tf":4.123105625617661},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"69":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.4142135623730951},"77":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":8,"docs":{"22":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"39":{"tf":1.4142135623730951},"43":{"tf":1.0},"50":{"tf":1.0},"58":{"tf":1.0}}}},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"78":{"tf":1.0}}}},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"24":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"df":1,"docs":{"29":{"tf":1.0}},"s":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"74":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}}}},"r":{"a":{"df":0,"docs":{},"w":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"32":{"tf":1.0},"70":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"e":{"df":2,"docs":{"32":{"tf":1.0},"38":{"tf":1.0}}},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"74":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"29":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"70":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"g":{"df":1,"docs":{"15":{"tf":1.0}}}},"a":{"c":{"df":0,"docs":{},"h":{"df":6,"docs":{"18":{"tf":1.0},"21":{"tf":1.0},"36":{"tf":1.4142135623730951},"54":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"59":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"62":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"i":{"df":8,"docs":{"12":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"61":{"tf":1.0},"70":{"tf":1.0},"73":{"tf":1.0},"76":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"15":{"tf":1.0},"58":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"0":{"tf":1.0},"50":{"tf":1.0},"53":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"59":{"tf":1.0},"61":{"tf":1.0}}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.0}}}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":8,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0},"9":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"22":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"32":{"tf":1.0}}}}}}}}}}},"g":{"df":1,"docs":{"69":{"tf":1.0}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"55":{"tf":1.0},"56":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":3.3166247903554},"74":{"tf":1.7320508075688772}}}}}}},"i":{"df":0,"docs":{},"g":{"df":5,"docs":{"20":{"tf":1.0},"22":{"tf":1.0},"28":{"tf":1.0},"30":{"tf":1.0},"41":{"tf":1.0}}},"s":{"df":2,"docs":{"19":{"tf":1.0},"24":{"tf":1.0}}}}},"m":{"b":{"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"61":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":6,"docs":{"26":{"tf":2.6457513110645907},"41":{"tf":1.0},"50":{"tf":1.0},"58":{"tf":2.23606797749979},"61":{"tf":1.0},"70":{"tf":1.0}}}},"p":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"df":2,"docs":{"20":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"y":{"df":0,"docs":{},"e":{"df":1,"docs":{"41":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"i":{"df":18,"docs":{"10":{"tf":2.23606797749979},"14":{"tf":2.449489742783178},"15":{"tf":2.6457513110645907},"16":{"tf":2.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.449489742783178},"19":{"tf":2.23606797749979},"20":{"tf":3.1622776601683795},"21":{"tf":2.0},"22":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951},"74":{"tf":2.23606797749979},"75":{"tf":2.0},"77":{"tf":2.0},"9":{"tf":1.0}}}}}},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"19":{"tf":1.0},"34":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":2,"docs":{"15":{"tf":1.0},"29":{"tf":1.0}}}}},"o":{"d":{"df":4,"docs":{"14":{"tf":1.0},"57":{"tf":1.0},"67":{"tf":1.0},"76":{"tf":1.0}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":7,"docs":{"0":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"57":{"tf":1.0}}}},"df":0,"docs":{}}}}},"d":{"df":5,"docs":{"29":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.0},"60":{"tf":1.0}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"14":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"18":{"tf":1.0},"38":{"tf":1.0},"44":{"tf":1.4142135623730951},"62":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":5,"docs":{"24":{"tf":1.0},"33":{"tf":1.0},"42":{"tf":1.0},"49":{"tf":1.0},"65":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"13":{"tf":1.0},"21":{"tf":1.0},"23":{"tf":1.0},"30":{"tf":1.0},"77":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"76":{"tf":1.0},"77":{"tf":1.0}}},"t":{"df":0,"docs":{},"i":{"df":12,"docs":{"16":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":1.0},"22":{"tf":1.0},"27":{"tf":1.0},"38":{"tf":1.4142135623730951},"39":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.0},"52":{"tf":1.0},"64":{"tf":1.4142135623730951}}}}},"r":{"df":0,"docs":{},"i":{"df":17,"docs":{"10":{"tf":4.0},"14":{"tf":2.0},"16":{"tf":2.449489742783178},"19":{"tf":1.4142135623730951},"20":{"tf":2.23606797749979},"22":{"tf":1.7320508075688772},"23":{"tf":1.0},"29":{"tf":1.0},"34":{"tf":2.0},"35":{"tf":1.0},"58":{"tf":3.605551275463989},"61":{"tf":1.0},"62":{"tf":1.4142135623730951},"63":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0}}},"y":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":13,"docs":{"10":{"tf":2.0},"14":{"tf":1.7320508075688772},"15":{"tf":2.449489742783178},"16":{"tf":2.0},"20":{"tf":2.23606797749979},"22":{"tf":1.7320508075688772},"23":{"tf":2.449489742783178},"33":{"tf":1.7320508075688772},"34":{"tf":2.23606797749979},"58":{"tf":2.449489742783178},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"m":{"df":14,"docs":{"10":{"tf":1.0},"15":{"tf":2.6457513110645907},"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"32":{"tf":1.4142135623730951},"33":{"tf":2.449489742783178},"35":{"tf":1.4142135623730951},"57":{"tf":2.0},"69":{"tf":1.7320508075688772}}}},"v":{".":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"77":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"18":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":25,"docs":{"10":{"tf":2.0},"14":{"tf":1.7320508075688772},"15":{"tf":2.6457513110645907},"16":{"tf":3.1622776601683795},"17":{"tf":1.7320508075688772},"18":{"tf":3.1622776601683795},"19":{"tf":2.0},"20":{"tf":4.69041575982343},"21":{"tf":2.8284271247461903},"22":{"tf":3.7416573867739413},"23":{"tf":4.898979485566356},"24":{"tf":2.0},"26":{"tf":2.8284271247461903},"29":{"tf":3.4641016151377544},"33":{"tf":3.1622776601683795},"34":{"tf":3.1622776601683795},"58":{"tf":2.449489742783178},"61":{"tf":1.7320508075688772},"62":{"tf":1.4142135623730951},"63":{"tf":1.4142135623730951},"69":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.4142135623730951},"76":{"tf":1.4142135623730951},"77":{"tf":2.0}},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":8,"docs":{"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"27":{"tf":1.0},"39":{"tf":1.4142135623730951},"4":{"tf":1.4142135623730951},"7":{"tf":1.0},"71":{"tf":1.0}}}}}}}},"q":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"17":{"tf":1.4142135623730951},"28":{"tf":1.0},"30":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":6,"docs":{"18":{"tf":1.0},"48":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.0}}}},"df":0,"docs":{}}}}},"r":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"24":{"tf":1.0}}}},"df":0,"docs":{},"r":{"(":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"c":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"(":{"\"":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"22":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},".":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":3,"docs":{"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":4,"docs":{"20":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}},"o":{"df":0,"docs":{},"r":{"(":{"\"":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}},"{":{"0":{"df":2,"docs":{"23":{"tf":1.0},"29":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"23":{"tf":1.0},"29":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},".":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.0}}}},":":{":":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"23":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":16,"docs":{"10":{"tf":1.0},"15":{"tf":1.0},"20":{"tf":2.23606797749979},"22":{"tf":1.7320508075688772},"23":{"tf":3.3166247903554},"24":{"tf":3.605551275463989},"29":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.0},"44":{"tf":1.4142135623730951},"46":{"tf":1.0},"58":{"tf":2.0},"61":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":3,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"9":{"tf":1.0}}}}}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"0":{"tf":1.0},"47":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"h":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"29":{"tf":3.3166247903554}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":1,"docs":{"29":{"tf":2.449489742783178}}}},"v":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":2.449489742783178}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":20,"docs":{"11":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"38":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"59":{"tf":1.0},"62":{"tf":1.4142135623730951},"65":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.7320508075688772},"78":{"tf":1.0}},"t":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"\"":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"a":{"d":{"d":{"df":0,"docs":{},"e":{"d":{"\"":{")":{".":{"a":{"d":{"d":{"_":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"\"":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":10,"docs":{"25":{"tf":1.7320508075688772},"26":{"tf":4.69041575982343},"27":{"tf":1.4142135623730951},"29":{"tf":3.0},"41":{"tf":1.0},"50":{"tf":1.4142135623730951},"51":{"tf":2.0},"54":{"tf":1.0},"58":{"tf":3.0},"61":{"tf":1.4142135623730951}},"u":{"df":1,"docs":{"58":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"43":{"tf":1.0},"58":{"tf":1.0},"65":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":13,"docs":{"19":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.7320508075688772},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":1.0},"71":{"tf":1.0},"78":{"tf":1.0}}}}}}}},"x":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"40":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":3,"docs":{"40":{"tf":1.4142135623730951},"56":{"tf":1.0},"58":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":21,"docs":{"10":{"tf":1.0},"14":{"tf":1.4142135623730951},"19":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"33":{"tf":1.4142135623730951},"39":{"tf":1.0},"40":{"tf":1.4142135623730951},"42":{"tf":1.7320508075688772},"43":{"tf":1.0},"48":{"tf":1.0},"51":{"tf":1.4142135623730951},"53":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.7320508075688772},"62":{"tf":1.4142135623730951},"67":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"4":{"tf":1.0}},"e":{"d":{"df":1,"docs":{"74":{"tf":1.0}}},"df":0,"docs":{}},"l":{"df":3,"docs":{"15":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0}}},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"58":{"tf":1.7320508075688772},"61":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"40":{"tf":1.0}}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"u":{"d":{"df":1,"docs":{"71":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"c":{":":{":":{"a":{"d":{"d":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"29":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}},"u":{"df":0,"docs":{},"t":{"df":31,"docs":{"10":{"tf":2.449489742783178},"12":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"19":{"tf":1.7320508075688772},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":2.0},"23":{"tf":2.0},"24":{"tf":2.0},"25":{"tf":1.0},"26":{"tf":2.23606797749979},"27":{"tf":1.0},"29":{"tf":2.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"38":{"tf":1.4142135623730951},"42":{"tf":1.0},"44":{"tf":1.0},"5":{"tf":1.0},"54":{"tf":1.7320508075688772},"56":{"tf":1.0},"58":{"tf":3.3166247903554},"59":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951},"61":{"tf":1.7320508075688772},"62":{"tf":1.0},"67":{"tf":1.7320508075688772},"74":{"tf":2.0},"76":{"tf":2.0},"78":{"tf":1.0}},"e":{"(":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":2,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":2,"docs":{"22":{"tf":1.0},"23":{"tf":1.0}}}}},"df":0,"docs":{}},"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"24":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"29":{"tf":2.449489742783178}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"w":{"4":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"57":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"57":{"tf":1.0}}}}}}}}}}},":":{":":{"a":{"d":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":3,"docs":{"24":{"tf":1.0},"26":{"tf":1.7320508075688772},"29":{"tf":2.449489742783178}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"29":{"tf":1.0}}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"57":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":11,"docs":{"22":{"tf":2.23606797749979},"23":{"tf":2.23606797749979},"24":{"tf":1.7320508075688772},"26":{"tf":2.449489742783178},"29":{"tf":3.3166247903554},"32":{"tf":1.0},"33":{"tf":2.23606797749979},"34":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"69":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"r":{"df":8,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}},"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":5,"docs":{"22":{"tf":1.0},"24":{"tf":1.0},"29":{"tf":1.4142135623730951},"30":{"tf":1.0},"78":{"tf":1.0}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":9,"docs":{"20":{"tf":1.0},"22":{"tf":1.0},"27":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"48":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951}}}},"t":{"df":2,"docs":{"20":{"tf":1.0},"73":{"tf":1.0}}}},"p":{"a":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"34":{"tf":2.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":9,"docs":{"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":2.0},"29":{"tf":1.0},"36":{"tf":1.0},"45":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":3,"docs":{"56":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"24":{"tf":1.0}}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":6,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"20":{"tf":1.0},"38":{"tf":1.0},"58":{"tf":1.4142135623730951},"8":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"30":{"tf":1.0}}}},"r":{"df":1,"docs":{"1":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"33":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"78":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"n":{"df":4,"docs":{"44":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"67":{"tf":2.23606797749979}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"16":{"tf":1.0},"18":{"tf":1.0},"24":{"tf":1.0},"51":{"tf":1.0}}}},"df":1,"docs":{"73":{"tf":1.0}}},"df":0,"docs":{}}}}},"f":{"3":{"2":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"35":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"a":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"10":{"tf":1.0},"78":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":12,"docs":{"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"20":{"tf":2.0},"24":{"tf":1.4142135623730951},"33":{"tf":1.0},"35":{"tf":1.0},"45":{"tf":2.449489742783178},"58":{"tf":1.4142135623730951},"59":{"tf":1.0},"62":{"tf":1.0},"73":{"tf":1.0},"78":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":8,"docs":{"15":{"tf":1.0},"20":{"tf":1.4142135623730951},"24":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.23606797749979},"58":{"tf":1.0},"59":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"s":{"df":7,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"61":{"tf":1.0}}}},"df":0,"docs":{}}}}},"n":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":5,"docs":{"22":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":13,"docs":{"14":{"tf":1.7320508075688772},"19":{"tf":1.7320508075688772},"20":{"tf":1.7320508075688772},"23":{"tf":2.0},"29":{"tf":2.0},"33":{"tf":1.7320508075688772},"34":{"tf":2.449489742783178},"55":{"tf":1.0},"58":{"tf":1.4142135623730951},"60":{"tf":1.0},"62":{"tf":1.0},"70":{"tf":2.0},"9":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":1,"docs":{"28":{"tf":1.0}},"l":{"df":3,"docs":{"38":{"tf":1.0},"65":{"tf":1.0},"78":{"tf":1.0}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"56":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":18,"docs":{"15":{"tf":1.7320508075688772},"16":{"tf":1.0},"20":{"tf":1.7320508075688772},"22":{"tf":1.0},"29":{"tf":1.4142135623730951},"32":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":2.0},"53":{"tf":1.7320508075688772},"54":{"tf":1.4142135623730951},"58":{"tf":2.23606797749979},"59":{"tf":2.449489742783178},"61":{"tf":1.4142135623730951},"62":{"tf":1.0},"71":{"tf":1.7320508075688772},"76":{"tf":2.23606797749979},"78":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"20":{"tf":1.0},"29":{"tf":1.0},"56":{"tf":1.0},"59":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"e":{"df":9,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":2.0},"20":{"tf":1.0},"33":{"tf":2.23606797749979},"57":{"tf":1.0},"71":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"|":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":2,"docs":{"26":{"tf":1.0},"29":{"tf":1.7320508075688772}}}}}},"df":3,"docs":{"17":{"tf":1.0},"20":{"tf":1.0},"73":{"tf":1.0}}}}}},"n":{"a":{"df":0,"docs":{},"l":{"df":15,"docs":{"19":{"tf":1.0},"22":{"tf":1.0},"34":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":1.0},"49":{"tf":1.0},"58":{"tf":1.0},"61":{"tf":1.4142135623730951},"69":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0}}},"n":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"48":{"tf":1.0}}}},"df":0,"docs":{}}},"d":{"(":{"df":0,"docs":{},"|":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"26":{"tf":1.7320508075688772},"29":{"tf":3.0}}}}}},"df":0,"docs":{}}},"df":6,"docs":{"1":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0},"6":{"tf":1.4142135623730951},"72":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":1,"docs":{"68":{"tf":1.0}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":11,"docs":{"17":{"tf":1.0},"20":{"tf":1.0},"33":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.0},"41":{"tf":2.0},"42":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.0},"58":{"tf":1.4142135623730951},"61":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":33,"docs":{"1":{"tf":1.0},"10":{"tf":1.0},"14":{"tf":1.7320508075688772},"15":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":2.0},"22":{"tf":1.4142135623730951},"26":{"tf":1.0},"29":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"39":{"tf":1.4142135623730951},"4":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"50":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.4142135623730951},"59":{"tf":1.0},"6":{"tf":1.0},"61":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.7320508075688772},"74":{"tf":1.4142135623730951},"9":{"tf":1.0}}}}},"t":{"df":1,"docs":{"10":{"tf":1.0}}},"x":{"df":10,"docs":{"20":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"58":{"tf":1.4142135623730951},"59":{"tf":1.0},"65":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"74":{"tf":2.0},"75":{"tf":1.0}}}},"l":{"a":{"df":0,"docs":{},"g":{"df":5,"docs":{"33":{"tf":1.0},"34":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.7320508075688772},"62":{"tf":1.4142135623730951}}},"w":{"df":1,"docs":{"74":{"tf":1.0}}}},"df":0,"docs":{},"o":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"35":{"tf":2.6457513110645907}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}}},"w":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"66":{"tf":1.0},"67":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":4,"docs":{"14":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.0},"74":{"tf":1.4142135623730951}}}}},"n":{"df":24,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"15":{"tf":2.23606797749979},"16":{"tf":2.23606797749979},"17":{"tf":2.0},"18":{"tf":2.8284271247461903},"19":{"tf":2.23606797749979},"20":{"tf":3.872983346207417},"21":{"tf":3.605551275463989},"22":{"tf":3.4641016151377544},"23":{"tf":3.872983346207417},"24":{"tf":3.1622776601683795},"26":{"tf":4.58257569495584},"29":{"tf":6.0},"33":{"tf":2.0},"34":{"tf":1.7320508075688772},"58":{"tf":1.7320508075688772},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":2.0},"75":{"tf":1.4142135623730951},"77":{"tf":1.0}}},"o":{"c":{"df":0,"docs":{},"u":{"df":1,"docs":{"4":{"tf":1.0}},"s":{"df":1,"docs":{"64":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"49":{"tf":1.0},"56":{"tf":1.0},"6":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":7,"docs":{"12":{"tf":1.0},"18":{"tf":1.0},"2":{"tf":1.0},"29":{"tf":1.0},"4":{"tf":1.0},"6":{"tf":1.0},"74":{"tf":1.0}}}}}},"n":{"d":{"df":1,"docs":{"15":{"tf":1.0}}},"df":0,"docs":{}},"o":{"d":{"df":2,"docs":{"39":{"tf":1.0},"41":{"tf":1.0}}},"df":0,"docs":{}},"r":{"c":{"df":4,"docs":{"22":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"75":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"29":{"tf":1.0}}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"34":{"tf":1.0}}}},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"73":{"tf":1.0}}}}},"k":{"df":1,"docs":{"35":{"tf":1.0}}},"m":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"57":{"tf":1.0},"58":{"tf":1.0}}}},"df":2,"docs":{"10":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951}}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"17":{"tf":1.0}}},"u":{"df":0,"docs":{},"n":{"df":6,"docs":{"12":{"tf":1.0},"18":{"tf":1.0},"24":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":6,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"50":{"tf":1.0},"58":{"tf":1.0},"61":{"tf":1.4142135623730951},"67":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"10":{"tf":1.0}}}}},"p":{"df":1,"docs":{"35":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":3,"docs":{"19":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":2,"docs":{"39":{"tf":1.0},"78":{"tf":1.0}}},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"i":{"df":3,"docs":{"39":{"tf":1.0},"40":{"tf":1.4142135623730951},"41":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"66":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"18":{"tf":1.0}}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"m":{"_":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"(":{"&":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}},"l":{"df":1,"docs":{"33":{"tf":1.0}}}},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"'":{"df":1,"docs":{"19":{"tf":1.0}}},"df":22,"docs":{"10":{"tf":2.0},"14":{"tf":1.0},"15":{"tf":2.23606797749979},"16":{"tf":2.449489742783178},"17":{"tf":1.0},"18":{"tf":2.23606797749979},"19":{"tf":2.449489742783178},"20":{"tf":2.0},"22":{"tf":2.0},"24":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":2.449489742783178},"38":{"tf":1.4142135623730951},"58":{"tf":2.6457513110645907},"59":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951},"73":{"tf":1.7320508075688772},"74":{"tf":1.7320508075688772},"77":{"tf":1.4142135623730951},"78":{"tf":1.7320508075688772},"9":{"tf":1.0}}}}}}},"d":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"36":{"tf":1.0}}}}}}},"df":9,"docs":{"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"28":{"tf":1.7320508075688772},"29":{"tf":2.449489742783178},"42":{"tf":1.0},"48":{"tf":1.0},"58":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.0},"44":{"tf":1.0},"53":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":8,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"20":{"tf":1.0},"36":{"tf":1.0},"51":{"tf":1.0},"77":{"tf":1.4142135623730951}}}}}}},"g":{"a":{"df":8,"docs":{"11":{"tf":1.0},"28":{"tf":1.0},"48":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":2.0},"59":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":2.0}},"m":{"df":0,"docs":{},"e":{"df":2,"docs":{"42":{"tf":1.0},"44":{"tf":1.4142135623730951}}}},"s":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"59":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"58":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":19,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"29":{"tf":1.0},"33":{"tf":2.6457513110645907},"34":{"tf":1.4142135623730951},"35":{"tf":1.0},"51":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.7320508075688772},"59":{"tf":1.0},"60":{"tf":1.0},"65":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.7320508075688772},"74":{"tf":1.4142135623730951},"9":{"tf":1.0}}}}},"t":{"df":3,"docs":{"19":{"tf":1.0},"24":{"tf":1.0},"6":{"tf":1.0}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"t":{"@":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"b":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{":":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"/":{"c":{"df":0,"docs":{},"w":{"df":2,"docs":{"49":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"d":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"4":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":3,"docs":{"4":{"tf":1.0},"49":{"tf":1.0},"6":{"tf":1.0}},"h":{"df":0,"docs":{},"u":{"b":{"df":1,"docs":{"3":{"tf":1.0}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"e":{"df":8,"docs":{"10":{"tf":1.0},"29":{"tf":1.0},"36":{"tf":1.4142135623730951},"42":{"tf":1.0},"56":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0}},"n":{"df":6,"docs":{"11":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"34":{"tf":1.0},"56":{"tf":1.0},"74":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"o":{"b":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"18":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"m":{"b":{"df":0,"docs":{},"h":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"65":{"tf":1.0},"66":{"tf":1.0}}}},"df":24,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"20":{"tf":1.7320508075688772},"22":{"tf":1.0},"33":{"tf":1.7320508075688772},"36":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.4142135623730951},"51":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"74":{"tf":1.4142135623730951},"76":{"tf":1.0},"8":{"tf":1.0}},"e":{"df":2,"docs":{"42":{"tf":1.0},"43":{"tf":1.0}}},"l":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"4":{"tf":1.0}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"69":{"tf":1.0}}}},"o":{"d":{"df":16,"docs":{"15":{"tf":1.0},"17":{"tf":1.4142135623730951},"20":{"tf":1.0},"21":{"tf":1.0},"29":{"tf":1.0},"31":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"42":{"tf":1.0},"45":{"tf":1.0},"56":{"tf":1.7320508075688772},"57":{"tf":1.0},"6":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"78":{"tf":1.0}}},"df":0,"docs":{}},"t":{"c":{"df":0,"docs":{},"h":{"a":{"df":1,"docs":{"35":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":2,"docs":{"1":{"tf":1.0},"36":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":3,"docs":{"1":{"tf":1.0},"29":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":10,"docs":{"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}}},"df":15,"docs":{"15":{"tf":3.3166247903554},"16":{"tf":1.7320508075688772},"17":{"tf":1.7320508075688772},"18":{"tf":2.0},"19":{"tf":1.4142135623730951},"20":{"tf":2.23606797749979},"21":{"tf":2.23606797749979},"22":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.6457513110645907},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"69":{"tf":1.0}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":14,"docs":{"15":{"tf":2.0},"16":{"tf":1.7320508075688772},"17":{"tf":1.7320508075688772},"18":{"tf":2.449489742783178},"19":{"tf":1.7320508075688772},"20":{"tf":2.6457513110645907},"21":{"tf":3.0},"22":{"tf":2.23606797749979},"23":{"tf":2.0},"24":{"tf":2.0},"26":{"tf":2.8284271247461903},"29":{"tf":3.605551275463989},"32":{"tf":1.0},"33":{"tf":1.7320508075688772}}}}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"50":{"tf":1.0}}}}},"df":0,"docs":{}}},"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}}}},"df":10,"docs":{"38":{"tf":1.0},"49":{"tf":1.7320508075688772},"51":{"tf":2.23606797749979},"53":{"tf":1.0},"54":{"tf":2.449489742783178},"56":{"tf":2.449489742783178},"58":{"tf":1.4142135623730951},"64":{"tf":1.0},"65":{"tf":1.0},"77":{"tf":1.0}}}}}},"u":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":4,"docs":{"42":{"tf":1.0},"46":{"tf":1.0},"6":{"tf":1.0},"76":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"d":{"df":4,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"2":{"tf":1.0},"55":{"tf":1.0}}},"df":0,"docs":{}}}},"h":{"a":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"65":{"tf":1.0}}}},"n":{"d":{"df":4,"docs":{"27":{"tf":1.0},"33":{"tf":1.0},"42":{"tf":1.0},"73":{"tf":1.0}},"l":{"df":22,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.4142135623730951},"30":{"tf":1.0},"41":{"tf":1.4142135623730951},"43":{"tf":1.0},"45":{"tf":2.0},"46":{"tf":1.0},"48":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"58":{"tf":2.0},"59":{"tf":1.0},"60":{"tf":1.7320508075688772},"61":{"tf":1.4142135623730951},"62":{"tf":1.0},"63":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":8,"docs":{"15":{"tf":1.7320508075688772},"16":{"tf":1.4142135623730951},"19":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":1.0}}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":13,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"19":{"tf":1.0},"22":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.4142135623730951},"51":{"tf":1.0},"56":{"tf":1.7320508075688772},"59":{"tf":1.0},"61":{"tf":1.0},"73":{"tf":1.0}}}}}},"r":{"d":{"c":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"59":{"tf":1.0}}},"df":0,"docs":{}}},"df":1,"docs":{"28":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"18":{"tf":1.0}},"m":{"a":{"df":0,"docs":{},"p":{"df":2,"docs":{"73":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"e":{"df":3,"docs":{"20":{"tf":1.0},"48":{"tf":1.0},"52":{"tf":1.0}},"n":{"'":{"df":0,"docs":{},"t":{"df":1,"docs":{"43":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"28":{"tf":1.4142135623730951}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"26":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.0},"56":{"tf":1.4142135623730951},"58":{"tf":1.0},"76":{"tf":2.0}}}}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"@":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"h":{"df":1,"docs":{"82":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":13,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.4142135623730951},"20":{"tf":2.0},"21":{"tf":2.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178}}}},"p":{"df":11,"docs":{"14":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"27":{"tf":1.4142135623730951},"33":{"tf":1.0},"42":{"tf":1.0},"46":{"tf":1.0},"5":{"tf":1.0},"57":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"10":{"tf":1.0},"59":{"tf":1.0},"63":{"tf":1.0},"9":{"tf":1.0}},"s":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"e":{"df":24,"docs":{"10":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.7320508075688772},"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"24":{"tf":1.0},"36":{"tf":1.0},"39":{"tf":1.0},"44":{"tf":1.7320508075688772},"48":{"tf":1.0},"51":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.4142135623730951},"60":{"tf":1.0},"66":{"tf":1.4142135623730951},"67":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":2.0},"76":{"tf":1.0}}}}},"i":{"d":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"42":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"h":{"df":2,"docs":{"10":{"tf":1.0},"20":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"18":{"tf":1.0},"73":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"30":{"tf":1.0},"40":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"66":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"56":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"d":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"/":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"/":{"0":{"3":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"56":{"tf":2.0}}}}},"r":{"b":{"df":1,"docs":{"83":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":2,"docs":{"26":{"tf":1.0},"75":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"53":{"tf":1.0}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"41":{"tf":1.0}}}}}}}},"i":{"'":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"78":{"tf":1.0}}}},"m":{"df":1,"docs":{"15":{"tf":1.0}}}},"d":{"df":8,"docs":{"10":{"tf":1.0},"19":{"tf":1.4142135623730951},"41":{"tf":2.0},"48":{"tf":1.0},"50":{"tf":1.0},"59":{"tf":2.449489742783178},"61":{"tf":1.0},"76":{"tf":1.0}},"e":{"a":{"df":12,"docs":{"0":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"22":{"tf":1.0},"37":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0},"65":{"tf":1.0},"78":{"tf":1.0},"8":{"tf":1.0}},"l":{"df":2,"docs":{"44":{"tf":1.0},"72":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":3,"docs":{"52":{"tf":1.0},"61":{"tf":1.0},"76":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"17":{"tf":1.0},"20":{"tf":1.0},"50":{"tf":1.0}}}}}},"m":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":7,"docs":{"38":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.0},"48":{"tf":1.4142135623730951},"56":{"tf":1.0},"74":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":5,"docs":{"42":{"tf":1.0},"43":{"tf":1.0},"51":{"tf":1.0},"65":{"tf":1.0},"72":{"tf":1.0}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":18,"docs":{"10":{"tf":1.0},"14":{"tf":1.7320508075688772},"19":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"29":{"tf":2.0},"35":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"55":{"tf":1.0},"58":{"tf":1.0},"65":{"tf":1.4142135623730951},"66":{"tf":1.0},"67":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0}}}}}}},"i":{"c":{"df":1,"docs":{"35":{"tf":1.4142135623730951}}},"df":1,"docs":{"26":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":21,"docs":{"10":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":1.0},"35":{"tf":1.0},"39":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.7320508075688772},"59":{"tf":1.4142135623730951},"61":{"tf":1.0},"63":{"tf":1.0},"71":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"14":{"tf":1.0},"33":{"tf":1.0},"59":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":7,"docs":{"15":{"tf":2.0},"22":{"tf":1.0},"29":{"tf":1.0},"58":{"tf":1.0},"64":{"tf":1.0},"72":{"tf":1.0},"75":{"tf":1.0}}}}}}},"n":{"a":{"c":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"18":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"d":{"df":2,"docs":{"12":{"tf":1.0},"39":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"29":{"tf":1.4142135623730951}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"58":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":2,"docs":{"42":{"tf":1.0},"76":{"tf":1.0}}}},"df":0,"docs":{}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":2,"docs":{"75":{"tf":1.0},"76":{"tf":1.7320508075688772}},"e":{"d":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"56":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"42":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{")":{".":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":4,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":6,"docs":{"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178},"75":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"74":{"tf":1.0},"75":{"tf":1.0}}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"74":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":18,"docs":{"10":{"tf":1.0},"14":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"18":{"tf":1.7320508075688772},"20":{"tf":2.0},"22":{"tf":3.0},"23":{"tf":3.4641016151377544},"24":{"tf":2.0},"26":{"tf":2.8284271247461903},"29":{"tf":4.0},"33":{"tf":2.0},"34":{"tf":2.0},"44":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.0}},"m":{"df":1,"docs":{"79":{"tf":1.0}}},"r":{"df":0,"docs":{},"m":{"df":12,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":1.0},"17":{"tf":1.0},"33":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"58":{"tf":2.449489742783178},"79":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"t":{"_":{"b":{"a":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":11,"docs":{"10":{"tf":1.0},"20":{"tf":1.7320508075688772},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"29":{"tf":1.4142135623730951},"51":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.7320508075688772},"78":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"23":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"71":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"18":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"4":{"tf":3.0},"5":{"tf":1.7320508075688772},"6":{"tf":1.0}}},"n":{"c":{"df":5,"docs":{"18":{"tf":1.0},"50":{"tf":1.4142135623730951},"51":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":2,"docs":{"16":{"tf":1.0},"20":{"tf":1.0}}}}},"df":0,"docs":{}},"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":8,"docs":{"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":2.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":2.0},"26":{"tf":3.0},"29":{"tf":4.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":16,"docs":{"20":{"tf":2.6457513110645907},"21":{"tf":3.0},"22":{"tf":2.8284271247461903},"23":{"tf":3.0},"24":{"tf":2.449489742783178},"26":{"tf":3.605551275463989},"29":{"tf":4.795831523312719},"32":{"tf":1.0},"33":{"tf":2.6457513110645907},"34":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}}}}}},"df":30,"docs":{"10":{"tf":2.449489742783178},"14":{"tf":2.449489742783178},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":2.8284271247461903},"19":{"tf":2.449489742783178},"20":{"tf":3.3166247903554},"21":{"tf":3.0},"22":{"tf":2.6457513110645907},"23":{"tf":2.449489742783178},"24":{"tf":2.23606797749979},"26":{"tf":3.3166247903554},"29":{"tf":4.795831523312719},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"39":{"tf":1.0},"45":{"tf":1.4142135623730951},"51":{"tf":2.8284271247461903},"54":{"tf":1.7320508075688772},"57":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.4142135623730951},"65":{"tf":1.0},"66":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"77":{"tf":1.7320508075688772},"78":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{},"e":{"a":{"d":{"df":19,"docs":{"11":{"tf":1.0},"12":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"18":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"39":{"tf":1.4142135623730951},"41":{"tf":1.0},"47":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"35":{"tf":1.4142135623730951},"4":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"19":{"tf":1.0},"50":{"tf":1.0},"54":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"58":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":9,"docs":{"19":{"tf":1.0},"2":{"tf":1.0},"29":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"51":{"tf":1.0},"60":{"tf":1.4142135623730951},"72":{"tf":1.0},"73":{"tf":1.4142135623730951}}}}},"n":{"df":8,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"38":{"tf":1.0}}}}}}}},"o":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":7,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"26":{"tf":2.23606797749979},"29":{"tf":3.0}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"61":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":5,"docs":{"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"19":{"tf":1.4142135623730951},"20":{"tf":1.0},"22":{"tf":1.0}},"t":{"df":2,"docs":{"0":{"tf":1.0},"7":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"69":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"54":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"42":{"tf":1.0}}}},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"25":{"tf":1.0}}},"l":{"df":0,"docs":{},"v":{"df":2,"docs":{"19":{"tf":1.0},"62":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":2,"docs":{"69":{"tf":1.0},"74":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"35":{"tf":1.0}}}},"n":{"'":{"df":0,"docs":{},"t":{"df":1,"docs":{"48":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":2,"docs":{"64":{"tf":1.0},"65":{"tf":1.0}}}},"s":{"df":0,"docs":{},"u":{"df":6,"docs":{"29":{"tf":1.0},"3":{"tf":1.0},"58":{"tf":1.0},"62":{"tf":1.0},"65":{"tf":1.0},"74":{"tf":1.0}}}}},"t":{"'":{"df":3,"docs":{"19":{"tf":1.0},"29":{"tf":1.0},"64":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"\"":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"20":{"tf":1.0},"29":{"tf":1.0},"72":{"tf":1.0}}}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":4,"docs":{"29":{"tf":1.0},"72":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"<":{"_":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":4,"docs":{"29":{"tf":1.0},"72":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}}},"t":{"df":1,"docs":{"56":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"c":{"<":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":4,"docs":{"20":{"tf":1.4142135623730951},"29":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":5,"docs":{"20":{"tf":1.7320508075688772},"22":{"tf":1.7320508075688772},"56":{"tf":1.4142135623730951},"73":{"tf":2.8284271247461903},"74":{"tf":1.7320508075688772}}},"r":{"df":7,"docs":{"13":{"tf":1.0},"26":{"tf":2.449489742783178},"29":{"tf":3.872983346207417},"6":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":2.6457513110645907},"74":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":18,"docs":{"1":{"tf":1.0},"10":{"tf":1.0},"15":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"39":{"tf":1.0},"40":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"58":{"tf":2.0},"6":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.7320508075688772}}}}}}}},"j":{"df":0,"docs":{},"o":{"b":{"df":6,"docs":{"19":{"tf":1.0},"21":{"tf":1.0},"39":{"tf":1.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"44":{"tf":1.0}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"77":{"tf":2.23606797749979},"78":{"tf":2.449489742783178}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"78":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":1,"docs":{"78":{"tf":1.0}}}}}}}}}}}}},"q":{"df":1,"docs":{"53":{"tf":1.0}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":10,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":2.0},"20":{"tf":1.0},"32":{"tf":1.4142135623730951},"33":{"tf":2.23606797749979},"50":{"tf":1.0},"53":{"tf":1.7320508075688772},"57":{"tf":1.7320508075688772},"58":{"tf":1.0}},"s":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":1,"docs":{"33":{"tf":2.23606797749979}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"u":{"d":{"df":0,"docs":{},"g":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"k":{"df":1,"docs":{"73":{"tf":1.0}},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":14,"docs":{"16":{"tf":1.0},"20":{"tf":1.7320508075688772},"29":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772},"58":{"tf":1.4142135623730951},"72":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0}}}},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"24":{"tf":1.0},"42":{"tf":1.0}}}},"y":{"df":11,"docs":{"20":{"tf":2.23606797749979},"26":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.4142135623730951},"52":{"tf":1.7320508075688772},"54":{"tf":1.7320508075688772},"56":{"tf":1.4142135623730951},"58":{"tf":1.0},"73":{"tf":2.6457513110645907},"74":{"tf":2.0},"75":{"tf":2.0}},"s":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"74":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"f":{"c":{"df":7,"docs":{"39":{"tf":1.4142135623730951},"40":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"51":{"tf":1.0},"59":{"tf":1.0}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"n":{"d":{"df":13,"docs":{"30":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.4142135623730951},"44":{"tf":1.0},"48":{"tf":1.4142135623730951},"54":{"tf":1.0},"56":{"tf":1.0},"62":{"tf":1.4142135623730951},"77":{"tf":1.0}}},"df":0,"docs":{}},"t":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"39":{"tf":1.0}}}}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":18,"docs":{"11":{"tf":1.0},"24":{"tf":1.4142135623730951},"25":{"tf":1.0},"27":{"tf":1.0},"36":{"tf":1.0},"41":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.4142135623730951},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"68":{"tf":1.0},"71":{"tf":1.7320508075688772},"74":{"tf":1.0}},"l":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"g":{"df":4,"docs":{"1":{"tf":1.0},"17":{"tf":1.0},"22":{"tf":1.0},"64":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"l":{"a":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":4,"docs":{"19":{"tf":1.0},"20":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"14":{"tf":1.0},"26":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"g":{"df":4,"docs":{"1":{"tf":1.0},"47":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"df":13,"docs":{"13":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.4142135623730951},"22":{"tf":1.0},"29":{"tf":1.0},"39":{"tf":1.0},"58":{"tf":1.4142135623730951},"61":{"tf":1.0},"63":{"tf":1.0},"71":{"tf":1.4142135623730951},"73":{"tf":1.0},"78":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":9,"docs":{"17":{"tf":1.0},"18":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"48":{"tf":1.0},"58":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.7320508075688772},"9":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"26":{"tf":1.0}}}}},"z":{"df":0,"docs":{},"i":{"df":1,"docs":{"56":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"d":{"df":2,"docs":{"0":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":5,"docs":{"1":{"tf":1.4142135623730951},"11":{"tf":1.0},"48":{"tf":1.0},"54":{"tf":1.4142135623730951},"65":{"tf":1.0}}}},"v":{"df":14,"docs":{"15":{"tf":1.0},"18":{"tf":1.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.23606797749979},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"39":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":1.7320508075688772},"75":{"tf":1.4142135623730951},"78":{"tf":1.0}},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":7,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"74":{"tf":1.0},"75":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":4,"docs":{"29":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0}},"o":{"df":0,"docs":{},"v":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"g":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"79":{"tf":1.0}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"74":{"tf":1.0}}}},"t":{"'":{"df":30,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.4142135623730951},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":1.0},"42":{"tf":1.7320508075688772},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"50":{"tf":1.0},"53":{"tf":1.7320508075688772},"54":{"tf":1.7320508075688772},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.4142135623730951},"65":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":2.0},"77":{"tf":1.7320508075688772}}},"df":0,"docs":{},"’":{"df":1,"docs":{"46":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":10,"docs":{"10":{"tf":1.0},"16":{"tf":1.7320508075688772},"18":{"tf":1.0},"20":{"tf":1.0},"30":{"tf":1.0},"38":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.4142135623730951},"61":{"tf":1.0},"71":{"tf":2.23606797749979}}}}}},"i":{"b":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.0}}}},"df":8,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":2.0},"70":{"tf":1.0},"9":{"tf":1.4142135623730951}},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":11,"docs":{"16":{"tf":1.0},"19":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":2.6457513110645907},"58":{"tf":2.23606797749979},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"70":{"tf":2.0},"9":{"tf":2.23606797749979}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":1,"docs":{"15":{"tf":1.0}}},"f":{"df":0,"docs":{},"e":{"df":4,"docs":{"19":{"tf":1.0},"20":{"tf":1.0},"25":{"tf":1.0},"42":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"10":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":5,"docs":{"14":{"tf":1.0},"35":{"tf":1.4142135623730951},"4":{"tf":1.0},"53":{"tf":1.0},"74":{"tf":2.0}}}}},"n":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"74":{"tf":1.7320508075688772}}}},"df":5,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"29":{"tf":1.0},"5":{"tf":1.0},"58":{"tf":1.0}}}},"s":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":1,"docs":{"43":{"tf":1.0}}}}},"t":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":2,"docs":{"53":{"tf":2.0},"54":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"df":16,"docs":{"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":1.0},"30":{"tf":1.4142135623730951},"39":{"tf":1.0},"44":{"tf":3.3166247903554},"45":{"tf":1.7320508075688772},"51":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.0},"65":{"tf":1.4142135623730951},"66":{"tf":1.0},"72":{"tf":1.4142135623730951},"74":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"39":{"tf":1.0}}}}}}},"o":{"a":{"d":{"df":4,"docs":{"22":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"78":{"tf":1.0}}},"df":0,"docs":{}},"c":{"a":{"df":0,"docs":{},"l":{"df":6,"docs":{"11":{"tf":1.0},"17":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"52":{"tf":1.4142135623730951},"74":{"tf":1.0}}},"t":{"df":1,"docs":{"49":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":5,"docs":{"26":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.0}},"i":{"c":{"df":4,"docs":{"16":{"tf":1.0},"26":{"tf":1.4142135623730951},"27":{"tf":1.0},"74":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"s":{"[":{"]":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"51":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"44":{"tf":1.4142135623730951},"7":{"tf":1.0},"74":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"k":{"df":33,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.4142135623730951},"2":{"tf":1.0},"22":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.4142135623730951},"37":{"tf":1.0},"38":{"tf":1.0},"40":{"tf":1.0},"43":{"tf":2.23606797749979},"44":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951},"47":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.4142135623730951},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":1.7320508075688772},"59":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.4142135623730951},"62":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"71":{"tf":1.0},"76":{"tf":1.4142135623730951},"78":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"65":{"tf":1.0}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"18":{"tf":1.0}}}}},"w":{"df":1,"docs":{"27":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"56":{"tf":1.0},"73":{"tf":1.0}}}}}}},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"35":{"tf":1.0},"4":{"tf":1.0},"58":{"tf":1.7320508075688772}}}}},"r":{"df":0,"docs":{},"o":{"df":3,"docs":{"10":{"tf":1.0},"33":{"tf":1.0},"58":{"tf":1.4142135623730951}}}}},"d":{"df":0,"docs":{},"e":{"df":4,"docs":{"16":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.0},"62":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"c":{"df":3,"docs":{"10":{"tf":1.0},"24":{"tf":1.0},"48":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"10":{"tf":1.4142135623730951},"26":{"tf":1.0},"33":{"tf":1.0},"58":{"tf":1.4142135623730951}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"0":{"tf":1.0},"24":{"tf":1.0},"3":{"tf":1.0},"6":{"tf":1.0}}}}},"df":0,"docs":{}}}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"15":{"tf":1.0}}}}},"k":{"df":0,"docs":{},"e":{"df":25,"docs":{"12":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"26":{"tf":1.4142135623730951},"27":{"tf":1.0},"33":{"tf":1.4142135623730951},"4":{"tf":1.0},"41":{"tf":1.4142135623730951},"44":{"tf":1.7320508075688772},"48":{"tf":1.7320508075688772},"54":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.7320508075688772},"6":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"74":{"tf":1.4142135623730951},"78":{"tf":1.7320508075688772}}}},"l":{"a":{"df":0,"docs":{},"g":{"a":{"df":2,"docs":{"47":{"tf":1.0},"7":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"g":{"df":10,"docs":{"20":{"tf":1.0},"28":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"81":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":12,"docs":{"16":{"tf":1.0},"30":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.4142135623730951},"76":{"tf":1.0}},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"48":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"48":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"43":{"tf":1.0}}}}}},"p":{"(":{"df":0,"docs":{},"|":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":7,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"\"":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"<":{"&":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":2,"docs":{"75":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"74":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"k":{"df":1,"docs":{"56":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"73":{"tf":1.0}}}}}},"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":12,"docs":{"38":{"tf":1.0},"42":{"tf":1.0},"48":{"tf":1.4142135623730951},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":2.0},"62":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951},"73":{"tf":3.1622776601683795},"74":{"tf":3.605551275463989},"75":{"tf":2.0},"77":{"tf":2.0}}},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"42":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"56":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":2,"docs":{"15":{"tf":1.0},"20":{"tf":1.0}}}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":15,"docs":{"15":{"tf":1.7320508075688772},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.7320508075688772},"26":{"tf":2.0},"29":{"tf":2.449489742783178},"48":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"74":{"tf":1.0}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"15":{"tf":1.0},"20":{"tf":1.0},"40":{"tf":1.0},"48":{"tf":1.0},"53":{"tf":1.0}}}}}},"y":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":2,"docs":{"22":{"tf":1.0},"73":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"b":{"df":6,"docs":{"16":{"tf":1.0},"36":{"tf":1.0},"42":{"tf":1.4142135623730951},"54":{"tf":1.0},"58":{"tf":1.0},"73":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"df":4,"docs":{"39":{"tf":1.7320508075688772},"40":{"tf":1.0},"41":{"tf":1.7320508075688772},"42":{"tf":1.0}}},"n":{"df":8,"docs":{"14":{"tf":1.0},"28":{"tf":1.0},"35":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.4142135623730951},"48":{"tf":1.0},"67":{"tf":1.0},"76":{"tf":1.7320508075688772}},"t":{"df":1,"docs":{"48":{"tf":1.0}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"17":{"tf":1.0},"20":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":2,"docs":{"38":{"tf":1.0},"48":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"54":{"tf":1.0}}},"df":7,"docs":{"22":{"tf":1.0},"51":{"tf":2.0},"53":{"tf":1.4142135623730951},"54":{"tf":3.1622776601683795},"56":{"tf":1.7320508075688772},"71":{"tf":1.4142135623730951},"77":{"tf":1.0}},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":1,"docs":{"38":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":10,"docs":{"33":{"tf":1.0},"34":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"52":{"tf":1.0},"61":{"tf":1.4142135623730951},"62":{"tf":1.0},"76":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":39,"docs":{"10":{"tf":3.0},"14":{"tf":3.0},"15":{"tf":3.872983346207417},"16":{"tf":2.23606797749979},"17":{"tf":2.6457513110645907},"18":{"tf":2.8284271247461903},"19":{"tf":2.23606797749979},"20":{"tf":3.7416573867739413},"21":{"tf":2.8284271247461903},"22":{"tf":3.3166247903554},"23":{"tf":1.7320508075688772},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"28":{"tf":1.4142135623730951},"29":{"tf":3.872983346207417},"32":{"tf":2.0},"33":{"tf":2.6457513110645907},"35":{"tf":1.4142135623730951},"39":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.449489742783178},"48":{"tf":1.7320508075688772},"51":{"tf":2.0},"52":{"tf":1.7320508075688772},"53":{"tf":1.0},"54":{"tf":1.7320508075688772},"56":{"tf":1.0},"57":{"tf":2.8284271247461903},"58":{"tf":3.7416573867739413},"59":{"tf":2.8284271247461903},"60":{"tf":2.6457513110645907},"61":{"tf":3.1622776601683795},"62":{"tf":1.0},"63":{"tf":1.7320508075688772},"67":{"tf":2.0},"70":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0}},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":20,"docs":{"10":{"tf":1.7320508075688772},"14":{"tf":1.4142135623730951},"15":{"tf":2.0},"16":{"tf":2.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.7320508075688772},"20":{"tf":3.1622776601683795},"21":{"tf":2.449489742783178},"22":{"tf":3.0},"23":{"tf":3.3166247903554},"24":{"tf":2.23606797749979},"26":{"tf":3.1622776601683795},"29":{"tf":4.242640687119285},"33":{"tf":1.7320508075688772},"34":{"tf":1.7320508075688772},"58":{"tf":1.7320508075688772},"74":{"tf":2.449489742783178},"75":{"tf":1.7320508075688772},"77":{"tf":1.4142135623730951}}}}}}}}},"df":1,"docs":{"18":{"tf":1.0}}}},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":4,"docs":{"14":{"tf":1.4142135623730951},"25":{"tf":1.0},"41":{"tf":1.0},"54":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":2,"docs":{"10":{"tf":1.0},"20":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"d":{"df":3,"docs":{"50":{"tf":1.0},"58":{"tf":1.0},"73":{"tf":1.0}}},"df":0,"docs":{}}}}},"i":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"38":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":7,"docs":{"10":{"tf":1.0},"19":{"tf":1.0},"48":{"tf":1.7320508075688772},"54":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"62":{"tf":3.872983346207417},"73":{"tf":1.0}},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"62":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"62":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{}}},"n":{"d":{"df":3,"docs":{"42":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"11":{"tf":1.0},"4":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}},"t":{"df":1,"docs":{"44":{"tf":1.0}}}},"r":{"a":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"24":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"40":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"m":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"s":{"df":4,"docs":{"20":{"tf":1.4142135623730951},"29":{"tf":1.0},"73":{"tf":1.0},"78":{"tf":1.0}}},"t":{"a":{"df":0,"docs":{},"k":{"df":1,"docs":{"3":{"tf":1.0}}}},"df":0,"docs":{}}}},"m":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":3,"docs":{"42":{"tf":1.4142135623730951},"44":{"tf":2.23606797749979},"45":{"tf":1.0}}}}}},"df":1,"docs":{"44":{"tf":2.0}},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"g":{"df":1,"docs":{"42":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"52":{"tf":1.4142135623730951}}}}}}},"o":{"c":{"df":0,"docs":{},"k":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"18":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"(":{")":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"18":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"18":{"tf":2.23606797749979}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"(":{"\"":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"18":{"tf":1.4142135623730951}}}}}}},"df":1,"docs":{"18":{"tf":1.4142135623730951}}}},"d":{"df":14,"docs":{"15":{"tf":1.0},"16":{"tf":1.7320508075688772},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.4142135623730951},"20":{"tf":3.1622776601683795},"21":{"tf":2.0},"22":{"tf":2.449489742783178},"23":{"tf":3.3166247903554},"24":{"tf":1.7320508075688772},"26":{"tf":2.449489742783178},"29":{"tf":3.0},"33":{"tf":2.0},"34":{"tf":2.0}},"e":{"df":0,"docs":{},"l":{"df":17,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"29":{"tf":1.4142135623730951},"36":{"tf":1.0},"37":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"39":{"tf":1.4142135623730951},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.4142135623730951},"46":{"tf":1.0},"48":{"tf":1.4142135623730951},"52":{"tf":1.0},"55":{"tf":1.7320508075688772},"64":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":5,"docs":{"10":{"tf":1.0},"20":{"tf":1.0},"29":{"tf":1.0},"48":{"tf":1.7320508075688772},"54":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"df":8,"docs":{"15":{"tf":1.0},"16":{"tf":1.7320508075688772},"17":{"tf":1.4142135623730951},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.4142135623730951},"69":{"tf":1.0}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"56":{"tf":1.0},"58":{"tf":1.0},"62":{"tf":1.0},"78":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":2,"docs":{"42":{"tf":1.0},"48":{"tf":1.0}}}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"76":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":25,"docs":{"10":{"tf":1.7320508075688772},"15":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"26":{"tf":1.0},"32":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.7320508075688772},"44":{"tf":1.7320508075688772},"45":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"62":{"tf":1.0},"65":{"tf":1.4142135623730951},"71":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"41":{"tf":1.4142135623730951},"47":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"49":{"tf":1.4142135623730951}}}}},"v":{"df":0,"docs":{},"e":{"df":8,"docs":{"16":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"50":{"tf":1.0},"74":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"g":{".":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":4,"docs":{"29":{"tf":1.7320508075688772},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"r":{"df":4,"docs":{"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"62":{"tf":1.0}}}},":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"20":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":2,"docs":{"16":{"tf":1.0},"20":{"tf":1.4142135623730951}}}}}}}}}},"{":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":4,"docs":{"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":25,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":2.0},"16":{"tf":2.6457513110645907},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.4142135623730951},"20":{"tf":4.358898943540674},"21":{"tf":2.8284271247461903},"22":{"tf":3.605551275463989},"23":{"tf":4.47213595499958},"24":{"tf":2.449489742783178},"26":{"tf":3.4641016151377544},"29":{"tf":4.242640687119285},"33":{"tf":2.8284271247461903},"34":{"tf":2.6457513110645907},"58":{"tf":1.7320508075688772},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.4142135623730951},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}},"t":{"df":1,"docs":{"20":{"tf":1.0}}},"u":{"c":{"df":0,"docs":{},"h":{"df":12,"docs":{"10":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"26":{"tf":1.0},"42":{"tf":1.0},"48":{"tf":1.7320508075688772},"53":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":11,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":1.0},"24":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"33":{"tf":1.0},"41":{"tf":1.0},"65":{"tf":1.0},"70":{"tf":1.0}},"p":{"df":0,"docs":{},"l":{"df":7,"docs":{"26":{"tf":1.4142135623730951},"36":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.4142135623730951},"76":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"19":{"tf":2.8284271247461903}}}}}}}}},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"t":{"df":9,"docs":{"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.7320508075688772},"21":{"tf":1.7320508075688772},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":2.0},"26":{"tf":3.0},"29":{"tf":4.0}}}},"y":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"34":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"18":{"tf":1.0}}}}}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":19,"docs":{"11":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":2.0},"19":{"tf":1.4142135623730951},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.4142135623730951},"32":{"tf":1.7320508075688772},"33":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.0},"52":{"tf":1.4142135623730951},"53":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"70":{"tf":1.4142135623730951},"77":{"tf":1.0},"9":{"tf":1.0}},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":1,"docs":{"15":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":8,"docs":{"10":{"tf":1.7320508075688772},"11":{"tf":1.0},"12":{"tf":1.0},"19":{"tf":1.0},"28":{"tf":2.0},"29":{"tf":1.0},"48":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"r":{"df":4,"docs":{"28":{"tf":1.0},"42":{"tf":1.0},"48":{"tf":1.0},"54":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"26":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"d":{"df":40,"docs":{"11":{"tf":1.0},"14":{"tf":1.7320508075688772},"17":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"19":{"tf":2.0},"20":{"tf":2.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":2.6457513110645907},"33":{"tf":1.4142135623730951},"35":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":2.0},"40":{"tf":1.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.7320508075688772},"43":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.4142135623730951},"59":{"tf":1.0},"6":{"tf":1.4142135623730951},"61":{"tf":1.0},"64":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.7320508075688772},"75":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.7320508075688772},"78":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":16,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.0},"35":{"tf":1.4142135623730951},"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"51":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"73":{"tf":1.0},"76":{"tf":1.0}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"30":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"77":{"tf":1.4142135623730951}}}}}}}},"w":{"df":26,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.7320508075688772},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"26":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":2.0},"30":{"tf":1.0},"33":{"tf":1.7320508075688772},"34":{"tf":1.0},"48":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.7320508075688772},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.7320508075688772},"65":{"tf":1.4142135623730951},"77":{"tf":1.0},"78":{"tf":1.7320508075688772},"9":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"71":{"tf":1.0}}}}},"x":{"df":0,"docs":{},"t":{"df":6,"docs":{"10":{"tf":1.0},"15":{"tf":1.0},"19":{"tf":1.4142135623730951},"33":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.0}}}}},"i":{"c":{"df":0,"docs":{},"e":{"df":7,"docs":{"18":{"tf":1.0},"19":{"tf":1.4142135623730951},"23":{"tf":1.0},"24":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"d":{"df":0,"docs":{},"e":{"df":2,"docs":{"74":{"tf":1.0},"76":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"69":{"tf":1.0}}}},"n":{"df":8,"docs":{"15":{"tf":1.0},"20":{"tf":1.0},"24":{"tf":1.0},"41":{"tf":1.0},"43":{"tf":1.0},"52":{"tf":1.7320508075688772},"61":{"tf":1.0},"71":{"tf":1.0}},"e":{"df":12,"docs":{"19":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"21":{"tf":2.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":2.0},"26":{"tf":3.0},"29":{"tf":4.0},"44":{"tf":1.0},"61":{"tf":1.4142135623730951},"73":{"tf":2.23606797749979},"74":{"tf":2.0}}}},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"58":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":14,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"17":{"tf":1.0},"20":{"tf":1.4142135623730951},"29":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.4142135623730951},"59":{"tf":1.0},"67":{"tf":1.0},"70":{"tf":1.0},"72":{"tf":1.0},"77":{"tf":1.0}}},"h":{"df":10,"docs":{"14":{"tf":1.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"30":{"tf":1.0},"34":{"tf":1.0},"44":{"tf":1.0},"66":{"tf":1.0}}},"i":{"c":{"df":9,"docs":{"10":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"22":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"70":{"tf":1.0},"73":{"tf":1.0}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"51":{"tf":1.0}}}},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"20":{"tf":1.0},"28":{"tf":1.0},"44":{"tf":1.0},"76":{"tf":1.0}}}}}},"w":{"df":48,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"15":{"tf":2.23606797749979},"16":{"tf":2.449489742783178},"17":{"tf":1.7320508075688772},"18":{"tf":1.7320508075688772},"19":{"tf":1.7320508075688772},"20":{"tf":2.449489742783178},"21":{"tf":1.4142135623730951},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":2.0},"31":{"tf":1.0},"33":{"tf":2.0},"34":{"tf":1.4142135623730951},"35":{"tf":1.0},"36":{"tf":1.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.0},"44":{"tf":2.0},"45":{"tf":2.0},"46":{"tf":1.0},"48":{"tf":1.4142135623730951},"49":{"tf":1.4142135623730951},"50":{"tf":2.0},"51":{"tf":1.0},"54":{"tf":2.449489742783178},"55":{"tf":1.0},"58":{"tf":1.4142135623730951},"6":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.4142135623730951},"63":{"tf":1.0},"64":{"tf":1.4142135623730951},"65":{"tf":1.0},"68":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":1.7320508075688772},"72":{"tf":1.0},"74":{"tf":2.23606797749979},"75":{"tf":1.0},"77":{"tf":1.4142135623730951},"9":{"tf":1.0}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":8,"docs":{"29":{"tf":1.4142135623730951},"35":{"tf":1.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.0},"51":{"tf":1.0},"59":{"tf":1.0},"76":{"tf":1.0},"84":{"tf":1.0}}}}},"df":0,"docs":{}}}},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":13,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.7320508075688772},"15":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":1.0},"27":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"58":{"tf":2.449489742783178},"61":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":4,"docs":{"39":{"tf":1.4142135623730951},"41":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"77":{"tf":1.0}}}}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":3,"docs":{"15":{"tf":1.4142135623730951},"57":{"tf":1.0},"60":{"tf":1.0}},"s":{"df":3,"docs":{"48":{"tf":1.0},"51":{"tf":1.0},"73":{"tf":1.0}}}}}}}},"c":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"18":{"tf":1.0},"24":{"tf":1.0},"30":{"tf":1.0}}}}},"df":0,"docs":{}},"df":2,"docs":{"21":{"tf":1.0},"53":{"tf":1.0}},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"36":{"tf":1.0}}}},"df":0,"docs":{}}}},"k":{"(":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"22":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":14,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.7320508075688772},"21":{"tf":2.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.449489742783178},"29":{"tf":3.3166247903554},"74":{"tf":1.7320508075688772},"75":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":17,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"26":{"tf":2.0},"29":{"tf":2.449489742783178},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"df":5,"docs":{"10":{"tf":1.0},"17":{"tf":1.4142135623730951},"24":{"tf":1.0},"58":{"tf":1.4142135623730951},"61":{"tf":1.0}}},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"62":{"tf":1.0}}}}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"14":{"tf":1.0}}}}},"n":{"c":{"df":6,"docs":{"10":{"tf":1.0},"29":{"tf":1.0},"34":{"tf":1.4142135623730951},"36":{"tf":1.0},"40":{"tf":1.0},"59":{"tf":1.0}}},"df":44,"docs":{"0":{"tf":1.0},"10":{"tf":1.4142135623730951},"14":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.7320508075688772},"35":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.7320508075688772},"52":{"tf":1.0},"53":{"tf":1.7320508075688772},"54":{"tf":2.449489742783178},"56":{"tf":2.23606797749979},"57":{"tf":2.449489742783178},"58":{"tf":3.0},"59":{"tf":1.0},"60":{"tf":1.7320508075688772},"61":{"tf":1.4142135623730951},"62":{"tf":1.7320508075688772},"63":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"7":{"tf":1.4142135623730951},"71":{"tf":1.7320508075688772},"72":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"74":{"tf":1.0},"75":{"tf":1.0},"78":{"tf":1.0},"9":{"tf":1.4142135623730951}},"e":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"73":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"19":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":15,"docs":{"10":{"tf":1.0},"23":{"tf":1.0},"35":{"tf":1.7320508075688772},"39":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"7":{"tf":1.0}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"77":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":3,"docs":{"11":{"tf":1.0},"4":{"tf":1.0},"71":{"tf":1.0}},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{"0":{".":{"1":{"2":{".":{"6":{"df":1,"docs":{"49":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"o":{"df":0,"docs":{},"n":{"df":7,"docs":{"17":{"tf":1.0},"20":{"tf":1.0},"4":{"tf":1.0},"45":{"tf":2.0},"51":{"tf":1.0},"53":{"tf":1.0},"78":{"tf":1.0}}}}}}},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"a":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"73":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":8,"docs":{"39":{"tf":1.7320508075688772},"40":{"tf":1.4142135623730951},"41":{"tf":2.23606797749979},"51":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":6,"docs":{"24":{"tf":1.4142135623730951},"38":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.4142135623730951},"59":{"tf":1.0},"61":{"tf":1.0}}}}}},"m":{"df":1,"docs":{"56":{"tf":1.0}}}},"s":{"df":2,"docs":{"11":{"tf":1.0},"78":{"tf":1.0}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"7":{"tf":1.4142135623730951}}}}}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"30":{"tf":1.0},"70":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"34":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}}}}}},"t":{"df":18,"docs":{"15":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"24":{"tf":1.4142135623730951},"27":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.0},"44":{"tf":2.449489742783178},"45":{"tf":1.0},"48":{"tf":1.0},"56":{"tf":1.0},"59":{"tf":1.4142135623730951},"73":{"tf":1.0},"77":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"10":{"tf":1.0}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"50":{"tf":1.0},"6":{"tf":1.0},"70":{"tf":1.7320508075688772}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":5,"docs":{"18":{"tf":1.0},"27":{"tf":1.0},"58":{"tf":1.0},"73":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"58":{"tf":1.0}},"p":{"df":0,"docs":{},"l":{"df":2,"docs":{"10":{"tf":1.0},"12":{"tf":1.0}}}}}}},"df":5,"docs":{"15":{"tf":1.0},"60":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":2.0},"74":{"tf":1.0}},"h":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"14":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"w":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"61":{"tf":1.0}}}},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}}},"w":{"df":0,"docs":{},"n":{"df":4,"docs":{"20":{"tf":1.0},"44":{"tf":1.0},"65":{"tf":1.0},"75":{"tf":1.0}},"e":{"d":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"18":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":2,"docs":{"20":{"tf":1.0},"28":{"tf":1.0}}}}}}},"p":{"9":{"df":0,"docs":{},"p":{"df":0,"docs":{},"n":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"w":{"3":{"3":{"df":0,"docs":{},"v":{"4":{"0":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"5":{"df":0,"docs":{},"l":{"4":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"df":1,"docs":{"54":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"a":{"c":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"g":{"df":8,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":1,"docs":{"1":{"tf":1.0}}},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"53":{"tf":1.0},"74":{"tf":1.0}}}}},"i":{"d":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}}},"df":0,"docs":{},"n":{"df":1,"docs":{"33":{"tf":1.0}}},"r":{"df":5,"docs":{"20":{"tf":1.0},"26":{"tf":1.0},"58":{"tf":1.0},"73":{"tf":1.0},"76":{"tf":1.0}}}},"n":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"24":{"tf":1.0}},"k":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"40":{"tf":1.0},"53":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"s":{"df":1,"docs":{"20":{"tf":1.4142135623730951}}},"t":{"df":16,"docs":{"16":{"tf":1.0},"29":{"tf":1.7320508075688772},"36":{"tf":1.0},"39":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.7320508075688772},"54":{"tf":1.4142135623730951},"58":{"tf":1.0},"59":{"tf":1.0},"64":{"tf":1.0},"71":{"tf":1.4142135623730951},"73":{"tf":1.0}},"i":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"42":{"tf":1.0},"56":{"tf":1.0}},"e":{"df":0,"docs":{},"q":{"df":8,"docs":{"17":{"tf":2.0},"20":{"tf":1.7320508075688772},"21":{"tf":2.0},"22":{"tf":2.23606797749979},"23":{"tf":1.0},"29":{"tf":2.449489742783178},"32":{"tf":2.23606797749979},"33":{"tf":2.23606797749979}}}}}},"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":1,"docs":{"39":{"tf":1.0}}}},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":14,"docs":{"29":{"tf":1.0},"35":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.4142135623730951},"43":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.4142135623730951},"51":{"tf":1.0},"56":{"tf":1.4142135623730951},"70":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0},"78":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"i":{"df":3,"docs":{"26":{"tf":1.0},"29":{"tf":1.0},"75":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"s":{"df":15,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.4142135623730951},"13":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.0},"20":{"tf":2.23606797749979},"41":{"tf":2.0},"53":{"tf":1.0},"54":{"tf":1.4142135623730951},"56":{"tf":1.0},"6":{"tf":2.0},"62":{"tf":1.0},"73":{"tf":1.0}},"i":{"df":0,"docs":{},"v":{"df":2,"docs":{"25":{"tf":1.0},"39":{"tf":1.0}}}}},"t":{"df":3,"docs":{"62":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"69":{"tf":1.0}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":4,"docs":{"0":{"tf":1.0},"41":{"tf":1.0},"67":{"tf":1.0},"71":{"tf":1.0}}}}}}},"y":{"df":3,"docs":{"28":{"tf":1.0},"44":{"tf":2.0},"56":{"tf":1.0}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"(":{"#":{"[":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"29":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"39":{"tf":1.0},"40":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}}}}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"44":{"tf":2.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"10":{"tf":1.0},"29":{"tf":1.0}},"f":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"48":{"tf":1.0}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":21,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"14":{"tf":1.7320508075688772},"18":{"tf":1.0},"19":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"38":{"tf":1.4142135623730951},"39":{"tf":1.4142135623730951},"40":{"tf":2.0},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"43":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.7320508075688772},"48":{"tf":1.0},"54":{"tf":1.4142135623730951},"60":{"tf":1.0},"62":{"tf":2.0},"67":{"tf":1.4142135623730951}}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"18":{"tf":1.0},"48":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"44":{"tf":1.0},"65":{"tf":1.0}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"47":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"40":{"tf":1.0},"74":{"tf":1.0}},"l":{"df":1,"docs":{"43":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"c":{"df":1,"docs":{"58":{"tf":1.0}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}},"l":{"a":{"c":{"df":0,"docs":{},"e":{"df":4,"docs":{"20":{"tf":1.0},"26":{"tf":1.0},"6":{"tf":1.0},"75":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"14":{"tf":1.0}}}},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"46":{"tf":1.0}}}}}},"z":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}}},"y":{"df":5,"docs":{"25":{"tf":1.0},"43":{"tf":1.0},"46":{"tf":1.0},"52":{"tf":1.0},"7":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"44":{"tf":1.0}}},"df":3,"docs":{"42":{"tf":1.7320508075688772},"44":{"tf":3.4641016151377544},"45":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"3":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"30":{"tf":1.0}}}},"u":{"df":9,"docs":{"2":{"tf":1.0},"20":{"tf":2.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"40":{"tf":1.0},"49":{"tf":1.4142135623730951},"6":{"tf":2.23606797749979},"70":{"tf":1.0}},"s":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"49":{"tf":1.0},"6":{"tf":1.0}}}}}},"/":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"49":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"/":{"c":{"df":0,"docs":{},"w":{"1":{"df":1,"docs":{"6":{"tf":1.4142135623730951}}},"4":{"df":2,"docs":{"49":{"tf":1.0},"56":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":19,"docs":{"10":{"tf":4.0},"14":{"tf":2.0},"16":{"tf":2.23606797749979},"19":{"tf":1.4142135623730951},"20":{"tf":2.23606797749979},"22":{"tf":1.7320508075688772},"23":{"tf":1.0},"34":{"tf":2.0},"35":{"tf":3.0},"39":{"tf":1.0},"42":{"tf":1.0},"48":{"tf":1.4142135623730951},"56":{"tf":1.0},"58":{"tf":3.605551275463989},"61":{"tf":1.0},"62":{"tf":1.7320508075688772},"63":{"tf":1.0},"68":{"tf":1.0},"77":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"38":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"56":{"tf":1.0},"58":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"42":{"tf":1.0},"48":{"tf":1.0}}}}},"i":{"b":{"df":0,"docs":{},"l":{"df":14,"docs":{"22":{"tf":1.4142135623730951},"26":{"tf":1.0},"29":{"tf":1.4142135623730951},"38":{"tf":1.0},"39":{"tf":1.4142135623730951},"41":{"tf":1.4142135623730951},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"59":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.4142135623730951},"73":{"tf":1.0},"78":{"tf":1.0}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"22":{"tf":1.0},"74":{"tf":1.0}}}}}},"s":{"d":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"v":{"df":1,"docs":{"71":{"tf":1.0}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"46":{"tf":1.0}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":14,"docs":{"12":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.4142135623730951},"31":{"tf":1.4142135623730951},"32":{"tf":1.0},"33":{"tf":1.0},"36":{"tf":1.0},"45":{"tf":1.0},"56":{"tf":1.0},"6":{"tf":1.0},"64":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}}},"df":0,"docs":{}}}},"d":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"20":{"tf":1.0},"61":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"15":{"tf":1.0},"48":{"tf":1.0},"59":{"tf":1.0}}}},"i":{"df":0,"docs":{},"x":{"df":2,"docs":{"20":{"tf":1.7320508075688772},"26":{"tf":1.0}}}}},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"77":{"tf":1.0}}}}}},"df":0,"docs":{}},"p":{"a":{"df":0,"docs":{},"r":{"df":6,"docs":{"19":{"tf":1.0},"29":{"tf":1.4142135623730951},"39":{"tf":1.7320508075688772},"40":{"tf":2.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"1":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"14":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":3,"docs":{"21":{"tf":1.0},"38":{"tf":1.0},"74":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"30":{"tf":1.4142135623730951},"65":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":7,"docs":{"40":{"tf":1.0},"41":{"tf":1.0},"48":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"62":{"tf":1.0},"71":{"tf":1.0}},"s":{"df":10,"docs":{"14":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"47":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"77":{"tf":1.4142135623730951}}}}}}}},"i":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"68":{"tf":1.0}}}}}}},"df":0,"docs":{}},"n":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":3,"docs":{"38":{"tf":1.0},"43":{"tf":1.0},"64":{"tf":1.0}}}}}},"df":0,"docs":{},"t":{"df":2,"docs":{"17":{"tf":1.0},"42":{"tf":1.0}}}}},"o":{"b":{"a":{"b":{"df":0,"docs":{},"l":{"df":10,"docs":{"1":{"tf":1.0},"16":{"tf":1.0},"19":{"tf":1.4142135623730951},"22":{"tf":1.0},"29":{"tf":1.0},"39":{"tf":1.0},"45":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":22,"docs":{"15":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"26":{"tf":1.4142135623730951},"32":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"35":{"tf":1.4142135623730951},"37":{"tf":1.0},"38":{"tf":1.7320508075688772},"40":{"tf":1.0},"41":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"54":{"tf":1.0},"62":{"tf":1.7320508075688772},"64":{"tf":1.0},"65":{"tf":1.4142135623730951},"70":{"tf":1.0},"73":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":8,"docs":{"19":{"tf":1.0},"53":{"tf":1.0},"58":{"tf":1.7320508075688772},"59":{"tf":2.0},"61":{"tf":1.7320508075688772},"65":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"76":{"tf":1.4142135623730951}}}}}},"d":{"df":0,"docs":{},"u":{"c":{"df":3,"docs":{"18":{"tf":1.0},"25":{"tf":1.0},"27":{"tf":1.0}},"t":{"df":3,"docs":{"11":{"tf":1.0},"24":{"tf":1.0},"4":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"40":{"tf":1.0}}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":4,"docs":{"42":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"58":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"10":{"tf":1.0},"59":{"tf":1.0}}}}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":6,"docs":{"12":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":3.1622776601683795},"77":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":13,"docs":{"10":{"tf":1.0},"15":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"42":{"tf":1.0},"5":{"tf":1.0},"54":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"9":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":8,"docs":{"26":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"46":{"tf":1.0},"47":{"tf":1.0},"57":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"65":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"40":{"tf":1.0}}}}},"df":0,"docs":{}}},"v":{"df":0,"docs":{},"i":{"d":{"df":11,"docs":{"18":{"tf":1.0},"19":{"tf":1.7320508075688772},"21":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"35":{"tf":1.0},"46":{"tf":1.0},"58":{"tf":1.0},"80":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}},"x":{"df":0,"docs":{},"i":{"df":1,"docs":{"67":{"tf":1.0}}}}}},"u":{"b":{"df":29,"docs":{"10":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":2.8284271247461903},"16":{"tf":2.8284271247461903},"17":{"tf":2.449489742783178},"18":{"tf":2.449489742783178},"19":{"tf":2.0},"20":{"tf":4.358898943540674},"21":{"tf":4.123105625617661},"22":{"tf":4.242640687119285},"23":{"tf":3.7416573867739413},"24":{"tf":2.6457513110645907},"26":{"tf":3.7416573867739413},"29":{"tf":5.916079783099616},"32":{"tf":3.0},"33":{"tf":5.830951894845301},"34":{"tf":2.6457513110645907},"58":{"tf":1.7320508075688772},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"69":{"tf":2.8284271247461903},"72":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":2.23606797749979},"75":{"tf":2.0},"76":{"tf":2.449489742783178},"77":{"tf":1.7320508075688772},"78":{"tf":1.4142135623730951}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"52":{"tf":1.4142135623730951}}}}},"l":{"df":0,"docs":{},"i":{"c":{"df":4,"docs":{"16":{"tf":1.0},"33":{"tf":1.0},"42":{"tf":1.4142135623730951},"43":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"3":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"14":{"tf":1.0}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":16,"docs":{"10":{"tf":1.0},"11":{"tf":1.4142135623730951},"15":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.7320508075688772},"24":{"tf":1.0},"32":{"tf":1.0},"35":{"tf":1.0},"48":{"tf":1.0},"57":{"tf":1.4142135623730951},"61":{"tf":1.0},"62":{"tf":1.0},"65":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":1.4142135623730951},"77":{"tf":1.0}}}}}},"t":{"df":2,"docs":{"51":{"tf":1.4142135623730951},"66":{"tf":1.0}}}},"w":{"d":{")":{"\"":{")":{"_":{"c":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"\"":{",":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"=":{"/":{"c":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"49":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},":":{"/":{"c":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"49":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":25,"docs":{"10":{"tf":2.23606797749979},"14":{"tf":3.4641016151377544},"15":{"tf":4.0},"16":{"tf":2.23606797749979},"17":{"tf":1.7320508075688772},"18":{"tf":3.0},"19":{"tf":2.8284271247461903},"20":{"tf":2.23606797749979},"21":{"tf":3.1622776601683795},"22":{"tf":2.0},"23":{"tf":1.7320508075688772},"24":{"tf":2.0},"25":{"tf":1.0},"26":{"tf":3.0},"29":{"tf":4.0},"33":{"tf":2.0},"43":{"tf":3.0},"48":{"tf":1.4142135623730951},"50":{"tf":1.4142135623730951},"53":{"tf":3.0},"54":{"tf":2.449489742783178},"58":{"tf":2.23606797749979},"69":{"tf":2.23606797749979},"74":{"tf":2.23606797749979},"78":{"tf":2.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"14":{"tf":1.0}}}}},"y":{"(":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":7,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.0}}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":12,"docs":{"16":{"tf":1.0},"20":{"tf":1.7320508075688772},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.0},"58":{"tf":1.0},"69":{"tf":1.0}},"s":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"18":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"_":{"b":{"a":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"(":{"\"":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"1":{"df":1,"docs":{"29":{"tf":1.0}}},"2":{"df":1,"docs":{"29":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"29":{"tf":1.0}}}}},"&":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"(":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":8,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":2.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"26":{"tf":2.449489742783178},"29":{"tf":3.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"19":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{":":{":":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":6,"docs":{"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":9,"docs":{"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}}},"df":0,"docs":{}},"df":18,"docs":{"15":{"tf":2.449489742783178},"16":{"tf":2.0},"17":{"tf":2.23606797749979},"18":{"tf":2.449489742783178},"19":{"tf":1.7320508075688772},"20":{"tf":2.6457513110645907},"21":{"tf":2.6457513110645907},"22":{"tf":2.449489742783178},"23":{"tf":2.6457513110645907},"24":{"tf":1.7320508075688772},"26":{"tf":2.449489742783178},"29":{"tf":3.1622776601683795},"32":{"tf":1.0},"33":{"tf":2.6457513110645907},"34":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.0},"69":{"tf":1.7320508075688772}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":2,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"33":{"tf":1.7320508075688772},"69":{"tf":1.0}}}}}}}}}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":2.23606797749979},"45":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":6,"docs":{"15":{"tf":1.0},"20":{"tf":1.0},"42":{"tf":1.4142135623730951},"48":{"tf":1.0},"56":{"tf":1.0},"78":{"tf":1.0}}}}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"47":{"tf":1.0},"7":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"71":{"tf":1.0}},"g":{"df":1,"docs":{"73":{"tf":1.7320508075688772}}}},"r":{"df":0,"docs":{},"e":{"df":5,"docs":{"12":{"tf":1.0},"25":{"tf":1.0},"27":{"tf":1.0},"45":{"tf":1.0},"73":{"tf":1.0}}}},"w":{"df":2,"docs":{"10":{"tf":1.0},"43":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"e":{"a":{"c":{"df":0,"docs":{},"h":{"df":5,"docs":{"22":{"tf":1.0},"41":{"tf":1.0},"59":{"tf":1.0},"73":{"tf":1.0},"78":{"tf":1.0}}},"t":{"df":3,"docs":{"14":{"tf":1.0},"39":{"tf":1.0},"41":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"25":{"tf":1.0}}}},"v":{"df":1,"docs":{"14":{"tf":1.0}}}}}},"d":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"53":{"tf":1.0}}}},"df":0,"docs":{}},"df":8,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"20":{"tf":1.0},"22":{"tf":1.4142135623730951},"36":{"tf":1.0},"59":{"tf":1.0},"73":{"tf":2.0},"77":{"tf":1.0}},"i":{"df":9,"docs":{"16":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"24":{"tf":1.0},"35":{"tf":1.0},"39":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":9,"docs":{"18":{"tf":1.0},"19":{"tf":1.0},"25":{"tf":1.0},"4":{"tf":1.0},"42":{"tf":1.0},"46":{"tf":1.0},"67":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"42":{"tf":1.0},"44":{"tf":1.0}}}},"z":{"df":2,"docs":{"42":{"tf":1.0},"56":{"tf":1.0}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"58":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":17,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"24":{"tf":1.4142135623730951},"35":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.0},"41":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"48":{"tf":1.7320508075688772},"56":{"tf":1.0},"60":{"tf":1.0},"64":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":5,"docs":{"30":{"tf":1.0},"39":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"74":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"33":{"tf":1.0}}}},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":3,"docs":{"1":{"tf":1.0},"58":{"tf":1.0},"7":{"tf":1.0}}},"df":0,"docs":{}}}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"74":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"d":{"df":1,"docs":{"54":{"tf":1.0}}},"df":0,"docs":{}},"v":{"df":1,"docs":{"24":{"tf":1.0}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"u":{"c":{"df":2,"docs":{"11":{"tf":1.0},"33":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"46":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"f":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"15":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"52":{"tf":1.0},"69":{"tf":1.0},"75":{"tf":1.4142135623730951}}}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"18":{"tf":1.0},"71":{"tf":1.0}}}},"df":0,"docs":{}}}},"g":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"78":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"65":{"tf":1.0},"83":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"20":{"tf":1.0}}}}}}},"l":{"a":{"df":0,"docs":{},"t":{"df":9,"docs":{"15":{"tf":1.0},"29":{"tf":1.0},"36":{"tf":1.0},"48":{"tf":1.0},"51":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.7320508075688772},"63":{"tf":1.0},"71":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":2,"docs":{"33":{"tf":1.0},"66":{"tf":1.0}}}}}}}}}}},"df":1,"docs":{"65":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"s":{"df":4,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":1.0},"33":{"tf":1.0},"62":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"v":{"df":9,"docs":{"0":{"tf":1.0},"31":{"tf":1.0},"43":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.0},"74":{"tf":1.0}}}},"i":{"df":2,"docs":{"27":{"tf":1.0},"78":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":9,"docs":{"41":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"51":{"tf":1.0},"56":{"tf":1.0},"59":{"tf":1.0},"62":{"tf":1.0},"71":{"tf":1.0},"77":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"v":{"df":9,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":2.0},"33":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.7320508075688772},"69":{"tf":1.7320508075688772},"74":{"tf":1.4142135623730951},"77":{"tf":1.4142135623730951}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":4,"docs":{"15":{"tf":1.0},"32":{"tf":1.0},"62":{"tf":1.0},"71":{"tf":1.0}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":5,"docs":{"41":{"tf":2.449489742783178},"45":{"tf":3.4641016151377544},"58":{"tf":1.0},"59":{"tf":1.7320508075688772},"61":{"tf":3.1622776601683795}}},"y":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"61":{"tf":1.0}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"59":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"o":{"df":2,"docs":{"6":{"tf":1.0},"71":{"tf":1.0}},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"23":{"tf":1.4142135623730951},"26":{"tf":1.0},"58":{"tf":1.0}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":4,"docs":{"36":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.4142135623730951},"6":{"tf":1.7320508075688772}}}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":8,"docs":{"10":{"tf":1.4142135623730951},"18":{"tf":1.0},"19":{"tf":1.0},"52":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"61":{"tf":1.0},"74":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"15":{"tf":1.4142135623730951},"19":{"tf":1.0},"56":{"tf":1.0}}}}}}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":6,"docs":{"10":{"tf":1.0},"3":{"tf":1.0},"39":{"tf":1.4142135623730951},"45":{"tf":1.0},"61":{"tf":1.0},"78":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"r":{"df":16,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.0},"14":{"tf":1.0},"17":{"tf":1.7320508075688772},"33":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.4142135623730951},"41":{"tf":1.0},"43":{"tf":1.0},"52":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.4142135623730951},"9":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":3,"docs":{"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":1,"docs":{"48":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":1,"docs":{"71":{"tf":1.7320508075688772}}}},"u":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"1":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"(":{"df":0,"docs":{},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":2,"docs":{"26":{"tf":1.0},"29":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":15,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.7320508075688772},"18":{"tf":2.8284271247461903},"19":{"tf":1.7320508075688772},"20":{"tf":2.6457513110645907},"21":{"tf":3.3166247903554},"22":{"tf":2.6457513110645907},"23":{"tf":2.6457513110645907},"24":{"tf":2.6457513110645907},"26":{"tf":4.242640687119285},"29":{"tf":5.656854249492381},"74":{"tf":1.7320508075688772},"75":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":34,"docs":{"10":{"tf":1.7320508075688772},"14":{"tf":1.4142135623730951},"15":{"tf":2.23606797749979},"16":{"tf":2.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":2.0},"21":{"tf":2.23606797749979},"22":{"tf":1.4142135623730951},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":2.0},"27":{"tf":1.0},"29":{"tf":2.23606797749979},"33":{"tf":1.7320508075688772},"34":{"tf":1.0},"38":{"tf":1.7320508075688772},"40":{"tf":1.0},"43":{"tf":1.0},"45":{"tf":1.4142135623730951},"53":{"tf":1.0},"58":{"tf":1.7320508075688772},"59":{"tf":1.4142135623730951},"60":{"tf":1.0},"61":{"tf":1.7320508075688772},"62":{"tf":1.0},"64":{"tf":1.4142135623730951},"66":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.4142135623730951},"85":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":4,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":2.23606797749979},"74":{"tf":1.4142135623730951},"75":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"t":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"39":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.0}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"<":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":11,"docs":{"10":{"tf":1.0},"23":{"tf":1.7320508075688772},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.8284271247461903},"33":{"tf":1.0},"34":{"tf":1.0},"58":{"tf":1.4142135623730951},"61":{"tf":1.0},"63":{"tf":1.0},"74":{"tf":1.0}},"e":{"<":{"df":0,"docs":{},"t":{"df":1,"docs":{"62":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}}},"t":{"df":1,"docs":{"61":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"c":{"<":{"_":{"df":1,"docs":{"74":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":16,"docs":{"10":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"22":{"tf":1.0},"26":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.4142135623730951},"50":{"tf":1.0},"51":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951},"58":{"tf":2.449489742783178},"59":{"tf":1.0},"61":{"tf":1.0},"73":{"tf":1.4142135623730951}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"56":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":19,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":2.8284271247461903},"15":{"tf":1.4142135623730951},"21":{"tf":1.0},"22":{"tf":2.23606797749979},"23":{"tf":1.7320508075688772},"24":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"26":{"tf":1.7320508075688772},"29":{"tf":2.23606797749979},"33":{"tf":1.0},"38":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"45":{"tf":1.0},"58":{"tf":3.1622776601683795},"61":{"tf":2.23606797749979},"73":{"tf":1.4142135623730951},"78":{"tf":1.7320508075688772}},"s":{"(":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":2,"docs":{"33":{"tf":1.0},"69":{"tf":1.0}}}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":1,"docs":{"33":{"tf":1.0}}}}}}}}}}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":1,"docs":{"78":{"tf":1.0}}}}}}}}}}}}}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"s":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"41":{"tf":1.0}}}},"df":0,"docs":{}},"df":3,"docs":{"66":{"tf":1.0},"75":{"tf":1.0},"9":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"74":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"22":{"tf":1.0}}}}}}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":3,"docs":{"28":{"tf":1.0},"30":{"tf":1.0},"44":{"tf":2.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"i":{"d":{"df":1,"docs":{"69":{"tf":1.0}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":11,"docs":{"15":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"24":{"tf":1.0},"27":{"tf":1.0},"48":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"78":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"i":{"b":{"df":4,"docs":{"29":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"70":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"m":{"df":1,"docs":{"49":{"tf":1.0}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":3,"docs":{"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772}}}},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}}}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"55":{"tf":1.0}}}}}},"n":{"d":{"df":1,"docs":{"29":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.7320508075688772}}}}}}},"p":{"c":{"df":1,"docs":{"38":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":3,"docs":{"26":{"tf":1.0},"43":{"tf":1.0},"61":{"tf":1.0}}}},"n":{"df":10,"docs":{"11":{"tf":1.7320508075688772},"17":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.7320508075688772},"33":{"tf":1.7320508075688772},"4":{"tf":1.4142135623730951},"49":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}}}},"s":{"df":0,"docs":{},"t":{"'":{"df":1,"docs":{"71":{"tf":1.0}}},"_":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"e":{"=":{"1":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":20,"docs":{"1":{"tf":2.0},"10":{"tf":1.7320508075688772},"11":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"19":{"tf":1.7320508075688772},"30":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"4":{"tf":2.6457513110645907},"57":{"tf":1.0},"58":{"tf":1.0},"61":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951},"77":{"tf":1.0},"9":{"tf":2.0}},"i":{"df":1,"docs":{"57":{"tf":1.0}}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"4":{"tf":1.0}}}}}}}},"s":{"a":{"d":{"df":1,"docs":{"54":{"tf":1.0}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":2,"docs":{"35":{"tf":1.0},"46":{"tf":1.0}}}},"k":{"df":0,"docs":{},"e":{"df":1,"docs":{"44":{"tf":1.0}}}},"l":{"a":{"d":{"df":1,"docs":{"40":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"e":{"df":14,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"28":{"tf":1.0},"30":{"tf":1.0},"44":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"61":{"tf":1.0},"65":{"tf":1.7320508075688772},"73":{"tf":1.0},"74":{"tf":1.4142135623730951},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0}}}},"n":{"d":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"x":{"df":2,"docs":{"38":{"tf":1.0},"46":{"tf":1.0}}}}},"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"39":{"tf":1.0},"40":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"e":{"df":2,"docs":{"20":{"tf":1.4142135623730951},"73":{"tf":1.0}}}}},"c":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"58":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":2,"docs":{"18":{"tf":1.0},"19":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}},"h":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":7,"docs":{"39":{"tf":1.4142135623730951},"40":{"tf":2.0},"41":{"tf":2.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"58":{"tf":1.0}}}}},"df":0,"docs":{},"m":{"a":{"df":6,"docs":{"15":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":4.242640687119285},"48":{"tf":1.0},"62":{"tf":1.0},"70":{"tf":1.0}},"r":{"df":3,"docs":{"29":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0}},"s":{":":{":":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":1,"docs":{"33":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"30":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"42":{"tf":1.0},"51":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":5,"docs":{"18":{"tf":1.0},"20":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.0},"65":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"19":{"tf":1.0},"36":{"tf":1.0},"48":{"tf":1.0},"9":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"46":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":22,"docs":{"12":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"4":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0},"67":{"tf":1.0},"71":{"tf":1.7320508075688772},"74":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"9":{"tf":1.0}},"m":{"df":4,"docs":{"18":{"tf":1.4142135623730951},"48":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0}}},"n":{"df":1,"docs":{"46":{"tf":1.0}}}},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"39":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"42":{"tf":1.0}}},"df":5,"docs":{"39":{"tf":2.0},"40":{"tf":1.4142135623730951},"41":{"tf":2.6457513110645907},"42":{"tf":1.0},"43":{"tf":1.0}}}}}},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"74":{"tf":1.0}},"i":{"c":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"36":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"n":{"d":{"df":15,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"20":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"44":{"tf":1.0},"48":{"tf":1.4142135623730951},"51":{"tf":1.0},"52":{"tf":1.7320508075688772},"53":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"59":{"tf":2.449489742783178},"60":{"tf":1.0},"61":{"tf":2.0}},"e":{"df":0,"docs":{},"r":{"df":10,"docs":{"14":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.6457513110645907},"42":{"tf":1.4142135623730951},"52":{"tf":1.0}}}}},"df":0,"docs":{},"s":{"df":3,"docs":{"10":{"tf":1.0},"16":{"tf":1.0},"41":{"tf":1.0}}},"t":{"df":12,"docs":{"10":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"22":{"tf":1.0},"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"56":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":2.23606797749979},"59":{"tf":1.4142135623730951},"61":{"tf":1.0},"63":{"tf":1.4142135623730951}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":4,"docs":{"15":{"tf":1.4142135623730951},"29":{"tf":1.0},"59":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"76":{"tf":1.0}}},"df":0,"docs":{}}}}},"r":{"d":{"df":11,"docs":{"14":{"tf":1.7320508075688772},"15":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"32":{"tf":1.7320508075688772},"33":{"tf":1.0},"35":{"tf":2.0},"57":{"tf":1.7320508075688772},"70":{"tf":1.0}},"e":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"32":{"tf":2.23606797749979},"33":{"tf":2.23606797749979}},"l":{"=":{"\"":{"df":0,"docs":{},"s":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"_":{"c":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"58":{"tf":1.0}}}}}},"{":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":10,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"29":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":14,"docs":{"14":{"tf":1.7320508075688772},"15":{"tf":2.0},"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"22":{"tf":1.0},"29":{"tf":1.0},"32":{"tf":1.7320508075688772},"33":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"61":{"tf":1.0},"73":{"tf":1.0}},"i":{"df":0,"docs":{},"z":{"df":3,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"20":{"tf":1.0}}}}}},"df":1,"docs":{"55":{"tf":1.0}},"o":{"df":0,"docs":{},"u":{"df":2,"docs":{"30":{"tf":1.0},"72":{"tf":1.0}}}}},"v":{"df":2,"docs":{"41":{"tf":1.7320508075688772},"51":{"tf":1.4142135623730951}},"i":{"c":{"df":1,"docs":{"38":{"tf":1.0}}},"df":0,"docs":{}}}},"t":{"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"27":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":16,"docs":{"10":{"tf":1.0},"27":{"tf":1.0},"4":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"54":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"61":{"tf":1.0},"62":{"tf":1.0},"67":{"tf":1.0},"70":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":3.0},"77":{"tf":1.4142135623730951}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"39":{"tf":1.0},"40":{"tf":1.0},"70":{"tf":1.0}}}}}},"h":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"33":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"38":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"35":{"tf":1.0}}}},"w":{"df":8,"docs":{"0":{"tf":1.4142135623730951},"14":{"tf":1.0},"16":{"tf":1.0},"42":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"74":{"tf":1.0},"9":{"tf":1.0}}}}},"i":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"24":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"58":{"tf":1.7320508075688772},"63":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"10":{"tf":1.0}}}}}}},"df":2,"docs":{"14":{"tf":1.0},"22":{"tf":1.0}}},"df":0,"docs":{}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":12,"docs":{"14":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"34":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.4142135623730951},"73":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"58":{"tf":1.0}}}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"81":{"tf":1.0},"85":{"tf":1.0}}}},"p":{"df":0,"docs":{},"l":{"df":20,"docs":{"10":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"14":{"tf":1.0},"17":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"35":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"49":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"9":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"20":{"tf":1.0},"58":{"tf":1.0}}}}},"i":{"c":{"df":2,"docs":{"14":{"tf":1.0},"44":{"tf":1.0}}},"df":1,"docs":{"33":{"tf":1.0}},"f":{"df":0,"docs":{},"i":{"df":5,"docs":{"29":{"tf":1.0},"39":{"tf":1.0},"43":{"tf":1.0},"60":{"tf":1.0},"74":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"l":{"df":2,"docs":{"19":{"tf":1.0},"78":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":22,"docs":{"10":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"18":{"tf":1.7320508075688772},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.4142135623730951},"39":{"tf":1.0},"48":{"tf":1.0},"53":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":2.0},"61":{"tf":1.0},"64":{"tf":1.7320508075688772},"66":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.7320508075688772},"74":{"tf":2.449489742783178},"76":{"tf":1.0}}}}},"t":{"df":1,"docs":{"29":{"tf":1.0}},"u":{"a":{"df":0,"docs":{},"t":{"df":4,"docs":{"23":{"tf":1.4142135623730951},"41":{"tf":1.4142135623730951},"65":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}}},"z":{"df":0,"docs":{},"e":{"df":2,"docs":{"11":{"tf":1.0},"4":{"tf":1.4142135623730951}}}}},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":2,"docs":{"33":{"tf":1.0},"73":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"18":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":2,"docs":{"24":{"tf":1.0},"34":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":4,"docs":{"33":{"tf":1.0},"58":{"tf":1.0},"61":{"tf":1.0},"71":{"tf":1.0}}}}}}}}},"m":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":2,"docs":{"26":{"tf":1.0},"64":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"11":{"tf":1.0},"20":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"62":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":33,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":1.0},"10":{"tf":2.0},"14":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"27":{"tf":1.0},"28":{"tf":2.0},"30":{"tf":1.0},"33":{"tf":1.0},"35":{"tf":1.7320508075688772},"36":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.4142135623730951},"4":{"tf":1.0},"42":{"tf":2.0},"43":{"tf":1.0},"48":{"tf":1.0},"5":{"tf":1.4142135623730951},"52":{"tf":1.0},"53":{"tf":1.4142135623730951},"54":{"tf":2.0},"55":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":1.4142135623730951},"64":{"tf":1.7320508075688772},"65":{"tf":1.0},"66":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":2.23606797749979}}}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"_":{"c":{"a":{"df":0,"docs":{},"s":{"df":2,"docs":{"32":{"tf":2.23606797749979},"33":{"tf":2.23606797749979}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"32":{"tf":1.0},"57":{"tf":1.0}}}},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":1,"docs":{"20":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"df":2,"docs":{"18":{"tf":1.0},"62":{"tf":1.0}}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"64":{"tf":1.0}}},"i":{"d":{"df":5,"docs":{"15":{"tf":1.0},"38":{"tf":1.0},"43":{"tf":1.0},"46":{"tf":1.0},"64":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"37":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"48":{"tf":1.0}}}},"v":{"df":3,"docs":{"38":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"73":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"33":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":15,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"25":{"tf":1.0},"30":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.7320508075688772},"49":{"tf":1.0},"51":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951},"58":{"tf":1.0},"71":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0}}},"i":{"df":0,"docs":{},"m":{"df":3,"docs":{"43":{"tf":1.0},"57":{"tf":1.0},"76":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"59":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"38":{"tf":1.0},"73":{"tf":1.0}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"74":{"tf":1.0}}},"df":0,"docs":{}},"r":{"c":{"df":1,"docs":{"22":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"74":{"tf":1.0}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":7,"docs":{"28":{"tf":1.0},"41":{"tf":1.7320508075688772},"45":{"tf":1.0},"48":{"tf":2.449489742783178},"56":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"f":{"df":7,"docs":{"10":{"tf":1.0},"44":{"tf":1.0},"47":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.7320508075688772},"67":{"tf":1.0},"73":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"32":{"tf":1.0}}}},"n":{"d":{"df":1,"docs":{"27":{"tf":1.0}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"16":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951}}}}}},"r":{"c":{"/":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"33":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"r":{"df":4,"docs":{"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0}},"s":{":":{"8":{"0":{":":{"1":{"4":{"df":1,"docs":{"20":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"23":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"l":{"df":0,"docs":{},"i":{"b":{".":{"df":0,"docs":{},"r":{"df":8,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"r":{"df":5,"docs":{"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"33":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"4":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":1,"docs":{"41":{"tf":1.0}}}},"k":{"df":0,"docs":{},"e":{"df":11,"docs":{"13":{"tf":1.0},"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"6":{"tf":1.0},"70":{"tf":1.0},"9":{"tf":1.0}}}},"n":{"d":{"a":{"df":0,"docs":{},"r":{"d":{"df":4,"docs":{"26":{"tf":1.0},"32":{"tf":1.0},"74":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"13":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{}},"t":{"_":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":1,"docs":{"53":{"tf":1.0}}}}},"df":0,"docs":{}},"df":22,"docs":{"1":{"tf":1.0},"10":{"tf":2.23606797749979},"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"34":{"tf":1.0},"46":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.7320508075688772},"49":{"tf":1.7320508075688772},"56":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"65":{"tf":1.4142135623730951},"68":{"tf":1.0},"7":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":1.4142135623730951},"77":{"tf":1.0},"9":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"69":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}}},"df":26,"docs":{"10":{"tf":2.23606797749979},"14":{"tf":2.0},"15":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":4.358898943540674},"21":{"tf":2.0},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"38":{"tf":1.0},"42":{"tf":3.872983346207417},"43":{"tf":3.1622776601683795},"44":{"tf":2.23606797749979},"45":{"tf":2.449489742783178},"48":{"tf":2.23606797749979},"53":{"tf":1.0},"54":{"tf":2.449489742783178},"56":{"tf":2.6457513110645907},"58":{"tf":2.0},"62":{"tf":2.0},"72":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.4142135623730951}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}}}}},"i":{"c":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":1,"docs":{"61":{"tf":1.0}}}}},"d":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"23":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":11,"docs":{"14":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"35":{"tf":1.0},"70":{"tf":1.0},"9":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"(":{"#":{"[":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"23":{"tf":1.0},"29":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"c":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":3,"docs":{"10":{"tf":1.0},"23":{"tf":1.7320508075688772},"29":{"tf":1.4142135623730951}}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"<":{"_":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}},"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":8,"docs":{"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"74":{"tf":1.0}}}}}}}}}}}}}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":17,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":2.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.0},"58":{"tf":1.0},"69":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":12,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"<":{"df":0,"docs":{},"t":{"df":1,"docs":{"22":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":19,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":2.449489742783178},"21":{"tf":2.0},"22":{"tf":2.449489742783178},"23":{"tf":2.23606797749979},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178},"33":{"tf":1.0},"34":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.4142135623730951},"77":{"tf":1.0}}}}}}}}},"v":{"df":0,"docs":{},"e":{"c":{"<":{"_":{"df":7,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":19,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.7320508075688772},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":2.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"77":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":10,"docs":{"0":{"tf":1.4142135623730951},"13":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"33":{"tf":1.0},"36":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"41":{"tf":1.0},"55":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":11,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"43":{"tf":1.4142135623730951},"45":{"tf":1.7320508075688772},"48":{"tf":1.0},"57":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"57":{"tf":1.0}}}},"p":{"df":1,"docs":{"73":{"tf":1.4142135623730951}}},"r":{"a":{"df":0,"docs":{},"g":{"df":12,"docs":{"2":{"tf":1.0},"20":{"tf":3.1622776601683795},"22":{"tf":1.4142135623730951},"23":{"tf":1.0},"29":{"tf":1.4142135623730951},"33":{"tf":1.0},"44":{"tf":1.0},"56":{"tf":1.0},"70":{"tf":1.0},"72":{"tf":1.4142135623730951},"73":{"tf":2.23606797749979},"78":{"tf":1.0}}}},"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"o":{"d":{"df":2,"docs":{"19":{"tf":1.0},"50":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":10,"docs":{"19":{"tf":1.0},"20":{"tf":2.449489742783178},"22":{"tf":1.0},"42":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.7320508075688772},"54":{"tf":1.0},"73":{"tf":1.4142135623730951},"74":{"tf":1.0},"77":{"tf":2.0}}},"i":{"df":3,"docs":{"18":{"tf":1.0},"35":{"tf":1.0},"61":{"tf":1.0}}}}},"r":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"m":{"a":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"s":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"73":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":2,"docs":{"16":{"tf":1.0},"58":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"18":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":18,"docs":{"14":{"tf":1.0},"15":{"tf":1.7320508075688772},"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":2.6457513110645907},"21":{"tf":1.0},"22":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"32":{"tf":1.4142135623730951},"33":{"tf":2.449489742783178},"53":{"tf":1.0},"58":{"tf":2.0},"61":{"tf":1.7320508075688772},"69":{"tf":1.0},"70":{"tf":1.0},"76":{"tf":1.0},"78":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"1":{"tf":1.0},"58":{"tf":1.0}}}}}}},"u":{"c":{"df":0,"docs":{},"t":{"df":13,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.7320508075688772},"22":{"tf":1.7320508075688772},"29":{"tf":1.7320508075688772},"32":{"tf":1.7320508075688772},"33":{"tf":3.0},"69":{"tf":1.4142135623730951},"76":{"tf":1.4142135623730951},"78":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":19,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.0},"16":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"38":{"tf":1.0},"43":{"tf":1.4142135623730951},"51":{"tf":1.0},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"71":{"tf":1.7320508075688772},"77":{"tf":1.0},"78":{"tf":1.0},"8":{"tf":1.0}}}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"50":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":3,"docs":{"15":{"tf":1.0},"32":{"tf":1.0},"57":{"tf":1.4142135623730951}}}}}},"u":{"b":{"c":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"38":{"tf":1.0}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"71":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":6,"docs":{"40":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":3.1622776601683795},"58":{"tf":2.23606797749979},"59":{"tf":2.0},"61":{"tf":3.0}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"59":{"tf":1.4142135623730951},"61":{"tf":1.0}}}},"df":0,"docs":{}}}},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"16":{"tf":1.0}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"_":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"59":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"59":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"u":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"59":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":2,"docs":{"58":{"tf":1.0},"59":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"61":{"tf":1.0}}}}}}}}}}}}}}},"df":0,"docs":{}}}}}}},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"56":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"43":{"tf":1.0},"53":{"tf":1.0},"61":{"tf":1.0}}}}}}}},"t":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"df":1,"docs":{"39":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"df":2,"docs":{"16":{"tf":1.0},"62":{"tf":1.0}},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"75":{"tf":1.0}}}}}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":5,"docs":{"10":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"5":{"tf":1.0}},"e":{"d":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"s":{"df":4,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"45":{"tf":1.7320508075688772},"59":{"tf":1.0}}}}}},"df":0,"docs":{},"h":{"df":21,"docs":{"10":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":1.0},"35":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.0},"50":{"tf":1.4142135623730951},"51":{"tf":1.0},"56":{"tf":1.0},"62":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"67":{"tf":1.0},"74":{"tf":2.0},"78":{"tf":1.7320508075688772},"9":{"tf":1.0}}}},"d":{"df":0,"docs":{},"o":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"63":{"tf":1.0}}}}},"df":0,"docs":{}},"df":2,"docs":{"10":{"tf":1.0},"63":{"tf":2.0}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"63":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"26":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"36":{"tf":1.0},"7":{"tf":1.0},"78":{"tf":1.0}}}}}}},"m":{"df":1,"docs":{"56":{"tf":1.0}},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"39":{"tf":1.0},"51":{"tf":1.0}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":12,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.4142135623730951},"20":{"tf":2.0},"21":{"tf":2.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"26":{"tf":2.449489742783178},"29":{"tf":3.0}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":5,"docs":{"10":{"tf":1.0},"29":{"tf":1.0},"42":{"tf":1.0},"53":{"tf":1.0},"65":{"tf":1.4142135623730951}}}},"s":{"df":4,"docs":{"14":{"tf":1.0},"45":{"tf":1.0},"61":{"tf":1.0},"73":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"df":8,"docs":{"20":{"tf":1.0},"41":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"69":{"tf":1.0},"78":{"tf":1.0}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":2,"docs":{"17":{"tf":1.0},"60":{"tf":1.0}}}}}}}},"w":{"df":1,"docs":{"38":{"tf":1.0}}},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"a":{"df":1,"docs":{"2":{"tf":1.0}}},"df":0,"docs":{}}}},"n":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"62":{"tf":1.0},"76":{"tf":1.0}}}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":11,"docs":{"10":{"tf":1.0},"39":{"tf":1.7320508075688772},"40":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.0},"52":{"tf":1.4142135623730951},"64":{"tf":1.0},"65":{"tf":1.4142135623730951},"76":{"tf":1.0},"77":{"tf":1.0}}}}}}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"42":{"tf":1.0},"48":{"tf":2.6457513110645907},"56":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":19,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"26":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.4142135623730951},"36":{"tf":1.0},"37":{"tf":1.0},"40":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"59":{"tf":1.7320508075688772},"64":{"tf":1.4142135623730951}},"n":{"df":1,"docs":{"39":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"k":{"df":10,"docs":{"18":{"tf":1.0},"29":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"51":{"tf":1.0},"55":{"tf":1.0},"61":{"tf":1.0},"64":{"tf":1.0}}}},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"(":{"df":1,"docs":{"33":{"tf":1.0}}},"/":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":1,"docs":{"33":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"3":{"2":{"df":2,"docs":{"13":{"tf":1.4142135623730951},"6":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":7,"docs":{"11":{"tf":2.0},"12":{"tf":1.4142135623730951},"33":{"tf":2.23606797749979},"34":{"tf":1.0},"4":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.4142135623730951}}}}}},"s":{"df":0,"docs":{},"k":{"df":4,"docs":{"38":{"tf":1.0},"39":{"tf":2.0},"41":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951}}}}},"df":2,"docs":{"56":{"tf":1.0},"60":{"tf":1.0}},"e":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"36":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"20":{"tf":1.0},"71":{"tf":1.0}}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"43":{"tf":1.0}}}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":7,"docs":{"0":{"tf":1.0},"11":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"51":{"tf":1.0},"60":{"tf":1.0},"64":{"tf":1.0}}}},"n":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"73":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"d":{"df":3,"docs":{"57":{"tf":1.0},"65":{"tf":1.0},"74":{"tf":1.4142135623730951}}},"df":1,"docs":{"73":{"tf":1.0}}},"r":{"df":0,"docs":{},"m":{"df":3,"docs":{"44":{"tf":1.0},"47":{"tf":1.0},"57":{"tf":1.0}}},"r":{"a":{"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"15":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"17":{"tf":1.0},"58":{"tf":1.0}}}},"df":0,"docs":{}},"df":25,"docs":{"11":{"tf":1.7320508075688772},"14":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":4.123105625617661},"18":{"tf":4.123105625617661},"19":{"tf":3.7416573867739413},"2":{"tf":1.0},"20":{"tf":4.123105625617661},"21":{"tf":3.3166247903554},"22":{"tf":1.7320508075688772},"23":{"tf":2.0},"24":{"tf":3.0},"26":{"tf":3.872983346207417},"29":{"tf":4.47213595499958},"30":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"4":{"tf":1.4142135623730951},"52":{"tf":1.0},"6":{"tf":1.7320508075688772},"69":{"tf":1.0},"7":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"78":{"tf":2.0}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":3,"docs":{"4":{"tf":1.0},"47":{"tf":1.0},"7":{"tf":1.7320508075688772}}}}}}},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"53":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"t":{"'":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":3,"docs":{"25":{"tf":1.0},"38":{"tf":1.0},"41":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"41":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":1.0}},"g":{"df":39,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"22":{"tf":1.7320508075688772},"23":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.4142135623730951},"35":{"tf":1.0},"36":{"tf":1.0},"39":{"tf":1.7320508075688772},"40":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"44":{"tf":2.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.7320508075688772},"50":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":1.0},"59":{"tf":1.4142135623730951},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.7320508075688772},"74":{"tf":1.0},"75":{"tf":1.0},"76":{"tf":1.0},"78":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"k":{"df":10,"docs":{"10":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"39":{"tf":1.0},"42":{"tf":1.0},"50":{"tf":1.4142135623730951},"58":{"tf":1.0},"60":{"tf":1.0},"65":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"23":{"tf":1.0},"29":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":6,"docs":{"23":{"tf":2.0},"24":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"58":{"tf":1.4142135623730951},"70":{"tf":1.0}}}}}}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":14,"docs":{"10":{"tf":1.0},"18":{"tf":1.4142135623730951},"32":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.4142135623730951},"56":{"tf":1.7320508075688772},"57":{"tf":1.7320508075688772},"58":{"tf":2.23606797749979},"59":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.0},"73":{"tf":1.7320508075688772},"74":{"tf":1.0}}}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":2,"docs":{"38":{"tf":1.0},"76":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"73":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":6,"docs":{"10":{"tf":1.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"29":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.4142135623730951}}},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"59":{"tf":1.0}}},"df":0,"docs":{}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":10,"docs":{"22":{"tf":1.0},"36":{"tf":1.4142135623730951},"44":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"65":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"8":{"tf":1.0}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"4":{"tf":1.0},"76":{"tf":1.0}}}}}}}}}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"74":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":22,"docs":{"11":{"tf":1.0},"14":{"tf":1.0},"17":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"35":{"tf":1.0},"41":{"tf":1.0},"54":{"tf":2.0},"55":{"tf":1.0},"56":{"tf":1.4142135623730951},"61":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":2.0},"73":{"tf":1.0},"74":{"tf":1.4142135623730951},"76":{"tf":3.0},"77":{"tf":2.449489742783178},"78":{"tf":2.23606797749979}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":5,"docs":{"10":{"tf":1.0},"58":{"tf":1.0},"76":{"tf":1.4142135623730951},"77":{"tf":1.4142135623730951},"78":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"m":{"df":0,"docs":{},"g":{"df":1,"docs":{"79":{"tf":1.0}}}},"o":{"_":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":11,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"58":{"tf":1.0}}},"y":{"(":{"&":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{":":{":":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":8,"docs":{"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"69":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":12,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":2,"docs":{"14":{"tf":1.0},"15":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"44":{"tf":1.0}}}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":7,"docs":{"10":{"tf":1.0},"18":{"tf":1.0},"28":{"tf":2.449489742783178},"29":{"tf":2.8284271247461903},"48":{"tf":2.6457513110645907},"60":{"tf":1.4142135623730951},"65":{"tf":1.0}}}}},"l":{"d":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"60":{"tf":1.0}}},"l":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"33":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":8,"docs":{"11":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"21":{"tf":1.0},"33":{"tf":1.0},"35":{"tf":1.0},"5":{"tf":1.0},"71":{"tf":1.0}}}},"p":{"df":4,"docs":{"16":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"61":{"tf":1.0},"71":{"tf":1.7320508075688772}},"i":{"c":{"df":2,"docs":{"0":{"tf":1.0},"55":{"tf":1.0}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"10":{"tf":1.0}}}}},"t":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"56":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"u":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"a":{"c":{"df":0,"docs":{},"k":{"_":{"c":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"44":{"tf":1.0},"77":{"tf":1.0}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"11":{"tf":1.0},"38":{"tf":1.0},"48":{"tf":1.7320508075688772},"62":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"29":{"tf":1.0},"44":{"tf":1.0}}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":5,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"17":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951}}}},"n":{"df":0,"docs":{},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":6,"docs":{"42":{"tf":1.4142135623730951},"43":{"tf":1.0},"44":{"tf":2.0},"45":{"tf":2.6457513110645907},"48":{"tf":1.7320508075688772},"76":{"tf":2.449489742783178}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":1,"docs":{"76":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":1,"docs":{"76":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":8,"docs":{"18":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"42":{"tf":2.23606797749979},"44":{"tf":2.23606797749979},"45":{"tf":1.0},"48":{"tf":1.0},"60":{"tf":1.4142135623730951}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":2,"docs":{"14":{"tf":1.0},"20":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"73":{"tf":1.0}}}}}},"y":{"df":1,"docs":{"51":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":3,"docs":{"18":{"tf":1.0},"38":{"tf":1.0},"44":{"tf":1.0}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"df":1,"docs":{"71":{"tf":1.7320508075688772}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":5,"docs":{"20":{"tf":1.0},"26":{"tf":1.4142135623730951},"35":{"tf":1.0},"45":{"tf":1.0},"76":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"0":{"tf":1.0}}}}}}},"df":10,"docs":{"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"25":{"tf":1.0},"30":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.0},"53":{"tf":1.4142135623730951},"73":{"tf":1.0},"8":{"tf":1.0}},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":7,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"39":{"tf":1.0},"44":{"tf":1.0},"58":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"e":{"df":7,"docs":{"20":{"tf":1.0},"34":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"74":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":4,"docs":{"27":{"tf":1.0},"38":{"tf":1.0},"48":{"tf":1.0},"58":{"tf":1.0}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"1":{"tf":1.0}}}}}}},"w":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"k":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"e":{"df":5,"docs":{"21":{"tf":1.0},"30":{"tf":1.0},"34":{"tf":1.0},"44":{"tf":1.0},"65":{"tf":1.0}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"30":{"tf":1.0}}}}},"o":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"73":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":18,"docs":{"15":{"tf":1.0},"18":{"tf":1.7320508075688772},"22":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"35":{"tf":1.0},"44":{"tf":1.4142135623730951},"51":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.4142135623730951},"57":{"tf":1.0},"61":{"tf":1.0},"66":{"tf":1.0},"73":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"76":{"tf":1.0}}}},"x":{"df":3,"docs":{"50":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"50":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"\"":{":":{"\"":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{".":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"p":{"2":{"5":{"6":{"df":0,"docs":{},"k":{"1":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"\"":{",":{"\"":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"\"":{":":{"\"":{"a":{"5":{"b":{"b":{"d":{"df":0,"docs":{},"h":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"/":{"4":{"df":0,"docs":{},"q":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"h":{"9":{"df":0,"docs":{},"h":{"9":{"+":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"j":{"df":0,"docs":{},"k":{"df":0,"docs":{},"v":{"df":0,"docs":{},"k":{"0":{"c":{"df":0,"docs":{},"o":{"3":{"1":{"df":0,"docs":{},"w":{"4":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"4":{"df":0,"docs":{},"p":{"5":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"52":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"5":{"df":0,"docs":{},"z":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"y":{"df":0,"docs":{},"v":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"5":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"z":{"7":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"df":0,"docs":{},"z":{"df":0,"docs":{},"u":{"0":{"c":{"df":0,"docs":{},"j":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"0":{"7":{"+":{"7":{"df":0,"docs":{},"g":{"d":{"a":{"a":{"df":0,"docs":{},"h":{"3":{"df":0,"docs":{},"u":{"df":0,"docs":{},"w":{"df":0,"docs":{},"g":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"2":{"df":0,"docs":{},"x":{"df":1,"docs":{"52":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"=":{"df":0,"docs":{},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{",":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"e":{"=":{"\"":{"$":{"(":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"49":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"_":{"c":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{",":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"=":{"/":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"/":{"c":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"49":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":35,"docs":{"10":{"tf":3.605551275463989},"14":{"tf":2.449489742783178},"15":{"tf":2.23606797749979},"16":{"tf":1.0},"17":{"tf":1.7320508075688772},"18":{"tf":1.0},"19":{"tf":1.7320508075688772},"20":{"tf":2.6457513110645907},"22":{"tf":1.0},"23":{"tf":2.449489742783178},"24":{"tf":2.6457513110645907},"26":{"tf":1.7320508075688772},"29":{"tf":1.7320508075688772},"33":{"tf":1.4142135623730951},"35":{"tf":2.23606797749979},"43":{"tf":1.0},"50":{"tf":1.7320508075688772},"51":{"tf":1.0},"52":{"tf":1.7320508075688772},"54":{"tf":1.0},"56":{"tf":2.6457513110645907},"57":{"tf":1.4142135623730951},"58":{"tf":3.1622776601683795},"59":{"tf":1.0},"60":{"tf":1.7320508075688772},"61":{"tf":1.4142135623730951},"62":{"tf":1.0},"63":{"tf":1.0},"70":{"tf":2.23606797749979},"73":{"tf":2.0},"74":{"tf":1.7320508075688772},"76":{"tf":1.4142135623730951},"77":{"tf":1.7320508075688772},"78":{"tf":1.4142135623730951},"9":{"tf":1.7320508075688772}}},"i":{"c":{"df":20,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"33":{"tf":1.0},"39":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":1.7320508075688772},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}}}}},"u":{"1":{"2":{"8":{"df":2,"docs":{"29":{"tf":2.6457513110645907},"74":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"3":{"2":{"df":1,"docs":{"76":{"tf":1.0}}},"df":0,"docs":{}},"6":{"4":{"df":2,"docs":{"73":{"tf":1.0},"76":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"67":{"tf":1.0}}}}}},"n":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.0}}}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"50":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"24":{"tf":1.4142135623730951}}}},"s":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"77":{"tf":1.0}}}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"d":{"df":5,"docs":{"10":{"tf":1.0},"29":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"67":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":5,"docs":{"14":{"tf":1.0},"20":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"74":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":3,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951}}}}},"q":{"df":0,"docs":{},"u":{"df":4,"docs":{"18":{"tf":1.0},"20":{"tf":1.4142135623730951},"74":{"tf":1.0},"76":{"tf":2.0}}}},"t":{"df":3,"docs":{"17":{"tf":1.7320508075688772},"4":{"tf":1.0},"74":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":2,"docs":{"41":{"tf":1.0},"42":{"tf":1.0}}}}}}},"k":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"6":{"tf":1.0}},"e":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"13":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"w":{"1":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"6":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":6,"docs":{"11":{"tf":2.0},"12":{"tf":2.0},"13":{"tf":1.4142135623730951},"33":{"tf":2.0},"4":{"tf":1.4142135623730951},"6":{"tf":1.7320508075688772}}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":4,"docs":{"26":{"tf":1.0},"50":{"tf":1.0},"58":{"tf":1.4142135623730951},"61":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"k":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"62":{"tf":1.0}}}},"df":0,"docs":{}}}}},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"38":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":3,"docs":{"15":{"tf":1.0},"69":{"tf":1.0},"72":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"33":{"tf":1.0}}}}}}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"65":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"30":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"15":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"35":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":5,"docs":{"27":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"54":{"tf":1.7320508075688772},"72":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"77":{"tf":1.4142135623730951}}}},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":3,"docs":{"24":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}},"df":9,"docs":{"18":{"tf":1.7320508075688772},"19":{"tf":1.4142135623730951},"20":{"tf":2.0},"21":{"tf":2.8284271247461903},"22":{"tf":2.449489742783178},"23":{"tf":2.449489742783178},"24":{"tf":3.1622776601683795},"26":{"tf":4.358898943540674},"29":{"tf":6.557438524302}}}},"df":0,"docs":{}}}},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":24,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":2.0},"22":{"tf":2.0},"23":{"tf":1.7320508075688772},"29":{"tf":1.4142135623730951},"32":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"42":{"tf":2.0},"43":{"tf":1.7320508075688772},"44":{"tf":2.23606797749979},"45":{"tf":1.0},"48":{"tf":1.0},"54":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"62":{"tf":1.7320508075688772},"67":{"tf":1.0},"70":{"tf":1.4142135623730951},"77":{"tf":2.23606797749979},"9":{"tf":1.0}},"e":{"_":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"57":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":2,"docs":{"54":{"tf":1.4142135623730951},"58":{"tf":1.0}}},"df":0,"docs":{}}}}},"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":6,"docs":{"29":{"tf":1.0},"4":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"69":{"tf":1.0}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":7,"docs":{"11":{"tf":1.4142135623730951},"19":{"tf":1.0},"35":{"tf":1.0},"4":{"tf":1.0},"5":{"tf":1.0},"50":{"tf":1.0},"62":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"24":{"tf":1.0}}},"df":0,"docs":{}}}},"s":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"10":{"tf":1.4142135623730951},"74":{"tf":1.0},"75":{"tf":1.4142135623730951}}}},"df":54,"docs":{"0":{"tf":1.0},"10":{"tf":2.449489742783178},"11":{"tf":1.7320508075688772},"14":{"tf":2.23606797749979},"15":{"tf":2.8284271247461903},"16":{"tf":2.449489742783178},"17":{"tf":2.6457513110645907},"18":{"tf":4.0},"19":{"tf":3.4641016151377544},"20":{"tf":5.291502622129181},"21":{"tf":4.358898943540674},"22":{"tf":4.123105625617661},"23":{"tf":4.795831523312719},"24":{"tf":4.0},"25":{"tf":1.0},"26":{"tf":4.898979485566356},"27":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"29":{"tf":6.855654600401044},"32":{"tf":2.0},"33":{"tf":3.872983346207417},"34":{"tf":2.449489742783178},"35":{"tf":2.449489742783178},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"47":{"tf":1.0},"48":{"tf":1.7320508075688772},"5":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.7320508075688772},"52":{"tf":1.0},"56":{"tf":2.449489742783178},"57":{"tf":1.4142135623730951},"58":{"tf":2.449489742783178},"59":{"tf":2.0},"60":{"tf":1.4142135623730951},"61":{"tf":1.0},"62":{"tf":1.4142135623730951},"63":{"tf":1.4142135623730951},"64":{"tf":1.7320508075688772},"67":{"tf":1.0},"69":{"tf":1.7320508075688772},"7":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951},"71":{"tf":1.7320508075688772},"72":{"tf":1.7320508075688772},"73":{"tf":2.0},"74":{"tf":4.0},"75":{"tf":2.0},"76":{"tf":1.4142135623730951},"77":{"tf":2.449489742783178},"78":{"tf":1.0},"9":{"tf":1.4142135623730951}},"e":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"34":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":8,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":2.23606797749979},"39":{"tf":1.0},"43":{"tf":1.0},"47":{"tf":1.0},"52":{"tf":1.0},"74":{"tf":1.0}}}},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"35":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":14,"docs":{"10":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"2":{"tf":1.0},"20":{"tf":1.0},"29":{"tf":1.7320508075688772},"33":{"tf":1.4142135623730951},"35":{"tf":1.0},"4":{"tf":1.0},"5":{"tf":1.7320508075688772},"58":{"tf":1.0},"6":{"tf":1.0},"70":{"tf":1.0},"9":{"tf":1.0}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":7,"docs":{"10":{"tf":1.0},"13":{"tf":1.4142135623730951},"18":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.4142135623730951},"35":{"tf":1.0},"6":{"tf":1.0}}},"df":0,"docs":{}},"u":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"38":{"tf":1.0}}}},"df":0,"docs":{}},"df":18,"docs":{"15":{"tf":1.0},"20":{"tf":2.23606797749979},"22":{"tf":1.0},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":3.0},"35":{"tf":1.4142135623730951},"50":{"tf":1.0},"51":{"tf":1.4142135623730951},"53":{"tf":1.0},"54":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"58":{"tf":1.0},"59":{"tf":1.0},"73":{"tf":2.449489742783178},"74":{"tf":2.23606797749979},"77":{"tf":2.23606797749979},"78":{"tf":1.4142135623730951}}}},"r":{"df":0,"docs":{},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"18":{"tf":1.7320508075688772},"20":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":10,"docs":{"15":{"tf":3.4641016151377544},"21":{"tf":1.4142135623730951},"29":{"tf":1.0},"32":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"60":{"tf":2.23606797749979},"69":{"tf":1.0},"73":{"tf":1.0},"78":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"56":{"tf":1.0}}}}}}},"t":{"df":1,"docs":{"84":{"tf":1.0}}}},"df":1,"docs":{"49":{"tf":1.0}},"e":{"c":{"!":{"[":{"\"":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"1":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":6,"docs":{"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":2,"docs":{"26":{"tf":1.0},"29":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":3,"docs":{"24":{"tf":1.0},"26":{"tf":1.7320508075688772},"29":{"tf":2.449489742783178}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"a":{"d":{"d":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"d":{"(":{"\"":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"1":{"df":6,"docs":{"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"_":{"df":2,"docs":{"26":{"tf":1.0},"29":{"tf":1.7320508075688772}}},"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":7,"docs":{"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"29":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"69":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":9,"docs":{"20":{"tf":1.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.23606797749979},"32":{"tf":1.4142135623730951},"33":{"tf":2.449489742783178},"69":{"tf":1.0}}}}}},"df":7,"docs":{"20":{"tf":1.0},"21":{"tf":2.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":2.0},"26":{"tf":2.8284271247461903},"29":{"tf":3.4641016151377544}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":5,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"65":{"tf":1.0},"72":{"tf":1.4142135623730951},"74":{"tf":2.23606797749979}}}}}},"df":0,"docs":{},"r":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"18":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":27,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.0},"14":{"tf":1.4142135623730951},"16":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"40":{"tf":1.4142135623730951},"42":{"tf":1.7320508075688772},"43":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":2.0},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":1.4142135623730951},"58":{"tf":1.7320508075688772},"59":{"tf":1.4142135623730951},"60":{"tf":2.0},"61":{"tf":1.0},"62":{"tf":1.0},"70":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":1.0}},"f":{"df":1,"docs":{"26":{"tf":1.0}},"i":{"df":7,"docs":{"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"35":{"tf":1.0},"6":{"tf":1.4142135623730951},"78":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":12,"docs":{"14":{"tf":1.7320508075688772},"19":{"tf":1.7320508075688772},"20":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"29":{"tf":2.0},"33":{"tf":1.7320508075688772},"34":{"tf":1.0},"5":{"tf":1.0},"62":{"tf":2.449489742783178},"70":{"tf":1.7320508075688772},"71":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}}}}},"i":{"a":{"df":5,"docs":{"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"48":{"tf":1.0},"58":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"48":{"tf":1.4142135623730951}}}},"o":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"43":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"19":{"tf":1.0},"35":{"tf":1.0},"58":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":4,"docs":{"18":{"tf":1.4142135623730951},"33":{"tf":1.0},"42":{"tf":1.0},"58":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"u":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"44":{"tf":1.0},"55":{"tf":1.0}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":2,"docs":{"65":{"tf":1.7320508075688772},"66":{"tf":1.7320508075688772}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"74":{"tf":1.0}}}}}}}},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"61":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"39":{"tf":1.4142135623730951},"41":{"tf":1.0},"51":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"3":{"df":1,"docs":{"52":{"tf":1.4142135623730951}}},"df":4,"docs":{"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.7320508075688772},"54":{"tf":2.0}}}}}},"n":{"df":0,"docs":{},"t":{"df":32,"docs":{"12":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":2.0},"21":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.0},"36":{"tf":1.0},"4":{"tf":1.0},"40":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"45":{"tf":1.7320508075688772},"51":{"tf":1.4142135623730951},"53":{"tf":1.0},"54":{"tf":1.7320508075688772},"56":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"65":{"tf":1.4142135623730951},"67":{"tf":1.0},"68":{"tf":1.4142135623730951},"69":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":2.0},"72":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"44":{"tf":2.6457513110645907}},"n":{"df":0,"docs":{},"p":{"c":{"df":2,"docs":{"44":{"tf":2.449489742783178},"45":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"t":{"a":{"df":2,"docs":{"81":{"tf":1.0},"85":{"tf":1.0}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"m":{"\"":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":2,"docs":{"26":{"tf":1.0},"29":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},".":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":2.449489742783178}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"1":{"d":{"df":0,"docs":{},"k":{"6":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"0":{"7":{"8":{"6":{"df":0,"docs":{},"m":{"6":{"a":{"df":0,"docs":{},"y":{"df":0,"docs":{},"g":{"9":{"df":0,"docs":{},"k":{"d":{"0":{"df":0,"docs":{},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"y":{"df":0,"docs":{},"k":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"0":{"df":0,"docs":{},"n":{"6":{"df":0,"docs":{},"h":{"0":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"7":{"d":{"8":{"df":0,"docs":{},"t":{"df":1,"docs":{"52":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"n":{"5":{"df":0,"docs":{},"x":{"8":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"z":{"d":{"df":0,"docs":{},"z":{"df":0,"docs":{},"y":{"5":{"df":0,"docs":{},"j":{"df":0,"docs":{},"x":{"d":{"7":{"0":{"2":{"7":{"3":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"4":{"df":0,"docs":{},"z":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"r":{"df":0,"docs":{},"w":{"df":0,"docs":{},"x":{"0":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"v":{"7":{"df":0,"docs":{},"q":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"5":{"df":0,"docs":{},"g":{"df":0,"docs":{},"m":{"4":{"df":0,"docs":{},"v":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"q":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"2":{"4":{"df":0,"docs":{},"u":{"df":1,"docs":{"54":{"tf":2.23606797749979}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"u":{"0":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"x":{"df":0,"docs":{},"l":{"6":{"5":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"6":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"j":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"2":{"0":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"c":{"df":0,"docs":{},"p":{"df":0,"docs":{},"z":{"3":{"df":0,"docs":{},"j":{"df":0,"docs":{},"v":{"df":0,"docs":{},"j":{"df":0,"docs":{},"f":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"5":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"7":{"df":0,"docs":{},"l":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"u":{"d":{"3":{"df":0,"docs":{},"r":{"df":0,"docs":{},"h":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"n":{"df":0,"docs":{},"y":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":0,"docs":{},"q":{"df":0,"docs":{},"q":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"c":{"df":0,"docs":{},"x":{"6":{"df":2,"docs":{"51":{"tf":1.0},"53":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"m":{"5":{"9":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"k":{"d":{"df":0,"docs":{},"j":{"8":{"a":{"df":0,"docs":{},"y":{"df":0,"docs":{},"l":{"5":{"df":0,"docs":{},"g":{"df":0,"docs":{},"k":{"df":0,"docs":{},"n":{"df":1,"docs":{"54":{"tf":1.0}},"p":{"9":{"df":0,"docs":{},"p":{"df":0,"docs":{},"n":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"w":{"3":{"3":{"df":0,"docs":{},"v":{"4":{"0":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"5":{"df":0,"docs":{},"l":{"4":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"df":2,"docs":{"52":{"tf":1.0},"54":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"3":{"2":{"df":4,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"4":{"tf":1.0}}},"df":0,"docs":{}},"d":{"df":14,"docs":{"19":{"tf":1.4142135623730951},"25":{"tf":1.0},"4":{"tf":2.0},"46":{"tf":1.0},"47":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"50":{"tf":1.4142135623730951},"51":{"tf":1.0},"52":{"tf":2.0},"53":{"tf":1.0},"54":{"tf":2.8284271247461903},"60":{"tf":1.0},"63":{"tf":1.0},"7":{"tf":1.4142135623730951}}},"df":21,"docs":{"10":{"tf":2.23606797749979},"11":{"tf":1.4142135623730951},"12":{"tf":2.449489742783178},"13":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"26":{"tf":2.23606797749979},"29":{"tf":2.449489742783178},"33":{"tf":2.23606797749979},"34":{"tf":1.4142135623730951},"35":{"tf":1.0},"4":{"tf":1.7320508075688772},"48":{"tf":1.0},"5":{"tf":1.0},"50":{"tf":1.7320508075688772},"51":{"tf":1.0},"53":{"tf":1.4142135623730951},"54":{"tf":2.23606797749979},"58":{"tf":1.4142135623730951},"6":{"tf":1.4142135623730951},"70":{"tf":1.0}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":3,"docs":{"20":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0}}}}}}},"y":{"df":33,"docs":{"0":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"24":{"tf":1.0},"25":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":2.0},"32":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"38":{"tf":1.0},"41":{"tf":1.7320508075688772},"42":{"tf":1.0},"43":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.7320508075688772},"59":{"tf":1.4142135623730951},"65":{"tf":1.0},"67":{"tf":1.4142135623730951},"7":{"tf":1.0},"73":{"tf":1.4142135623730951},"74":{"tf":2.0}}}},"df":0,"docs":{},"e":{"'":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"21":{"tf":1.0}}}}},"b":{"df":1,"docs":{"9":{"tf":1.0}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"4":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":2,"docs":{"54":{"tf":2.0},"56":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"l":{"df":8,"docs":{"10":{"tf":1.0},"15":{"tf":1.0},"19":{"tf":1.4142135623730951},"22":{"tf":1.0},"38":{"tf":1.0},"58":{"tf":1.0},"61":{"tf":1.0},"78":{"tf":1.0}}}},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"14":{"tf":1.0},"22":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":3,"docs":{"20":{"tf":1.0},"56":{"tf":1.0},"61":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":2,"docs":{"66":{"tf":1.0},"72":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":2.0}}}}}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":22,"docs":{"10":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"36":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"43":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.0},"58":{"tf":1.4142135623730951},"59":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"71":{"tf":1.4142135623730951},"72":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.4142135623730951}}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":1,"docs":{"74":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"d":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"w":{"df":1,"docs":{"65":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":7,"docs":{"15":{"tf":1.4142135623730951},"18":{"tf":1.0},"22":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"73":{"tf":1.0}}}}},"df":0,"docs":{}},"r":{"d":{"df":1,"docs":{"74":{"tf":1.0}}},"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"35":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":24,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"28":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"4":{"tf":1.7320508075688772},"42":{"tf":1.0},"43":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.0},"49":{"tf":1.0},"50":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.7320508075688772},"74":{"tf":1.0},"76":{"tf":1.0},"78":{"tf":1.0}},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"39":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":1,"docs":{"71":{"tf":3.4641016151377544}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"l":{"d":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":13,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.4142135623730951},"20":{"tf":2.0},"21":{"tf":2.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":12,"docs":{"10":{"tf":1.0},"18":{"tf":1.0},"25":{"tf":1.0},"32":{"tf":1.0},"35":{"tf":1.0},"4":{"tf":1.0},"44":{"tf":1.4142135623730951},"48":{"tf":1.0},"51":{"tf":1.0},"58":{"tf":1.0},"67":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"i":{"df":6,"docs":{"36":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"65":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":6,"docs":{"11":{"tf":1.0},"33":{"tf":1.0},"41":{"tf":1.0},"57":{"tf":1.0},"62":{"tf":1.0},"76":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"n":{"'":{"df":0,"docs":{},"t":{"df":1,"docs":{"18":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"p":{"df":11,"docs":{"10":{"tf":1.0},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":2.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"26":{"tf":2.449489742783178},"29":{"tf":3.0},"44":{"tf":1.0},"59":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"33":{"tf":1.0}}}}},"df":0,"docs":{}},"df":10,"docs":{"14":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":1.0},"54":{"tf":1.0},"74":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"42":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"17":{"tf":1.0}}}}}}},"y":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":3,"docs":{"50":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.4142135623730951}},"e":{"df":1,"docs":{"48":{"tf":1.0}},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"51":{"tf":1.0}}}}}},"z":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":2,"docs":{"41":{"tf":1.0},"56":{"tf":1.0}}}}}}}},"breadcrumbs":{"root":{"0":{".":{"0":{"0":{"df":2,"docs":{"17":{"tf":1.0},"20":{"tf":1.0}}},"df":0,"docs":{}},"1":{".":{"0":{"df":8,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}},"3":{".":{"4":{"df":6,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"33":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"29":{"tf":1.0}}},"5":{".":{"1":{"df":2,"docs":{"33":{"tf":1.0},"70":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"34":{"tf":1.0}}},"5":{"2":{"df":1,"docs":{"33":{"tf":1.0}}},"df":0,"docs":{}},"8":{".":{"1":{"df":3,"docs":{"29":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"17":{"tf":2.0},"20":{"tf":2.0},"29":{"tf":1.4142135623730951}}},"1":{".":{"0":{".":{"0":{"df":6,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"1":{"0":{"3":{"df":7,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"1":{".":{"4":{"df":2,"docs":{"33":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{".":{"3":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"0":{"df":1,"docs":{"44":{"tf":1.0}}},"6":{"9":{"df":3,"docs":{"50":{"tf":1.7320508075688772},"51":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"7":{"8":{"5":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"73":{"tf":1.4142135623730951}}},"5":{"df":1,"docs":{"44":{"tf":1.0}}},"df":14,"docs":{"17":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"23":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.8284271247461903},"33":{"tf":1.0},"44":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":2.0},"6":{"tf":1.0},"70":{"tf":1.0},"73":{"tf":1.0},"80":{"tf":1.0},"85":{"tf":1.0}}},"2":{"0":{"2":{"1":{"df":9,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"1":{"5":{"7":{"5":{"df":1,"docs":{"83":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":9,"docs":{"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.23606797749979},"45":{"tf":1.7320508075688772},"66":{"tf":1.0},"71":{"tf":1.4142135623730951}}},"3":{"df":1,"docs":{"45":{"tf":1.0}}},"4":{"df":1,"docs":{"45":{"tf":1.0}}},"5":{"0":{"df":1,"docs":{"16":{"tf":1.0}}},"df":2,"docs":{"66":{"tf":1.0},"79":{"tf":1.0}}},"7":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}}}},"_":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"_":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"26":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"51":{"tf":1.0},"54":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":7,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951}}}}},"df":2,"docs":{"29":{"tf":1.0},"74":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":18,"docs":{"10":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":2.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.7320508075688772},"20":{"tf":2.449489742783178},"21":{"tf":2.449489742783178},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"26":{"tf":2.449489742783178},"29":{"tf":3.0},"58":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":18,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":2.0},"21":{"tf":2.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"58":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"73":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":9,"docs":{"10":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"73":{"tf":1.0}}}}},"df":0,"docs":{}}},"a":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":1,"docs":{"39":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"18":{"tf":1.0},"19":{"tf":1.4142135623730951},"41":{"tf":1.0},"47":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":12,"docs":{"10":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"33":{"tf":1.4142135623730951},"48":{"tf":1.0},"56":{"tf":2.23606797749979},"58":{"tf":1.0},"70":{"tf":1.0},"72":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951}},"o":{"df":0,"docs":{},"r":{"df":5,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"56":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"79":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"29":{"tf":1.7320508075688772},"30":{"tf":1.0},"65":{"tf":1.0}}}}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":5,"docs":{"26":{"tf":1.0},"56":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0}}}}}},"k":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"g":{"df":1,"docs":{"74":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"t":{"df":1,"docs":{"45":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":15,"docs":{"10":{"tf":1.0},"14":{"tf":2.0},"25":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"39":{"tf":1.7320508075688772},"40":{"tf":3.3166247903554},"41":{"tf":3.605551275463989},"42":{"tf":2.23606797749979},"43":{"tf":1.0},"44":{"tf":2.0},"45":{"tf":1.7320508075688772},"54":{"tf":1.4142135623730951},"62":{"tf":1.0},"67":{"tf":1.0}}}},"v":{"df":1,"docs":{"39":{"tf":1.4142135623730951}}}},"o":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"45":{"tf":1.0}}},"df":32,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"29":{"tf":1.4142135623730951},"36":{"tf":1.7320508075688772},"37":{"tf":2.0},"38":{"tf":1.4142135623730951},"39":{"tf":3.1622776601683795},"40":{"tf":2.449489742783178},"41":{"tf":2.0},"42":{"tf":1.7320508075688772},"43":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.0},"46":{"tf":1.4142135623730951},"47":{"tf":2.23606797749979},"48":{"tf":2.0},"49":{"tf":1.4142135623730951},"50":{"tf":1.7320508075688772},"51":{"tf":1.4142135623730951},"52":{"tf":2.0},"53":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"55":{"tf":2.6457513110645907},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951},"63":{"tf":1.4142135623730951},"64":{"tf":1.0}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":10,"docs":{"10":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.4142135623730951},"33":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"51":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{}}}},"d":{"d":{"_":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"26":{"tf":1.4142135623730951}},"e":{"(":{"\"":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":2.23606797749979},"74":{"tf":1.4142135623730951},"75":{"tf":1.0}}}},"d":{"d":{"df":0,"docs":{},"e":{"d":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"74":{"tf":1.0},"75":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"26":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}}}}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":2.449489742783178},"29":{"tf":3.4641016151377544}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"59":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"59":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":25,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"17":{"tf":1.0},"19":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.7320508075688772},"29":{"tf":1.0},"30":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.0},"4":{"tf":1.0},"44":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.4142135623730951},"54":{"tf":2.0},"60":{"tf":1.0},"65":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"67":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.4142135623730951},"77":{"tf":1.4142135623730951},"78":{"tf":1.0}},"e":{"d":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"26":{"tf":1.0},"29":{"tf":1.7320508075688772}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"t":{"df":11,"docs":{"11":{"tf":1.0},"12":{"tf":1.0},"15":{"tf":1.4142135623730951},"17":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.7320508075688772},"40":{"tf":1.0},"41":{"tf":1.4142135623730951},"5":{"tf":1.0},"58":{"tf":2.0},"62":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":7,"docs":{"11":{"tf":1.0},"20":{"tf":1.0},"26":{"tf":1.0},"33":{"tf":1.4142135623730951},"4":{"tf":1.0},"66":{"tf":1.0},"9":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":7,"docs":{"22":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"26":{"tf":1.7320508075688772},"29":{"tf":2.0},"32":{"tf":1.0},"33":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}},"r":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"d":{"(":{"\"":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"2":{"df":6,"docs":{"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":8,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":2.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":2.0},"26":{"tf":3.1622776601683795},"29":{"tf":4.358898943540674}}}}},"u":{"df":0,"docs":{},"s":{"df":3,"docs":{"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.8284271247461903}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":12,"docs":{"19":{"tf":1.0},"20":{"tf":1.7320508075688772},"21":{"tf":2.0},"22":{"tf":2.0},"23":{"tf":2.0},"24":{"tf":2.23606797749979},"26":{"tf":3.605551275463989},"29":{"tf":5.0990195135927845},"54":{"tf":1.4142135623730951},"74":{"tf":1.0},"75":{"tf":1.4142135623730951},"77":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":21,"docs":{"10":{"tf":1.7320508075688772},"15":{"tf":1.0},"18":{"tf":2.0},"19":{"tf":1.0},"20":{"tf":2.6457513110645907},"22":{"tf":1.4142135623730951},"26":{"tf":1.0},"28":{"tf":1.0},"30":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"51":{"tf":1.4142135623730951},"52":{"tf":3.7416573867739413},"53":{"tf":1.4142135623730951},"54":{"tf":1.7320508075688772},"58":{"tf":1.0},"62":{"tf":1.7320508075688772},"64":{"tf":1.0},"65":{"tf":1.7320508075688772},"67":{"tf":1.0},"74":{"tf":1.0}}}}}}},"df":20,"docs":{"12":{"tf":1.0},"17":{"tf":1.4142135623730951},"19":{"tf":2.0},"21":{"tf":1.0},"26":{"tf":1.7320508075688772},"29":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":1.7320508075688772},"34":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":1.0},"59":{"tf":1.4142135623730951},"61":{"tf":1.0},"62":{"tf":1.4142135623730951},"64":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"74":{"tf":1.0},"78":{"tf":1.0},"9":{"tf":1.0}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"'":{"df":1,"docs":{"22":{"tf":1.0}}},".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"2":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":6,"docs":{"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"a":{"d":{"d":{"df":0,"docs":{},"e":{"d":{"[":{"0":{"df":2,"docs":{"26":{"tf":1.0},"29":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":2,"docs":{"26":{"tf":1.7320508075688772},"29":{"tf":2.449489742783178}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":30,"docs":{"19":{"tf":1.0},"20":{"tf":4.123105625617661},"21":{"tf":4.47213595499958},"22":{"tf":5.477225575051661},"23":{"tf":4.69041575982343},"24":{"tf":4.795831523312719},"26":{"tf":7.0710678118654755},"28":{"tf":1.4142135623730951},"29":{"tf":9.539392014169456},"30":{"tf":2.23606797749979},"32":{"tf":1.7320508075688772},"33":{"tf":3.0},"51":{"tf":1.7320508075688772},"54":{"tf":4.123105625617661},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"62":{"tf":2.0},"64":{"tf":1.7320508075688772},"65":{"tf":3.3166247903554},"66":{"tf":2.23606797749979},"67":{"tf":2.449489742783178},"68":{"tf":2.0},"69":{"tf":1.7320508075688772},"70":{"tf":1.7320508075688772},"71":{"tf":2.0},"72":{"tf":2.0},"74":{"tf":3.605551275463989},"75":{"tf":1.7320508075688772},"77":{"tf":2.8284271247461903},"78":{"tf":2.23606797749979}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"64":{"tf":1.0}}}}}},"s":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"(":{"df":0,"docs":{},"|":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"(":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}},"o":{"a":{"d":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":7,"docs":{"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.8284271247461903}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"74":{"tf":1.0},"75":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"s":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":10,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":8,"docs":{"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"74":{"tf":1.0}}}}},"df":0,"docs":{}},"df":1,"docs":{"74":{"tf":1.0}}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":10,"docs":{"20":{"tf":1.0},"21":{"tf":2.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.0},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"69":{"tf":1.4142135623730951}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":11,"docs":{"20":{"tf":1.0},"21":{"tf":2.8284271247461903},"22":{"tf":2.449489742783178},"23":{"tf":2.23606797749979},"24":{"tf":2.23606797749979},"26":{"tf":3.1622776601683795},"29":{"tf":4.0},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"69":{"tf":1.0},"74":{"tf":1.0}}}}}}}}}}}}}},"v":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"19":{"tf":1.0},"28":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"71":{"tf":1.0}}}},"o":{"c":{"df":1,"docs":{"74":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.0},"21":{"tf":1.0},"42":{"tf":1.0},"59":{"tf":1.0}}}},"df":0,"docs":{}}}},"g":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"19":{"tf":1.0},"40":{"tf":1.0},"48":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":2,"docs":{"15":{"tf":1.0},"33":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":1,"docs":{"28":{"tf":1.0}}}}}}}}},"i":{"a":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951}},"s":{"df":2,"docs":{"12":{"tf":1.4142135623730951},"33":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":2,"docs":{"33":{"tf":1.0},"68":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"(":{"d":{"df":0,"docs":{},"e":{"a":{"d":{"_":{"c":{"df":0,"docs":{},"o":{"d":{"df":4,"docs":{"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":15,"docs":{"10":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.4142135623730951},"24":{"tf":1.0},"29":{"tf":1.0},"44":{"tf":1.0},"5":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951},"65":{"tf":1.0},"71":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"1":{"tf":1.0}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"i":{"df":17,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"56":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"64":{"tf":1.4142135623730951},"65":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"68":{"tf":1.0},"71":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"14":{"tf":1.0},"20":{"tf":1.4142135623730951},"42":{"tf":1.0}}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}},"w":{"a":{"df":0,"docs":{},"y":{"df":19,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.7320508075688772},"15":{"tf":1.7320508075688772},"22":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"52":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"61":{"tf":1.7320508075688772},"76":{"tf":1.0},"78":{"tf":1.0}}}},"df":0,"docs":{}}},"m":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":1,"docs":{"3":{"tf":1.0}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"29":{"tf":2.6457513110645907},"42":{"tf":1.7320508075688772},"44":{"tf":1.7320508075688772},"72":{"tf":1.0},"74":{"tf":1.4142135623730951}}}}}},"t":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"83":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"51":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"65":{"tf":1.0}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"51":{"tf":1.0}}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":25,"docs":{"15":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"38":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"53":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.4142135623730951},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.4142135623730951},"65":{"tf":1.7320508075688772},"67":{"tf":1.0},"73":{"tf":1.4142135623730951}}}}},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"20":{"tf":1.7320508075688772},"42":{"tf":1.0},"43":{"tf":1.0},"54":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"24":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"24":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"28":{"tf":1.0},"65":{"tf":1.7320508075688772}}}},"t":{"df":0,"docs":{},"h":{"df":8,"docs":{"10":{"tf":1.0},"20":{"tf":1.0},"44":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0}}},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"62":{"tf":1.0}}}}},"w":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"61":{"tf":1.0}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"19":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"i":{"df":8,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"19":{"tf":1.4142135623730951},"2":{"tf":1.7320508075688772},"29":{"tf":1.0},"33":{"tf":1.7320508075688772},"58":{"tf":1.0},"59":{"tf":1.0}}},"p":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"(":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"x":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"c":{"df":0,"docs":{},"o":{"d":{"df":8,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.7320508075688772},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.7320508075688772},"26":{"tf":2.6457513110645907},"29":{"tf":3.605551275463989}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"29":{"tf":2.0}}}},"df":0,"docs":{}}}},":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":8,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.7320508075688772},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.7320508075688772},"26":{"tf":2.6457513110645907},"29":{"tf":3.4641016151377544}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"df":0,"docs":{},"|":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"29":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":10,"docs":{"12":{"tf":1.0},"19":{"tf":2.23606797749979},"20":{"tf":2.449489742783178},"21":{"tf":3.3166247903554},"22":{"tf":2.8284271247461903},"23":{"tf":2.8284271247461903},"24":{"tf":3.3166247903554},"26":{"tf":5.0},"29":{"tf":6.708203932499369},"78":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"c":{"df":4,"docs":{"10":{"tf":1.4142135623730951},"30":{"tf":1.0},"41":{"tf":1.0},"62":{"tf":1.4142135623730951}}},"df":3,"docs":{"42":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":2.0}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"a":{"c":{"df":0,"docs":{},"h":{"df":6,"docs":{"17":{"tf":1.0},"18":{"tf":1.0},"23":{"tf":1.0},"38":{"tf":1.4142135623730951},"43":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"r":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":6,"docs":{"14":{"tf":1.0},"22":{"tf":1.0},"28":{"tf":1.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.0},"67":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"36":{"tf":1.0},"55":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":2,"docs":{"33":{"tf":1.0},"77":{"tf":1.0}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":10,"docs":{"10":{"tf":2.23606797749979},"11":{"tf":1.7320508075688772},"14":{"tf":2.0},"15":{"tf":1.4142135623730951},"18":{"tf":1.7320508075688772},"20":{"tf":2.0},"29":{"tf":1.4142135623730951},"58":{"tf":1.7320508075688772},"59":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951}}}}}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"35":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"17":{"tf":1.0},"19":{"tf":1.0},"34":{"tf":1.0},"46":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"y":{"df":2,"docs":{"53":{"tf":1.0},"70":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"18":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"18":{"tf":1.0}}}}}},"df":0,"docs":{},"k":{"df":7,"docs":{"20":{"tf":1.0},"43":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"74":{"tf":1.0},"78":{"tf":1.0}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"!":{"(":{"!":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"73":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"!":{"(":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"a":{"d":{"d":{"df":0,"docs":{},"e":{"d":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"26":{"tf":1.0},"29":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":6,"docs":{"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"73":{"tf":1.0}}}},"w":{"df":0,"docs":{},"o":{"df":1,"docs":{"73":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":10,"docs":{"17":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.7320508075688772},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":2.0},"26":{"tf":3.0},"29":{"tf":4.69041575982343}}}}},"df":2,"docs":{"17":{"tf":1.0},"29":{"tf":1.0}}}},"t":{"df":1,"docs":{"28":{"tf":2.0}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":6,"docs":{"15":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"41":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0}}}}},"o":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"52":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"m":{"df":12,"docs":{"1":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"29":{"tf":1.0},"4":{"tf":1.0},"44":{"tf":1.0},"50":{"tf":1.0},"62":{"tf":1.0},"66":{"tf":1.0},"71":{"tf":1.0}},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}}}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"56":{"tf":1.0},"59":{"tf":1.0}}}},"t":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":2,"docs":{"26":{"tf":1.7320508075688772},"29":{"tf":3.0}}}}}},"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":16,"docs":{"10":{"tf":1.0},"16":{"tf":1.4142135623730951},"19":{"tf":1.0},"23":{"tf":1.4142135623730951},"25":{"tf":1.7320508075688772},"26":{"tf":2.8284271247461903},"27":{"tf":1.0},"29":{"tf":2.0},"32":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":2.0},"50":{"tf":1.0},"51":{"tf":1.4142135623730951},"54":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":3.1622776601683795}}}}},"df":0,"docs":{}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":2,"docs":{"3":{"tf":1.0},"56":{"tf":1.0}},"m":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"14":{"tf":1.0},"23":{"tf":1.0}}}},"df":0,"docs":{}}}}},"v":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"13":{"tf":1.0},"43":{"tf":1.4142135623730951},"6":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":8,"docs":{"15":{"tf":1.0},"35":{"tf":1.0},"46":{"tf":1.0},"56":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0}}},"df":0,"docs":{}}}}},"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":11,"docs":{"17":{"tf":1.0},"24":{"tf":1.0},"33":{"tf":1.0},"38":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"48":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"4":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"76":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":4,"docs":{"29":{"tf":1.0},"39":{"tf":1.0},"44":{"tf":1.4142135623730951},"48":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"k":{"df":2,"docs":{"29":{"tf":1.7320508075688772},"48":{"tf":1.0}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{",":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"74":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":2,"docs":{"29":{"tf":1.4142135623730951},"60":{"tf":1.0}}}}}}},"r":{"df":1,"docs":{"51":{"tf":1.0}}},"s":{"df":0,"docs":{},"e":{"6":{"4":{"df":1,"docs":{"67":{"tf":1.0}}},"df":0,"docs":{}},"df":6,"docs":{"14":{"tf":1.4142135623730951},"20":{"tf":1.0},"26":{"tf":1.0},"42":{"tf":1.4142135623730951},"59":{"tf":1.0},"60":{"tf":1.0}}},"i":{"c":{"df":33,"docs":{"1":{"tf":1.0},"10":{"tf":1.7320508075688772},"11":{"tf":1.0},"12":{"tf":1.0},"13":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.4142135623730951},"31":{"tf":1.4142135623730951},"32":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.4142135623730951},"54":{"tf":1.0},"56":{"tf":1.0},"63":{"tf":1.0},"66":{"tf":1.0},"8":{"tf":2.0},"9":{"tf":1.0}},"s":{"/":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"c":{"'":{"df":1,"docs":{"48":{"tf":1.0}}},"df":1,"docs":{"48":{"tf":1.0}}},"df":1,"docs":{"50":{"tf":1.0}},"e":{"c":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"77":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":6,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.0},"65":{"tf":1.0},"68":{"tf":1.0},"74":{"tf":1.7320508075688772}}}}},"df":17,"docs":{"19":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"28":{"tf":1.0},"39":{"tf":1.4142135623730951},"40":{"tf":1.0},"42":{"tf":1.4142135623730951},"48":{"tf":1.0},"49":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"58":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"71":{"tf":1.0}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":15,"docs":{"20":{"tf":1.0},"24":{"tf":1.0},"29":{"tf":1.0},"34":{"tf":1.4142135623730951},"36":{"tf":1.0},"39":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"47":{"tf":1.0},"54":{"tf":1.4142135623730951},"56":{"tf":1.7320508075688772},"61":{"tf":1.7320508075688772},"70":{"tf":1.0},"74":{"tf":1.0},"78":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"56":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"19":{"tf":1.0},"59":{"tf":1.0},"70":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"v":{"df":1,"docs":{"67":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"15":{"tf":1.0},"20":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"37":{"tf":1.4142135623730951},"8":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"17":{"tf":1.0},"27":{"tf":1.0},"64":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":2,"docs":{"23":{"tf":1.0},"7":{"tf":1.0}}}},"t":{"a":{"8":{"df":6,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":9,"docs":{"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"18":{"tf":1.4142135623730951},"20":{"tf":1.0},"22":{"tf":1.0},"27":{"tf":1.0},"44":{"tf":1.0},"58":{"tf":1.0},"71":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":9,"docs":{"15":{"tf":1.0},"19":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.7320508075688772},"42":{"tf":1.0},"44":{"tf":1.0},"64":{"tf":1.0},"71":{"tf":1.0},"76":{"tf":1.4142135623730951}}}}}}}},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"7":{"tf":1.0}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"16":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.0},"58":{"tf":1.0},"64":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"35":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"39":{"tf":1.0}}}},"n":{"/":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"33":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":27,"docs":{"10":{"tf":1.0},"11":{"tf":2.0},"12":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":2.0},"20":{"tf":2.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"33":{"tf":2.449489742783178},"34":{"tf":1.0},"4":{"tf":1.4142135623730951},"47":{"tf":1.0},"48":{"tf":1.4142135623730951},"49":{"tf":1.4142135623730951},"5":{"tf":1.0},"50":{"tf":1.4142135623730951},"58":{"tf":2.0},"6":{"tf":1.0},"9":{"tf":1.0}}},"y":{"(":{"7":{"b":{"7":{"d":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"d":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":15,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"29":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.7320508075688772},"59":{"tf":1.0},"60":{"tf":1.0},"65":{"tf":1.4142135623730951},"74":{"tf":1.0}}}},"l":{"a":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"18":{"tf":2.0},"60":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"48":{"tf":1.0}}},"c":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":1,"docs":{"78":{"tf":1.0}}}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":32,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":2.23606797749979},"20":{"tf":2.23606797749979},"25":{"tf":1.0},"28":{"tf":2.23606797749979},"29":{"tf":1.0},"35":{"tf":1.4142135623730951},"4":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951},"46":{"tf":1.0},"47":{"tf":2.0},"48":{"tf":3.3166247903554},"49":{"tf":1.0},"5":{"tf":1.0},"50":{"tf":2.0},"51":{"tf":1.0},"52":{"tf":1.7320508075688772},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.7320508075688772},"57":{"tf":1.0},"58":{"tf":2.449489742783178},"60":{"tf":2.0},"62":{"tf":1.0},"63":{"tf":2.449489742783178},"76":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":6,"docs":{"43":{"tf":1.0},"50":{"tf":1.0},"56":{"tf":1.4142135623730951},"76":{"tf":3.0},"77":{"tf":1.0},"78":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":2,"docs":{"76":{"tf":1.0},"78":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"o":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":4,"docs":{"15":{"tf":1.0},"26":{"tf":1.0},"33":{"tf":1.0},"58":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"k":{"df":6,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":1.4142135623730951},"3":{"tf":1.7320508075688772},"4":{"tf":1.4142135623730951},"70":{"tf":1.0},"74":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":6,"docs":{"17":{"tf":1.4142135623730951},"22":{"tf":1.0},"40":{"tf":1.0},"53":{"tf":1.0},"59":{"tf":1.0},"73":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"58":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"73":{"tf":1.0}}},"df":0,"docs":{}}},"x":{"df":1,"docs":{"18":{"tf":2.0}}}},"r":{"a":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"15":{"tf":1.0}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"k":{"df":1,"docs":{"77":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":4,"docs":{"15":{"tf":1.0},"20":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":2,"docs":{"20":{"tf":1.0},"44":{"tf":1.0}}}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"64":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"39":{"tf":1.0}}}}},"df":0,"docs":{}}},"u":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"48":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{},"g":{"df":3,"docs":{"3":{"tf":1.0},"30":{"tf":1.7320508075688772},"77":{"tf":1.0}}},"i":{"df":0,"docs":{},"l":{"d":{"df":18,"docs":{"10":{"tf":1.0},"11":{"tf":3.1622776601683795},"12":{"tf":3.3166247903554},"13":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":2.23606797749979},"4":{"tf":1.0},"43":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.7320508075688772},"64":{"tf":1.0},"65":{"tf":1.4142135623730951},"71":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":8,"docs":{"13":{"tf":1.0},"26":{"tf":1.0},"30":{"tf":1.0},"45":{"tf":1.0},"50":{"tf":1.0},"71":{"tf":1.4142135623730951},"74":{"tf":1.0},"76":{"tf":1.0}}}}},"n":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"21":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"60":{"tf":1.0}}}},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"38":{"tf":1.0}}}}}},"c":{"/":{"df":0,"docs":{},"o":{"df":1,"docs":{"85":{"tf":1.0}}}},"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"14":{"tf":1.4142135623730951}},"e":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"71":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":4,"docs":{"14":{"tf":1.0},"29":{"tf":1.0},"43":{"tf":1.0},"56":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"df":32,"docs":{"10":{"tf":2.449489742783178},"13":{"tf":1.0},"18":{"tf":2.449489742783178},"19":{"tf":1.7320508075688772},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":2.0},"25":{"tf":1.0},"26":{"tf":1.7320508075688772},"28":{"tf":1.0},"29":{"tf":1.4142135623730951},"33":{"tf":1.0},"35":{"tf":1.0},"38":{"tf":2.449489742783178},"39":{"tf":1.0},"41":{"tf":1.7320508075688772},"42":{"tf":1.4142135623730951},"43":{"tf":1.0},"44":{"tf":2.0},"45":{"tf":3.605551275463989},"50":{"tf":1.0},"51":{"tf":1.7320508075688772},"52":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":3.605551275463989},"6":{"tf":1.0},"61":{"tf":2.6457513110645907},"62":{"tf":1.0},"67":{"tf":1.4142135623730951},"74":{"tf":1.7320508075688772},"78":{"tf":2.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"25":{"tf":1.0},"74":{"tf":1.0}}}}},"m":{"df":1,"docs":{"20":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"32":{"tf":1.0},"57":{"tf":1.0}}}}},"n":{"'":{"df":0,"docs":{},"t":{"df":1,"docs":{"29":{"tf":1.0}}}},"d":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"65":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"p":{"a":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"13":{"tf":1.0},"40":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"61":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"df":6,"docs":{"11":{"tf":1.0},"19":{"tf":1.0},"35":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"64":{"tf":1.0}},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"20":{"tf":1.0}}}}}}}},"g":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"71":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":9,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.7320508075688772},"9":{"tf":1.0}}}}}}},"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":2,"docs":{"12":{"tf":1.0},"33":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":11,"docs":{"11":{"tf":2.23606797749979},"12":{"tf":1.4142135623730951},"13":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"33":{"tf":2.0},"5":{"tf":1.4142135623730951},"6":{"tf":1.7320508075688772},"71":{"tf":1.4142135623730951},"9":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":32,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"18":{"tf":2.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"30":{"tf":1.0},"32":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"39":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.7320508075688772},"43":{"tf":1.0},"44":{"tf":2.0},"45":{"tf":2.6457513110645907},"50":{"tf":1.4142135623730951},"51":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951},"57":{"tf":2.0},"58":{"tf":2.23606797749979},"59":{"tf":1.0},"61":{"tf":2.0},"62":{"tf":2.0},"72":{"tf":1.0},"74":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951}}},"h":{"df":1,"docs":{"44":{"tf":1.0}}}},"u":{"df":0,"docs":{},"s":{"df":5,"docs":{"20":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.0},"59":{"tf":1.0},"73":{"tf":1.0}}}}},"d":{"df":3,"docs":{"4":{"tf":1.0},"49":{"tf":1.0},"6":{"tf":1.4142135623730951}},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"b":{"df":8,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"g":{"(":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":10,"docs":{"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}},"_":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"(":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"34":{"tf":1.7320508075688772},"58":{"tf":2.0},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":1,"docs":{"34":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":1,"docs":{"34":{"tf":1.0}}}},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"76":{"tf":1.0}}},"df":0,"docs":{}}},"df":4,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.0},"14":{"tf":1.0},"7":{"tf":1.0}}}},"n":{"df":0,"docs":{},"g":{"df":17,"docs":{"14":{"tf":1.7320508075688772},"18":{"tf":1.0},"29":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.4142135623730951},"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":2.0},"51":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.4142135623730951},"62":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":1.4142135623730951}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"4":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"30":{"tf":1.0}}},"df":12,"docs":{"20":{"tf":1.0},"24":{"tf":1.0},"28":{"tf":1.0},"36":{"tf":1.0},"55":{"tf":1.0},"60":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"g":{"df":2,"docs":{"39":{"tf":1.4142135623730951},"40":{"tf":1.4142135623730951}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"83":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"56":{"tf":1.0},"74":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"k":{"df":23,"docs":{"13":{"tf":2.0},"14":{"tf":1.0},"17":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"35":{"tf":1.0},"39":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.0},"47":{"tf":1.0},"5":{"tf":2.6457513110645907},"52":{"tf":1.0},"54":{"tf":2.0},"56":{"tf":1.0},"6":{"tf":2.0},"72":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":1.4142135623730951}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"43":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"f":{"'":{"df":1,"docs":{"39":{"tf":1.0}}},"df":5,"docs":{"39":{"tf":2.449489742783178},"40":{"tf":1.0},"41":{"tf":2.6457513110645907},"42":{"tf":1.0},"43":{"tf":1.0}}}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"22":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"27":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"s":{"df":2,"docs":{"45":{"tf":1.0},"61":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"37":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":1,"docs":{"58":{"tf":1.7320508075688772}}}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":3,"docs":{"24":{"tf":1.0},"35":{"tf":1.0},"45":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"26":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"43":{"tf":1.0},"71":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"50":{"tf":2.0}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"n":{"df":2,"docs":{"0":{"tf":1.0},"69":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"57":{"tf":1.0}}}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"68":{"tf":1.0}}}}},"r":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":3,"docs":{"36":{"tf":1.0},"65":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"40":{"tf":1.4142135623730951},"41":{"tf":1.0},"44":{"tf":1.0},"52":{"tf":1.0}}}}}},"o":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"56":{"tf":1.0},"76":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":11,"docs":{"17":{"tf":2.0},"20":{"tf":1.7320508075688772},"21":{"tf":2.0},"22":{"tf":2.23606797749979},"29":{"tf":2.23606797749979},"32":{"tf":2.23606797749979},"33":{"tf":2.23606797749979},"4":{"tf":1.4142135623730951},"49":{"tf":1.7320508075688772},"6":{"tf":1.0},"75":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":1,"docs":{"28":{"tf":1.0}},"r":{"df":4,"docs":{"10":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"40":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"e":{"df":1,"docs":{"58":{"tf":1.0}}},"n":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":2,"docs":{"26":{"tf":1.0},"33":{"tf":1.0}}}}}}},"o":{"d":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"50":{"tf":1.0}}}}},"df":0,"docs":{}}},"_":{"df":0,"docs":{},"i":{"d":{"df":11,"docs":{"19":{"tf":1.4142135623730951},"20":{"tf":2.23606797749979},"21":{"tf":2.6457513110645907},"22":{"tf":2.23606797749979},"23":{"tf":2.23606797749979},"24":{"tf":2.6457513110645907},"26":{"tf":4.0},"29":{"tf":5.385164807134504},"50":{"tf":1.4142135623730951},"51":{"tf":1.0},"54":{"tf":1.0}}},"df":0,"docs":{}}},"df":20,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"19":{"tf":2.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.7320508075688772},"22":{"tf":2.0},"23":{"tf":1.4142135623730951},"24":{"tf":1.7320508075688772},"26":{"tf":2.6457513110645907},"29":{"tf":3.7416573867739413},"47":{"tf":1.0},"48":{"tf":1.4142135623730951},"49":{"tf":1.0},"50":{"tf":2.6457513110645907},"51":{"tf":1.4142135623730951},"52":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"62":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}},"s":{"(":{"5":{"df":1,"docs":{"29":{"tf":1.4142135623730951}}},"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":1,"docs":{"65":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"t":{"df":10,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"26":{"tf":2.8284271247461903},"29":{"tf":3.4641016151377544},"39":{"tf":1.0},"58":{"tf":1.0},"74":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"15":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"e":{"df":4,"docs":{"14":{"tf":1.0},"43":{"tf":1.0},"57":{"tf":1.0},"70":{"tf":1.0}}},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":2.23606797749979},"5":{"tf":1.0},"6":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"83":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"o":{"df":0,"docs":{},"n":{"df":10,"docs":{"12":{"tf":1.0},"32":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"51":{"tf":1.0},"58":{"tf":1.0},"62":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"n":{"df":30,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"19":{"tf":1.0},"25":{"tf":1.4142135623730951},"27":{"tf":1.7320508075688772},"36":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"40":{"tf":1.0},"47":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"64":{"tf":2.23606797749979},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"9":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":3,"docs":{"17":{"tf":1.0},"24":{"tf":1.0},"48":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"43":{"tf":1.0}}}}}}},"t":{"df":1,"docs":{"71":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":9,"docs":{"11":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.0},"4":{"tf":1.0},"49":{"tf":2.0},"58":{"tf":1.0},"6":{"tf":1.0},"77":{"tf":1.4142135623730951}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"19":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":4,"docs":{"39":{"tf":1.4142135623730951},"41":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"72":{"tf":1.0}}},"x":{"df":7,"docs":{"10":{"tf":1.0},"20":{"tf":1.0},"4":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.0},"64":{"tf":1.0},"74":{"tf":1.7320508075688772}}}},"i":{"c":{"df":8,"docs":{"14":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.0},"29":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"65":{"tf":1.0}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"42":{"tf":1.0}}}}}},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"76":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"46":{"tf":1.4142135623730951}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"59":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"34":{"tf":1.4142135623730951},"58":{"tf":1.0},"63":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}}},"u":{"df":0,"docs":{},"s":{"df":3,"docs":{"20":{"tf":1.0},"44":{"tf":1.0},"54":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"18":{"tf":1.0},"28":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":1,"docs":{"28":{"tf":1.0}}}}},"q":{"df":0,"docs":{},"u":{"df":6,"docs":{"14":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":1.0},"45":{"tf":1.0}}}}},"i":{"d":{"df":7,"docs":{"20":{"tf":1.0},"26":{"tf":1.0},"35":{"tf":1.0},"39":{"tf":1.0},"42":{"tf":1.7320508075688772},"56":{"tf":1.0},"58":{"tf":1.4142135623730951}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.0},"15":{"tf":1.7320508075688772},"17":{"tf":1.0},"38":{"tf":1.0}}}}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"20":{"tf":2.23606797749979},"56":{"tf":1.7320508075688772},"59":{"tf":1.0},"74":{"tf":1.0}}}}},"df":7,"docs":{"20":{"tf":1.0},"29":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.4142135623730951},"77":{"tf":1.4142135623730951}},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"18":{"tf":1.0},"58":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"10":{"tf":1.0},"29":{"tf":1.0},"51":{"tf":1.0},"59":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"m":{"df":2,"docs":{"72":{"tf":1.0},"74":{"tf":1.0}}}}},"t":{"a":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"58":{"tf":1.0},"82":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":20,"docs":{"10":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"26":{"tf":1.7320508075688772},"29":{"tf":1.0},"35":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":2.23606797749979},"61":{"tf":1.7320508075688772},"72":{"tf":1.0},"73":{"tf":1.0},"76":{"tf":1.4142135623730951},"78":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"12":{"tf":1.0},"85":{"tf":1.4142135623730951}}}},"x":{"df":0,"docs":{},"t":{"df":5,"docs":{"24":{"tf":1.0},"41":{"tf":1.0},"58":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0}}}}},"r":{"a":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"62":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"61":{"tf":1.0}}}}}}}},"t":{"'":{"df":2,"docs":{"14":{"tf":1.0},"43":{"tf":1.0}}},".":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.0}}}},":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":4,"docs":{"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":6,"docs":{"16":{"tf":1.0},"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"20":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"{":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"33":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"16":{"tf":1.0},"69":{"tf":1.0}}},"y":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":6,"docs":{"16":{"tf":1.0},"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"17":{"tf":1.0},"20":{"tf":2.0}}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":74,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":1.0},"10":{"tf":3.605551275463989},"11":{"tf":2.449489742783178},"12":{"tf":1.7320508075688772},"13":{"tf":2.23606797749979},"14":{"tf":2.23606797749979},"15":{"tf":1.0},"16":{"tf":2.6457513110645907},"18":{"tf":3.1622776601683795},"19":{"tf":3.872983346207417},"20":{"tf":4.58257569495584},"21":{"tf":3.0},"22":{"tf":2.449489742783178},"23":{"tf":2.8284271247461903},"24":{"tf":2.449489742783178},"25":{"tf":2.449489742783178},"26":{"tf":3.605551275463989},"27":{"tf":2.449489742783178},"28":{"tf":2.0},"29":{"tf":4.69041575982343},"30":{"tf":1.7320508075688772},"33":{"tf":2.0},"34":{"tf":2.449489742783178},"35":{"tf":2.8284271247461903},"36":{"tf":1.4142135623730951},"37":{"tf":1.0},"38":{"tf":3.0},"39":{"tf":1.4142135623730951},"4":{"tf":2.449489742783178},"40":{"tf":1.4142135623730951},"41":{"tf":1.4142135623730951},"42":{"tf":3.7416573867739413},"43":{"tf":2.449489742783178},"44":{"tf":2.23606797749979},"45":{"tf":3.0},"46":{"tf":1.4142135623730951},"47":{"tf":1.0},"48":{"tf":3.1622776601683795},"49":{"tf":2.23606797749979},"5":{"tf":1.7320508075688772},"50":{"tf":2.8284271247461903},"51":{"tf":3.1622776601683795},"52":{"tf":2.8284271247461903},"53":{"tf":3.0},"54":{"tf":4.69041575982343},"55":{"tf":2.449489742783178},"56":{"tf":3.4641016151377544},"57":{"tf":2.23606797749979},"58":{"tf":5.0},"59":{"tf":1.7320508075688772},"6":{"tf":3.0},"60":{"tf":3.1622776601683795},"61":{"tf":1.7320508075688772},"62":{"tf":3.7416573867739413},"63":{"tf":1.7320508075688772},"64":{"tf":2.6457513110645907},"65":{"tf":2.23606797749979},"66":{"tf":3.0},"67":{"tf":3.3166247903554},"68":{"tf":2.449489742783178},"69":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951},"70":{"tf":2.23606797749979},"71":{"tf":3.3166247903554},"72":{"tf":2.0},"73":{"tf":1.4142135623730951},"74":{"tf":2.8284271247461903},"75":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"8":{"tf":1.4142135623730951},"9":{"tf":2.8284271247461903}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":10,"docs":{"23":{"tf":2.0},"24":{"tf":2.23606797749979},"26":{"tf":2.0},"29":{"tf":3.1622776601683795},"33":{"tf":1.0},"34":{"tf":1.0},"58":{"tf":1.4142135623730951},"61":{"tf":1.0},"63":{"tf":1.0},"74":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"61":{"tf":1.0}}}}}}}},"s":{"/":{"c":{"df":0,"docs":{},"w":{"1":{"df":1,"docs":{"6":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":8,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":8,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.7320508075688772},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.7320508075688772},"26":{"tf":2.6457513110645907},"29":{"tf":3.605551275463989}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"d":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"48":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"25":{"tf":1.0},"27":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"3":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":2,"docs":{"18":{"tf":1.0},"26":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":3,"docs":{"33":{"tf":1.0},"43":{"tf":1.0},"58":{"tf":1.0}}},"t":{"df":1,"docs":{"57":{"tf":1.0}}}},"r":{"df":0,"docs":{},"t":{"df":4,"docs":{"29":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"65":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"i":{"df":6,"docs":{"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"71":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":5,"docs":{"19":{"tf":1.4142135623730951},"28":{"tf":1.0},"42":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":1.0}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"29":{"tf":1.0},"56":{"tf":1.0},"62":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"df":0,"docs":{},"l":{"df":1,"docs":{"33":{"tf":1.0}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"10":{"tf":1.0},"18":{"tf":1.0},"21":{"tf":1.0},"57":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{":":{":":{"b":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":1,"docs":{"60":{"tf":1.0}}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"63":{"tf":1.0}}}}}}}},"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"60":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":2,"docs":{"59":{"tf":1.4142135623730951},"60":{"tf":2.0}}}}}}},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"/":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":1,"docs":{"49":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"_":{"1":{"_":{"1":{"df":2,"docs":{"13":{"tf":1.0},"6":{"tf":1.0}}},"2":{"df":2,"docs":{"13":{"tf":1.0},"6":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{":":{":":{"c":{"df":0,"docs":{},"w":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"33":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"33":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"{":{"c":{"df":0,"docs":{},"w":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"d":{"df":2,"docs":{"33":{"tf":1.0},"69":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"t":{"d":{":":{":":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":12,"docs":{"19":{"tf":1.0},"20":{"tf":2.0},"21":{"tf":2.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.23606797749979},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"69":{"tf":1.0},"72":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"73":{"tf":1.0}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"61":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"58":{"tf":1.0},"61":{"tf":1.0}}}}}}}}},"s":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"22":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"{":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"{":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":5,"docs":{"23":{"tf":1.0},"29":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"74":{"tf":1.0}},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"74":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"o":{"_":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":3,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":14,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.7320508075688772},"21":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"77":{"tf":1.0}}},"df":0,"docs":{}}}},"df":39,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":1.0},"10":{"tf":1.0},"11":{"tf":1.0},"13":{"tf":1.7320508075688772},"14":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.7320508075688772},"20":{"tf":1.7320508075688772},"23":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.7320508075688772},"33":{"tf":1.7320508075688772},"35":{"tf":2.0},"36":{"tf":1.4142135623730951},"37":{"tf":1.0},"4":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.7320508075688772},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"5":{"tf":2.23606797749979},"50":{"tf":1.0},"52":{"tf":1.7320508075688772},"58":{"tf":1.0},"6":{"tf":1.7320508075688772},"60":{"tf":1.7320508075688772},"61":{"tf":1.0},"63":{"tf":1.4142135623730951},"7":{"tf":1.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.0},"74":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"t":{"df":6,"docs":{"11":{"tf":1.0},"48":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951},"75":{"tf":1.0}}}},"u":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"n":{"'":{"df":0,"docs":{},"t":{"df":1,"docs":{"71":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"56":{"tf":1.0},"65":{"tf":1.0}}}},"p":{"df":0,"docs":{},"l":{"df":9,"docs":{"10":{"tf":1.7320508075688772},"15":{"tf":1.0},"18":{"tf":1.0},"22":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"71":{"tf":1.0},"9":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":9,"docs":{"18":{"tf":1.0},"19":{"tf":1.0},"24":{"tf":1.0},"27":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0},"43":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0}}}}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{":":{":":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":5,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"74":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{":":{":":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":6,"docs":{"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"74":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"{":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":6,"docs":{"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":5,"docs":{"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.4142135623730951}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{":":{":":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":7,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"{":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"29":{"tf":1.7320508075688772},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"77":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":16,"docs":{"14":{"tf":1.7320508075688772},"16":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":2.0},"24":{"tf":1.0},"29":{"tf":1.4142135623730951},"33":{"tf":3.1622776601683795},"34":{"tf":1.4142135623730951},"35":{"tf":2.0},"57":{"tf":1.0},"58":{"tf":1.0},"63":{"tf":1.0},"70":{"tf":2.23606797749979},"74":{"tf":1.0},"9":{"tf":2.23606797749979}}}},"z":{"df":0,"docs":{},"i":{"df":1,"docs":{"74":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":46,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":1.0},"14":{"tf":2.449489742783178},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.7320508075688772},"19":{"tf":1.7320508075688772},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"29":{"tf":1.0},"3":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":2.23606797749979},"34":{"tf":1.0},"35":{"tf":1.4142135623730951},"36":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.7320508075688772},"40":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.7320508075688772},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"48":{"tf":1.4142135623730951},"50":{"tf":1.0},"51":{"tf":1.7320508075688772},"56":{"tf":1.0},"58":{"tf":1.4142135623730951},"59":{"tf":1.0},"60":{"tf":1.0},"64":{"tf":1.4142135623730951},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"71":{"tf":2.449489742783178},"73":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":2.449489742783178}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"29":{"tf":1.0},"55":{"tf":1.0},"65":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"48":{"tf":1.0}}},"df":4,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"45":{"tf":1.0},"6":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":3,"docs":{"29":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":17,"docs":{"11":{"tf":1.0},"58":{"tf":1.0},"64":{"tf":1.7320508075688772},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0}}}}},"u":{"c":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"11":{"tf":1.0},"48":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"28":{"tf":1.0}}}}}},"df":1,"docs":{"28":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"15":{"tf":1.0}}}},"r":{"_":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178}},"s":{".":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"(":{"&":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"(":{"&":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":4,"docs":{"42":{"tf":2.23606797749979},"44":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951},"48":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":2,"docs":{"10":{"tf":1.0},"18":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":3,"docs":{"24":{"tf":1.7320508075688772},"35":{"tf":1.0},"60":{"tf":1.0}}}}}}},"w":{"2":{"0":{"df":3,"docs":{"42":{"tf":1.0},"44":{"tf":1.0},"48":{"tf":1.0}}},"df":0,"docs":{}},"4":{"df":6,"docs":{"49":{"tf":1.4142135623730951},"50":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.4142135623730951},"58":{"tf":1.0}}},"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"{":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":8,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"d":{"df":3,"docs":{"33":{"tf":3.3166247903554},"69":{"tf":2.0},"78":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":4,"docs":{"20":{"tf":1.0},"29":{"tf":1.0},"72":{"tf":1.0},"77":{"tf":1.0}}}}}},"m":{"a":{"df":0,"docs":{},"p":{"df":4,"docs":{"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"y":{"(":{"&":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"p":{"a":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.4142135623730951}}}}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":15,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.7320508075688772},"20":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"33":{"tf":1.4142135623730951},"35":{"tf":1.0},"49":{"tf":2.0},"53":{"tf":1.0},"56":{"tf":1.0},"6":{"tf":2.6457513110645907},"70":{"tf":1.7320508075688772},"74":{"tf":1.0}}}},"d":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"n":{"df":1,"docs":{"20":{"tf":1.0}}}},"t":{"a":{"b":{"a":{"df":0,"docs":{},"s":{"df":6,"docs":{"10":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":3.605551275463989},"56":{"tf":1.7320508075688772},"62":{"tf":1.0}}}},"df":0,"docs":{}},"df":18,"docs":{"14":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"21":{"tf":1.0},"25":{"tf":2.23606797749979},"26":{"tf":1.0},"27":{"tf":2.449489742783178},"41":{"tf":1.7320508075688772},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.7320508075688772},"56":{"tf":2.23606797749979},"57":{"tf":1.0},"58":{"tf":2.449489742783178},"61":{"tf":2.8284271247461903},"73":{"tf":1.0},"77":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"b":{"df":1,"docs":{"48":{"tf":1.0}}},"df":0,"docs":{},"e":{")":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"62":{"tf":1.0}}}}}}},"3":{"3":{"9":{"8":{"0":{"2":{"2":{"7":{"9":{"df":1,"docs":{"84":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"l":{"df":4,"docs":{"10":{"tf":1.0},"28":{"tf":1.7320508075688772},"29":{"tf":1.4142135623730951},"30":{"tf":1.0}}}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":11,"docs":{"11":{"tf":1.0},"12":{"tf":1.7320508075688772},"17":{"tf":2.23606797749979},"20":{"tf":1.7320508075688772},"21":{"tf":2.0},"22":{"tf":2.23606797749979},"23":{"tf":1.0},"29":{"tf":2.449489742783178},"32":{"tf":2.23606797749979},"33":{"tf":2.449489742783178},"71":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":1,"docs":{"33":{"tf":1.0}}}}}}}}},"c":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"45":{"tf":1.4142135623730951},"58":{"tf":1.0},"61":{"tf":1.4142135623730951}}},"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"l":{"2":{"5":{"6":{"df":1,"docs":{"35":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"35":{"tf":1.4142135623730951}}},"s":{"df":1,"docs":{"15":{"tf":1.0}}}},"l":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"54":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":3,"docs":{"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.0}}}},"df":0,"docs":{}}}},"d":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"41":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"u":{"c":{"df":1,"docs":{"24":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":10,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"33":{"tf":1.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":18,"docs":{"10":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"29":{"tf":1.0},"33":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.4142135623730951},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"74":{"tf":1.0},"75":{"tf":1.0},"78":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"16":{"tf":1.7320508075688772},"23":{"tf":1.0},"58":{"tf":1.0},"74":{"tf":1.4142135623730951}}}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":4,"docs":{"10":{"tf":1.0},"33":{"tf":1.0},"39":{"tf":1.0},"58":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"39":{"tf":1.0}}}}}}}},"m":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"48":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{")":{"?":{".":{"df":0,"docs":{},"u":{"1":{"2":{"8":{"df":2,"docs":{"29":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"29":{"tf":2.23606797749979},"74":{"tf":1.4142135623730951}}},"t":{"df":2,"docs":{"43":{"tf":1.0},"44":{"tf":1.0}}}}},"p":{"df":21,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":2.23606797749979},"15":{"tf":2.23606797749979},"16":{"tf":2.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.8284271247461903},"19":{"tf":1.4142135623730951},"20":{"tf":3.605551275463989},"21":{"tf":2.8284271247461903},"22":{"tf":3.0},"23":{"tf":3.605551275463989},"24":{"tf":2.449489742783178},"26":{"tf":3.4641016151377544},"29":{"tf":4.242640687119285},"33":{"tf":2.0},"34":{"tf":2.0},"58":{"tf":2.449489742783178},"69":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"77":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"d":{"df":13,"docs":{"14":{"tf":1.7320508075688772},"18":{"tf":1.0},"19":{"tf":2.23606797749979},"20":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"26":{"tf":1.0},"29":{"tf":1.4142135623730951},"33":{"tf":2.23606797749979},"34":{"tf":2.449489742783178},"58":{"tf":1.0},"70":{"tf":2.23606797749979},"71":{"tf":1.0},"9":{"tf":2.23606797749979}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"y":{"df":1,"docs":{"3":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"14":{"tf":1.0}}}}},"s":{".":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{".":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"&":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":10,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"k":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"18":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":23,"docs":{"10":{"tf":1.7320508075688772},"14":{"tf":1.4142135623730951},"15":{"tf":2.0},"16":{"tf":2.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.23606797749979},"19":{"tf":1.7320508075688772},"20":{"tf":3.1622776601683795},"21":{"tf":2.449489742783178},"22":{"tf":2.8284271247461903},"23":{"tf":3.3166247903554},"24":{"tf":2.23606797749979},"26":{"tf":3.1622776601683795},"29":{"tf":4.123105625617661},"33":{"tf":1.7320508075688772},"34":{"tf":1.7320508075688772},"58":{"tf":2.23606797749979},"61":{"tf":1.4142135623730951},"62":{"tf":1.0},"63":{"tf":1.0},"74":{"tf":2.0},"75":{"tf":1.7320508075688772},"77":{"tf":1.4142135623730951}}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":8,"docs":{"14":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":2.0},"70":{"tf":1.0}},"e":{"(":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"23":{"tf":1.0},"29":{"tf":1.0}}}}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"33":{"tf":1.0},"69":{"tf":1.0}}}}}}}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":11,"docs":{"14":{"tf":1.0},"15":{"tf":2.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"21":{"tf":2.0},"22":{"tf":2.23606797749979},"29":{"tf":2.23606797749979},"32":{"tf":2.23606797749979},"33":{"tf":2.23606797749979},"57":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":10,"docs":{"22":{"tf":1.0},"29":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"39":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":3,"docs":{"40":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"10":{"tf":1.0}}}}}},"df":15,"docs":{"14":{"tf":1.7320508075688772},"15":{"tf":2.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":2.23606797749979},"21":{"tf":2.0},"22":{"tf":2.23606797749979},"29":{"tf":2.23606797749979},"32":{"tf":2.449489742783178},"33":{"tf":2.23606797749979},"35":{"tf":2.0},"57":{"tf":1.4142135623730951},"72":{"tf":1.0},"73":{"tf":1.4142135623730951}}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":8,"docs":{"24":{"tf":1.0},"25":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"38":{"tf":1.0},"65":{"tf":2.23606797749979},"66":{"tf":1.0},"67":{"tf":1.0}}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":5,"docs":{"29":{"tf":1.0},"45":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"67":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"30":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"20":{"tf":1.0},"36":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"61":{"tf":1.0}}}}}}}}}}},"v":{"df":7,"docs":{"14":{"tf":1.0},"19":{"tf":1.4142135623730951},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.4142135623730951},"70":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":5,"docs":{"19":{"tf":1.0},"21":{"tf":1.0},"41":{"tf":1.0},"48":{"tf":1.0},"56":{"tf":1.0}}}}}}}},"i":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"66":{"tf":1.0},"67":{"tf":1.0}}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"73":{"tf":1.0},"74":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"d":{"df":0,"docs":{},"n":{"'":{"df":0,"docs":{},"t":{"df":4,"docs":{"19":{"tf":1.0},"45":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":20,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":2.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.7320508075688772},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"21":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.4142135623730951},"51":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"62":{"tf":1.0},"63":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0}}}},"i":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":3,"docs":{"15":{"tf":1.0},"26":{"tf":1.0},"62":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":7,"docs":{"14":{"tf":1.0},"26":{"tf":1.0},"43":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"54":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"81":{"tf":1.4142135623730951}},"i":{"df":5,"docs":{"12":{"tf":1.0},"33":{"tf":1.0},"50":{"tf":1.0},"6":{"tf":2.0},"71":{"tf":2.8284271247461903}}}}}}},"df":0,"docs":{}}},"s":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"34":{"tf":2.0}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"12":{"tf":1.0}}}}}}}}},"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":5,"docs":{"10":{"tf":1.0},"27":{"tf":1.0},"35":{"tf":1.0},"65":{"tf":1.0},"78":{"tf":1.0}}}}}},"df":0,"docs":{},"h":{"df":1,"docs":{"51":{"tf":1.0}}},"p":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":4,"docs":{"15":{"tf":1.0},"16":{"tf":1.4142135623730951},"39":{"tf":1.0},"69":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"y":{"df":3,"docs":{"17":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"65":{"tf":1.0},"74":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"16":{"tf":1.0},"59":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":5,"docs":{"29":{"tf":1.0},"30":{"tf":1.0},"48":{"tf":1.0},"74":{"tf":1.7320508075688772},"76":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"47":{"tf":1.0}}},"i":{"d":{"df":3,"docs":{"16":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"4":{"tf":1.0},"49":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"2":{"tf":2.0},"29":{"tf":1.0},"36":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0}}}}}}}},"df":3,"docs":{"10":{"tf":1.0},"21":{"tf":1.0},"44":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"n":{"'":{"df":0,"docs":{},"t":{"df":10,"docs":{"15":{"tf":1.0},"17":{"tf":1.4142135623730951},"20":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"40":{"tf":1.0},"43":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0}}}},"df":0,"docs":{}}}},"n":{"'":{"df":0,"docs":{},"t":{"df":17,"docs":{"11":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"29":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"36":{"tf":1.0},"4":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"65":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0}}}},"a":{"df":0,"docs":{},"t":{"df":9,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":4.0},"30":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"64":{"tf":1.0},"65":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":2.0}},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":4,"docs":{"29":{"tf":1.7320508075688772},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":8,"docs":{"29":{"tf":4.123105625617661},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"69":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.4142135623730951},"77":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":8,"docs":{"22":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"39":{"tf":1.4142135623730951},"43":{"tf":1.0},"50":{"tf":1.0},"58":{"tf":1.0}}}},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"78":{"tf":1.0}}}},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"24":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"df":1,"docs":{"29":{"tf":1.0}},"s":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"74":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}}}},"r":{"a":{"df":0,"docs":{},"w":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"32":{"tf":1.0},"70":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"e":{"df":2,"docs":{"32":{"tf":1.0},"38":{"tf":1.0}}},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"74":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"29":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"70":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"g":{"df":1,"docs":{"15":{"tf":1.0}}}},"a":{"c":{"df":0,"docs":{},"h":{"df":6,"docs":{"18":{"tf":1.0},"21":{"tf":1.0},"36":{"tf":1.4142135623730951},"54":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"59":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"62":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"i":{"df":8,"docs":{"12":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"61":{"tf":1.0},"70":{"tf":1.0},"73":{"tf":1.0},"76":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"15":{"tf":1.0},"58":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"0":{"tf":1.0},"50":{"tf":1.0},"53":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"59":{"tf":1.0},"61":{"tf":1.0}}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.0}}}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":8,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0},"9":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"22":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"32":{"tf":1.0}}}}}}}}}}},"g":{"df":1,"docs":{"69":{"tf":1.0}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"55":{"tf":1.0},"56":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":3.3166247903554},"74":{"tf":1.7320508075688772}}}}}}},"i":{"df":0,"docs":{},"g":{"df":5,"docs":{"20":{"tf":1.0},"22":{"tf":1.0},"28":{"tf":1.0},"30":{"tf":1.0},"41":{"tf":1.0}}},"s":{"df":2,"docs":{"19":{"tf":1.0},"24":{"tf":1.0}}}}},"m":{"b":{"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"61":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":6,"docs":{"26":{"tf":2.6457513110645907},"41":{"tf":1.0},"50":{"tf":1.0},"58":{"tf":2.23606797749979},"61":{"tf":1.0},"70":{"tf":1.0}}}},"p":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"df":2,"docs":{"20":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"y":{"df":0,"docs":{},"e":{"df":1,"docs":{"41":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"i":{"df":18,"docs":{"10":{"tf":2.23606797749979},"14":{"tf":2.449489742783178},"15":{"tf":2.6457513110645907},"16":{"tf":2.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.449489742783178},"19":{"tf":2.23606797749979},"20":{"tf":3.1622776601683795},"21":{"tf":2.0},"22":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951},"74":{"tf":2.23606797749979},"75":{"tf":2.0},"77":{"tf":2.0},"9":{"tf":1.0}}}}}},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"19":{"tf":1.0},"34":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":2,"docs":{"15":{"tf":1.0},"29":{"tf":1.0}}}}},"o":{"d":{"df":4,"docs":{"14":{"tf":1.0},"57":{"tf":1.0},"67":{"tf":1.0},"76":{"tf":1.0}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":7,"docs":{"0":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"57":{"tf":1.0}}}},"df":0,"docs":{}}}}},"d":{"df":5,"docs":{"29":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.0},"60":{"tf":1.0}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"14":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"18":{"tf":1.0},"38":{"tf":1.0},"44":{"tf":1.4142135623730951},"62":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":5,"docs":{"24":{"tf":1.0},"33":{"tf":1.0},"42":{"tf":1.0},"49":{"tf":1.0},"65":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"13":{"tf":1.0},"21":{"tf":1.0},"23":{"tf":1.0},"30":{"tf":1.0},"77":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"76":{"tf":1.0},"77":{"tf":1.0}}},"t":{"df":0,"docs":{},"i":{"df":12,"docs":{"16":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":1.0},"22":{"tf":1.0},"27":{"tf":1.0},"38":{"tf":1.4142135623730951},"39":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.0},"52":{"tf":1.0},"64":{"tf":1.4142135623730951}}}}},"r":{"df":0,"docs":{},"i":{"df":17,"docs":{"10":{"tf":4.242640687119285},"14":{"tf":2.0},"16":{"tf":2.449489742783178},"19":{"tf":1.4142135623730951},"20":{"tf":2.23606797749979},"22":{"tf":1.7320508075688772},"23":{"tf":1.0},"29":{"tf":1.0},"34":{"tf":2.23606797749979},"35":{"tf":1.0},"58":{"tf":3.7416573867739413},"61":{"tf":1.0},"62":{"tf":1.4142135623730951},"63":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0}}},"y":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":13,"docs":{"10":{"tf":2.0},"14":{"tf":1.7320508075688772},"15":{"tf":2.449489742783178},"16":{"tf":2.0},"20":{"tf":2.23606797749979},"22":{"tf":1.7320508075688772},"23":{"tf":2.449489742783178},"33":{"tf":1.7320508075688772},"34":{"tf":2.23606797749979},"58":{"tf":2.449489742783178},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"m":{"df":14,"docs":{"10":{"tf":1.0},"15":{"tf":2.6457513110645907},"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"32":{"tf":1.4142135623730951},"33":{"tf":2.449489742783178},"35":{"tf":1.4142135623730951},"57":{"tf":2.0},"69":{"tf":1.7320508075688772}}}},"v":{".":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"77":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"18":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":25,"docs":{"10":{"tf":2.0},"14":{"tf":1.7320508075688772},"15":{"tf":2.6457513110645907},"16":{"tf":3.1622776601683795},"17":{"tf":1.7320508075688772},"18":{"tf":3.1622776601683795},"19":{"tf":2.0},"20":{"tf":4.69041575982343},"21":{"tf":2.8284271247461903},"22":{"tf":3.7416573867739413},"23":{"tf":4.898979485566356},"24":{"tf":2.0},"26":{"tf":2.8284271247461903},"29":{"tf":3.4641016151377544},"33":{"tf":3.1622776601683795},"34":{"tf":3.1622776601683795},"58":{"tf":2.449489742783178},"61":{"tf":1.7320508075688772},"62":{"tf":1.4142135623730951},"63":{"tf":1.4142135623730951},"69":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.4142135623730951},"76":{"tf":1.4142135623730951},"77":{"tf":2.0}},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":10,"docs":{"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"27":{"tf":1.0},"39":{"tf":1.4142135623730951},"4":{"tf":2.0},"5":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":1.0}}}}}}}},"q":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"17":{"tf":1.4142135623730951},"28":{"tf":1.0},"30":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":6,"docs":{"18":{"tf":1.0},"48":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.0}}}},"df":0,"docs":{}}}}},"r":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"24":{"tf":1.0}}}},"df":0,"docs":{},"r":{"(":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"c":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"(":{"\"":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"22":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},".":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":3,"docs":{"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":4,"docs":{"20":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}},"o":{"df":0,"docs":{},"r":{"(":{"\"":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}},"{":{"0":{"df":2,"docs":{"23":{"tf":1.0},"29":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"23":{"tf":1.0},"29":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},".":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.0}}}},":":{":":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"23":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":16,"docs":{"10":{"tf":1.0},"15":{"tf":1.0},"20":{"tf":2.23606797749979},"22":{"tf":1.7320508075688772},"23":{"tf":3.4641016151377544},"24":{"tf":3.7416573867739413},"29":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.0},"44":{"tf":1.4142135623730951},"46":{"tf":1.0},"58":{"tf":2.0},"61":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":3,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"9":{"tf":1.0}}}}}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"0":{"tf":1.0},"47":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"h":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"29":{"tf":3.3166247903554}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":1,"docs":{"29":{"tf":2.449489742783178}}}},"v":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":2.449489742783178}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":20,"docs":{"11":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"38":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"59":{"tf":1.0},"62":{"tf":1.4142135623730951},"65":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.7320508075688772},"78":{"tf":1.0}},"t":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"\"":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"a":{"d":{"d":{"df":0,"docs":{},"e":{"d":{"\"":{")":{".":{"a":{"d":{"d":{"_":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"\"":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":10,"docs":{"25":{"tf":2.23606797749979},"26":{"tf":4.898979485566356},"27":{"tf":1.7320508075688772},"29":{"tf":3.0},"41":{"tf":1.0},"50":{"tf":1.4142135623730951},"51":{"tf":2.0},"54":{"tf":1.0},"58":{"tf":3.0},"61":{"tf":1.4142135623730951}},"u":{"df":1,"docs":{"58":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"43":{"tf":1.0},"58":{"tf":1.0},"65":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":13,"docs":{"19":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.4142135623730951},"48":{"tf":1.7320508075688772},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":1.0},"71":{"tf":1.0},"78":{"tf":1.0}}}}}}}},"x":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"40":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":3,"docs":{"40":{"tf":1.4142135623730951},"56":{"tf":1.0},"58":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":21,"docs":{"10":{"tf":1.0},"14":{"tf":1.4142135623730951},"19":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"33":{"tf":1.4142135623730951},"39":{"tf":1.0},"40":{"tf":1.4142135623730951},"42":{"tf":1.7320508075688772},"43":{"tf":1.0},"48":{"tf":1.0},"51":{"tf":1.4142135623730951},"53":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.7320508075688772},"62":{"tf":1.4142135623730951},"67":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"4":{"tf":1.0}},"e":{"d":{"df":1,"docs":{"74":{"tf":1.0}}},"df":0,"docs":{}},"l":{"df":3,"docs":{"15":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0}}},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"58":{"tf":1.7320508075688772},"61":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"40":{"tf":1.0}}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"u":{"d":{"df":1,"docs":{"71":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"c":{":":{":":{"a":{"d":{"d":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"29":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}},"u":{"df":0,"docs":{},"t":{"df":31,"docs":{"10":{"tf":2.449489742783178},"12":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"19":{"tf":1.7320508075688772},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":2.449489742783178},"23":{"tf":2.23606797749979},"24":{"tf":2.23606797749979},"25":{"tf":1.0},"26":{"tf":2.23606797749979},"27":{"tf":1.0},"29":{"tf":2.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"38":{"tf":1.4142135623730951},"42":{"tf":1.0},"44":{"tf":1.0},"5":{"tf":1.0},"54":{"tf":2.0},"56":{"tf":1.0},"58":{"tf":3.3166247903554},"59":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951},"61":{"tf":1.7320508075688772},"62":{"tf":1.0},"67":{"tf":1.7320508075688772},"74":{"tf":2.0},"76":{"tf":2.0},"78":{"tf":1.0}},"e":{"(":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":2,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":2,"docs":{"22":{"tf":1.0},"23":{"tf":1.0}}}}},"df":0,"docs":{}},"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"24":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"29":{"tf":2.449489742783178}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"w":{"4":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"57":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"57":{"tf":1.0}}}}}}}}}}},":":{":":{"a":{"d":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":3,"docs":{"24":{"tf":1.0},"26":{"tf":1.7320508075688772},"29":{"tf":2.449489742783178}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"29":{"tf":1.0}}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"57":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":11,"docs":{"22":{"tf":2.23606797749979},"23":{"tf":2.23606797749979},"24":{"tf":1.7320508075688772},"26":{"tf":2.449489742783178},"29":{"tf":3.3166247903554},"32":{"tf":1.0},"33":{"tf":2.23606797749979},"34":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"69":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"r":{"df":8,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}},"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":5,"docs":{"22":{"tf":1.0},"24":{"tf":1.0},"29":{"tf":1.4142135623730951},"30":{"tf":1.0},"78":{"tf":1.0}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":9,"docs":{"20":{"tf":1.0},"22":{"tf":1.0},"27":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"48":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951}}}},"t":{"df":2,"docs":{"20":{"tf":1.0},"73":{"tf":1.0}}}},"p":{"a":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"34":{"tf":2.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":9,"docs":{"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":2.0},"29":{"tf":1.0},"36":{"tf":1.0},"45":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":3,"docs":{"56":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"24":{"tf":1.0}}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":6,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"20":{"tf":1.0},"38":{"tf":1.0},"58":{"tf":1.4142135623730951},"8":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"30":{"tf":1.0}}}},"r":{"df":1,"docs":{"1":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"33":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"78":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"n":{"df":4,"docs":{"44":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"67":{"tf":2.23606797749979}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"16":{"tf":1.0},"18":{"tf":1.0},"24":{"tf":1.0},"51":{"tf":1.0}}}},"df":1,"docs":{"73":{"tf":1.0}}},"df":0,"docs":{}}}}},"f":{"3":{"2":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"35":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"a":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"10":{"tf":1.0},"78":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":12,"docs":{"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"20":{"tf":2.0},"24":{"tf":1.4142135623730951},"33":{"tf":1.0},"35":{"tf":1.0},"45":{"tf":2.449489742783178},"58":{"tf":1.4142135623730951},"59":{"tf":1.0},"62":{"tf":1.0},"73":{"tf":1.0},"78":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":8,"docs":{"15":{"tf":1.0},"20":{"tf":1.4142135623730951},"24":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.23606797749979},"58":{"tf":1.0},"59":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"s":{"df":7,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"61":{"tf":1.0}}}},"df":0,"docs":{}}}}},"n":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":5,"docs":{"22":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":13,"docs":{"14":{"tf":1.7320508075688772},"19":{"tf":1.7320508075688772},"20":{"tf":1.7320508075688772},"23":{"tf":2.0},"29":{"tf":2.0},"33":{"tf":1.7320508075688772},"34":{"tf":2.449489742783178},"55":{"tf":1.0},"58":{"tf":1.4142135623730951},"60":{"tf":1.0},"62":{"tf":1.0},"70":{"tf":2.0},"9":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":1,"docs":{"28":{"tf":1.0}},"l":{"df":3,"docs":{"38":{"tf":1.0},"65":{"tf":1.0},"78":{"tf":1.0}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"56":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":18,"docs":{"15":{"tf":1.7320508075688772},"16":{"tf":1.0},"20":{"tf":1.7320508075688772},"22":{"tf":1.0},"29":{"tf":1.4142135623730951},"32":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":2.0},"53":{"tf":1.7320508075688772},"54":{"tf":1.4142135623730951},"58":{"tf":2.23606797749979},"59":{"tf":2.449489742783178},"61":{"tf":1.4142135623730951},"62":{"tf":1.0},"71":{"tf":1.7320508075688772},"76":{"tf":2.23606797749979},"78":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"20":{"tf":1.0},"29":{"tf":1.0},"56":{"tf":1.0},"59":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"e":{"df":9,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":2.0},"20":{"tf":1.0},"33":{"tf":2.23606797749979},"57":{"tf":1.0},"71":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"|":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":2,"docs":{"26":{"tf":1.0},"29":{"tf":1.7320508075688772}}}}}},"df":3,"docs":{"17":{"tf":1.0},"20":{"tf":1.0},"73":{"tf":1.0}}}}}},"n":{"a":{"df":0,"docs":{},"l":{"df":15,"docs":{"19":{"tf":1.0},"22":{"tf":1.0},"34":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":1.0},"49":{"tf":1.0},"58":{"tf":1.0},"61":{"tf":1.4142135623730951},"69":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0}}},"n":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"48":{"tf":1.0}}}},"df":0,"docs":{}}},"d":{"(":{"df":0,"docs":{},"|":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"26":{"tf":1.7320508075688772},"29":{"tf":3.0}}}}}},"df":0,"docs":{}}},"df":6,"docs":{"1":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0},"6":{"tf":1.4142135623730951},"72":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":1,"docs":{"68":{"tf":1.0}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":11,"docs":{"17":{"tf":1.0},"20":{"tf":1.0},"33":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.0},"41":{"tf":2.0},"42":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.0},"58":{"tf":1.4142135623730951},"61":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":33,"docs":{"1":{"tf":1.0},"10":{"tf":1.0},"14":{"tf":1.7320508075688772},"15":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":2.0},"22":{"tf":1.4142135623730951},"26":{"tf":1.0},"29":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"39":{"tf":1.4142135623730951},"4":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"50":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.4142135623730951},"59":{"tf":1.0},"6":{"tf":1.0},"61":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.7320508075688772},"74":{"tf":1.4142135623730951},"9":{"tf":1.0}}}}},"t":{"df":1,"docs":{"10":{"tf":1.0}}},"x":{"df":12,"docs":{"20":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"58":{"tf":1.4142135623730951},"59":{"tf":1.0},"65":{"tf":1.0},"68":{"tf":1.7320508075688772},"69":{"tf":1.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.0},"74":{"tf":2.0},"75":{"tf":1.0}}}},"l":{"a":{"df":0,"docs":{},"g":{"df":5,"docs":{"33":{"tf":1.0},"34":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.7320508075688772},"62":{"tf":1.4142135623730951}}},"w":{"df":1,"docs":{"74":{"tf":1.0}}}},"df":0,"docs":{},"o":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"35":{"tf":3.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}}},"w":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"66":{"tf":1.0},"67":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":4,"docs":{"14":{"tf":1.0},"44":{"tf":2.0},"45":{"tf":1.0},"74":{"tf":1.4142135623730951}}}}},"n":{"df":24,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"15":{"tf":2.23606797749979},"16":{"tf":2.23606797749979},"17":{"tf":2.0},"18":{"tf":2.8284271247461903},"19":{"tf":2.23606797749979},"20":{"tf":3.872983346207417},"21":{"tf":3.605551275463989},"22":{"tf":3.4641016151377544},"23":{"tf":3.872983346207417},"24":{"tf":3.1622776601683795},"26":{"tf":4.58257569495584},"29":{"tf":6.0},"33":{"tf":2.0},"34":{"tf":1.7320508075688772},"58":{"tf":1.7320508075688772},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":2.0},"75":{"tf":1.4142135623730951},"77":{"tf":1.0}}},"o":{"c":{"df":0,"docs":{},"u":{"df":1,"docs":{"4":{"tf":1.0}},"s":{"df":1,"docs":{"64":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"49":{"tf":1.0},"56":{"tf":1.0},"6":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":7,"docs":{"12":{"tf":1.0},"18":{"tf":1.0},"2":{"tf":1.0},"29":{"tf":1.0},"4":{"tf":1.0},"6":{"tf":1.0},"74":{"tf":1.0}}}}}},"n":{"d":{"df":1,"docs":{"15":{"tf":1.0}}},"df":0,"docs":{}},"o":{"d":{"df":2,"docs":{"39":{"tf":1.0},"41":{"tf":1.0}}},"df":0,"docs":{}},"r":{"c":{"df":4,"docs":{"22":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"75":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"29":{"tf":1.0}}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"34":{"tf":1.0}}}},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"73":{"tf":1.0}}}}},"k":{"df":1,"docs":{"35":{"tf":1.0}}},"m":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"57":{"tf":1.0},"58":{"tf":1.0}}}},"df":2,"docs":{"10":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951}}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"17":{"tf":1.0}}},"u":{"df":0,"docs":{},"n":{"df":6,"docs":{"12":{"tf":1.0},"18":{"tf":1.0},"24":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":6,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"50":{"tf":1.0},"58":{"tf":1.0},"61":{"tf":1.4142135623730951},"67":{"tf":1.7320508075688772}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"10":{"tf":1.0}}}}},"p":{"df":1,"docs":{"35":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":3,"docs":{"19":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":2,"docs":{"39":{"tf":1.0},"78":{"tf":1.0}}},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"i":{"df":3,"docs":{"39":{"tf":1.0},"40":{"tf":1.4142135623730951},"41":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"66":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"18":{"tf":1.0}}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"m":{"_":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"(":{"&":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}},"l":{"df":1,"docs":{"33":{"tf":1.0}}}},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"'":{"df":1,"docs":{"19":{"tf":1.0}}},"df":22,"docs":{"10":{"tf":2.0},"14":{"tf":1.0},"15":{"tf":2.23606797749979},"16":{"tf":2.449489742783178},"17":{"tf":1.0},"18":{"tf":2.23606797749979},"19":{"tf":2.449489742783178},"20":{"tf":2.0},"22":{"tf":2.0},"24":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":2.449489742783178},"38":{"tf":1.4142135623730951},"58":{"tf":2.6457513110645907},"59":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951},"73":{"tf":1.7320508075688772},"74":{"tf":1.7320508075688772},"77":{"tf":1.4142135623730951},"78":{"tf":1.7320508075688772},"9":{"tf":1.0}}}}}}},"d":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"36":{"tf":1.0}}}}}}},"df":10,"docs":{"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"28":{"tf":2.23606797749979},"29":{"tf":2.6457513110645907},"30":{"tf":1.0},"42":{"tf":1.0},"48":{"tf":1.0},"58":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.0},"44":{"tf":1.0},"53":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":8,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"20":{"tf":1.0},"36":{"tf":1.0},"51":{"tf":1.0},"77":{"tf":1.4142135623730951}}}}}}},"g":{"a":{"df":8,"docs":{"11":{"tf":1.0},"28":{"tf":1.0},"48":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":2.0},"59":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":2.0}},"m":{"df":0,"docs":{},"e":{"df":2,"docs":{"42":{"tf":1.0},"44":{"tf":1.4142135623730951}}}},"s":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"59":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"58":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":19,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"29":{"tf":1.0},"33":{"tf":2.6457513110645907},"34":{"tf":1.4142135623730951},"35":{"tf":1.0},"51":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.7320508075688772},"59":{"tf":1.0},"60":{"tf":1.0},"65":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":2.0},"74":{"tf":1.4142135623730951},"9":{"tf":1.0}}}}},"t":{"df":3,"docs":{"19":{"tf":1.0},"24":{"tf":1.0},"6":{"tf":1.0}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"t":{"@":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"b":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{":":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"/":{"c":{"df":0,"docs":{},"w":{"df":2,"docs":{"49":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"d":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"4":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":3,"docs":{"4":{"tf":1.0},"49":{"tf":1.0},"6":{"tf":1.0}},"h":{"df":0,"docs":{},"u":{"b":{"df":1,"docs":{"3":{"tf":1.0}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"e":{"df":8,"docs":{"10":{"tf":1.0},"29":{"tf":1.0},"36":{"tf":1.4142135623730951},"42":{"tf":1.0},"56":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0}},"n":{"df":6,"docs":{"11":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"34":{"tf":1.0},"56":{"tf":1.0},"74":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"o":{"b":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"18":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"m":{"b":{"df":0,"docs":{},"h":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"65":{"tf":1.0},"66":{"tf":1.0}}}},"df":24,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"20":{"tf":1.7320508075688772},"22":{"tf":1.0},"33":{"tf":1.7320508075688772},"36":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.4142135623730951},"51":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"74":{"tf":1.4142135623730951},"76":{"tf":1.0},"8":{"tf":1.0}},"e":{"df":2,"docs":{"42":{"tf":1.0},"43":{"tf":1.0}}},"l":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"4":{"tf":1.0}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"69":{"tf":1.0}}}},"o":{"d":{"df":18,"docs":{"15":{"tf":1.0},"17":{"tf":1.4142135623730951},"20":{"tf":1.0},"21":{"tf":1.0},"29":{"tf":1.0},"31":{"tf":2.0},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"34":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"56":{"tf":1.7320508075688772},"57":{"tf":1.0},"6":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"78":{"tf":1.0}}},"df":0,"docs":{}},"t":{"c":{"df":0,"docs":{},"h":{"a":{"df":1,"docs":{"35":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":2,"docs":{"1":{"tf":1.0},"36":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":3,"docs":{"1":{"tf":1.0},"29":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":10,"docs":{"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}}},"df":15,"docs":{"15":{"tf":3.3166247903554},"16":{"tf":1.7320508075688772},"17":{"tf":1.7320508075688772},"18":{"tf":2.0},"19":{"tf":1.4142135623730951},"20":{"tf":2.23606797749979},"21":{"tf":2.23606797749979},"22":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.6457513110645907},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"69":{"tf":1.0}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":14,"docs":{"15":{"tf":2.0},"16":{"tf":1.7320508075688772},"17":{"tf":1.7320508075688772},"18":{"tf":2.449489742783178},"19":{"tf":1.7320508075688772},"20":{"tf":2.6457513110645907},"21":{"tf":3.0},"22":{"tf":2.23606797749979},"23":{"tf":2.0},"24":{"tf":2.0},"26":{"tf":2.8284271247461903},"29":{"tf":3.605551275463989},"32":{"tf":1.0},"33":{"tf":1.7320508075688772}}}}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"50":{"tf":1.0}}}}},"df":0,"docs":{}}},"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}}}},"df":10,"docs":{"38":{"tf":1.0},"49":{"tf":1.7320508075688772},"51":{"tf":2.23606797749979},"53":{"tf":1.0},"54":{"tf":2.449489742783178},"56":{"tf":2.449489742783178},"58":{"tf":1.4142135623730951},"64":{"tf":1.0},"65":{"tf":1.0},"77":{"tf":1.0}}}}}},"u":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":4,"docs":{"42":{"tf":1.0},"46":{"tf":1.0},"6":{"tf":1.0},"76":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"d":{"df":4,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"2":{"tf":1.0},"55":{"tf":1.0}}},"df":0,"docs":{}}}},"h":{"a":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"65":{"tf":1.0}}}},"n":{"d":{"df":4,"docs":{"27":{"tf":1.0},"33":{"tf":1.0},"42":{"tf":1.0},"73":{"tf":1.0}},"l":{"df":22,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"30":{"tf":1.0},"41":{"tf":1.4142135623730951},"43":{"tf":1.0},"45":{"tf":2.23606797749979},"46":{"tf":1.0},"48":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"58":{"tf":2.0},"59":{"tf":1.0},"60":{"tf":1.7320508075688772},"61":{"tf":1.7320508075688772},"62":{"tf":1.0},"63":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":8,"docs":{"15":{"tf":1.7320508075688772},"16":{"tf":1.4142135623730951},"19":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":1.0}}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":13,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"19":{"tf":1.0},"22":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.4142135623730951},"51":{"tf":1.0},"56":{"tf":1.7320508075688772},"59":{"tf":1.0},"61":{"tf":1.0},"73":{"tf":1.0}}}}}},"r":{"d":{"c":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"59":{"tf":1.0}}},"df":0,"docs":{}}},"df":1,"docs":{"28":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"18":{"tf":1.0}},"m":{"a":{"df":0,"docs":{},"p":{"df":2,"docs":{"73":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"e":{"df":3,"docs":{"20":{"tf":1.0},"48":{"tf":1.0},"52":{"tf":1.0}},"n":{"'":{"df":0,"docs":{},"t":{"df":1,"docs":{"43":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"28":{"tf":1.4142135623730951}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"26":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.0},"56":{"tf":1.4142135623730951},"58":{"tf":1.0},"76":{"tf":2.0}}}}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"@":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"h":{"df":1,"docs":{"82":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":13,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.4142135623730951},"20":{"tf":2.0},"21":{"tf":2.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178}}}},"p":{"df":11,"docs":{"14":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"27":{"tf":1.4142135623730951},"33":{"tf":1.0},"42":{"tf":1.0},"46":{"tf":1.0},"5":{"tf":1.0},"57":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"10":{"tf":1.0},"59":{"tf":1.0},"63":{"tf":1.0},"9":{"tf":1.0}},"s":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"e":{"df":24,"docs":{"10":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.7320508075688772},"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"24":{"tf":1.0},"36":{"tf":1.0},"39":{"tf":1.0},"44":{"tf":1.7320508075688772},"48":{"tf":1.0},"51":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.4142135623730951},"60":{"tf":1.0},"66":{"tf":1.4142135623730951},"67":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":2.0},"76":{"tf":1.0}}}}},"i":{"d":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"42":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"h":{"df":2,"docs":{"10":{"tf":1.0},"20":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"18":{"tf":1.0},"73":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"30":{"tf":1.0},"40":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"66":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"56":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"d":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"/":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"/":{"0":{"3":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"56":{"tf":2.0}}}}},"r":{"b":{"df":1,"docs":{"83":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":2,"docs":{"26":{"tf":1.0},"75":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"53":{"tf":1.0}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"41":{"tf":1.0}}}}}}}},"i":{"'":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"78":{"tf":1.0}}}},"m":{"df":1,"docs":{"15":{"tf":1.0}}}},"d":{"df":8,"docs":{"10":{"tf":1.0},"19":{"tf":1.4142135623730951},"41":{"tf":2.0},"48":{"tf":1.0},"50":{"tf":1.0},"59":{"tf":2.449489742783178},"61":{"tf":1.0},"76":{"tf":1.0}},"e":{"a":{"df":18,"docs":{"0":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"22":{"tf":1.0},"37":{"tf":1.7320508075688772},"38":{"tf":1.0},"39":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"46":{"tf":1.0},"57":{"tf":1.0},"65":{"tf":1.0},"78":{"tf":1.0},"8":{"tf":1.0}},"l":{"df":2,"docs":{"44":{"tf":1.0},"72":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":3,"docs":{"52":{"tf":1.0},"61":{"tf":1.0},"76":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"17":{"tf":1.0},"20":{"tf":1.0},"50":{"tf":1.0}}}}}},"m":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":7,"docs":{"38":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.0},"48":{"tf":1.4142135623730951},"56":{"tf":1.0},"74":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":5,"docs":{"42":{"tf":1.0},"43":{"tf":1.0},"51":{"tf":1.0},"65":{"tf":1.0},"72":{"tf":1.0}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":18,"docs":{"10":{"tf":1.0},"14":{"tf":1.7320508075688772},"19":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"29":{"tf":2.0},"35":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"55":{"tf":1.0},"58":{"tf":1.0},"65":{"tf":1.4142135623730951},"66":{"tf":1.0},"67":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0}}}}}}},"i":{"c":{"df":1,"docs":{"35":{"tf":1.4142135623730951}}},"df":1,"docs":{"26":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":21,"docs":{"10":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":1.0},"35":{"tf":1.0},"39":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.7320508075688772},"59":{"tf":1.4142135623730951},"61":{"tf":1.0},"63":{"tf":1.0},"71":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"14":{"tf":1.0},"33":{"tf":1.0},"59":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":7,"docs":{"15":{"tf":2.23606797749979},"22":{"tf":1.0},"29":{"tf":1.0},"58":{"tf":1.0},"64":{"tf":1.0},"72":{"tf":1.0},"75":{"tf":1.0}}}}}}},"n":{"a":{"c":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"18":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"d":{"df":2,"docs":{"12":{"tf":1.0},"39":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"29":{"tf":1.4142135623730951}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"58":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":2,"docs":{"42":{"tf":1.0},"76":{"tf":1.0}}}},"df":0,"docs":{}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":2,"docs":{"75":{"tf":1.0},"76":{"tf":1.7320508075688772}},"e":{"d":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"56":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"42":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{")":{".":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":4,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":6,"docs":{"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178},"75":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"74":{"tf":1.0},"75":{"tf":1.0}}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"74":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":18,"docs":{"10":{"tf":1.0},"14":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"18":{"tf":1.7320508075688772},"20":{"tf":2.0},"22":{"tf":3.0},"23":{"tf":3.4641016151377544},"24":{"tf":2.0},"26":{"tf":2.8284271247461903},"29":{"tf":4.0},"33":{"tf":2.0},"34":{"tf":2.0},"44":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.0}},"m":{"df":1,"docs":{"79":{"tf":1.0}}},"r":{"df":0,"docs":{},"m":{"df":18,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":1.0},"17":{"tf":1.0},"33":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"58":{"tf":2.449489742783178},"79":{"tf":1.7320508075688772},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"t":{"_":{"b":{"a":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":11,"docs":{"10":{"tf":1.0},"20":{"tf":1.7320508075688772},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"29":{"tf":1.4142135623730951},"51":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.7320508075688772},"78":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"23":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"71":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"18":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"4":{"tf":3.0},"5":{"tf":1.7320508075688772},"6":{"tf":1.4142135623730951}}},"n":{"c":{"df":5,"docs":{"18":{"tf":1.0},"50":{"tf":1.4142135623730951},"51":{"tf":1.4142135623730951},"65":{"tf":1.0},"67":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":2,"docs":{"16":{"tf":1.0},"20":{"tf":1.0}}}}},"df":0,"docs":{}},"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":8,"docs":{"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":2.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":2.0},"26":{"tf":3.0},"29":{"tf":4.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":16,"docs":{"20":{"tf":2.6457513110645907},"21":{"tf":3.0},"22":{"tf":2.8284271247461903},"23":{"tf":3.0},"24":{"tf":2.449489742783178},"26":{"tf":3.605551275463989},"29":{"tf":4.795831523312719},"32":{"tf":1.0},"33":{"tf":2.6457513110645907},"34":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}}}}}},"df":30,"docs":{"10":{"tf":2.449489742783178},"14":{"tf":2.449489742783178},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":2.8284271247461903},"19":{"tf":2.449489742783178},"20":{"tf":3.3166247903554},"21":{"tf":3.0},"22":{"tf":2.6457513110645907},"23":{"tf":2.449489742783178},"24":{"tf":2.23606797749979},"26":{"tf":3.3166247903554},"29":{"tf":4.795831523312719},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"39":{"tf":1.0},"45":{"tf":1.4142135623730951},"51":{"tf":2.8284271247461903},"54":{"tf":1.7320508075688772},"57":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.4142135623730951},"65":{"tf":1.0},"66":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"77":{"tf":1.7320508075688772},"78":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{},"e":{"a":{"d":{"df":19,"docs":{"11":{"tf":1.0},"12":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"18":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"39":{"tf":1.4142135623730951},"41":{"tf":1.0},"47":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"35":{"tf":1.4142135623730951},"4":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"19":{"tf":1.0},"50":{"tf":1.0},"54":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"58":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":9,"docs":{"19":{"tf":1.0},"2":{"tf":1.0},"29":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"51":{"tf":1.0},"60":{"tf":1.4142135623730951},"72":{"tf":1.0},"73":{"tf":1.4142135623730951}}}}},"n":{"df":8,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"38":{"tf":1.0}}}}}}}},"o":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":7,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"26":{"tf":2.23606797749979},"29":{"tf":3.0}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"61":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":5,"docs":{"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"19":{"tf":2.0},"20":{"tf":1.0},"22":{"tf":1.0}},"t":{"df":5,"docs":{"0":{"tf":1.7320508075688772},"1":{"tf":1.0},"2":{"tf":1.0},"3":{"tf":1.0},"7":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"69":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"54":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"42":{"tf":1.0}}}},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"25":{"tf":1.0}}},"l":{"df":0,"docs":{},"v":{"df":2,"docs":{"19":{"tf":1.0},"62":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":2,"docs":{"69":{"tf":1.0},"74":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"35":{"tf":1.0}}}},"n":{"'":{"df":0,"docs":{},"t":{"df":1,"docs":{"48":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":2,"docs":{"64":{"tf":1.0},"65":{"tf":1.0}}}},"s":{"df":0,"docs":{},"u":{"df":6,"docs":{"29":{"tf":1.0},"3":{"tf":1.0},"58":{"tf":1.0},"62":{"tf":1.0},"65":{"tf":1.0},"74":{"tf":1.0}}}}},"t":{"'":{"df":3,"docs":{"19":{"tf":1.0},"29":{"tf":1.0},"64":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"\"":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"20":{"tf":1.0},"29":{"tf":1.0},"72":{"tf":1.0}}}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":4,"docs":{"29":{"tf":1.0},"72":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"<":{"_":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":4,"docs":{"29":{"tf":1.0},"72":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}}},"t":{"df":1,"docs":{"56":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"c":{"<":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":4,"docs":{"20":{"tf":1.4142135623730951},"29":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":5,"docs":{"20":{"tf":1.7320508075688772},"22":{"tf":1.7320508075688772},"56":{"tf":1.4142135623730951},"73":{"tf":2.8284271247461903},"74":{"tf":1.7320508075688772}}},"r":{"df":7,"docs":{"13":{"tf":1.0},"26":{"tf":2.449489742783178},"29":{"tf":3.872983346207417},"6":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":2.6457513110645907},"74":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":18,"docs":{"1":{"tf":1.0},"10":{"tf":1.0},"15":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"39":{"tf":1.0},"40":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"58":{"tf":2.0},"6":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.7320508075688772}}}}}}}},"j":{"df":0,"docs":{},"o":{"b":{"df":6,"docs":{"19":{"tf":1.0},"21":{"tf":1.0},"39":{"tf":1.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"44":{"tf":1.0}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"77":{"tf":2.449489742783178},"78":{"tf":2.449489742783178}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"78":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":1,"docs":{"78":{"tf":1.0}}}}}}}}}}}}},"q":{"df":1,"docs":{"53":{"tf":1.0}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":10,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":2.0},"20":{"tf":1.0},"32":{"tf":1.7320508075688772},"33":{"tf":2.449489742783178},"50":{"tf":1.0},"53":{"tf":1.7320508075688772},"57":{"tf":1.7320508075688772},"58":{"tf":1.0}},"s":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":1,"docs":{"33":{"tf":2.23606797749979}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"u":{"d":{"df":0,"docs":{},"g":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"k":{"df":1,"docs":{"73":{"tf":1.0}},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":14,"docs":{"16":{"tf":1.0},"20":{"tf":1.7320508075688772},"29":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772},"58":{"tf":1.4142135623730951},"72":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0}}}},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"24":{"tf":1.0},"42":{"tf":1.0}}}},"y":{"df":11,"docs":{"20":{"tf":2.23606797749979},"26":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.4142135623730951},"52":{"tf":1.7320508075688772},"54":{"tf":1.7320508075688772},"56":{"tf":1.4142135623730951},"58":{"tf":1.0},"73":{"tf":2.6457513110645907},"74":{"tf":2.0},"75":{"tf":2.23606797749979}},"s":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"74":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"f":{"c":{"df":7,"docs":{"39":{"tf":1.4142135623730951},"40":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"51":{"tf":1.0},"59":{"tf":1.0}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"n":{"d":{"df":13,"docs":{"30":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.4142135623730951},"44":{"tf":1.0},"48":{"tf":1.4142135623730951},"54":{"tf":1.0},"56":{"tf":1.0},"62":{"tf":1.4142135623730951},"77":{"tf":1.0}}},"df":0,"docs":{}},"t":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"39":{"tf":1.0}}}}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":18,"docs":{"11":{"tf":1.0},"24":{"tf":1.4142135623730951},"25":{"tf":1.0},"27":{"tf":1.0},"36":{"tf":1.0},"41":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.4142135623730951},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"68":{"tf":1.0},"71":{"tf":1.7320508075688772},"74":{"tf":1.0}},"l":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"g":{"df":4,"docs":{"1":{"tf":1.0},"17":{"tf":1.0},"22":{"tf":1.0},"64":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"l":{"a":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":4,"docs":{"19":{"tf":1.0},"20":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"14":{"tf":1.0},"26":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"g":{"df":4,"docs":{"1":{"tf":1.0},"47":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"df":13,"docs":{"13":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.4142135623730951},"22":{"tf":1.0},"29":{"tf":1.0},"39":{"tf":1.0},"58":{"tf":1.4142135623730951},"61":{"tf":1.0},"63":{"tf":1.0},"71":{"tf":1.4142135623730951},"73":{"tf":1.0},"78":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":9,"docs":{"17":{"tf":1.0},"18":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"48":{"tf":1.0},"58":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.7320508075688772},"9":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"26":{"tf":1.0}}}}},"z":{"df":0,"docs":{},"i":{"df":1,"docs":{"56":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"d":{"df":2,"docs":{"0":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":5,"docs":{"1":{"tf":1.4142135623730951},"11":{"tf":1.0},"48":{"tf":1.0},"54":{"tf":1.4142135623730951},"65":{"tf":1.0}}}},"v":{"df":14,"docs":{"15":{"tf":1.0},"18":{"tf":1.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.23606797749979},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"39":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":1.7320508075688772},"75":{"tf":1.4142135623730951},"78":{"tf":1.0}},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":7,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"74":{"tf":1.0},"75":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":4,"docs":{"29":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0}},"o":{"df":0,"docs":{},"v":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"g":{"a":{"df":0,"docs":{},"l":{"df":7,"docs":{"79":{"tf":1.7320508075688772},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"74":{"tf":1.0}}}},"t":{"'":{"df":30,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.4142135623730951},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":1.0},"42":{"tf":1.7320508075688772},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"50":{"tf":1.0},"53":{"tf":1.7320508075688772},"54":{"tf":1.7320508075688772},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.4142135623730951},"65":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":2.0},"77":{"tf":1.7320508075688772}}},"df":0,"docs":{},"’":{"df":1,"docs":{"46":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":10,"docs":{"10":{"tf":1.0},"16":{"tf":1.7320508075688772},"18":{"tf":1.0},"20":{"tf":1.0},"30":{"tf":1.0},"38":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.4142135623730951},"61":{"tf":1.0},"71":{"tf":2.23606797749979}}}}}},"i":{"b":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.0}}}},"df":8,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":2.0},"70":{"tf":1.0},"9":{"tf":1.4142135623730951}},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":11,"docs":{"16":{"tf":1.0},"19":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":2.8284271247461903},"58":{"tf":2.23606797749979},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"70":{"tf":2.23606797749979},"9":{"tf":2.23606797749979}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":1,"docs":{"15":{"tf":1.0}}},"f":{"df":0,"docs":{},"e":{"df":4,"docs":{"19":{"tf":1.0},"20":{"tf":1.0},"25":{"tf":1.0},"42":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"10":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":5,"docs":{"14":{"tf":1.0},"35":{"tf":1.4142135623730951},"4":{"tf":1.0},"53":{"tf":1.0},"74":{"tf":2.0}}}}},"n":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"74":{"tf":1.7320508075688772}}}},"df":5,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"29":{"tf":1.0},"5":{"tf":1.0},"58":{"tf":1.0}}}},"s":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":1,"docs":{"43":{"tf":1.0}}}}},"t":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":2,"docs":{"53":{"tf":2.0},"54":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"df":16,"docs":{"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":1.0},"30":{"tf":1.4142135623730951},"39":{"tf":1.0},"44":{"tf":3.3166247903554},"45":{"tf":1.7320508075688772},"51":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.0},"65":{"tf":1.4142135623730951},"66":{"tf":1.0},"72":{"tf":1.4142135623730951},"74":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"39":{"tf":1.0}}}}}}},"o":{"a":{"d":{"df":4,"docs":{"22":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"78":{"tf":1.0}}},"df":0,"docs":{}},"c":{"a":{"df":0,"docs":{},"l":{"df":6,"docs":{"11":{"tf":1.0},"17":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"52":{"tf":1.4142135623730951},"74":{"tf":1.0}}},"t":{"df":1,"docs":{"49":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":5,"docs":{"26":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.0}},"i":{"c":{"df":4,"docs":{"16":{"tf":1.0},"26":{"tf":1.4142135623730951},"27":{"tf":1.0},"74":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"s":{"[":{"]":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"51":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"44":{"tf":1.4142135623730951},"7":{"tf":1.0},"74":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"k":{"df":33,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.4142135623730951},"2":{"tf":1.0},"22":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.4142135623730951},"37":{"tf":1.0},"38":{"tf":1.0},"40":{"tf":1.0},"43":{"tf":2.23606797749979},"44":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951},"47":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.4142135623730951},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":1.7320508075688772},"59":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.4142135623730951},"62":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"71":{"tf":1.0},"76":{"tf":1.4142135623730951},"78":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"65":{"tf":1.0}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"18":{"tf":1.0}}}}},"w":{"df":1,"docs":{"27":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"56":{"tf":1.0},"73":{"tf":1.0}}}}}}},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"35":{"tf":1.0},"4":{"tf":1.0},"58":{"tf":1.7320508075688772}}}}},"r":{"df":0,"docs":{},"o":{"df":3,"docs":{"10":{"tf":1.0},"33":{"tf":1.0},"58":{"tf":1.4142135623730951}}}}},"d":{"df":0,"docs":{},"e":{"df":4,"docs":{"16":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.0},"62":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"c":{"df":3,"docs":{"10":{"tf":1.0},"24":{"tf":1.0},"48":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"10":{"tf":1.4142135623730951},"26":{"tf":1.0},"33":{"tf":1.0},"58":{"tf":1.4142135623730951}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"0":{"tf":1.0},"24":{"tf":1.0},"3":{"tf":1.0},"6":{"tf":1.0}}}}},"df":0,"docs":{}}}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"15":{"tf":1.0}}}}},"k":{"df":0,"docs":{},"e":{"df":25,"docs":{"12":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"26":{"tf":1.4142135623730951},"27":{"tf":1.0},"33":{"tf":1.4142135623730951},"4":{"tf":1.0},"41":{"tf":1.4142135623730951},"44":{"tf":1.7320508075688772},"48":{"tf":1.7320508075688772},"54":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.7320508075688772},"6":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"74":{"tf":1.4142135623730951},"78":{"tf":1.7320508075688772}}}},"l":{"a":{"df":0,"docs":{},"g":{"a":{"df":2,"docs":{"47":{"tf":1.0},"7":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"g":{"df":10,"docs":{"20":{"tf":1.0},"28":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"81":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"i":{"df":12,"docs":{"16":{"tf":1.0},"30":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.4142135623730951},"76":{"tf":1.0}},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"48":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"48":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"43":{"tf":1.0}}}}}},"p":{"(":{"df":0,"docs":{},"|":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":7,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"\"":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"<":{"&":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":2,"docs":{"75":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"74":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"k":{"df":1,"docs":{"56":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"73":{"tf":1.0}}}}}},"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":12,"docs":{"38":{"tf":1.0},"42":{"tf":1.0},"48":{"tf":1.4142135623730951},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":2.0},"62":{"tf":1.4142135623730951},"72":{"tf":2.0},"73":{"tf":3.4641016151377544},"74":{"tf":3.872983346207417},"75":{"tf":2.23606797749979},"77":{"tf":2.0}}},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"42":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"56":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":2,"docs":{"15":{"tf":1.0},"20":{"tf":1.0}}}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":15,"docs":{"15":{"tf":1.7320508075688772},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.7320508075688772},"26":{"tf":2.0},"29":{"tf":2.449489742783178},"48":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"74":{"tf":1.0}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"15":{"tf":1.0},"20":{"tf":1.0},"40":{"tf":1.0},"48":{"tf":1.0},"53":{"tf":1.0}}}}}},"y":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":2,"docs":{"22":{"tf":1.0},"73":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"b":{"df":6,"docs":{"16":{"tf":1.0},"36":{"tf":1.0},"42":{"tf":1.4142135623730951},"54":{"tf":1.0},"58":{"tf":1.0},"73":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"df":4,"docs":{"39":{"tf":1.7320508075688772},"40":{"tf":1.0},"41":{"tf":1.7320508075688772},"42":{"tf":1.0}}},"n":{"df":8,"docs":{"14":{"tf":1.0},"28":{"tf":1.0},"35":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.4142135623730951},"48":{"tf":1.0},"67":{"tf":1.0},"76":{"tf":1.7320508075688772}},"t":{"df":1,"docs":{"48":{"tf":1.0}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"17":{"tf":1.0},"20":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":2,"docs":{"38":{"tf":1.0},"48":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"54":{"tf":1.0}}},"df":7,"docs":{"22":{"tf":1.0},"51":{"tf":2.0},"53":{"tf":1.4142135623730951},"54":{"tf":3.1622776601683795},"56":{"tf":1.7320508075688772},"71":{"tf":1.4142135623730951},"77":{"tf":1.0}},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":1,"docs":{"38":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":10,"docs":{"33":{"tf":1.0},"34":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"52":{"tf":1.0},"61":{"tf":1.4142135623730951},"62":{"tf":1.0},"76":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":39,"docs":{"10":{"tf":3.0},"14":{"tf":3.0},"15":{"tf":4.0},"16":{"tf":2.23606797749979},"17":{"tf":2.6457513110645907},"18":{"tf":2.8284271247461903},"19":{"tf":2.23606797749979},"20":{"tf":3.7416573867739413},"21":{"tf":2.8284271247461903},"22":{"tf":3.605551275463989},"23":{"tf":2.0},"24":{"tf":1.7320508075688772},"26":{"tf":2.0},"28":{"tf":1.4142135623730951},"29":{"tf":4.0},"32":{"tf":2.0},"33":{"tf":2.6457513110645907},"35":{"tf":1.4142135623730951},"39":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.449489742783178},"48":{"tf":1.7320508075688772},"51":{"tf":2.0},"52":{"tf":1.7320508075688772},"53":{"tf":1.0},"54":{"tf":1.7320508075688772},"56":{"tf":1.0},"57":{"tf":3.0},"58":{"tf":3.7416573867739413},"59":{"tf":2.8284271247461903},"60":{"tf":2.6457513110645907},"61":{"tf":3.1622776601683795},"62":{"tf":1.0},"63":{"tf":1.7320508075688772},"67":{"tf":2.23606797749979},"70":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0}},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":20,"docs":{"10":{"tf":1.7320508075688772},"14":{"tf":1.4142135623730951},"15":{"tf":2.0},"16":{"tf":2.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.7320508075688772},"20":{"tf":3.1622776601683795},"21":{"tf":2.449489742783178},"22":{"tf":3.0},"23":{"tf":3.3166247903554},"24":{"tf":2.23606797749979},"26":{"tf":3.1622776601683795},"29":{"tf":4.242640687119285},"33":{"tf":1.7320508075688772},"34":{"tf":1.7320508075688772},"58":{"tf":1.7320508075688772},"74":{"tf":2.449489742783178},"75":{"tf":1.7320508075688772},"77":{"tf":1.4142135623730951}}}}}}}}},"df":1,"docs":{"18":{"tf":1.0}}}},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":4,"docs":{"14":{"tf":1.4142135623730951},"25":{"tf":1.0},"41":{"tf":1.0},"54":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":2,"docs":{"10":{"tf":1.0},"20":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"d":{"df":3,"docs":{"50":{"tf":1.0},"58":{"tf":1.0},"73":{"tf":1.0}}},"df":0,"docs":{}}}}},"i":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"38":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":7,"docs":{"10":{"tf":1.0},"19":{"tf":1.0},"48":{"tf":1.7320508075688772},"54":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"62":{"tf":4.0},"73":{"tf":1.0}},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"62":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"62":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{}}},"n":{"d":{"df":3,"docs":{"42":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"11":{"tf":1.0},"4":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}},"t":{"df":1,"docs":{"44":{"tf":1.0}}}},"r":{"a":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"24":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"40":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"m":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"s":{"df":4,"docs":{"20":{"tf":1.4142135623730951},"29":{"tf":1.0},"73":{"tf":1.0},"78":{"tf":1.0}}},"t":{"a":{"df":0,"docs":{},"k":{"df":1,"docs":{"3":{"tf":1.0}}}},"df":0,"docs":{}}}},"m":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":3,"docs":{"42":{"tf":1.4142135623730951},"44":{"tf":2.23606797749979},"45":{"tf":1.0}}}}}},"df":1,"docs":{"44":{"tf":2.0}},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"g":{"df":1,"docs":{"42":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"52":{"tf":1.4142135623730951}}}}}}},"o":{"c":{"df":0,"docs":{},"k":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"18":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"(":{")":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"18":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"18":{"tf":2.23606797749979}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"(":{"\"":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"18":{"tf":1.4142135623730951}}}}}}},"df":1,"docs":{"18":{"tf":1.4142135623730951}}}},"d":{"df":14,"docs":{"15":{"tf":1.0},"16":{"tf":1.7320508075688772},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.4142135623730951},"20":{"tf":3.1622776601683795},"21":{"tf":2.0},"22":{"tf":2.449489742783178},"23":{"tf":3.3166247903554},"24":{"tf":1.7320508075688772},"26":{"tf":2.449489742783178},"29":{"tf":3.0},"33":{"tf":2.0},"34":{"tf":2.0}},"e":{"df":0,"docs":{},"l":{"df":32,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"29":{"tf":1.4142135623730951},"36":{"tf":1.7320508075688772},"37":{"tf":2.0},"38":{"tf":1.7320508075688772},"39":{"tf":1.7320508075688772},"40":{"tf":1.4142135623730951},"41":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"43":{"tf":1.4142135623730951},"44":{"tf":1.7320508075688772},"45":{"tf":1.0},"46":{"tf":1.4142135623730951},"47":{"tf":1.0},"48":{"tf":1.7320508075688772},"49":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.4142135623730951},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":2.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":5,"docs":{"10":{"tf":1.0},"20":{"tf":1.0},"29":{"tf":1.0},"48":{"tf":1.7320508075688772},"54":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"df":8,"docs":{"15":{"tf":1.0},"16":{"tf":1.7320508075688772},"17":{"tf":1.4142135623730951},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.4142135623730951},"69":{"tf":1.0}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"56":{"tf":1.0},"58":{"tf":1.0},"62":{"tf":1.0},"78":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":2,"docs":{"42":{"tf":1.0},"48":{"tf":1.0}}}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"76":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":25,"docs":{"10":{"tf":1.7320508075688772},"15":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"26":{"tf":1.0},"32":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.7320508075688772},"44":{"tf":1.7320508075688772},"45":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"62":{"tf":1.0},"65":{"tf":1.4142135623730951},"71":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"41":{"tf":1.4142135623730951},"47":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"49":{"tf":1.4142135623730951}}}}},"v":{"df":0,"docs":{},"e":{"df":8,"docs":{"16":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"50":{"tf":1.0},"74":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"g":{".":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":4,"docs":{"29":{"tf":1.7320508075688772},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"r":{"df":4,"docs":{"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"62":{"tf":1.0}}}},":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"20":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":2,"docs":{"16":{"tf":1.0},"20":{"tf":1.4142135623730951}}}}}}}}}},"{":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":4,"docs":{"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":25,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":2.0},"16":{"tf":2.6457513110645907},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.4142135623730951},"20":{"tf":4.358898943540674},"21":{"tf":2.8284271247461903},"22":{"tf":3.605551275463989},"23":{"tf":4.47213595499958},"24":{"tf":2.449489742783178},"26":{"tf":3.4641016151377544},"29":{"tf":4.242640687119285},"33":{"tf":2.8284271247461903},"34":{"tf":2.6457513110645907},"58":{"tf":1.7320508075688772},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.4142135623730951},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}},"t":{"df":1,"docs":{"20":{"tf":1.0}}},"u":{"c":{"df":0,"docs":{},"h":{"df":12,"docs":{"10":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"26":{"tf":1.0},"42":{"tf":1.0},"48":{"tf":1.7320508075688772},"53":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":11,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":1.0},"24":{"tf":1.7320508075688772},"29":{"tf":1.4142135623730951},"33":{"tf":1.0},"41":{"tf":1.4142135623730951},"65":{"tf":1.0},"70":{"tf":1.0}},"p":{"df":0,"docs":{},"l":{"df":7,"docs":{"26":{"tf":1.4142135623730951},"36":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.4142135623730951},"76":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"19":{"tf":3.1622776601683795}}}}}}}}},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"t":{"df":9,"docs":{"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.7320508075688772},"21":{"tf":1.7320508075688772},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":2.0},"26":{"tf":3.0},"29":{"tf":4.0}}}},"y":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"34":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"18":{"tf":1.0}}}}}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":19,"docs":{"11":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":2.0},"19":{"tf":1.4142135623730951},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.4142135623730951},"32":{"tf":1.7320508075688772},"33":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.0},"52":{"tf":1.4142135623730951},"53":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"70":{"tf":1.4142135623730951},"77":{"tf":1.0},"9":{"tf":1.0}},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":1,"docs":{"15":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":8,"docs":{"10":{"tf":1.7320508075688772},"11":{"tf":1.0},"12":{"tf":1.0},"19":{"tf":1.0},"28":{"tf":2.0},"29":{"tf":1.0},"48":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"r":{"df":4,"docs":{"28":{"tf":1.0},"42":{"tf":1.0},"48":{"tf":1.0},"54":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"26":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"d":{"df":40,"docs":{"11":{"tf":1.0},"14":{"tf":1.7320508075688772},"17":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"19":{"tf":2.0},"20":{"tf":2.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":2.6457513110645907},"33":{"tf":1.4142135623730951},"35":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":2.0},"40":{"tf":1.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.7320508075688772},"43":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.4142135623730951},"59":{"tf":1.0},"6":{"tf":1.4142135623730951},"61":{"tf":1.0},"64":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.7320508075688772},"75":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.7320508075688772},"78":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":16,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.0},"35":{"tf":1.4142135623730951},"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"51":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"73":{"tf":1.0},"76":{"tf":1.0}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"30":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"77":{"tf":1.4142135623730951}}}}}}}},"w":{"df":26,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.7320508075688772},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"26":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":2.0},"30":{"tf":1.0},"33":{"tf":1.7320508075688772},"34":{"tf":1.0},"48":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.7320508075688772},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.7320508075688772},"65":{"tf":1.4142135623730951},"77":{"tf":1.0},"78":{"tf":1.7320508075688772},"9":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"71":{"tf":1.0}}}}},"x":{"df":0,"docs":{},"t":{"df":6,"docs":{"10":{"tf":1.0},"15":{"tf":1.0},"19":{"tf":1.4142135623730951},"33":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.0}}}}},"i":{"c":{"df":0,"docs":{},"e":{"df":7,"docs":{"18":{"tf":1.0},"19":{"tf":1.4142135623730951},"23":{"tf":1.0},"24":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"d":{"df":0,"docs":{},"e":{"df":2,"docs":{"74":{"tf":1.0},"76":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"69":{"tf":1.0}}}},"n":{"df":8,"docs":{"15":{"tf":1.0},"20":{"tf":1.0},"24":{"tf":1.0},"41":{"tf":1.0},"43":{"tf":1.0},"52":{"tf":1.7320508075688772},"61":{"tf":1.0},"71":{"tf":1.0}},"e":{"df":12,"docs":{"19":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"21":{"tf":2.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":2.0},"26":{"tf":3.0},"29":{"tf":4.0},"44":{"tf":1.0},"61":{"tf":1.4142135623730951},"73":{"tf":2.23606797749979},"74":{"tf":2.0}}}},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"58":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":14,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"17":{"tf":1.0},"20":{"tf":1.4142135623730951},"29":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.4142135623730951},"59":{"tf":1.0},"67":{"tf":1.0},"70":{"tf":1.0},"72":{"tf":1.0},"77":{"tf":1.0}}},"h":{"df":10,"docs":{"14":{"tf":1.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"30":{"tf":1.0},"34":{"tf":1.0},"44":{"tf":1.0},"66":{"tf":1.0}}},"i":{"c":{"df":9,"docs":{"10":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"22":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"70":{"tf":1.0},"73":{"tf":1.0}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"51":{"tf":1.0}}}},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"20":{"tf":1.0},"28":{"tf":1.0},"44":{"tf":1.0},"76":{"tf":1.0}}}}}},"w":{"df":48,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"15":{"tf":2.23606797749979},"16":{"tf":2.449489742783178},"17":{"tf":1.7320508075688772},"18":{"tf":1.7320508075688772},"19":{"tf":1.7320508075688772},"20":{"tf":2.449489742783178},"21":{"tf":1.4142135623730951},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":2.0},"31":{"tf":1.0},"33":{"tf":2.0},"34":{"tf":1.4142135623730951},"35":{"tf":1.0},"36":{"tf":1.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.0},"44":{"tf":2.0},"45":{"tf":2.0},"46":{"tf":1.0},"48":{"tf":1.4142135623730951},"49":{"tf":1.4142135623730951},"50":{"tf":2.0},"51":{"tf":1.0},"54":{"tf":2.449489742783178},"55":{"tf":1.0},"58":{"tf":1.4142135623730951},"6":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.4142135623730951},"63":{"tf":1.0},"64":{"tf":1.4142135623730951},"65":{"tf":1.0},"68":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":1.7320508075688772},"72":{"tf":1.0},"74":{"tf":2.23606797749979},"75":{"tf":1.0},"77":{"tf":1.4142135623730951},"9":{"tf":1.0}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":8,"docs":{"29":{"tf":1.4142135623730951},"35":{"tf":1.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.0},"51":{"tf":1.0},"59":{"tf":1.0},"76":{"tf":1.0},"84":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}}},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":13,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.7320508075688772},"15":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":1.0},"27":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"58":{"tf":2.449489742783178},"61":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":4,"docs":{"39":{"tf":1.4142135623730951},"41":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"77":{"tf":1.0}}}}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":3,"docs":{"15":{"tf":1.4142135623730951},"57":{"tf":1.0},"60":{"tf":1.0}},"s":{"df":3,"docs":{"48":{"tf":1.0},"51":{"tf":1.0},"73":{"tf":1.0}}}}}}}},"c":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"18":{"tf":1.0},"24":{"tf":1.0},"30":{"tf":1.0}}}}},"df":0,"docs":{}},"df":2,"docs":{"21":{"tf":1.0},"53":{"tf":1.0}},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"36":{"tf":1.0}}}},"df":0,"docs":{}}}},"k":{"(":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"22":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":14,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.7320508075688772},"21":{"tf":2.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.449489742783178},"29":{"tf":3.3166247903554},"74":{"tf":1.7320508075688772},"75":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":17,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"26":{"tf":2.0},"29":{"tf":2.449489742783178},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"df":5,"docs":{"10":{"tf":1.0},"17":{"tf":1.4142135623730951},"24":{"tf":1.0},"58":{"tf":1.4142135623730951},"61":{"tf":1.0}}},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"62":{"tf":1.0}}}}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"14":{"tf":1.0}}}}},"n":{"c":{"df":6,"docs":{"10":{"tf":1.0},"29":{"tf":1.0},"34":{"tf":1.4142135623730951},"36":{"tf":1.0},"40":{"tf":1.0},"59":{"tf":1.0}}},"df":44,"docs":{"0":{"tf":1.0},"10":{"tf":1.4142135623730951},"14":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.7320508075688772},"35":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.7320508075688772},"52":{"tf":1.0},"53":{"tf":1.7320508075688772},"54":{"tf":2.449489742783178},"56":{"tf":2.23606797749979},"57":{"tf":2.449489742783178},"58":{"tf":3.0},"59":{"tf":1.0},"60":{"tf":1.7320508075688772},"61":{"tf":1.4142135623730951},"62":{"tf":1.7320508075688772},"63":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"7":{"tf":1.4142135623730951},"71":{"tf":1.7320508075688772},"72":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"74":{"tf":1.0},"75":{"tf":1.0},"78":{"tf":1.0},"9":{"tf":1.4142135623730951}},"e":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"73":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"19":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":15,"docs":{"10":{"tf":1.0},"23":{"tf":1.0},"35":{"tf":1.7320508075688772},"39":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"7":{"tf":1.0}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"77":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":3,"docs":{"11":{"tf":1.0},"4":{"tf":1.0},"71":{"tf":1.0}},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{"0":{".":{"1":{"2":{".":{"6":{"df":1,"docs":{"49":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"o":{"df":0,"docs":{},"n":{"df":7,"docs":{"17":{"tf":1.0},"20":{"tf":1.0},"4":{"tf":1.0},"45":{"tf":2.0},"51":{"tf":1.0},"53":{"tf":1.0},"78":{"tf":1.0}}}}}}},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"a":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"73":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":8,"docs":{"39":{"tf":1.7320508075688772},"40":{"tf":1.4142135623730951},"41":{"tf":2.23606797749979},"51":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":6,"docs":{"24":{"tf":1.4142135623730951},"38":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.4142135623730951},"59":{"tf":1.0},"61":{"tf":1.0}}}}}},"m":{"df":1,"docs":{"56":{"tf":1.0}}}},"s":{"df":2,"docs":{"11":{"tf":1.0},"78":{"tf":1.0}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"7":{"tf":1.4142135623730951}}}}}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"30":{"tf":1.0},"70":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"34":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}}}}}},"t":{"df":18,"docs":{"15":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"24":{"tf":1.4142135623730951},"27":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.0},"44":{"tf":2.449489742783178},"45":{"tf":1.0},"48":{"tf":1.0},"56":{"tf":1.0},"59":{"tf":1.4142135623730951},"73":{"tf":1.0},"77":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"10":{"tf":1.0}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"50":{"tf":1.0},"6":{"tf":1.0},"70":{"tf":2.0}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":5,"docs":{"18":{"tf":1.0},"27":{"tf":1.0},"58":{"tf":1.0},"73":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"58":{"tf":1.0}},"p":{"df":0,"docs":{},"l":{"df":2,"docs":{"10":{"tf":1.0},"12":{"tf":1.0}}}}}}},"df":5,"docs":{"15":{"tf":1.0},"60":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":2.0},"74":{"tf":1.0}},"h":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"14":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"w":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"61":{"tf":1.0}}}},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}}},"w":{"df":0,"docs":{},"n":{"df":4,"docs":{"20":{"tf":1.0},"44":{"tf":1.0},"65":{"tf":1.0},"75":{"tf":1.0}},"e":{"d":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"18":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":2,"docs":{"20":{"tf":1.0},"28":{"tf":1.0}}}}}}},"p":{"9":{"df":0,"docs":{},"p":{"df":0,"docs":{},"n":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"w":{"3":{"3":{"df":0,"docs":{},"v":{"4":{"0":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"5":{"df":0,"docs":{},"l":{"4":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"df":1,"docs":{"54":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"a":{"c":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"g":{"df":8,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":1,"docs":{"1":{"tf":1.0}}},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"53":{"tf":1.0},"74":{"tf":1.0}}}}},"i":{"d":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}}},"df":0,"docs":{},"n":{"df":1,"docs":{"33":{"tf":1.0}}},"r":{"df":5,"docs":{"20":{"tf":1.0},"26":{"tf":1.0},"58":{"tf":1.0},"73":{"tf":1.0},"76":{"tf":1.0}}}},"n":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"24":{"tf":1.0}},"k":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"40":{"tf":1.0},"53":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"s":{"df":1,"docs":{"20":{"tf":1.4142135623730951}}},"t":{"df":16,"docs":{"16":{"tf":1.0},"29":{"tf":1.7320508075688772},"36":{"tf":1.0},"39":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.7320508075688772},"54":{"tf":1.4142135623730951},"58":{"tf":1.0},"59":{"tf":1.0},"64":{"tf":1.0},"71":{"tf":1.4142135623730951},"73":{"tf":1.0}},"i":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"42":{"tf":1.0},"56":{"tf":1.0}},"e":{"df":0,"docs":{},"q":{"df":8,"docs":{"17":{"tf":2.0},"20":{"tf":1.7320508075688772},"21":{"tf":2.0},"22":{"tf":2.23606797749979},"23":{"tf":1.0},"29":{"tf":2.449489742783178},"32":{"tf":2.23606797749979},"33":{"tf":2.23606797749979}}}}}},"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":1,"docs":{"39":{"tf":1.0}}}},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":14,"docs":{"29":{"tf":1.0},"35":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.4142135623730951},"43":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.4142135623730951},"51":{"tf":1.0},"56":{"tf":1.4142135623730951},"70":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0},"78":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"i":{"df":3,"docs":{"26":{"tf":1.0},"29":{"tf":1.0},"75":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"s":{"df":15,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.4142135623730951},"13":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.0},"20":{"tf":2.23606797749979},"41":{"tf":2.0},"53":{"tf":1.0},"54":{"tf":1.4142135623730951},"56":{"tf":1.0},"6":{"tf":2.0},"62":{"tf":1.0},"73":{"tf":1.0}},"i":{"df":0,"docs":{},"v":{"df":2,"docs":{"25":{"tf":1.0},"39":{"tf":1.0}}}}},"t":{"df":3,"docs":{"62":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"69":{"tf":1.0}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":4,"docs":{"0":{"tf":1.0},"41":{"tf":1.0},"67":{"tf":1.0},"71":{"tf":1.0}}}}}}},"y":{"df":3,"docs":{"28":{"tf":1.0},"44":{"tf":2.0},"56":{"tf":1.0}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"(":{"#":{"[":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"29":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"39":{"tf":1.0},"40":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}}}}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"44":{"tf":2.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"10":{"tf":1.0},"29":{"tf":1.0}},"f":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"48":{"tf":1.0}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":21,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"14":{"tf":1.7320508075688772},"18":{"tf":1.0},"19":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"38":{"tf":1.4142135623730951},"39":{"tf":1.4142135623730951},"40":{"tf":2.0},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"43":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.7320508075688772},"48":{"tf":1.0},"54":{"tf":1.7320508075688772},"60":{"tf":1.0},"62":{"tf":2.0},"67":{"tf":1.4142135623730951}}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"18":{"tf":1.0},"48":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"44":{"tf":1.0},"65":{"tf":1.0}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"47":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"40":{"tf":1.0},"74":{"tf":1.0}},"l":{"df":1,"docs":{"43":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"c":{"df":1,"docs":{"58":{"tf":1.0}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}},"l":{"a":{"c":{"df":0,"docs":{},"e":{"df":4,"docs":{"20":{"tf":1.0},"26":{"tf":1.0},"6":{"tf":1.0},"75":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"14":{"tf":1.0}}}},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"46":{"tf":1.0}}}}}},"z":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}}},"y":{"df":5,"docs":{"25":{"tf":1.0},"43":{"tf":1.0},"46":{"tf":1.0},"52":{"tf":1.0},"7":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"44":{"tf":1.0}}},"df":3,"docs":{"42":{"tf":1.7320508075688772},"44":{"tf":3.4641016151377544},"45":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"3":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"30":{"tf":1.4142135623730951}}}},"u":{"df":9,"docs":{"2":{"tf":1.0},"20":{"tf":2.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"40":{"tf":1.0},"49":{"tf":1.4142135623730951},"6":{"tf":2.23606797749979},"70":{"tf":1.0}},"s":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"49":{"tf":1.0},"6":{"tf":1.0}}}}}},"/":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"49":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"/":{"c":{"df":0,"docs":{},"w":{"1":{"df":1,"docs":{"6":{"tf":1.4142135623730951}}},"4":{"df":2,"docs":{"49":{"tf":1.0},"56":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":19,"docs":{"10":{"tf":4.242640687119285},"14":{"tf":2.0},"16":{"tf":2.23606797749979},"19":{"tf":1.4142135623730951},"20":{"tf":2.23606797749979},"22":{"tf":1.7320508075688772},"23":{"tf":1.0},"34":{"tf":2.23606797749979},"35":{"tf":3.3166247903554},"39":{"tf":1.0},"42":{"tf":1.0},"48":{"tf":1.4142135623730951},"56":{"tf":1.0},"58":{"tf":3.7416573867739413},"61":{"tf":1.0},"62":{"tf":1.7320508075688772},"63":{"tf":1.0},"68":{"tf":1.0},"77":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"38":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"56":{"tf":1.0},"58":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"42":{"tf":1.0},"48":{"tf":1.0}}}}},"i":{"b":{"df":0,"docs":{},"l":{"df":14,"docs":{"22":{"tf":1.4142135623730951},"26":{"tf":1.0},"29":{"tf":1.4142135623730951},"38":{"tf":1.0},"39":{"tf":1.4142135623730951},"41":{"tf":1.4142135623730951},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"59":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.4142135623730951},"73":{"tf":1.0},"78":{"tf":1.0}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"22":{"tf":1.0},"74":{"tf":1.0}}}}}},"s":{"d":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"v":{"df":1,"docs":{"71":{"tf":1.0}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"46":{"tf":1.0}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":15,"docs":{"12":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.4142135623730951},"31":{"tf":2.0},"32":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"36":{"tf":1.0},"45":{"tf":1.0},"56":{"tf":1.0},"6":{"tf":1.0},"64":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}}},"df":0,"docs":{}}}},"d":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"20":{"tf":1.0},"61":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"15":{"tf":1.0},"48":{"tf":1.0},"59":{"tf":1.0}}}},"i":{"df":0,"docs":{},"x":{"df":2,"docs":{"20":{"tf":1.7320508075688772},"26":{"tf":1.0}}}}},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"77":{"tf":1.0}}}}}},"df":0,"docs":{}},"p":{"a":{"df":0,"docs":{},"r":{"df":6,"docs":{"19":{"tf":1.0},"29":{"tf":1.7320508075688772},"39":{"tf":1.7320508075688772},"40":{"tf":2.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"1":{"tf":1.4142135623730951}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"14":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":3,"docs":{"21":{"tf":1.0},"38":{"tf":1.0},"74":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"30":{"tf":1.4142135623730951},"65":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":7,"docs":{"40":{"tf":1.0},"41":{"tf":1.0},"48":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"62":{"tf":1.0},"71":{"tf":1.0}},"s":{"df":10,"docs":{"14":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"47":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"77":{"tf":1.4142135623730951}}}}}}}},"i":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"68":{"tf":1.0}}}}}}},"df":0,"docs":{}},"n":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":3,"docs":{"38":{"tf":1.0},"43":{"tf":1.0},"64":{"tf":1.0}}}}}},"df":0,"docs":{},"t":{"df":2,"docs":{"17":{"tf":1.0},"42":{"tf":1.0}}}}},"o":{"b":{"a":{"b":{"df":0,"docs":{},"l":{"df":10,"docs":{"1":{"tf":1.0},"16":{"tf":1.0},"19":{"tf":1.4142135623730951},"22":{"tf":1.0},"29":{"tf":1.0},"39":{"tf":1.0},"45":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":22,"docs":{"15":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"26":{"tf":1.4142135623730951},"32":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"35":{"tf":1.4142135623730951},"37":{"tf":1.0},"38":{"tf":2.0},"40":{"tf":1.0},"41":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"54":{"tf":1.0},"62":{"tf":1.7320508075688772},"64":{"tf":1.0},"65":{"tf":1.4142135623730951},"70":{"tf":1.0},"73":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":8,"docs":{"19":{"tf":1.0},"53":{"tf":1.0},"58":{"tf":1.7320508075688772},"59":{"tf":2.0},"61":{"tf":1.7320508075688772},"65":{"tf":1.4142135623730951},"66":{"tf":1.7320508075688772},"76":{"tf":1.4142135623730951}}}}}},"d":{"df":0,"docs":{},"u":{"c":{"df":3,"docs":{"18":{"tf":1.0},"25":{"tf":1.0},"27":{"tf":1.0}},"t":{"df":3,"docs":{"11":{"tf":1.0},"24":{"tf":1.0},"4":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"40":{"tf":1.0}}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":4,"docs":{"42":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"58":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"10":{"tf":1.0},"59":{"tf":1.0}}}}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":6,"docs":{"12":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":3.3166247903554},"77":{"tf":1.0},"9":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":13,"docs":{"10":{"tf":1.0},"15":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"42":{"tf":1.0},"5":{"tf":1.0},"54":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"9":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":8,"docs":{"26":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"46":{"tf":1.0},"47":{"tf":1.0},"57":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"65":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"40":{"tf":1.0}}}}},"df":0,"docs":{}}},"v":{"df":0,"docs":{},"i":{"d":{"df":11,"docs":{"18":{"tf":1.0},"19":{"tf":1.7320508075688772},"21":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"35":{"tf":1.0},"46":{"tf":1.0},"58":{"tf":1.0},"80":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"df":0,"docs":{}}},"x":{"df":0,"docs":{},"i":{"df":1,"docs":{"67":{"tf":1.0}}}}}},"u":{"b":{"df":29,"docs":{"10":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":2.8284271247461903},"16":{"tf":2.8284271247461903},"17":{"tf":2.449489742783178},"18":{"tf":2.449489742783178},"19":{"tf":2.0},"20":{"tf":4.358898943540674},"21":{"tf":4.123105625617661},"22":{"tf":4.242640687119285},"23":{"tf":3.7416573867739413},"24":{"tf":2.6457513110645907},"26":{"tf":3.7416573867739413},"29":{"tf":5.916079783099616},"32":{"tf":3.0},"33":{"tf":5.830951894845301},"34":{"tf":2.6457513110645907},"58":{"tf":1.7320508075688772},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"69":{"tf":2.8284271247461903},"72":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":2.23606797749979},"75":{"tf":2.0},"76":{"tf":2.449489742783178},"77":{"tf":1.7320508075688772},"78":{"tf":1.4142135623730951}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"52":{"tf":1.4142135623730951}}}}},"l":{"df":0,"docs":{},"i":{"c":{"df":4,"docs":{"16":{"tf":1.0},"33":{"tf":1.0},"42":{"tf":1.4142135623730951},"43":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"3":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"14":{"tf":1.0}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":16,"docs":{"10":{"tf":1.0},"11":{"tf":1.4142135623730951},"15":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.7320508075688772},"24":{"tf":1.0},"32":{"tf":1.0},"35":{"tf":1.0},"48":{"tf":1.0},"57":{"tf":1.4142135623730951},"61":{"tf":1.0},"62":{"tf":1.0},"65":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":1.4142135623730951},"77":{"tf":1.0}}}}}},"t":{"df":2,"docs":{"51":{"tf":1.4142135623730951},"66":{"tf":1.0}}}},"w":{"d":{")":{"\"":{")":{"_":{"c":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"\"":{",":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"=":{"/":{"c":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"49":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},":":{"/":{"c":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"49":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":25,"docs":{"10":{"tf":2.23606797749979},"14":{"tf":3.7416573867739413},"15":{"tf":4.123105625617661},"16":{"tf":2.449489742783178},"17":{"tf":2.23606797749979},"18":{"tf":3.1622776601683795},"19":{"tf":2.8284271247461903},"20":{"tf":2.23606797749979},"21":{"tf":3.1622776601683795},"22":{"tf":2.0},"23":{"tf":1.7320508075688772},"24":{"tf":2.0},"25":{"tf":1.0},"26":{"tf":3.0},"29":{"tf":4.0},"33":{"tf":2.0},"43":{"tf":3.1622776601683795},"48":{"tf":1.4142135623730951},"50":{"tf":1.4142135623730951},"53":{"tf":3.1622776601683795},"54":{"tf":2.449489742783178},"58":{"tf":2.23606797749979},"69":{"tf":2.449489742783178},"74":{"tf":2.23606797749979},"78":{"tf":2.23606797749979}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"14":{"tf":1.0}}}}},"y":{"(":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":7,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.0}}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":12,"docs":{"16":{"tf":1.0},"20":{"tf":1.7320508075688772},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.0},"58":{"tf":1.0},"69":{"tf":1.0}},"s":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"18":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"_":{"b":{"a":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"(":{"\"":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"1":{"df":1,"docs":{"29":{"tf":1.0}}},"2":{"df":1,"docs":{"29":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"29":{"tf":1.0}}}}},"&":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"(":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":8,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":2.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"26":{"tf":2.449489742783178},"29":{"tf":3.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"19":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{":":{":":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":6,"docs":{"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":9,"docs":{"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}}},"df":0,"docs":{}},"df":18,"docs":{"15":{"tf":2.449489742783178},"16":{"tf":2.0},"17":{"tf":2.23606797749979},"18":{"tf":2.449489742783178},"19":{"tf":1.7320508075688772},"20":{"tf":2.6457513110645907},"21":{"tf":2.6457513110645907},"22":{"tf":2.449489742783178},"23":{"tf":2.6457513110645907},"24":{"tf":1.7320508075688772},"26":{"tf":2.449489742783178},"29":{"tf":3.1622776601683795},"32":{"tf":1.0},"33":{"tf":2.6457513110645907},"34":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.0},"69":{"tf":1.7320508075688772}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":2,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"33":{"tf":1.7320508075688772},"69":{"tf":1.0}}}}}}}}}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":2.23606797749979},"45":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":6,"docs":{"15":{"tf":1.0},"20":{"tf":1.0},"42":{"tf":1.4142135623730951},"48":{"tf":1.0},"56":{"tf":1.0},"78":{"tf":1.0}}}}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"47":{"tf":1.0},"7":{"tf":1.7320508075688772}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"71":{"tf":1.0}},"g":{"df":1,"docs":{"73":{"tf":1.7320508075688772}}}},"r":{"df":0,"docs":{},"e":{"df":5,"docs":{"12":{"tf":1.0},"25":{"tf":1.0},"27":{"tf":1.0},"45":{"tf":1.0},"73":{"tf":1.0}}}},"w":{"df":2,"docs":{"10":{"tf":1.0},"43":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"e":{"a":{"c":{"df":0,"docs":{},"h":{"df":5,"docs":{"22":{"tf":1.0},"41":{"tf":1.0},"59":{"tf":1.0},"73":{"tf":1.0},"78":{"tf":1.0}}},"t":{"df":3,"docs":{"14":{"tf":1.0},"39":{"tf":1.0},"41":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"25":{"tf":1.0}}}},"v":{"df":1,"docs":{"14":{"tf":1.0}}}}}},"d":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"53":{"tf":1.0}}}},"df":0,"docs":{}},"df":8,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"20":{"tf":1.0},"22":{"tf":1.4142135623730951},"36":{"tf":1.0},"59":{"tf":1.0},"73":{"tf":2.0},"77":{"tf":1.0}},"i":{"df":9,"docs":{"16":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"24":{"tf":1.0},"35":{"tf":1.0},"39":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":9,"docs":{"18":{"tf":1.0},"19":{"tf":1.0},"25":{"tf":1.0},"4":{"tf":1.0},"42":{"tf":1.0},"46":{"tf":1.0},"67":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"42":{"tf":1.0},"44":{"tf":1.0}}}},"z":{"df":2,"docs":{"42":{"tf":1.0},"56":{"tf":1.0}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"58":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":17,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"24":{"tf":1.4142135623730951},"35":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.0},"41":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"48":{"tf":1.7320508075688772},"56":{"tf":1.0},"60":{"tf":1.0},"64":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":5,"docs":{"30":{"tf":1.0},"39":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"74":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"33":{"tf":1.0}}}},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":3,"docs":{"1":{"tf":1.0},"58":{"tf":1.0},"7":{"tf":1.0}}},"df":0,"docs":{}}}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"74":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"d":{"df":1,"docs":{"54":{"tf":1.0}}},"df":0,"docs":{}},"v":{"df":1,"docs":{"24":{"tf":1.0}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"u":{"c":{"df":2,"docs":{"11":{"tf":1.0},"33":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"46":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"f":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"15":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"52":{"tf":1.0},"69":{"tf":1.0},"75":{"tf":1.7320508075688772}}}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"18":{"tf":1.0},"71":{"tf":1.0}}}},"df":0,"docs":{}}}},"g":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"78":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"65":{"tf":1.0},"83":{"tf":1.4142135623730951}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"20":{"tf":1.0}}}}}}},"l":{"a":{"df":0,"docs":{},"t":{"df":9,"docs":{"15":{"tf":1.0},"29":{"tf":1.0},"36":{"tf":1.0},"48":{"tf":1.0},"51":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.7320508075688772},"63":{"tf":1.0},"71":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":2,"docs":{"33":{"tf":1.0},"66":{"tf":1.0}}}}}}}}}}},"df":1,"docs":{"65":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"s":{"df":4,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":1.0},"33":{"tf":1.0},"62":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"v":{"df":9,"docs":{"0":{"tf":1.0},"31":{"tf":1.0},"43":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.0},"74":{"tf":1.0}}}},"i":{"df":2,"docs":{"27":{"tf":1.0},"78":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":9,"docs":{"41":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"51":{"tf":1.0},"56":{"tf":1.0},"59":{"tf":1.0},"62":{"tf":1.0},"71":{"tf":1.0},"77":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"v":{"df":9,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":2.0},"33":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.7320508075688772},"69":{"tf":1.7320508075688772},"74":{"tf":1.4142135623730951},"77":{"tf":1.4142135623730951}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":4,"docs":{"15":{"tf":1.0},"32":{"tf":1.4142135623730951},"62":{"tf":1.0},"71":{"tf":1.0}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":5,"docs":{"41":{"tf":2.449489742783178},"45":{"tf":3.4641016151377544},"58":{"tf":1.0},"59":{"tf":1.7320508075688772},"61":{"tf":3.3166247903554}}},"y":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"61":{"tf":1.0}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"59":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"o":{"df":2,"docs":{"6":{"tf":1.0},"71":{"tf":1.0}},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"23":{"tf":1.4142135623730951},"26":{"tf":1.0},"58":{"tf":1.0}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":4,"docs":{"36":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.4142135623730951},"6":{"tf":1.7320508075688772}}}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":8,"docs":{"10":{"tf":1.4142135623730951},"18":{"tf":1.0},"19":{"tf":1.0},"52":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"61":{"tf":1.0},"74":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"15":{"tf":1.4142135623730951},"19":{"tf":1.0},"56":{"tf":1.0}}}}}}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":6,"docs":{"10":{"tf":1.0},"3":{"tf":1.0},"39":{"tf":1.4142135623730951},"45":{"tf":1.0},"61":{"tf":1.0},"78":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"r":{"df":16,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.0},"14":{"tf":1.0},"17":{"tf":1.7320508075688772},"33":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.4142135623730951},"41":{"tf":1.0},"43":{"tf":1.0},"52":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.4142135623730951},"9":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":3,"docs":{"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":1,"docs":{"48":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":1,"docs":{"71":{"tf":1.7320508075688772}}}},"u":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"1":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"(":{"df":0,"docs":{},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":2,"docs":{"26":{"tf":1.0},"29":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":15,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.7320508075688772},"18":{"tf":2.8284271247461903},"19":{"tf":1.7320508075688772},"20":{"tf":2.6457513110645907},"21":{"tf":3.3166247903554},"22":{"tf":2.6457513110645907},"23":{"tf":2.6457513110645907},"24":{"tf":2.6457513110645907},"26":{"tf":4.242640687119285},"29":{"tf":5.656854249492381},"74":{"tf":1.7320508075688772},"75":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":34,"docs":{"10":{"tf":1.7320508075688772},"14":{"tf":1.4142135623730951},"15":{"tf":2.23606797749979},"16":{"tf":2.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":2.0},"21":{"tf":2.23606797749979},"22":{"tf":1.4142135623730951},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":2.0},"27":{"tf":1.0},"29":{"tf":2.23606797749979},"33":{"tf":1.7320508075688772},"34":{"tf":1.0},"38":{"tf":1.7320508075688772},"40":{"tf":1.0},"43":{"tf":1.0},"45":{"tf":1.7320508075688772},"53":{"tf":1.0},"58":{"tf":1.7320508075688772},"59":{"tf":1.4142135623730951},"60":{"tf":1.0},"61":{"tf":1.7320508075688772},"62":{"tf":1.0},"64":{"tf":1.4142135623730951},"66":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.4142135623730951},"85":{"tf":1.4142135623730951}},"e":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":4,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":2.23606797749979},"74":{"tf":1.4142135623730951},"75":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"t":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"39":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.0}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"<":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":11,"docs":{"10":{"tf":1.0},"23":{"tf":1.7320508075688772},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.8284271247461903},"33":{"tf":1.0},"34":{"tf":1.0},"58":{"tf":1.4142135623730951},"61":{"tf":1.0},"63":{"tf":1.0},"74":{"tf":1.0}},"e":{"<":{"df":0,"docs":{},"t":{"df":1,"docs":{"62":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}}},"t":{"df":1,"docs":{"61":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"c":{"<":{"_":{"df":1,"docs":{"74":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":16,"docs":{"10":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"22":{"tf":1.0},"26":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.4142135623730951},"50":{"tf":1.0},"51":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951},"58":{"tf":2.449489742783178},"59":{"tf":1.0},"61":{"tf":1.0},"73":{"tf":1.4142135623730951}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"56":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":19,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":2.8284271247461903},"15":{"tf":1.4142135623730951},"21":{"tf":1.0},"22":{"tf":2.23606797749979},"23":{"tf":1.7320508075688772},"24":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.23606797749979},"33":{"tf":1.0},"38":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"45":{"tf":1.0},"58":{"tf":3.1622776601683795},"61":{"tf":2.23606797749979},"73":{"tf":1.4142135623730951},"78":{"tf":1.7320508075688772}},"s":{"(":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":2,"docs":{"33":{"tf":1.0},"69":{"tf":1.0}}}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":1,"docs":{"33":{"tf":1.0}}}}}}}}}}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":1,"docs":{"78":{"tf":1.0}}}}}}}}}}}}}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"s":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"41":{"tf":1.0}}}},"df":0,"docs":{}},"df":3,"docs":{"66":{"tf":1.0},"75":{"tf":1.0},"9":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"74":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"22":{"tf":1.0}}}}}}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":3,"docs":{"28":{"tf":1.0},"30":{"tf":1.0},"44":{"tf":2.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"i":{"d":{"df":1,"docs":{"69":{"tf":1.0}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":11,"docs":{"15":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"24":{"tf":1.0},"27":{"tf":1.0},"48":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"78":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"i":{"b":{"df":4,"docs":{"29":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"70":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"m":{"df":1,"docs":{"49":{"tf":1.0}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":3,"docs":{"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772}}}},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}}}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"55":{"tf":1.0}}}}}},"n":{"d":{"df":1,"docs":{"29":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.7320508075688772}}}}}}},"p":{"c":{"df":1,"docs":{"38":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":3,"docs":{"26":{"tf":1.0},"43":{"tf":1.0},"61":{"tf":1.0}}}},"n":{"df":10,"docs":{"11":{"tf":1.7320508075688772},"17":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.7320508075688772},"33":{"tf":1.7320508075688772},"4":{"tf":1.4142135623730951},"49":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}}}},"s":{"df":0,"docs":{},"t":{"'":{"df":1,"docs":{"71":{"tf":1.0}}},"_":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"e":{"=":{"1":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":20,"docs":{"1":{"tf":2.0},"10":{"tf":1.7320508075688772},"11":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"19":{"tf":1.7320508075688772},"30":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"4":{"tf":2.6457513110645907},"57":{"tf":1.0},"58":{"tf":1.0},"61":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951},"77":{"tf":1.0},"9":{"tf":2.449489742783178}},"i":{"df":1,"docs":{"57":{"tf":1.0}}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"4":{"tf":1.0}}}}}}}},"s":{"a":{"d":{"df":1,"docs":{"54":{"tf":1.0}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":2,"docs":{"35":{"tf":1.0},"46":{"tf":1.0}}}},"k":{"df":0,"docs":{},"e":{"df":1,"docs":{"44":{"tf":1.0}}}},"l":{"a":{"d":{"df":1,"docs":{"40":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"e":{"df":14,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"28":{"tf":1.0},"30":{"tf":1.0},"44":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"61":{"tf":1.0},"65":{"tf":1.7320508075688772},"73":{"tf":1.0},"74":{"tf":1.4142135623730951},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0}}}},"n":{"d":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"x":{"df":2,"docs":{"38":{"tf":1.0},"46":{"tf":1.0}}}}},"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"39":{"tf":1.0},"40":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"e":{"df":2,"docs":{"20":{"tf":1.4142135623730951},"73":{"tf":1.0}}}}},"c":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"58":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":2,"docs":{"18":{"tf":1.0},"19":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}},"h":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":7,"docs":{"39":{"tf":1.4142135623730951},"40":{"tf":2.0},"41":{"tf":2.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"58":{"tf":1.0}}}}},"df":0,"docs":{},"m":{"a":{"df":6,"docs":{"15":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":4.358898943540674},"48":{"tf":1.0},"62":{"tf":1.0},"70":{"tf":1.0}},"r":{"df":3,"docs":{"29":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0}},"s":{":":{":":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":1,"docs":{"33":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"30":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"42":{"tf":1.0},"51":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":5,"docs":{"18":{"tf":1.0},"20":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.0},"65":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"19":{"tf":1.0},"36":{"tf":1.0},"48":{"tf":1.0},"9":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"46":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":22,"docs":{"12":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"4":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0},"67":{"tf":1.0},"71":{"tf":1.7320508075688772},"74":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"9":{"tf":1.0}},"m":{"df":4,"docs":{"18":{"tf":1.4142135623730951},"48":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0}}},"n":{"df":1,"docs":{"46":{"tf":1.0}}}},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"39":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"42":{"tf":1.0}}},"df":5,"docs":{"39":{"tf":2.0},"40":{"tf":1.4142135623730951},"41":{"tf":2.6457513110645907},"42":{"tf":1.0},"43":{"tf":1.0}}}}}},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"74":{"tf":1.0}},"i":{"c":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"36":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"n":{"d":{"df":15,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"20":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"44":{"tf":1.0},"48":{"tf":1.4142135623730951},"51":{"tf":1.0},"52":{"tf":1.7320508075688772},"53":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"59":{"tf":2.6457513110645907},"60":{"tf":1.0},"61":{"tf":2.0}},"e":{"df":0,"docs":{},"r":{"df":10,"docs":{"14":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.6457513110645907},"42":{"tf":1.4142135623730951},"52":{"tf":1.0}}}}},"df":0,"docs":{},"s":{"df":3,"docs":{"10":{"tf":1.0},"16":{"tf":1.0},"41":{"tf":1.0}}},"t":{"df":12,"docs":{"10":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"22":{"tf":1.0},"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"56":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":2.23606797749979},"59":{"tf":1.4142135623730951},"61":{"tf":1.0},"63":{"tf":1.4142135623730951}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":4,"docs":{"15":{"tf":1.4142135623730951},"29":{"tf":1.0},"59":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"76":{"tf":1.0}}},"df":0,"docs":{}}}}},"r":{"d":{"df":11,"docs":{"14":{"tf":1.7320508075688772},"15":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"32":{"tf":1.7320508075688772},"33":{"tf":1.0},"35":{"tf":2.0},"57":{"tf":1.7320508075688772},"70":{"tf":1.0}},"e":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"32":{"tf":2.23606797749979},"33":{"tf":2.23606797749979}},"l":{"=":{"\"":{"df":0,"docs":{},"s":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"_":{"c":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"58":{"tf":1.0}}}}}},"{":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":10,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"29":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":14,"docs":{"14":{"tf":1.7320508075688772},"15":{"tf":2.0},"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"22":{"tf":1.0},"29":{"tf":1.0},"32":{"tf":1.7320508075688772},"33":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"61":{"tf":1.0},"73":{"tf":1.0}},"i":{"df":0,"docs":{},"z":{"df":3,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"20":{"tf":1.0}}}}}},"df":1,"docs":{"55":{"tf":1.0}},"o":{"df":0,"docs":{},"u":{"df":2,"docs":{"30":{"tf":1.0},"72":{"tf":1.0}}}}},"v":{"df":2,"docs":{"41":{"tf":1.7320508075688772},"51":{"tf":1.4142135623730951}},"i":{"c":{"df":1,"docs":{"38":{"tf":1.0}}},"df":0,"docs":{}}}},"t":{"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"27":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":18,"docs":{"10":{"tf":1.0},"27":{"tf":1.0},"4":{"tf":1.7320508075688772},"45":{"tf":1.0},"47":{"tf":1.0},"5":{"tf":1.0},"54":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"6":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"67":{"tf":1.0},"70":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":3.1622776601683795},"77":{"tf":1.4142135623730951}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"39":{"tf":1.0},"40":{"tf":1.0},"70":{"tf":1.0}}}}}},"h":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"33":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"38":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"35":{"tf":1.0}}}},"w":{"df":8,"docs":{"0":{"tf":1.4142135623730951},"14":{"tf":1.0},"16":{"tf":1.0},"42":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"74":{"tf":1.0},"9":{"tf":1.0}}}}},"i":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"24":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"58":{"tf":1.7320508075688772},"63":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"10":{"tf":1.0}}}}}}},"df":2,"docs":{"14":{"tf":1.0},"22":{"tf":1.0}}},"df":0,"docs":{}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":12,"docs":{"14":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"34":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.4142135623730951},"73":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"58":{"tf":1.0}}}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"81":{"tf":1.0},"85":{"tf":1.0}}}},"p":{"df":0,"docs":{},"l":{"df":20,"docs":{"10":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"14":{"tf":1.0},"17":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"35":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"49":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"9":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"20":{"tf":1.0},"58":{"tf":1.0}}}}},"i":{"c":{"df":2,"docs":{"14":{"tf":1.0},"44":{"tf":1.0}}},"df":1,"docs":{"33":{"tf":1.0}},"f":{"df":0,"docs":{},"i":{"df":5,"docs":{"29":{"tf":1.0},"39":{"tf":1.0},"43":{"tf":1.0},"60":{"tf":1.0},"74":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"l":{"df":2,"docs":{"19":{"tf":1.0},"78":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":22,"docs":{"10":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"18":{"tf":1.7320508075688772},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.4142135623730951},"39":{"tf":1.0},"48":{"tf":1.0},"53":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":2.0},"61":{"tf":1.0},"64":{"tf":1.7320508075688772},"66":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.7320508075688772},"74":{"tf":2.449489742783178},"76":{"tf":1.0}}}}},"t":{"df":1,"docs":{"29":{"tf":1.0}},"u":{"a":{"df":0,"docs":{},"t":{"df":4,"docs":{"23":{"tf":1.4142135623730951},"41":{"tf":1.4142135623730951},"65":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}}},"z":{"df":0,"docs":{},"e":{"df":2,"docs":{"11":{"tf":1.0},"4":{"tf":1.4142135623730951}}}}},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":2,"docs":{"33":{"tf":1.0},"73":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"18":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":2,"docs":{"24":{"tf":1.0},"34":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":4,"docs":{"33":{"tf":1.0},"58":{"tf":1.0},"61":{"tf":1.0},"71":{"tf":1.0}}}}}}}}},"m":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":2,"docs":{"26":{"tf":1.0},"64":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"11":{"tf":1.0},"20":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"62":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":33,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":1.0},"10":{"tf":2.0},"14":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"27":{"tf":1.0},"28":{"tf":2.0},"30":{"tf":1.0},"33":{"tf":1.0},"35":{"tf":1.7320508075688772},"36":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.4142135623730951},"4":{"tf":1.0},"42":{"tf":2.0},"43":{"tf":1.0},"48":{"tf":1.0},"5":{"tf":1.4142135623730951},"52":{"tf":1.0},"53":{"tf":1.4142135623730951},"54":{"tf":2.0},"55":{"tf":1.4142135623730951},"56":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":1.4142135623730951},"64":{"tf":1.7320508075688772},"65":{"tf":1.0},"66":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":2.23606797749979}}}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"_":{"c":{"a":{"df":0,"docs":{},"s":{"df":2,"docs":{"32":{"tf":2.23606797749979},"33":{"tf":2.23606797749979}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"32":{"tf":1.0},"57":{"tf":1.0}}}},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":1,"docs":{"20":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"df":2,"docs":{"18":{"tf":1.0},"62":{"tf":1.0}}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"64":{"tf":1.0}}},"i":{"d":{"df":5,"docs":{"15":{"tf":1.0},"38":{"tf":1.0},"43":{"tf":1.0},"46":{"tf":1.0},"64":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"37":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"48":{"tf":1.0}}}},"v":{"df":3,"docs":{"38":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"73":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"33":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":15,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"25":{"tf":1.0},"30":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.7320508075688772},"49":{"tf":1.0},"51":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951},"58":{"tf":1.0},"71":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0}}},"i":{"df":0,"docs":{},"m":{"df":3,"docs":{"43":{"tf":1.0},"57":{"tf":1.0},"76":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"59":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"38":{"tf":1.0},"73":{"tf":1.0}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"74":{"tf":1.0}}},"df":0,"docs":{}},"r":{"c":{"df":1,"docs":{"22":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"74":{"tf":1.0}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":7,"docs":{"28":{"tf":1.0},"41":{"tf":1.7320508075688772},"45":{"tf":1.0},"48":{"tf":2.449489742783178},"56":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"f":{"df":7,"docs":{"10":{"tf":1.0},"44":{"tf":1.0},"47":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.7320508075688772},"67":{"tf":1.0},"73":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"32":{"tf":1.0}}}},"n":{"d":{"df":1,"docs":{"27":{"tf":1.0}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"16":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951}}}}}},"r":{"c":{"/":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"33":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"r":{"df":4,"docs":{"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0}},"s":{":":{"8":{"0":{":":{"1":{"4":{"df":1,"docs":{"20":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"23":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"l":{"df":0,"docs":{},"i":{"b":{".":{"df":0,"docs":{},"r":{"df":8,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"r":{"df":5,"docs":{"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"33":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"4":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":1,"docs":{"41":{"tf":1.4142135623730951}}}},"k":{"df":0,"docs":{},"e":{"df":11,"docs":{"13":{"tf":1.0},"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"6":{"tf":1.0},"70":{"tf":1.0},"9":{"tf":1.0}}}},"n":{"d":{"a":{"df":0,"docs":{},"r":{"d":{"df":4,"docs":{"26":{"tf":1.0},"32":{"tf":1.0},"74":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"13":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{}},"t":{"_":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":1,"docs":{"53":{"tf":1.0}}}}},"df":0,"docs":{}},"df":22,"docs":{"1":{"tf":1.0},"10":{"tf":2.23606797749979},"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"34":{"tf":1.0},"46":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.7320508075688772},"49":{"tf":1.7320508075688772},"56":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"65":{"tf":1.4142135623730951},"68":{"tf":1.0},"7":{"tf":2.0},"73":{"tf":1.0},"74":{"tf":1.4142135623730951},"77":{"tf":1.0},"9":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"69":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}}},"df":26,"docs":{"10":{"tf":2.23606797749979},"14":{"tf":2.0},"15":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":4.58257569495584},"21":{"tf":2.449489742783178},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"38":{"tf":1.0},"42":{"tf":4.0},"43":{"tf":3.1622776601683795},"44":{"tf":2.23606797749979},"45":{"tf":2.449489742783178},"48":{"tf":2.23606797749979},"53":{"tf":1.0},"54":{"tf":2.449489742783178},"56":{"tf":2.8284271247461903},"58":{"tf":2.0},"62":{"tf":2.0},"72":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.4142135623730951}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}}}}},"i":{"c":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":1,"docs":{"61":{"tf":1.0}}}}},"d":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"23":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":11,"docs":{"14":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"35":{"tf":1.0},"70":{"tf":1.0},"9":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"(":{"#":{"[":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"23":{"tf":1.0},"29":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"c":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":3,"docs":{"10":{"tf":1.0},"23":{"tf":1.7320508075688772},"29":{"tf":1.4142135623730951}}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"<":{"_":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}},"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":8,"docs":{"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"74":{"tf":1.0}}}}}}}}}}}}}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":17,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":2.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.0},"58":{"tf":1.0},"69":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":12,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"<":{"df":0,"docs":{},"t":{"df":1,"docs":{"22":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":19,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":2.449489742783178},"21":{"tf":2.0},"22":{"tf":2.449489742783178},"23":{"tf":2.23606797749979},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178},"33":{"tf":1.0},"34":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.4142135623730951},"77":{"tf":1.0}}}}}}}}},"v":{"df":0,"docs":{},"e":{"c":{"<":{"_":{"df":7,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":19,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.7320508075688772},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":2.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"77":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":10,"docs":{"0":{"tf":1.4142135623730951},"13":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"33":{"tf":1.0},"36":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"41":{"tf":1.0},"55":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":11,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"43":{"tf":1.4142135623730951},"45":{"tf":1.7320508075688772},"48":{"tf":1.0},"57":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"57":{"tf":1.0}}}},"p":{"df":1,"docs":{"73":{"tf":1.4142135623730951}}},"r":{"a":{"df":0,"docs":{},"g":{"df":14,"docs":{"2":{"tf":1.0},"20":{"tf":3.1622776601683795},"22":{"tf":1.4142135623730951},"23":{"tf":1.0},"29":{"tf":1.4142135623730951},"33":{"tf":1.0},"44":{"tf":1.0},"56":{"tf":1.0},"70":{"tf":1.0},"72":{"tf":2.0},"73":{"tf":2.6457513110645907},"74":{"tf":1.0},"75":{"tf":1.0},"78":{"tf":1.0}}}},"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"o":{"d":{"df":2,"docs":{"19":{"tf":1.0},"50":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":10,"docs":{"19":{"tf":1.0},"20":{"tf":2.449489742783178},"22":{"tf":1.0},"42":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.7320508075688772},"54":{"tf":1.0},"73":{"tf":1.4142135623730951},"74":{"tf":1.0},"77":{"tf":2.0}}},"i":{"df":3,"docs":{"18":{"tf":1.0},"35":{"tf":1.0},"61":{"tf":1.0}}}}},"r":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"m":{"a":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"s":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"73":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":2,"docs":{"16":{"tf":1.0},"58":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"18":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":18,"docs":{"14":{"tf":1.0},"15":{"tf":1.7320508075688772},"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":2.6457513110645907},"21":{"tf":1.0},"22":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"32":{"tf":1.4142135623730951},"33":{"tf":2.449489742783178},"53":{"tf":1.0},"58":{"tf":2.0},"61":{"tf":1.7320508075688772},"69":{"tf":1.0},"70":{"tf":1.0},"76":{"tf":1.0},"78":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"1":{"tf":1.0},"58":{"tf":1.0}}}}}}},"u":{"c":{"df":0,"docs":{},"t":{"df":13,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.7320508075688772},"22":{"tf":1.7320508075688772},"29":{"tf":1.7320508075688772},"32":{"tf":1.7320508075688772},"33":{"tf":3.0},"69":{"tf":1.4142135623730951},"76":{"tf":1.4142135623730951},"78":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":19,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.0},"16":{"tf":1.7320508075688772},"20":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"38":{"tf":1.0},"43":{"tf":1.4142135623730951},"51":{"tf":1.0},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"71":{"tf":2.0},"77":{"tf":1.0},"78":{"tf":1.0},"8":{"tf":1.0}}}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"50":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":3,"docs":{"15":{"tf":1.0},"32":{"tf":1.0},"57":{"tf":1.4142135623730951}}}}}},"u":{"b":{"c":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"38":{"tf":1.0}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"71":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":6,"docs":{"40":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":3.1622776601683795},"58":{"tf":2.23606797749979},"59":{"tf":2.0},"61":{"tf":3.0}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"59":{"tf":1.7320508075688772},"61":{"tf":1.0}}}},"df":0,"docs":{}}}},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"16":{"tf":1.0}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"_":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"59":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"59":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"u":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"59":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":2,"docs":{"58":{"tf":1.0},"59":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"61":{"tf":1.0}}}}}}}}}}}}}}},"df":0,"docs":{}}}}}}},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"56":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"43":{"tf":1.0},"53":{"tf":1.0},"61":{"tf":1.0}}}}}}}},"t":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"df":1,"docs":{"39":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"df":2,"docs":{"16":{"tf":1.0},"62":{"tf":1.0}},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"75":{"tf":1.0}}}}}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":5,"docs":{"10":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"5":{"tf":1.0}},"e":{"d":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"s":{"df":4,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"45":{"tf":1.7320508075688772},"59":{"tf":1.0}}}}}},"df":0,"docs":{},"h":{"df":21,"docs":{"10":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":1.0},"35":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.0},"50":{"tf":1.4142135623730951},"51":{"tf":1.0},"56":{"tf":1.0},"62":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"67":{"tf":1.0},"74":{"tf":2.0},"78":{"tf":1.7320508075688772},"9":{"tf":1.0}}}},"d":{"df":0,"docs":{},"o":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"63":{"tf":1.0}}}}},"df":0,"docs":{}},"df":2,"docs":{"10":{"tf":1.0},"63":{"tf":2.23606797749979}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"63":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"26":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"36":{"tf":1.0},"7":{"tf":1.0},"78":{"tf":1.0}}}}}}},"m":{"df":1,"docs":{"56":{"tf":1.0}},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"39":{"tf":1.0},"51":{"tf":1.0}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":12,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.4142135623730951},"20":{"tf":2.0},"21":{"tf":2.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"26":{"tf":2.449489742783178},"29":{"tf":3.0}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":5,"docs":{"10":{"tf":1.0},"29":{"tf":1.0},"42":{"tf":1.0},"53":{"tf":1.0},"65":{"tf":1.4142135623730951}}}},"s":{"df":4,"docs":{"14":{"tf":1.0},"45":{"tf":1.0},"61":{"tf":1.0},"73":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"df":8,"docs":{"20":{"tf":1.0},"41":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"69":{"tf":1.0},"78":{"tf":1.0}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":2,"docs":{"17":{"tf":1.0},"60":{"tf":1.0}}}}}}}},"w":{"df":1,"docs":{"38":{"tf":1.0}}},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"a":{"df":1,"docs":{"2":{"tf":1.0}}},"df":0,"docs":{}}}},"n":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"62":{"tf":1.0},"76":{"tf":1.0}}}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":11,"docs":{"10":{"tf":1.0},"39":{"tf":1.7320508075688772},"40":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.0},"52":{"tf":1.4142135623730951},"64":{"tf":1.0},"65":{"tf":1.4142135623730951},"76":{"tf":1.0},"77":{"tf":1.0}}}}}}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"42":{"tf":1.0},"48":{"tf":2.6457513110645907},"56":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":19,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"26":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.4142135623730951},"36":{"tf":1.0},"37":{"tf":1.0},"40":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"59":{"tf":1.7320508075688772},"64":{"tf":1.4142135623730951}},"n":{"df":1,"docs":{"39":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"k":{"df":10,"docs":{"18":{"tf":1.0},"29":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"51":{"tf":1.0},"55":{"tf":1.0},"61":{"tf":1.0},"64":{"tf":1.0}}}},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"(":{"df":1,"docs":{"33":{"tf":1.0}}},"/":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":1,"docs":{"33":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"3":{"2":{"df":2,"docs":{"13":{"tf":1.4142135623730951},"6":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":7,"docs":{"11":{"tf":2.0},"12":{"tf":1.4142135623730951},"33":{"tf":2.23606797749979},"34":{"tf":1.0},"4":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.4142135623730951}}}}}},"s":{"df":0,"docs":{},"k":{"df":4,"docs":{"38":{"tf":1.0},"39":{"tf":2.0},"41":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951}}}}},"df":2,"docs":{"56":{"tf":1.0},"60":{"tf":1.0}},"e":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"36":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"20":{"tf":1.0},"71":{"tf":1.0}}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"43":{"tf":1.0}}}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":7,"docs":{"0":{"tf":1.0},"11":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"51":{"tf":1.0},"60":{"tf":1.0},"64":{"tf":1.0}}}},"n":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"73":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"d":{"df":3,"docs":{"57":{"tf":1.0},"65":{"tf":1.0},"74":{"tf":1.4142135623730951}}},"df":1,"docs":{"73":{"tf":1.0}}},"r":{"df":0,"docs":{},"m":{"df":3,"docs":{"44":{"tf":1.0},"47":{"tf":1.0},"57":{"tf":1.0}}},"r":{"a":{"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"15":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"17":{"tf":1.0},"58":{"tf":1.0}}}},"df":0,"docs":{}},"df":25,"docs":{"11":{"tf":1.7320508075688772},"14":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":4.358898943540674},"18":{"tf":4.242640687119285},"19":{"tf":3.7416573867739413},"2":{"tf":1.0},"20":{"tf":4.123105625617661},"21":{"tf":3.4641016151377544},"22":{"tf":1.7320508075688772},"23":{"tf":2.0},"24":{"tf":3.1622776601683795},"26":{"tf":3.872983346207417},"29":{"tf":4.47213595499958},"30":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"4":{"tf":1.4142135623730951},"52":{"tf":1.0},"6":{"tf":1.7320508075688772},"69":{"tf":1.0},"7":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"78":{"tf":2.23606797749979}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":3,"docs":{"4":{"tf":1.0},"47":{"tf":1.0},"7":{"tf":1.7320508075688772}}}}}}},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"53":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"t":{"'":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":3,"docs":{"25":{"tf":1.0},"38":{"tf":1.0},"41":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"41":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":1.0}},"g":{"df":39,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"22":{"tf":1.7320508075688772},"23":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.4142135623730951},"35":{"tf":1.0},"36":{"tf":1.0},"39":{"tf":1.7320508075688772},"40":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"44":{"tf":2.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.7320508075688772},"50":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":1.0},"59":{"tf":1.4142135623730951},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.7320508075688772},"74":{"tf":1.0},"75":{"tf":1.0},"76":{"tf":1.0},"78":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"k":{"df":10,"docs":{"10":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"39":{"tf":1.0},"42":{"tf":1.0},"50":{"tf":1.4142135623730951},"58":{"tf":1.0},"60":{"tf":1.0},"65":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"23":{"tf":1.0},"29":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":6,"docs":{"23":{"tf":2.0},"24":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"58":{"tf":1.4142135623730951},"70":{"tf":1.0}}}}}}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":14,"docs":{"10":{"tf":1.0},"18":{"tf":1.4142135623730951},"32":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.4142135623730951},"56":{"tf":1.7320508075688772},"57":{"tf":1.7320508075688772},"58":{"tf":2.23606797749979},"59":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.0},"73":{"tf":1.7320508075688772},"74":{"tf":1.0}}}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":2,"docs":{"38":{"tf":1.0},"76":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"73":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":6,"docs":{"10":{"tf":1.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"29":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.4142135623730951}}},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"59":{"tf":1.0}}},"df":0,"docs":{}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":10,"docs":{"22":{"tf":1.0},"36":{"tf":1.4142135623730951},"44":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"65":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"8":{"tf":1.0}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"4":{"tf":1.0},"76":{"tf":1.0}}}}}}}}}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"74":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":22,"docs":{"11":{"tf":1.0},"14":{"tf":1.0},"17":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"35":{"tf":1.0},"41":{"tf":1.0},"54":{"tf":2.0},"55":{"tf":1.0},"56":{"tf":1.4142135623730951},"61":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":2.0},"73":{"tf":1.0},"74":{"tf":1.4142135623730951},"76":{"tf":3.3166247903554},"77":{"tf":2.8284271247461903},"78":{"tf":2.449489742783178}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":5,"docs":{"10":{"tf":1.0},"58":{"tf":1.0},"76":{"tf":1.4142135623730951},"77":{"tf":1.4142135623730951},"78":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"m":{"df":0,"docs":{},"g":{"df":1,"docs":{"79":{"tf":1.0}}}},"o":{"_":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":11,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"58":{"tf":1.0}}},"y":{"(":{"&":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{":":{":":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":8,"docs":{"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"69":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":12,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":2,"docs":{"14":{"tf":1.0},"15":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":7,"docs":{"10":{"tf":1.0},"18":{"tf":1.0},"28":{"tf":2.449489742783178},"29":{"tf":2.8284271247461903},"48":{"tf":2.6457513110645907},"60":{"tf":1.4142135623730951},"65":{"tf":1.0}}}}},"l":{"d":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"60":{"tf":1.0}}},"l":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"33":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":8,"docs":{"11":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"21":{"tf":1.0},"33":{"tf":1.0},"35":{"tf":1.0},"5":{"tf":1.0},"71":{"tf":1.0}}}},"p":{"df":4,"docs":{"16":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"61":{"tf":1.0},"71":{"tf":1.7320508075688772}},"i":{"c":{"df":2,"docs":{"0":{"tf":1.0},"55":{"tf":1.0}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"10":{"tf":1.0}}}}},"t":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"56":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"u":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"a":{"c":{"df":0,"docs":{},"k":{"_":{"c":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"44":{"tf":1.0},"77":{"tf":1.0}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"11":{"tf":1.0},"38":{"tf":1.0},"48":{"tf":1.7320508075688772},"62":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"29":{"tf":1.0},"44":{"tf":1.0}}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":5,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"17":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951}}}},"n":{"df":0,"docs":{},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":6,"docs":{"42":{"tf":1.4142135623730951},"43":{"tf":1.0},"44":{"tf":2.23606797749979},"45":{"tf":2.6457513110645907},"48":{"tf":1.7320508075688772},"76":{"tf":2.449489742783178}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":1,"docs":{"76":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":1,"docs":{"76":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":8,"docs":{"18":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"42":{"tf":2.23606797749979},"44":{"tf":2.23606797749979},"45":{"tf":1.0},"48":{"tf":1.0},"60":{"tf":1.4142135623730951}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":2,"docs":{"14":{"tf":1.0},"20":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"73":{"tf":1.0}}}}}},"y":{"df":1,"docs":{"51":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":3,"docs":{"18":{"tf":1.0},"38":{"tf":1.0},"44":{"tf":1.0}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"df":1,"docs":{"71":{"tf":1.7320508075688772}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":5,"docs":{"20":{"tf":1.0},"26":{"tf":1.4142135623730951},"35":{"tf":1.0},"45":{"tf":1.0},"76":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"0":{"tf":1.0}}}}}}},"df":10,"docs":{"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"25":{"tf":1.0},"30":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.0},"53":{"tf":1.4142135623730951},"73":{"tf":1.0},"8":{"tf":1.0}},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":7,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"39":{"tf":1.0},"44":{"tf":1.0},"58":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"e":{"df":7,"docs":{"20":{"tf":1.0},"34":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"74":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":4,"docs":{"27":{"tf":1.0},"38":{"tf":1.0},"48":{"tf":1.0},"58":{"tf":1.0}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"1":{"tf":1.0}}}}}}},"w":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"k":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"e":{"df":5,"docs":{"21":{"tf":1.0},"30":{"tf":1.0},"34":{"tf":1.0},"44":{"tf":1.0},"65":{"tf":1.0}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"30":{"tf":1.4142135623730951}}}}},"o":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"73":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":18,"docs":{"15":{"tf":1.0},"18":{"tf":1.7320508075688772},"22":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"35":{"tf":1.0},"44":{"tf":1.4142135623730951},"51":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.4142135623730951},"57":{"tf":1.0},"61":{"tf":1.0},"66":{"tf":1.0},"73":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"76":{"tf":1.0}}}},"x":{"df":3,"docs":{"50":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"50":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"\"":{":":{"\"":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{".":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"p":{"2":{"5":{"6":{"df":0,"docs":{},"k":{"1":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"\"":{",":{"\"":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"\"":{":":{"\"":{"a":{"5":{"b":{"b":{"d":{"df":0,"docs":{},"h":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"/":{"4":{"df":0,"docs":{},"q":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"h":{"9":{"df":0,"docs":{},"h":{"9":{"+":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"j":{"df":0,"docs":{},"k":{"df":0,"docs":{},"v":{"df":0,"docs":{},"k":{"0":{"c":{"df":0,"docs":{},"o":{"3":{"1":{"df":0,"docs":{},"w":{"4":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"4":{"df":0,"docs":{},"p":{"5":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"52":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"5":{"df":0,"docs":{},"z":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"y":{"df":0,"docs":{},"v":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"5":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"z":{"7":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"df":0,"docs":{},"z":{"df":0,"docs":{},"u":{"0":{"c":{"df":0,"docs":{},"j":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"0":{"7":{"+":{"7":{"df":0,"docs":{},"g":{"d":{"a":{"a":{"df":0,"docs":{},"h":{"3":{"df":0,"docs":{},"u":{"df":0,"docs":{},"w":{"df":0,"docs":{},"g":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"2":{"df":0,"docs":{},"x":{"df":1,"docs":{"52":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"=":{"df":0,"docs":{},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{",":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"e":{"=":{"\"":{"$":{"(":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"49":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"_":{"c":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{",":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"=":{"/":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"/":{"c":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"49":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":35,"docs":{"10":{"tf":3.605551275463989},"14":{"tf":2.449489742783178},"15":{"tf":2.23606797749979},"16":{"tf":1.0},"17":{"tf":1.7320508075688772},"18":{"tf":1.0},"19":{"tf":1.7320508075688772},"20":{"tf":2.6457513110645907},"22":{"tf":1.0},"23":{"tf":2.449489742783178},"24":{"tf":2.6457513110645907},"26":{"tf":1.7320508075688772},"29":{"tf":1.7320508075688772},"33":{"tf":1.4142135623730951},"35":{"tf":2.6457513110645907},"43":{"tf":1.0},"50":{"tf":1.7320508075688772},"51":{"tf":1.0},"52":{"tf":1.7320508075688772},"54":{"tf":1.0},"56":{"tf":2.6457513110645907},"57":{"tf":1.4142135623730951},"58":{"tf":3.1622776601683795},"59":{"tf":1.0},"60":{"tf":1.7320508075688772},"61":{"tf":1.4142135623730951},"62":{"tf":1.0},"63":{"tf":1.0},"70":{"tf":2.23606797749979},"73":{"tf":2.0},"74":{"tf":1.7320508075688772},"76":{"tf":1.4142135623730951},"77":{"tf":1.7320508075688772},"78":{"tf":1.4142135623730951},"9":{"tf":1.7320508075688772}}},"i":{"c":{"df":20,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"33":{"tf":1.0},"39":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":1.7320508075688772},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}}}}},"u":{"1":{"2":{"8":{"df":2,"docs":{"29":{"tf":2.6457513110645907},"74":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"3":{"2":{"df":1,"docs":{"76":{"tf":1.0}}},"df":0,"docs":{}},"6":{"4":{"df":2,"docs":{"73":{"tf":1.0},"76":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"67":{"tf":1.0}}}}}},"n":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.0}}}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"50":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"24":{"tf":1.4142135623730951}}}},"s":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"77":{"tf":1.0}}}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"d":{"df":5,"docs":{"10":{"tf":1.0},"29":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"67":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":5,"docs":{"14":{"tf":1.0},"20":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"74":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":3,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951}}}}},"q":{"df":0,"docs":{},"u":{"df":4,"docs":{"18":{"tf":1.0},"20":{"tf":1.4142135623730951},"74":{"tf":1.0},"76":{"tf":2.0}}}},"t":{"df":3,"docs":{"17":{"tf":1.7320508075688772},"4":{"tf":1.0},"74":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":2,"docs":{"41":{"tf":1.0},"42":{"tf":1.0}}}}}}},"k":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"6":{"tf":1.0}},"e":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"13":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"w":{"1":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"6":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":6,"docs":{"11":{"tf":2.0},"12":{"tf":2.0},"13":{"tf":1.4142135623730951},"33":{"tf":2.0},"4":{"tf":1.4142135623730951},"6":{"tf":1.7320508075688772}}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":4,"docs":{"26":{"tf":1.0},"50":{"tf":1.0},"58":{"tf":1.4142135623730951},"61":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"k":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"62":{"tf":1.0}}}},"df":0,"docs":{}}}}},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"38":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":3,"docs":{"15":{"tf":1.0},"69":{"tf":1.0},"72":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"33":{"tf":1.0}}}}}}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"65":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"30":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"15":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"35":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":5,"docs":{"27":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"54":{"tf":1.7320508075688772},"72":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"77":{"tf":1.4142135623730951}}}},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":3,"docs":{"24":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}},"df":9,"docs":{"18":{"tf":1.7320508075688772},"19":{"tf":1.4142135623730951},"20":{"tf":2.0},"21":{"tf":2.8284271247461903},"22":{"tf":2.449489742783178},"23":{"tf":2.449489742783178},"24":{"tf":3.1622776601683795},"26":{"tf":4.358898943540674},"29":{"tf":6.557438524302}}}},"df":0,"docs":{}}}},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":24,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":2.0},"22":{"tf":2.0},"23":{"tf":1.7320508075688772},"29":{"tf":1.4142135623730951},"32":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"42":{"tf":2.0},"43":{"tf":1.7320508075688772},"44":{"tf":2.23606797749979},"45":{"tf":1.0},"48":{"tf":1.0},"54":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"62":{"tf":1.7320508075688772},"67":{"tf":1.0},"70":{"tf":1.4142135623730951},"77":{"tf":2.23606797749979},"9":{"tf":1.0}},"e":{"_":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"57":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":2,"docs":{"54":{"tf":1.4142135623730951},"58":{"tf":1.0}}},"df":0,"docs":{}}}}},"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":8,"docs":{"29":{"tf":1.0},"4":{"tf":1.7320508075688772},"42":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"69":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":7,"docs":{"11":{"tf":1.4142135623730951},"19":{"tf":1.0},"35":{"tf":1.0},"4":{"tf":1.0},"5":{"tf":1.0},"50":{"tf":1.0},"62":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"24":{"tf":1.0}}},"df":0,"docs":{}}}},"s":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"10":{"tf":1.4142135623730951},"74":{"tf":1.0},"75":{"tf":1.4142135623730951}}}},"df":54,"docs":{"0":{"tf":1.0},"10":{"tf":2.449489742783178},"11":{"tf":1.7320508075688772},"14":{"tf":2.23606797749979},"15":{"tf":2.8284271247461903},"16":{"tf":2.449489742783178},"17":{"tf":2.6457513110645907},"18":{"tf":4.0},"19":{"tf":3.4641016151377544},"20":{"tf":5.291502622129181},"21":{"tf":4.358898943540674},"22":{"tf":4.123105625617661},"23":{"tf":4.795831523312719},"24":{"tf":4.0},"25":{"tf":1.0},"26":{"tf":4.898979485566356},"27":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"29":{"tf":6.855654600401044},"32":{"tf":2.0},"33":{"tf":3.872983346207417},"34":{"tf":2.449489742783178},"35":{"tf":2.449489742783178},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"47":{"tf":1.0},"48":{"tf":1.7320508075688772},"5":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.7320508075688772},"52":{"tf":1.0},"56":{"tf":2.449489742783178},"57":{"tf":1.4142135623730951},"58":{"tf":2.449489742783178},"59":{"tf":2.0},"60":{"tf":1.4142135623730951},"61":{"tf":1.0},"62":{"tf":1.4142135623730951},"63":{"tf":1.4142135623730951},"64":{"tf":1.7320508075688772},"67":{"tf":1.0},"69":{"tf":1.7320508075688772},"7":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951},"71":{"tf":1.7320508075688772},"72":{"tf":1.7320508075688772},"73":{"tf":2.0},"74":{"tf":4.0},"75":{"tf":2.0},"76":{"tf":1.4142135623730951},"77":{"tf":2.449489742783178},"78":{"tf":1.0},"9":{"tf":1.4142135623730951}},"e":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"34":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":8,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":2.23606797749979},"39":{"tf":1.0},"43":{"tf":1.0},"47":{"tf":1.0},"52":{"tf":1.0},"74":{"tf":1.0}}}},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"35":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":14,"docs":{"10":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"2":{"tf":1.0},"20":{"tf":1.0},"29":{"tf":1.7320508075688772},"33":{"tf":1.4142135623730951},"35":{"tf":1.0},"4":{"tf":1.0},"5":{"tf":2.0},"58":{"tf":1.0},"6":{"tf":1.0},"70":{"tf":1.0},"9":{"tf":1.0}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":7,"docs":{"10":{"tf":1.0},"13":{"tf":1.7320508075688772},"18":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.4142135623730951},"35":{"tf":1.0},"6":{"tf":1.0}}},"df":0,"docs":{}},"u":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"38":{"tf":1.0}}}},"df":0,"docs":{}},"df":18,"docs":{"15":{"tf":1.0},"20":{"tf":2.23606797749979},"22":{"tf":1.0},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":3.0},"35":{"tf":1.4142135623730951},"50":{"tf":1.0},"51":{"tf":1.4142135623730951},"53":{"tf":1.0},"54":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"58":{"tf":1.0},"59":{"tf":1.0},"73":{"tf":2.449489742783178},"74":{"tf":2.23606797749979},"77":{"tf":2.23606797749979},"78":{"tf":1.4142135623730951}}}},"r":{"df":0,"docs":{},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"18":{"tf":1.7320508075688772},"20":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":10,"docs":{"15":{"tf":3.4641016151377544},"21":{"tf":1.4142135623730951},"29":{"tf":1.0},"32":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"60":{"tf":2.23606797749979},"69":{"tf":1.0},"73":{"tf":1.0},"78":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"56":{"tf":1.0}}}}}}},"t":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}}},"df":1,"docs":{"49":{"tf":1.0}},"e":{"c":{"!":{"[":{"\"":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"1":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":6,"docs":{"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":2,"docs":{"26":{"tf":1.0},"29":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":3,"docs":{"24":{"tf":1.0},"26":{"tf":1.7320508075688772},"29":{"tf":2.449489742783178}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"a":{"d":{"d":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"d":{"(":{"\"":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"1":{"df":6,"docs":{"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"_":{"df":2,"docs":{"26":{"tf":1.0},"29":{"tf":1.7320508075688772}}},"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":7,"docs":{"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"29":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"69":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":9,"docs":{"20":{"tf":1.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.23606797749979},"32":{"tf":1.4142135623730951},"33":{"tf":2.449489742783178},"69":{"tf":1.0}}}}}},"df":7,"docs":{"20":{"tf":1.0},"21":{"tf":2.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":2.0},"26":{"tf":2.8284271247461903},"29":{"tf":3.4641016151377544}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":5,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"65":{"tf":1.0},"72":{"tf":1.4142135623730951},"74":{"tf":2.23606797749979}}}}}},"df":0,"docs":{},"r":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"18":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":27,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.0},"14":{"tf":1.4142135623730951},"16":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"40":{"tf":1.4142135623730951},"42":{"tf":1.7320508075688772},"43":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":2.0},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":1.4142135623730951},"58":{"tf":1.7320508075688772},"59":{"tf":1.4142135623730951},"60":{"tf":2.0},"61":{"tf":1.0},"62":{"tf":1.0},"70":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":1.0}},"f":{"df":1,"docs":{"26":{"tf":1.0}},"i":{"df":7,"docs":{"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"35":{"tf":1.0},"6":{"tf":1.7320508075688772},"78":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":12,"docs":{"14":{"tf":1.7320508075688772},"19":{"tf":1.7320508075688772},"20":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"29":{"tf":2.0},"33":{"tf":1.7320508075688772},"34":{"tf":1.0},"5":{"tf":1.0},"62":{"tf":2.449489742783178},"70":{"tf":1.7320508075688772},"71":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}}}}},"i":{"a":{"df":5,"docs":{"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"48":{"tf":1.0},"58":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"48":{"tf":1.4142135623730951}}}},"o":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"43":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"19":{"tf":1.0},"35":{"tf":1.0},"58":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":4,"docs":{"18":{"tf":1.4142135623730951},"33":{"tf":1.0},"42":{"tf":1.0},"58":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"u":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"44":{"tf":1.0},"55":{"tf":1.0}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":2,"docs":{"65":{"tf":1.7320508075688772},"66":{"tf":2.0}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"74":{"tf":1.0}}}}}}}},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"61":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"39":{"tf":1.4142135623730951},"41":{"tf":1.0},"51":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"3":{"df":1,"docs":{"52":{"tf":1.4142135623730951}}},"df":4,"docs":{"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.7320508075688772},"54":{"tf":2.0}}}}}},"n":{"df":0,"docs":{},"t":{"df":32,"docs":{"12":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":2.0},"21":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.0},"36":{"tf":1.0},"4":{"tf":1.0},"40":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"45":{"tf":1.7320508075688772},"51":{"tf":1.4142135623730951},"53":{"tf":1.0},"54":{"tf":1.7320508075688772},"56":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"65":{"tf":1.4142135623730951},"67":{"tf":1.0},"68":{"tf":1.4142135623730951},"69":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":2.0},"72":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"44":{"tf":2.6457513110645907}},"n":{"df":0,"docs":{},"p":{"c":{"df":2,"docs":{"44":{"tf":2.449489742783178},"45":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"t":{"a":{"df":2,"docs":{"81":{"tf":1.0},"85":{"tf":1.0}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"m":{"\"":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":2,"docs":{"26":{"tf":1.0},"29":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},".":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":2.449489742783178}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"1":{"d":{"df":0,"docs":{},"k":{"6":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"0":{"7":{"8":{"6":{"df":0,"docs":{},"m":{"6":{"a":{"df":0,"docs":{},"y":{"df":0,"docs":{},"g":{"9":{"df":0,"docs":{},"k":{"d":{"0":{"df":0,"docs":{},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"y":{"df":0,"docs":{},"k":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"0":{"df":0,"docs":{},"n":{"6":{"df":0,"docs":{},"h":{"0":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"7":{"d":{"8":{"df":0,"docs":{},"t":{"df":1,"docs":{"52":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"n":{"5":{"df":0,"docs":{},"x":{"8":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"z":{"d":{"df":0,"docs":{},"z":{"df":0,"docs":{},"y":{"5":{"df":0,"docs":{},"j":{"df":0,"docs":{},"x":{"d":{"7":{"0":{"2":{"7":{"3":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"4":{"df":0,"docs":{},"z":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"r":{"df":0,"docs":{},"w":{"df":0,"docs":{},"x":{"0":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"v":{"7":{"df":0,"docs":{},"q":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"5":{"df":0,"docs":{},"g":{"df":0,"docs":{},"m":{"4":{"df":0,"docs":{},"v":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"q":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"2":{"4":{"df":0,"docs":{},"u":{"df":1,"docs":{"54":{"tf":2.23606797749979}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"u":{"0":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"x":{"df":0,"docs":{},"l":{"6":{"5":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"6":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"j":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"2":{"0":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"c":{"df":0,"docs":{},"p":{"df":0,"docs":{},"z":{"3":{"df":0,"docs":{},"j":{"df":0,"docs":{},"v":{"df":0,"docs":{},"j":{"df":0,"docs":{},"f":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"5":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"7":{"df":0,"docs":{},"l":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"u":{"d":{"3":{"df":0,"docs":{},"r":{"df":0,"docs":{},"h":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"n":{"df":0,"docs":{},"y":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":0,"docs":{},"q":{"df":0,"docs":{},"q":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"c":{"df":0,"docs":{},"x":{"6":{"df":2,"docs":{"51":{"tf":1.0},"53":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"m":{"5":{"9":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"k":{"d":{"df":0,"docs":{},"j":{"8":{"a":{"df":0,"docs":{},"y":{"df":0,"docs":{},"l":{"5":{"df":0,"docs":{},"g":{"df":0,"docs":{},"k":{"df":0,"docs":{},"n":{"df":1,"docs":{"54":{"tf":1.0}},"p":{"9":{"df":0,"docs":{},"p":{"df":0,"docs":{},"n":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"w":{"3":{"3":{"df":0,"docs":{},"v":{"4":{"0":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"5":{"df":0,"docs":{},"l":{"4":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"df":2,"docs":{"52":{"tf":1.0},"54":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"3":{"2":{"df":4,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"4":{"tf":1.0}}},"df":0,"docs":{}},"d":{"df":14,"docs":{"19":{"tf":1.4142135623730951},"25":{"tf":1.0},"4":{"tf":2.0},"46":{"tf":1.0},"47":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"50":{"tf":1.4142135623730951},"51":{"tf":1.0},"52":{"tf":2.0},"53":{"tf":1.0},"54":{"tf":2.8284271247461903},"60":{"tf":1.0},"63":{"tf":1.0},"7":{"tf":2.0}}},"df":21,"docs":{"10":{"tf":2.23606797749979},"11":{"tf":1.4142135623730951},"12":{"tf":2.449489742783178},"13":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"26":{"tf":2.23606797749979},"29":{"tf":2.449489742783178},"33":{"tf":2.23606797749979},"34":{"tf":1.4142135623730951},"35":{"tf":1.0},"4":{"tf":1.7320508075688772},"48":{"tf":1.0},"5":{"tf":1.0},"50":{"tf":1.7320508075688772},"51":{"tf":1.0},"53":{"tf":1.4142135623730951},"54":{"tf":2.23606797749979},"58":{"tf":1.4142135623730951},"6":{"tf":1.4142135623730951},"70":{"tf":1.0}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":3,"docs":{"20":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0}}}}}}},"y":{"df":33,"docs":{"0":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"24":{"tf":1.0},"25":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":2.0},"32":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"38":{"tf":1.0},"41":{"tf":1.7320508075688772},"42":{"tf":1.0},"43":{"tf":1.0},"45":{"tf":1.7320508075688772},"48":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.7320508075688772},"59":{"tf":1.4142135623730951},"65":{"tf":1.0},"67":{"tf":1.4142135623730951},"7":{"tf":1.0},"73":{"tf":1.4142135623730951},"74":{"tf":2.0}}}},"df":0,"docs":{},"e":{"'":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"21":{"tf":1.0}}}}},"b":{"df":1,"docs":{"9":{"tf":1.0}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"4":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":2,"docs":{"54":{"tf":2.0},"56":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"l":{"df":8,"docs":{"10":{"tf":1.0},"15":{"tf":1.0},"19":{"tf":1.4142135623730951},"22":{"tf":1.0},"38":{"tf":1.0},"58":{"tf":1.0},"61":{"tf":1.0},"78":{"tf":1.0}}}},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"14":{"tf":1.0},"22":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":3,"docs":{"20":{"tf":1.0},"56":{"tf":1.0},"61":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":2,"docs":{"66":{"tf":1.0},"72":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":2.0}}}}}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":22,"docs":{"10":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"36":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"43":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.0},"58":{"tf":1.4142135623730951},"59":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"71":{"tf":1.4142135623730951},"72":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.4142135623730951}}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":1,"docs":{"74":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"d":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"w":{"df":1,"docs":{"65":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":7,"docs":{"15":{"tf":1.4142135623730951},"18":{"tf":1.0},"22":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"73":{"tf":1.0}}}}},"df":0,"docs":{}},"r":{"d":{"df":1,"docs":{"74":{"tf":1.0}}},"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"35":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":25,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"28":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"4":{"tf":1.7320508075688772},"42":{"tf":1.0},"43":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.0},"49":{"tf":1.0},"50":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.7320508075688772},"74":{"tf":1.0},"76":{"tf":1.7320508075688772},"77":{"tf":1.0},"78":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"39":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":1,"docs":{"71":{"tf":3.4641016151377544}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"l":{"d":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":13,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.4142135623730951},"20":{"tf":2.0},"21":{"tf":2.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":12,"docs":{"10":{"tf":1.0},"18":{"tf":1.0},"25":{"tf":1.0},"32":{"tf":1.0},"35":{"tf":1.0},"4":{"tf":1.0},"44":{"tf":1.4142135623730951},"48":{"tf":1.0},"51":{"tf":1.0},"58":{"tf":1.0},"67":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"i":{"df":6,"docs":{"36":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"65":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":6,"docs":{"11":{"tf":1.0},"33":{"tf":1.0},"41":{"tf":1.0},"57":{"tf":1.0},"62":{"tf":1.0},"76":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"n":{"'":{"df":0,"docs":{},"t":{"df":1,"docs":{"18":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"p":{"df":11,"docs":{"10":{"tf":1.0},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":2.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"26":{"tf":2.449489742783178},"29":{"tf":3.0},"44":{"tf":1.4142135623730951},"59":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"33":{"tf":1.0}}}}},"df":0,"docs":{}},"df":10,"docs":{"14":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":1.0},"54":{"tf":1.0},"74":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"42":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"17":{"tf":1.0}}}}}}},"y":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":3,"docs":{"50":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.4142135623730951}},"e":{"df":1,"docs":{"48":{"tf":1.0}},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"51":{"tf":1.0}}}}}},"z":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":2,"docs":{"41":{"tf":1.0},"56":{"tf":1.0}}}}}}}},"title":{"root":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"40":{"tf":1.0},"41":{"tf":1.0},"54":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":5,"docs":{"36":{"tf":1.0},"37":{"tf":1.0},"39":{"tf":1.0},"47":{"tf":1.0},"55":{"tf":1.0}}}}}},"d":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"52":{"tf":1.0}}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"68":{"tf":1.0}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"12":{"tf":1.0}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"2":{"tf":1.0}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"25":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"8":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"37":{"tf":1.0}}},"df":0,"docs":{}}}}},"l":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"18":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"47":{"tf":1.0},"48":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"3":{"tf":1.0}}}},"x":{"df":1,"docs":{"18":{"tf":1.0}}}},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":2,"docs":{"11":{"tf":1.0},"12":{"tf":1.0}}},"df":0,"docs":{}}}}},"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.0}}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"13":{"tf":1.0},"5":{"tf":1.0}}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"69":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"50":{"tf":1.0}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"12":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"83":{"tf":1.0}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"64":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"49":{"tf":1.0}}}}}},"n":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"46":{"tf":1.0}}}}}},"df":0,"docs":{},"t":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"82":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"85":{"tf":1.0}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":12,"docs":{"11":{"tf":1.0},"13":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"49":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"64":{"tf":1.0},"68":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"3":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"60":{"tf":1.0}}}}}}},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":3,"docs":{"2":{"tf":1.0},"5":{"tf":1.0},"52":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"14":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"64":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"24":{"tf":1.0}}}}}}}},"d":{"a":{"df":0,"docs":{},"t":{"a":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"48":{"tf":1.0}}}},"df":0,"docs":{}},"df":2,"docs":{"25":{"tf":1.0},"27":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"28":{"tf":1.0}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"65":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"81":{"tf":1.0}}}}}},"df":0,"docs":{}}},"s":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"34":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"o":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"2":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":3,"docs":{"10":{"tf":1.0},"34":{"tf":1.0},"58":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"4":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"23":{"tf":1.0},"24":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"25":{"tf":1.0},"26":{"tf":1.0}}}},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"44":{"tf":1.0}}}}}}}},"x":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"22":{"tf":1.0},"54":{"tf":1.0}}}}},"df":0,"docs":{}}}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":1,"docs":{"68":{"tf":1.0}}}},"l":{"df":0,"docs":{},"o":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"35":{"tf":1.0}}}},"df":0,"docs":{},"w":{"df":1,"docs":{"44":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"67":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"28":{"tf":1.0}}},"df":0,"docs":{}}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"70":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"31":{"tf":1.0}}},"df":0,"docs":{}}}},"h":{"a":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":3,"docs":{"23":{"tf":1.0},"45":{"tf":1.0},"61":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"i":{"d":{"df":0,"docs":{},"e":{"a":{"df":1,"docs":{"37":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":1,"docs":{"15":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"79":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"6":{"tf":1.0}}},"n":{"c":{"df":1,"docs":{"51":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":1,"docs":{"19":{"tf":1.0}},"t":{"df":1,"docs":{"0":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"77":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"32":{"tf":1.0},"33":{"tf":1.0}}}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"75":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"79":{"tf":1.0}}}},"df":0,"docs":{}}},"i":{"b":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"34":{"tf":1.0},"70":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"m":{"a":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"81":{"tf":1.0}}}},"df":0,"docs":{}},"p":{"df":3,"docs":{"72":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":5,"docs":{"15":{"tf":1.0},"22":{"tf":1.0},"29":{"tf":1.0},"57":{"tf":1.0},"67":{"tf":1.0}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"62":{"tf":1.0}}}},"df":0,"docs":{}}}},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"36":{"tf":1.0},"37":{"tf":1.0}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"24":{"tf":1.0},"41":{"tf":1.0}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"19":{"tf":1.0}}}}}}}}}}},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"84":{"tf":1.0}}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"70":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"54":{"tf":1.0}}}}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"30":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.0},"58":{"tf":1.0}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"31":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"1":{"tf":1.0}}}}}}}}},"o":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"38":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"66":{"tf":1.0}}}}}},"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"71":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}}},"v":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"80":{"tf":1.0}}},"df":0,"docs":{}}}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":6,"docs":{"14":{"tf":1.0},"17":{"tf":1.0},"43":{"tf":1.0},"53":{"tf":1.0},"69":{"tf":1.0},"78":{"tf":1.0}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"75":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"83":{"tf":1.0}}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"32":{"tf":1.0}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"61":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"45":{"tf":1.0},"85":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"26":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"s":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":1,"docs":{"33":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"59":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":2,"docs":{"4":{"tf":1.0},"74":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"55":{"tf":1.0}}}}},"df":0,"docs":{}},"t":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":1,"docs":{"41":{"tf":1.0}}}},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"7":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":4,"docs":{"20":{"tf":1.0},"21":{"tf":1.0},"42":{"tf":1.0},"56":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"72":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"16":{"tf":1.0},"71":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"u":{"b":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"59":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"d":{"df":0,"docs":{},"o":{"df":1,"docs":{"63":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"17":{"tf":1.0},"21":{"tf":1.0},"24":{"tf":1.0},"78":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":2,"docs":{"76":{"tf":1.0},"77":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"44":{"tf":1.0}}}}}}},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"30":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"35":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"p":{"df":2,"docs":{"4":{"tf":1.0},"69":{"tf":1.0}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"5":{"tf":1.0}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"13":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":1,"docs":{"84":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"6":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"66":{"tf":1.0}}}}}},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}}},"y":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"76":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"lang":"English","pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5"},"results_options":{"limit_results":30,"teaser_word_count":30},"search_options":{"bool":"OR","expand":true,"fields":{"body":{"boost":1},"breadcrumbs":{"boost":1},"title":{"boost":2}}}}); \ No newline at end of file diff --git a/searchindex.json b/searchindex.json new file mode 100644 index 0000000..db22724 --- /dev/null +++ b/searchindex.json @@ -0,0 +1 @@ +{"doc_urls":["index.html#introduction","index.html#prerequirements","index.html#cosmwasm-api-documentation","index.html#contributing-to-the-book","setting-up-env.html#setting-up-the-environment","setting-up-env.html#cosmwasm-check-utility","setting-up-env.html#verifying-the-installation","wasmd-quick-start.html#quick-start-with-wasmd","basics.html#basics","basics/rust-project.html#create-a-rust-project","basics/entry-points.html#entry-points","basics/building-contract.html#building-the-contract","basics/building-contract.html#aliasing-build-command","basics/building-contract.html#checking-contract-validity","basics/query.html#creating-a-query","basics/query.html#improving-the-message","basics/query.html#structuring-the-contract","basics/query-testing.html#testing-a-query","basics/query-testing.html#contract-as-a-black-box","basics/multitest-intro.html#introducing-multitest","basics/state.html#contract-state","basics/state.html#testing-state","basics/execute.html#execution-messages","basics/execute.html#error-handling","basics/execute.html#custom-error-and-multi-test","basics/events.html#events-attributes-and-data","basics/events.html#returning-events","basics/events.html#data","basics/funds.html#dealing-with-funds","basics/funds.html#preparing-messages","basics/funds.html#plot-twist","basics/good-practices.html#good-practices","basics/good-practices.html#json-renaming","basics/good-practices.html#json-schema","basics/good-practices.html#disabling-entry-points-for-libraries","basics/fp-types.html#floating-point-types","actor-model.html#actor-model","actor-model/idea.html#idea-behind-an-actor-model","actor-model/idea.html#the-problem","actor-model/idea.html#the-actor","actor-model/idea.html#the-action","actor-model/idea.html#multi-stage-actions","actor-model/idea.html#state","actor-model/idea.html#queries","actor-model/idea.html#wrapping-everything-together---transactional-call-flow","actor-model/idea.html#different-ways-of-handling-responses","actor-model/idea.html#conclusion","actor-model/actors-in-blockchain.html#actors-in-blockchain","actor-model/actors-in-blockchain.html#blockchain-as-a-database","actor-model/actors-in-blockchain.html#compile-the-contract","actor-model/actors-in-blockchain.html#contract-code","actor-model/actors-in-blockchain.html#contract-instance","actor-model/actors-in-blockchain.html#addresses-in-cosmwasm","actor-model/actors-in-blockchain.html#querying-the-contract","actor-model/actors-in-blockchain.html#executions-to-perform-some-actions","actor-model/contract-as-actor.html#smart-contract-as-an-actor","actor-model/contract-as-actor.html#the-state","actor-model/contract-as-actor.html#messages","actor-model/contract-as-actor.html#entry-points","actor-model/contract-as-actor.html#sending-submessages","actor-model/contract-as-actor.html#cosmosmsg","actor-model/contract-as-actor.html#reply-handling","actor-model/contract-as-actor.html#migrations","actor-model/contract-as-actor.html#sudo","cross-contract.html#cross-contract-communication","cross-contract/design.html#design","cross-contract/design.html#voting-process","cross-contract/design.html#messages-forwarding","cross-contract/fixing-admin.html#fixing-admin-contract","cross-contract/fixing-admin.html#cleaning-up-queries","cross-contract/fixing-admin.html#generating-the-library-output","cross-contract/fixing-admin.html#project-structure","cross-contract/map-storage.html#map-storage","cross-contract/map-storage.html#the-map-storage","cross-contract/map-storage.html#maps-as-sets","cross-contract/map-storage.html#reference-keys","cross-contract/working-with-time.html#working-with-time","cross-contract/working-with-time.html#join-time","cross-contract/working-with-time.html#query-and-tests","impressum.html#legal-information","impressum.html#provider","impressum.html#managing-director","impressum.html#contact","impressum.html#commercial-register","impressum.html#vat-number","impressum.html#responsible-for-the-content"],"index":{"documentStore":{"docInfo":{"0":{"body":32,"breadcrumbs":2,"title":1},"1":{"body":29,"breadcrumbs":2,"title":1},"10":{"body":353,"breadcrumbs":5,"title":2},"11":{"body":106,"breadcrumbs":5,"title":2},"12":{"body":69,"breadcrumbs":6,"title":3},"13":{"body":29,"breadcrumbs":6,"title":3},"14":{"body":310,"breadcrumbs":5,"title":2},"15":{"body":374,"breadcrumbs":5,"title":2},"16":{"body":252,"breadcrumbs":5,"title":2},"17":{"body":241,"breadcrumbs":5,"title":2},"18":{"body":427,"breadcrumbs":6,"title":3},"19":{"body":391,"breadcrumbs":5,"title":2},"2":{"body":21,"breadcrumbs":4,"title":3},"20":{"body":884,"breadcrumbs":5,"title":2},"21":{"body":479,"breadcrumbs":5,"title":2},"22":{"body":569,"breadcrumbs":5,"title":2},"23":{"body":560,"breadcrumbs":5,"title":2},"24":{"body":450,"breadcrumbs":7,"title":4},"25":{"body":44,"breadcrumbs":7,"title":3},"26":{"body":881,"breadcrumbs":6,"title":2},"27":{"body":62,"breadcrumbs":5,"title":1},"28":{"body":89,"breadcrumbs":5,"title":2},"29":{"body":1820,"breadcrumbs":5,"title":2},"3":{"body":14,"breadcrumbs":3,"title":2},"30":{"body":71,"breadcrumbs":5,"title":2},"31":{"body":8,"breadcrumbs":5,"title":2},"32":{"body":118,"breadcrumbs":5,"title":2},"33":{"body":560,"breadcrumbs":5,"title":2},"34":{"body":177,"breadcrumbs":7,"title":4},"35":{"body":143,"breadcrumbs":7,"title":3},"36":{"body":53,"breadcrumbs":4,"title":2},"37":{"body":17,"breadcrumbs":7,"title":4},"38":{"body":111,"breadcrumbs":4,"title":1},"39":{"body":141,"breadcrumbs":4,"title":1},"4":{"body":104,"breadcrumbs":6,"title":3},"40":{"body":100,"breadcrumbs":4,"title":1},"41":{"body":172,"breadcrumbs":6,"title":3},"42":{"body":233,"breadcrumbs":4,"title":1},"43":{"body":122,"breadcrumbs":4,"title":1},"44":{"body":281,"breadcrumbs":9,"title":6},"45":{"body":271,"breadcrumbs":7,"title":4},"46":{"body":28,"breadcrumbs":4,"title":1},"47":{"body":36,"breadcrumbs":6,"title":2},"48":{"body":242,"breadcrumbs":6,"title":2},"49":{"body":59,"breadcrumbs":6,"title":2},"5":{"body":38,"breadcrumbs":6,"title":3},"50":{"body":106,"breadcrumbs":6,"title":2},"51":{"body":152,"breadcrumbs":6,"title":2},"52":{"body":101,"breadcrumbs":6,"title":2},"53":{"body":102,"breadcrumbs":6,"title":2},"54":{"body":275,"breadcrumbs":7,"title":3},"55":{"body":38,"breadcrumbs":7,"title":3},"56":{"body":252,"breadcrumbs":5,"title":1},"57":{"body":150,"breadcrumbs":5,"title":1},"58":{"body":557,"breadcrumbs":6,"title":2},"59":{"body":167,"breadcrumbs":6,"title":2},"6":{"body":122,"breadcrumbs":5,"title":2},"60":{"body":119,"breadcrumbs":5,"title":1},"61":{"body":199,"breadcrumbs":6,"title":2},"62":{"body":181,"breadcrumbs":5,"title":1},"63":{"body":69,"breadcrumbs":5,"title":1},"64":{"body":80,"breadcrumbs":6,"title":3},"65":{"body":137,"breadcrumbs":5,"title":1},"66":{"body":52,"breadcrumbs":6,"title":2},"67":{"body":71,"breadcrumbs":6,"title":2},"68":{"body":16,"breadcrumbs":9,"title":3},"69":{"body":87,"breadcrumbs":9,"title":3},"7":{"body":34,"breadcrumbs":6,"title":3},"70":{"body":120,"breadcrumbs":9,"title":3},"71":{"body":179,"breadcrumbs":8,"title":2},"72":{"body":67,"breadcrumbs":7,"title":2},"73":{"body":239,"breadcrumbs":7,"title":2},"74":{"body":455,"breadcrumbs":7,"title":2},"75":{"body":100,"breadcrumbs":7,"title":2},"76":{"body":130,"breadcrumbs":7,"title":2},"77":{"body":178,"breadcrumbs":7,"title":2},"78":{"body":134,"breadcrumbs":7,"title":2},"79":{"body":4,"breadcrumbs":4,"title":2},"8":{"body":18,"breadcrumbs":2,"title":1},"80":{"body":9,"breadcrumbs":3,"title":1},"81":{"body":2,"breadcrumbs":4,"title":2},"82":{"body":1,"breadcrumbs":3,"title":1},"83":{"body":4,"breadcrumbs":4,"title":2},"84":{"body":1,"breadcrumbs":4,"title":2},"85":{"body":12,"breadcrumbs":4,"title":2},"9":{"body":102,"breadcrumbs":7,"title":3}},"docs":{"0":{"body":"This book is a guide for creating CosmWasm smart contracts. It will lead you step by step, and explain relevant topics from the easiest to the trickier ones. The idea of the book is not only to tell you about smart contracts API but also to show you how to do it in a clean and maintainable way. We will show you patterns that CosmWasm creators established and encouraged you to use.","breadcrumbs":"Introduction » Introduction","id":"0","title":"Introduction"},"1":{"body":"This book explores CosmWasm smart contracts. It is not a Rust tutorial, and it assumes basic Rust knowledge. As you will probably learn it alongside this book, I strongly recommend grasping the language itself first. You can find great resources to start with Rust on Learn Rust page.","breadcrumbs":"Introduction » Prerequirements","id":"1","title":"Prerequirements"},"10":{"body":"Typical Rust application starts with the fn main() function called by the operating system. Smart contracts are not significantly different. When the message is sent to the contract, a function called \"entry point\" is called. Unlike native applications, which have only a single main entry point, smart contracts have a couple corresponding to different message types: instantiate, execute, query, sudo, migrate and more. To start, we will go with three basic entry points: instantiate which is called once per smart contract lifetime - you can think about it as a constructor or initializer of a contract. execute for handling messages which are able to modify contract state - they are used to perform some actual actions. query for handling messages requesting some information from a contract; unlike execute, they can never affect any contract state, and are used just like database queries. Go to your src/lib.rs file, and start with an instantiate entry point: use cosmwasm_std::{ entry_point, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n}; #[entry_point]\npub fn instantiate( _deps: DepsMut, _env: Env, _info: MessageInfo, _msg: Empty,\n) -> StdResult { Ok(Response::new())\n} In fact, instantiate is the only entry point required for a smart contract to be valid. It is not very useful in this form, but it is a start. Let's take a closer look at the entry point structure. First, we start with importing couple of types just for more consistent usage. Then we define our entry point. The instantiate takes four arguments: deps: DepsMut is a utility type for communicating with the outer world - it allows querying and updating the contract state, querying other contracts state, and gives access to an Api object with a couple of helper functions for dealing with CW addresses. env: Env is an object representing the blockchains state when executing the message - the chain height and id, current timestamp, and the called contract address. info: MessageInfo contains metainformation about the message which triggered an execution - an address that sends the message, and chain native tokens sent with the message. msg: Empty is the message triggering execution itself - for now, it is Empty type that represents {} JSON, but the type of this argument can be anything that is deserializable, and we will pass more complex types here in the future. If you are new to the blockchain, those arguments may not have much sense to you, but while progressing with this guide, I will explain their usage one by one. Notice an essential attribute decorating our entry point #[entry_point] . Its purpose is to wrap the whole entry point to the form Wasm runtime understands. The proper Wasm entry points can use only basic types supported natively by Wasm specification, and Rust structures and enums are not in this set. Working with such entry points would be rather overcomplicated, so CosmWasm creators delivered the entry_point macro. It creates the raw Wasm entry point, calling the decorated function internally and doing all the magic required to build our high-level Rust arguments from arguments passed by Wasm runtime. The next thing to look at is the return type. I used StdResult for this simple example, which is an alias for Result. The return entry point type would always be a Result type, with some error type implementing ToString trait and a well-defined type for success case. For most entry points, an \"Ok\" case would be the Response type that allows fitting the contract into our actor model, which we will discuss very soon. The body of the entry point is as simple as it could be - it always succeeds with a trivial empty response.","breadcrumbs":"Basics » Entry points » Entry points","id":"10","title":"Entry points"},"11":{"body":"Now it is time to build our contract. We can use a traditional cargo build pipeline for local testing purposes: cargo build for compiling it and cargo test for running all tests (which we don't have yet, but we will work on that soon). However, we need to create a wasm binary to upload the contract to blockchain. We can do it by passing an additional argument to the build command: $ cargo build --target wasm32-unknown-unknown --release The --target argument tells cargo to perform cross-compilation for a given target instead of building a native binary for an OS it is running on - in this case, wasm32-unknown-unknown, which is a fancy name for Wasm target. Additionally, I passed the --release argument to the command - it is not required, but in most cases, debug information is not very useful while running on-chain. It is crucial to reduce the uploaded binary size for gas cost minimization. It is worth knowing that there is a CosmWasm Rust Optimizer tool that takes care of building even smaller binaries. For production, all the contracts should be compiled using this tool, but for learning purposes, it is not an essential thing to do.","breadcrumbs":"Basics » Building the contract » Building the contract","id":"11","title":"Building the contract"},"12":{"body":"Now I can see you are disappointed in building your contracts with some overcomplicated command instead of simple cargo build. Fortunately, it is not the case. The common practice is to alias the building command to make it as simple as building a native app. Let's create the .cargo/config file in your contract project directory with the following content: [alias]\nwasm = \"build --target wasm32-unknown-unknown --release\"\nwasm-debug = \"build --target wasm32-unknown-unknown\" Now, building your Wasm binary is as easy as executing cargo wasm. We also added the additional wasm-debug command for rare cases when we want to build the wasm binary, including debug information.","breadcrumbs":"Basics » Building the contract » Aliasing build command","id":"12","title":"Aliasing build command"},"13":{"body":"When the contract is built, the last step is to ensure it is a valid CosmWasm contract is to call cosmwasm-check on it: $ cargo wasm\n...\n$ cosmwasm-check ./target/wasm32-unknown-unknown/release/contract.wasm\nAvailable capabilities: {\"cosmwasm_1_1\", \"staking\", \"stargate\", \"iterator\", \"cosmwasm_1_2\"} ./target/wasm32-unknown-unknown/release/contract.wasm: pass","breadcrumbs":"Basics » Building the contract » Checking contract validity","id":"13","title":"Checking contract validity"},"14":{"body":"We have already created a simple contract reacting to an empty instantiate message. Unfortunately, it is not very useful. Let's make it a bit reactive. First, we need to add serde crate to our dependencies. It would help us with the serialization and deserialization of query messages. Update the Cargo.toml: [package]\nname = \"contract\"\nversion = \"0.1.0\"\nedition = \"2021\" [lib]\ncrate-type = [\"cdylib\"] [dependencies]\ncosmwasm-std = { version = \"1.0.0-beta8\", features = [\"staking\"] }\nserde = { version = \"1.0.103\", default-features = false, features = [\"derive\"] } [dev-dependencies]\ncw-multi-test = \"0.13.4\" Now go to your src/lib.rs file, and add a new query entry point: use cosmwasm_std::{ entry_point, to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n};\nuse serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize)]\nstruct QueryResp { message: String,\n} # #[entry_point]\n# pub fn instantiate(\n# _deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# _msg: Empty,\n# ) -> StdResult {\n# Ok(Response::new())\n# }\n#\n#[entry_point]\npub fn query(_deps: Deps, _env: Env, _msg: Empty) -> StdResult { let resp = QueryResp { message: \"Hello World\".to_owned(), }; to_binary(&resp)\n} Note that I omitted the previously created instantiate endpoint for simplicity - not to overload you with code, I will always only show lines that changed in the code. We first need a structure we will return from our query. We always want to return something which is serializable. We are just deriving the Serialize and Deserialize traits from serde crate. Then we need to implement our entry point. It is very similar to the instantiate one. The first significant difference is a type of deps argument. For instantiate, it was a DepMut, but here we went with a Deps object. That is because the query can never alter the smart contract's internal state. It can only read the state. It comes with some consequences - for example, it is impossible to implement caching for future queries (as it would require some data cache to write to). The other difference is the lack of the info argument. The reason here is that the entry point which performs actions (like instantiation or execution) can differ how an action is performed based on the message metadata - for example, they can limit who can perform an action (and do so by checking the message sender). It is not a case for queries. Queries are supposed just purely to return some transformed contract state. It can be calculated based on some chain metadata (so the state can \"automatically\" change after some time), but not on message info. Note that our entry point still has the same Empty type for its msg argument - it means that the query message we would send to the contract is still an empty JSON: {} The last thing that changed is the return type. Instead of returning the Response type on the success case, we return an arbitrary serializable object. This is because queries are not using a typical actor model message flow - they cannot trigger any actions nor communicate with other contracts in ways different than querying them (which is handled by the deps argument). The query always returns plain data, which should be presented directly to the querier. Now take a look at the implementation. Nothing complicated happens there - we create an object we want to return and encode it to the Binary type using the to_binary function.","breadcrumbs":"Basics » Creating a query » Creating a query","id":"14","title":"Creating a query"},"15":{"body":"We have a query, but there is a problem with the query message. It is always an empty JSON. It is terrible - if we would like to add another query in the future, it would be difficult to have any reasonable distinction between query variants. In practice, we address this by using a non-empty query message type. Improve our contract: # use cosmwasm_std::{\n# entry_point, to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n# };\n# use serde::{Deserialize, Serialize};\n# # #[derive(Serialize, Deserialize)]\n# struct QueryResp {\n# message: String,\n# }\n#\n#[derive(Serialize, Deserialize)]\npub enum QueryMsg { Greet {},\n} # #[entry_point]\n# pub fn instantiate(\n# _deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# _msg: Empty,\n# ) -> StdResult {\n# Ok(Response::new())\n# }\n#\n#[entry_point]\npub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { use QueryMsg::*; match msg { Greet {} => { let resp = QueryResp { message: \"Hello World\".to_owned(), }; to_binary(&resp) } }\n} Now we introduced a proper message type for the query message. It is an enum , and by default, it would serialize to a JSON with a single field - the name of the field will be an enum variant (in our case - always \"greet\" - at least for now), and the value of this field would be an object assigned to this enum variant. Note that our enum has no type assigned to the only Greet variant. Typically in Rust, we create such variants without additional {} after the variant name. Here the curly braces have a purpose - without them, the variant would serialize to just a string type - so instead of { \"greet\": {} }, the JSON representation of this variant would be \"greet\". This behavior brings inconsistency in the message schema. It is, generally, a good habit to always add the {} to serde serializable empty enum variants - for better JSON representation. But now, we can still improve the code further. Right now, the query function has two responsibilities. The first is obvious - handling the query itself. It was the first assumption, and it is still there. But there is a new thing happening there - the query message dispatching. It may not be obvious, as there is a single variant, but the query function is an excellent way to become a massive unreadable match statement. To make the code more SOLID , we will refactor it and take out handling the greet message to a separate function. # use cosmwasm_std::{\n# entry_point, to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n# };\n# use serde::{Deserialize, Serialize};\n# #[derive(Serialize, Deserialize)]\npub struct GreetResp { message: String,\n} # #[derive(Serialize, Deserialize)]\n# pub enum QueryMsg {\n# Greet {},\n# }\n# # #[entry_point]\n# pub fn instantiate(\n# _deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# _msg: Empty,\n# ) -> StdResult {\n# Ok(Response::new())\n# }\n# #[entry_point]\npub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { use QueryMsg::*; match msg { Greet {} => to_binary(&query::greet()?), }\n} mod query { use super::*; pub fn greet() -> StdResult { let resp = GreetResp { message: \"Hello World\".to_owned(), }; Ok(resp) }\n} Now it looks much better. Note there are a couple of additional improvements. I renamed the query-response type GreetResp as I may have different responses for different queries. I want the name to relate only to the variant, not the whole message. Next is enclosing my new function in the module query. It makes it easier to avoid name collisions - I can have the same variant for queries and execution messages in the future, and their handlers would lie in separate namespaces. A questionable decision may be returning StdResult instead of GreetResp from greet function, as it would never return an error. It is a matter of style, but I prefer consistency over the message handler, and the majority of them would have failure cases - e.g. when reading the state. Also, you might pass deps and env arguments to all your query handlers for consistency. I'm not too fond of this, as it introduces unnecessary boilerplate which doesn't read well, but I also agree with the consistency argument - I leave it to your judgment.","breadcrumbs":"Basics » Creating a query » Improving the message","id":"15","title":"Improving the message"},"16":{"body":"You can see that our contract is becoming a bit bigger now. About 50 lines are maybe not so much, but there are many different entities in a single file, and I think we can do better. I can already distinguish three different types of entities in the code: entry points, messages, and handlers. In most contracts, we would divide them across three files. Start with extracting all the messages to src/msg.rs: use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize)]\npub struct GreetResp { pub message: String,\n} #[derive(Serialize, Deserialize)]\npub enum QueryMsg { Greet {},\n} You probably noticed that I made my GreetResp fields public. It is because they have to be now accessed from a different module. Now move forward to the src/contract.rs file: use crate::msg::{GreetResp, QueryMsg};\nuse cosmwasm_std::{ to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n}; pub fn instantiate( _deps: DepsMut, _env: Env, _info: MessageInfo, _msg: Empty,\n) -> StdResult { Ok(Response::new())\n} pub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { use QueryMsg::*; match msg { Greet {} => to_binary(&query::greet()?), }\n} mod query { use super::*; pub fn greet() -> StdResult { let resp = GreetResp { message: \"Hello World\".to_owned(), }; Ok(resp) }\n} I moved most of the logic here, so my src/lib.rs is just a very thin library entry with nothing else but module definitions and entry points definition. I removed the #[entry_point] attribute from my query function in src/contract.rs. I will have a function with this attribute. Still, I wanted to split functions' responsibility further - not the contract::query function is the top-level query handler responsible for dispatching the query message. The query function on crate-level is only an entry point. It is a subtle distinction, but it will make sense in the future when we would like not to generate the entry points but to keep the dispatching functions. I introduced the split now to show you the typical contract structure. Now the last part, the src/lib.rs file: use cosmwasm_std::{ entry_point, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n}; mod contract;\nmod msg; #[entry_point]\npub fn instantiate(deps: DepsMut, env: Env, info: MessageInfo, msg: Empty) -> StdResult\n{ contract::instantiate(deps, env, info, msg)\n} #[entry_point]\npub fn query(deps: Deps, env: Env, msg: msg::QueryMsg) -> StdResult\n{ contract::query(deps, env, msg)\n} Straightforward top-level module. Definition of submodules and entry points, nothing more. Now, when we have the contract ready to do something, let's go and test it.","breadcrumbs":"Basics » Creating a query » Structuring the contract","id":"16","title":"Structuring the contract"},"17":{"body":"Last time we created a new query, now it is time to test it out. We will start with the basics - the unit test. This approach is simple and doesn't require knowledge besides Rust. Go to the src/contract.rs and add a test in its module: # use crate::msg::{GreetResp, QueryMsg};\n# use cosmwasm_std::{\n# to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n# };\n# # pub fn instantiate(\n# _deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# _msg: Empty,\n# ) -> StdResult {\n# Ok(Response::new())\n# }\n# # pub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult {\n# use QueryMsg::*;\n# # match msg {\n# Greet {} => to_binary(&query::greet()?),\n# }\n# }\n# # mod query {\n# use super::*;\n# # pub fn greet() -> StdResult {\n# let resp = GreetResp {\n# message: \"Hello World\".to_owned(),\n# };\n# # Ok(resp)\n# }\n# }\n# #[cfg(test)]\nmod tests { use super::*; #[test] fn greet_query() { let resp = query::greet().unwrap(); assert_eq!( resp, GreetResp { message: \"Hello World\".to_owned() } ); }\n} If you ever wrote a unit test in Rust, nothing should surprise you here. Just a simple test-only module contains local function unit tests. The problem is - this test doesn't build yet. We need to tweak our message types a bit. Update the src/msg.rs: # use serde::{Deserialize, Serialize};\n# #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\npub struct GreetResp { pub message: String,\n} #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\npub enum QueryMsg { Greet {},\n} I added three new derives to both message types. PartialEq is required to allow comparing types for equality - so we can check if they are equal. The Debug is a trait generating debug-printing utilities. It is used by assert_eq! to display information about mismatch if an assertion fails. Note that because we are not testing the QueryMsg in any way, the additional trait derives are optional. Still, it is a good practice to make all messages both PartialEq and Debug for testability and consistency. The last one, Clone is not needed for now yet, but it is also good practice to allow messages to be cloned around. We will also require that later, so I added it already not to go back and forth. Now we are ready to run our test: $ cargo test ...\nrunning 1 test\ntest contract::tests::greet_query ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Yay! Test passed!","breadcrumbs":"Basics » Testing a query » Testing a query","id":"17","title":"Testing a query"},"18":{"body":"Now let's go a step further. The Rust testing utility is a friendly tool for building even higher-level tests. We are currently testing smart contract internals, but if you think about how your smart contract is visible from the outside world. It is a single entity that is triggered by some input messages. We can create tests that treat the whole contract as a black box by testing it via our query function. Let's update our test: # use crate::msg::{GreetResp, QueryMsg};\n# use cosmwasm_std::{\n# to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n# };\n# # pub fn instantiate(\n# _deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# _msg: Empty,\n# ) -> StdResult {\n# Ok(Response::new())\n# }\n# # pub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult {\n# use QueryMsg::*;\n# # match msg {\n# Greet {} => to_binary(&query::greet()?),\n# }\n# }\n# # mod query {\n# use super::*;\n# # pub fn greet() -> StdResult {\n# let resp = GreetResp {\n# message: \"Hello World\".to_owned(),\n# };\n# # Ok(resp)\n# }\n# }\n# #[cfg(test)]\nmod tests { use cosmwasm_std::from_binary; use cosmwasm_std::testing::{mock_dependencies, mock_env}; use super::*; #[test] fn greet_query() { let resp = query( mock_dependencies().as_ref(), mock_env(), QueryMsg::Greet {} ).unwrap(); let resp: GreetResp = from_binary(&resp).unwrap(); assert_eq!( resp, GreetResp { message: \"Hello World\".to_owned() } ); }\n} We needed to produce two entities for the query functions: the deps and env instances. Fortunately, cosmwasm-std provides utilities for testing those - mock_dependencies and mock_env functions. You may notice the dependencies mock of a type OwnedDeps instead of Deps, which we need here - this is why the as_ref function is called on it. If we looked for a DepsMut object, we would use as_mut instead. We can rerun the test, and it should still pass. But when we think about that test reflecting the actual use case, it is inaccurate. The contract is queried, but it was never instantiated! In software engineering, it is equivalent to calling a getter without constructing an object - taking it out of nowhere. It is a lousy testing approach. We can do better: # use crate::msg::{GreetResp, QueryMsg};\n# use cosmwasm_std::{\n# to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n# };\n# # pub fn instantiate(\n# _deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# _msg: Empty,\n# ) -> StdResult {\n# Ok(Response::new())\n# }\n# # pub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult {\n# use QueryMsg::*;\n# # match msg {\n# Greet {} => to_binary(&query::greet()?),\n# }\n# }\n# # mod query {\n# use super::*;\n# # pub fn greet() -> StdResult {\n# let resp = GreetResp {\n# message: \"Hello World\".to_owned(),\n# };\n# # Ok(resp)\n# }\n# }\n# #[cfg(test)]\nmod tests { use cosmwasm_std::from_binary; use cosmwasm_std::testing::{mock_dependencies, mock_env, mock_info}; use super::*; #[test] fn greet_query() { let mut deps = mock_dependencies(); let env = mock_env(); instantiate( deps.as_mut(), env.clone(), mock_info(\"sender\", &[]), Empty {}, ) .unwrap(); let resp = query(deps.as_ref(), env, QueryMsg::Greet {}).unwrap(); let resp: GreetResp = from_binary(&resp).unwrap(); assert_eq!( resp, GreetResp { message: \"Hello World\".to_owned() } ); }\n} A couple of new things here. First, I extracted the deps and env variables to their variables and passed them to calls. The idea is that those variables represent some blockchain persistent state, and we don't want to create them for every call. We want any changes to the contract state occurring in instantiate to be visible in the query. Also, we want to control how the environment differs on the query and instantiation. The info argument is another story. The message info is unique for each message sent. To create the info mock, we must pass two arguments to the mock_info function. First is the address performing a call. It may look strange to pass sender as an address instead of some mysterious wasm followed by hash, but it is a valid address. For testing purposes, such addresses are typically better, as they are way more verbose in case of failing tests. The second argument is funds sent with the message. For now, we leave it as an empty slice, as I don't want to talk about token transfers yet - we will cover it later. So now it is more a real-case scenario. I see just one problem. I say that the contract is a single black box. But here, nothing connects the instantiate call to the corresponding query. It seems that we assume there is some global contract. But it seems that if we would like to have two contracts instantiated differently in a single test case, it would become a mess. If only there would be some tool to abstract this for us, wouldn't it be nice?","breadcrumbs":"Basics » Testing a query » Contract as a black box","id":"18","title":"Contract as a black box"},"19":{"body":"Let me introduce the multitest - library for creating tests for smart contracts in Rust. The core idea of multitest is abstracting an entity of contract and simulating the blockchain environment for testing purposes. The purpose of this is to be able to test communication between smart contracts. It does its job well, but it is also an excellent tool for testing single-contract scenarios. First, we need to add a multitest to our Cargo.toml. [package]\nname = \"contract\"\nversion = \"0.1.0\"\nedition = \"2021\" [lib]\ncrate-type = [\"cdylib\"] [dependencies]\ncosmwasm-std = { version = \"1.0.0-beta8\", features = [\"staking\"] }\nserde = { version = \"1.0.103\", default-features = false, features = [\"derive\"] } [dev-dependencies]\ncw-multi-test = \"0.13.4\" I added a new [dev-dependencies] section with dependencies not used by the final binary but which may be used by tools around the development process - for example, tests. When we have the dependency ready, update our test to use the framework: # use crate::msg::{GreetResp, QueryMsg};\n# use cosmwasm_std::{\n# to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n# };\n# # pub fn instantiate(\n# _deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# _msg: Empty,\n# ) -> StdResult {\n# Ok(Response::new())\n# }\n# # pub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult {\n# use QueryMsg::*;\n# # match msg {\n# Greet {} => to_binary(&query::greet()?),\n# }\n# }\n# #[allow(dead_code)]\npub fn execute( _deps: DepsMut, _env: Env, _info: MessageInfo, _msg: Empty\n) -> StdResult { unimplemented!()\n} # mod query {\n# use super::*;\n# # pub fn greet() -> StdResult {\n# let resp = GreetResp {\n# message: \"Hello World\".to_owned(),\n# };\n# # Ok(resp)\n# }\n# }\n# #[cfg(test)]\nmod tests { use cosmwasm_std::Addr; use cw_multi_test::{App, ContractWrapper, Executor}; use super::*; #[test] fn greet_query() { let mut app = App::default(); let code = ContractWrapper::new(execute, instantiate, query); let code_id = app.store_code(Box::new(code)); let addr = app .instantiate_contract( code_id, Addr::unchecked(\"owner\"), &Empty {}, &[], \"Contract\", None, ) .unwrap(); let resp: GreetResp = app .wrap() .query_wasm_smart(addr, &QueryMsg::Greet {}) .unwrap(); assert_eq!( resp, GreetResp { message: \"Hello World\".to_owned() } ); }\n} You probably notice that I added the function for an execute entry point. I didn't add the entry point itself or the function's implementation, but for the multitest purposes contract has to contain at least instantiate, query, and execute handlers. I attributed the function as #[allow(dead_code)] , so, cargo will not complain about it not being used anywhere. Enabling it for tests only with #[cfg(test)] would also be a way. Then at the beginning of the test, I created the App object. It is a core multitest entity representing the virtual blockchain on which we will run our contracts. As you can see, we can call functions on it just like we would interact with blockchain using wasmd! Right after creating app, I prepared the representation of the code, which would be \"uploaded\" to the blockchain. As multitests are just native Rust tests, they do not involve any Wasm binaries, but this name matches well what happens in a real-life scenario. We store this object in the blockchain with the store_code function, and as a result, we are getting the code id - we would need it to instantiate a contract. Instantiation is the next step. In a single instantiate_contract call, we provide everything we would provide via wasmd - the contract code id, the address which performs instantiation, the message triggering it, and any funds sent with the message (again - empty for now). We are adding the contract label and its admin for migrations - None, as we don't need it yet. And after the contract is online, we can query it. The wrap function is an accessor for querying Api (queries are handled a bit differently than other calls), and the query_wasm_smart queries are given a contract with the message. Also, we don't need to care about query results as Binary - multitest assumes that we would like to deserialize them to some response type, so it takes advantage of Rust type elision to provide us with a nice Api. Now it's time to rerun the test. It should still pass, but now we nicely abstracted the testing contract as a whole, not some internal functions. The next thing we should probably cover is making the contract more interesting by adding some state.","breadcrumbs":"Basics » Introducing multitest » Introducing multitest","id":"19","title":"Introducing multitest"},"2":{"body":"This is the guide-like documentation. If you are looking for the API documentation, you may be interested in checking one of the following: cosmwasm-std cw-storage-plus cw-multi-test cw-utils sylvia framework","breadcrumbs":"Introduction » CosmWasm API documentation","id":"2","title":"CosmWasm API documentation"},"20":{"body":"The contract we are working on already has some behavior that can answer a query. Unfortunately, it is very predictable with its answers, and it has nothing to alter them. In this chapter, I introduce the notion of state, which would allow us to bring true life to a smart contract. The state would still be static for now - it would be initialized on contract instantiation. The state would contain a list of admins who would be eligible to execute messages in the future. The first thing to do is to update Cargo.toml with yet another dependency - the storage-plus crate with high-level bindings for CosmWasm smart contracts state management: [package]\nname = \"contract\"\nversion = \"0.1.0\"\nedition = \"2021\" [lib]\ncrate-type = [\"cdylib\"] [dependencies]\ncosmwasm-std = { version = \"1.0.0-beta8\", features = [\"staking\"] }\nserde = { version = \"1.0.103\", default-features = false, features = [\"derive\"] }\ncw-storage-plus = \"0.13.4\" [dev-dependencies]\ncw-multi-test = \"0.13.4\" Now create a new file where you will keep a state for the contract - we typically call it src/state.rs: use cosmwasm_std::Addr;\nuse cw_storage_plus::Item; pub const ADMINS: Item> = Item::new(\"admins\"); And make sure we declare the module in src/lib.rs: # use cosmwasm_std::{\n# entry_point, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n# };\n# # mod contract;\n# mod msg;\nmod state;\n#\n# #[entry_point]\n# pub fn instantiate(deps: DepsMut, env: Env, info: MessageInfo, msg: Empty)\n# -> StdResult\n# {\n# contract::instantiate(deps, env, info, msg)\n# }\n#\n# #[entry_point]\n# pub fn query(deps: Deps, env: Env, msg: msg::QueryMsg)\n# -> StdResult\n# {\n# contract::query(deps, env, msg)\n# } The new thing we have here is the ADMINS constant of type Item>. You could ask an excellent question here - how is the state constant? How do I modify it if it is a constant value? The answer is tricky - this constant is not keeping the state itself. The state is stored in the blockchain and is accessed via the deps argument passed to entry points. The storage-plus constants are just accessor utilities helping us access this state in a structured way. In CosmWasm, the blockchain state is just massive key-value storage. The keys are prefixed with metainformation pointing to the contract which owns them (so no other contract can alter them in any way), but even after removing the prefixes, the single contract state is a smaller key-value pair. storage-plus handles more complex state structures by additionally prefixing items keys intelligently. For now, we just used the simplest storage entity - an Item<_> , which holds a single optional value of a given type - Vec in this case. And what would be a key to this item in the storage? It doesn't matter to us - it would be figured out to be unique, based on a unique string passed to the new function. Before we would go into initializing our state, we need some better instantiate message. Go to src/msg.rs and create one: # use cosmwasm_std::Addr;\n# use serde::{Deserialize, Serialize};\n# #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\npub struct InstantiateMsg { pub admins: Vec,\n}\n# # #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\n# pub struct GreetResp {\n# pub message: String,\n# }\n# # #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\n# pub enum QueryMsg {\n# Greet {},\n# } Now go forward to instantiate the entry point in src/contract.rs, and initialize our state to whatever we got in the instantiation message: # use crate::msg::{GreetResp, InstantiateMsg, QueryMsg};\nuse crate::state::ADMINS;\n// --snip--\n# use cosmwasm_std::{\n# to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n# };\n# pub fn instantiate( deps: DepsMut, _env: Env, _info: MessageInfo, msg: InstantiateMsg,\n) -> StdResult { let admins: StdResult> = msg .admins .into_iter() .map(|addr| deps.api.addr_validate(&addr)) .collect(); ADMINS.save(deps.storage, &admins?)?; Ok(Response::new())\n}\n# # pub fn query(_deps: Deps, _env: Env, msg: QueryMsg) -> StdResult {\n# use QueryMsg::*;\n# # match msg {\n# Greet {} => to_binary(&query::greet()?),\n# }\n# }\n# # #[allow(dead_code)]\n# pub fn execute(_deps: DepsMut, _env: Env, _info: MessageInfo, _msg: Empty) -> StdResult {\n# unimplemented!()\n# }\n# # mod query {\n# use super::*;\n# # pub fn greet() -> StdResult {\n# let resp = GreetResp {\n# message: \"Hello World\".to_owned(),\n# };\n# # Ok(resp)\n# }\n# }\n# # #[cfg(test)]\n# mod tests {\n# use cosmwasm_std::Addr;\n# use cw_multi_test::{App, ContractWrapper, Executor};\n# # use super::*;\n# # #[test]\n# fn greet_query() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &Empty {},\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: GreetResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::Greet {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# GreetResp {\n# message: \"Hello World\".to_owned()\n# }\n# );\n# }\n# } We also need to update the message type on entry point in src/lib.rs: # use cosmwasm_std::{entry_point, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};\nuse msg::InstantiateMsg;\n// --snip--\n# # mod contract;\n# mod msg;\n# mod state;\n# #[entry_point]\npub fn instantiate( deps: DepsMut, env: Env, info: MessageInfo, msg: InstantiateMsg,\n) -> StdResult { contract::instantiate(deps, env, info, msg)\n}\n# # #[entry_point]\n# pub fn query(deps: Deps, env: Env, msg: msg::QueryMsg) -> StdResult {\n# contract::query(deps, env, msg)\n# } Voila, that's all that is needed to update the state! First, we need to transform the vector of strings into the vector of addresses to be stored. We cannot take addresses as a message argument because not every string is a valid address. It might be a bit confusing when we were working on tests. Any string could be used in the place of address. Let me explain. Every string can be technically considered an address. However, not every string is an actual existing blockchain address. When we keep anything of type Addr in the contract, we assume it is a proper address in the blockchain. That is why the addr_validate function exits - to check this precondition. Having data to store, we use the save function to write it into the contract state. Note that the first argument of save is &mut Storage , which is actual blockchain storage. As emphasized, the Item object stores nothing and is just an accessor. It determines how to store the data in the storage given to it. The second argument is the serializable data to be stored. It is a good time to check if the regression we have passes - try running our tests: > cargo test ... running 1 test\ntest contract::tests::greet_query ... FAILED failures: ---- contract::tests::greet_query stdout ----\nthread 'contract::tests::greet_query' panicked at 'called `Result::unwrap()` on an `Err` value: error executing WasmMsg:\nsender: owner\nInstantiate { admin: None, code_id: 1, msg: Binary(7b7d), funds: [], label: \"Contract\" } Caused by: Error parsing into type contract::msg::InstantiateMsg: missing field `admins`', src/contract.rs:80:14\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace failures: contract::tests::greet_query test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s error: test failed, to rerun pass '--lib' Damn, we broke something! But be calm. Let's start with carefully reading an error message: Error parsing into type contract::msg::InstantiateMsg: missing field admins', src/contract.rs:80:14 The problem is that in the test, we send an empty instantiation message in our test, but right now, our endpoint expects to have an admin field. Multi-test framework tests contract from the entry point to results, so sending messages using MT functions first serializes them. Then the contract deserializes them on the entry. But now it tries to deserialize the empty JSON to some non-empty message! We can quickly fix it by updating the test: # use crate::msg::{GreetResp, InstantiateMsg, QueryMsg};\n# use crate::state::ADMINS;\n# use cosmwasm_std::{\n# to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n# };\n# # pub fn instantiate(\n# deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# msg: InstantiateMsg,\n# ) -> StdResult {\n# let admins: StdResult> = msg\n# .admins\n# .into_iter()\n# .map(|addr| deps.api.addr_validate(&addr))\n# .collect();\n# ADMINS.save(deps.storage, &admins?)?;\n# # Ok(Response::new())\n# }\n# # pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult {\n# use QueryMsg::*;\n# # match msg {\n# Greet {} => to_binary(&query::greet()?),\n# AdminsList {} => to_binary(&query::admins_list(deps)?),\n# }\n# }\n# # #[allow(dead_code)]\n# pub fn execute(_deps: DepsMut, _env: Env, _info: MessageInfo, _msg: Empty) -> StdResult {\n# unimplemented!()\n# }\n# # mod query {\n# use crate::msg::AdminsListResp;\n# # use super::*;\n# # pub fn greet() -> StdResult {\n# let resp = GreetResp {\n# message: \"Hello World\".to_owned(),\n# };\n# # Ok(resp)\n# }\n# # pub fn admins_list(deps: Deps) -> StdResult {\n# let admins = ADMINS.load(deps.storage)?;\n# let resp = AdminsListResp { admins };\n# Ok(resp)\n# }\n# }\n# # #[cfg(test)]\n# mod tests {\n# use cosmwasm_std::Addr;\n# use cw_multi_test::{App, ContractWrapper, Executor};\n# # use super::*;\n# #[test] fn greet_query() { let mut app = App::default(); let code = ContractWrapper::new(execute, instantiate, query); let code_id = app.store_code(Box::new(code)); let addr = app .instantiate_contract( code_id, Addr::unchecked(\"owner\"), &InstantiateMsg { admins: vec![] }, &[], \"Contract\", None, ) .unwrap(); let resp: GreetResp = app .wrap() .query_wasm_smart(addr, &QueryMsg::Greet {}) .unwrap(); assert_eq!( resp, GreetResp { message: \"Hello World\".to_owned() } ); }\n# }","breadcrumbs":"Basics » Contract state » Contract state","id":"20","title":"Contract state"},"21":{"body":"When the state is initialized, we want a way to test it. We want to provide a query to check if the instantiation affects the state. Just create a simple one listing all admins. Start with adding a variant for query message and a corresponding response message in src/msg.rs. We'll call the variant AdminsList, the response AdminsListResp, and have it return a vector of cosmwasm_std::Addr: # use cosmwasm_std::Addr;\n# use serde::{Deserialize, Serialize};\n# # #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\n# pub struct InstantiateMsg {\n# pub admins: Vec,\n# }\n# # #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\n# pub struct GreetResp {\n# pub message: String,\n# }\n# #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\npub struct AdminsListResp { pub admins: Vec,\n} [derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\npub enum QueryMsg { Greet {}, AdminsList {},\n} And implement it in src/contract.rs: use crate::msg::{AdminsListResp, GreetResp, InstantiateMsg, QueryMsg};\n# use crate::state::ADMINS;\n# use cosmwasm_std::{\n# to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n# };\n# # pub fn instantiate(\n# deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# msg: InstantiateMsg,\n# ) -> StdResult {\n# let admins: StdResult> = msg\n# .admins\n# .into_iter()\n# .map(|addr| deps.api.addr_validate(&addr))\n# .collect();\n# ADMINS.save(deps.storage, &admins?)?;\n# # Ok(Response::new())\n# }\n# pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { use QueryMsg::*; match msg { Greet {} => to_binary(&query::greet()?), AdminsList {} => to_binary(&query::admins_list(deps)?), }\n} # #[allow(dead_code)]\n# pub fn execute(_deps: DepsMut, _env: Env, _info: MessageInfo, _msg: Empty) -> StdResult {\n# unimplemented!()\n# }\n#\nmod query {\n# use super::*;\n#\n# pub fn greet() -> StdResult {\n# let resp = GreetResp {\n# message: \"Hello World\".to_owned(),\n# };\n#\n# Ok(resp)\n# }\n# pub fn admins_list(deps: Deps) -> StdResult { let admins = ADMINS.load(deps.storage)?; let resp = AdminsListResp { admins }; Ok(resp) }\n} # #[cfg(test)]\n# mod tests {\n# use cosmwasm_std::Addr;\n# use cw_multi_test::{App, ContractWrapper, Executor};\n# # use super::*;\n# # #[test]\n# fn greet_query() {\n# let mut app = App::default();\n#\n# let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n#\n# let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n#\n# let resp: GreetResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::Greet {})\n# .unwrap();\n#\n# assert_eq!(\n# resp,\n# GreetResp {\n# message: \"Hello World\".to_owned()\n# }\n# );\n# }\n# } Now when we have the tools to test the instantiation, let's write a test case: use crate::msg::{AdminsListResp, GreetResp, InstantiateMsg, QueryMsg};\n# use crate::state::ADMINS;\n# use cosmwasm_std::{\n# to_binary, Binary, Deps, DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n# };\n# # pub fn instantiate(\n# deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# msg: InstantiateMsg,\n# ) -> StdResult {\n# let admins: StdResult> = msg\n# .admins\n# .into_iter()\n# .map(|addr| deps.api.addr_validate(&addr))\n# .collect();\n# ADMINS.save(deps.storage, &admins?)?;\n# # Ok(Response::new())\n# }\n# # pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult {\n# use QueryMsg::*;\n# # match msg {\n# Greet {} => to_binary(&query::greet()?),\n# AdminsList {} => to_binary(&query::admins_list(deps)?),\n# }\n# }\n# # #[allow(dead_code)]\n# pub fn execute(_deps: DepsMut, _env: Env, _info: MessageInfo, _msg: Empty) -> StdResult {\n# unimplemented!()\n# }\n# # mod query {\n# use super::*;\n# # pub fn greet() -> StdResult {\n# let resp = GreetResp {\n# message: \"Hello World\".to_owned(),\n# };\n# # Ok(resp)\n# }\n# # pub fn admins_list(deps: Deps) -> StdResult {\n# let admins = ADMINS.load(deps.storage)?;\n# let resp = AdminsListResp { admins };\n# Ok(resp)\n# }\n# }\n# #[cfg(test)]\nmod tests {\n# use cosmwasm_std::Addr;\n# use cw_multi_test::{App, ContractWrapper, Executor};\n# # use super::*;\n# #[test] fn instantiation() { let mut app = App::default(); let code = ContractWrapper::new(execute, instantiate, query); let code_id = app.store_code(Box::new(code)); let addr = app .instantiate_contract( code_id, Addr::unchecked(\"owner\"), &InstantiateMsg { admins: vec![] }, &[], \"Contract\", None, ) .unwrap(); let resp: AdminsListResp = app .wrap() .query_wasm_smart(addr, &QueryMsg::AdminsList {}) .unwrap(); assert_eq!(resp, AdminsListResp { admins: vec![] }); let addr = app .instantiate_contract( code_id, Addr::unchecked(\"owner\"), &InstantiateMsg { admins: vec![\"admin1\".to_owned(), \"admin2\".to_owned()], }, &[], \"Contract 2\", None, ) .unwrap(); let resp: AdminsListResp = app .wrap() .query_wasm_smart(addr, &QueryMsg::AdminsList {}) .unwrap(); assert_eq!( resp, AdminsListResp { admins: vec![Addr::unchecked(\"admin1\"), Addr::unchecked(\"admin2\")], } ); }\n# # #[test]\n# fn greet_query() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: GreetResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::Greet {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# GreetResp {\n# message: \"Hello World\".to_owned()\n# }\n# );\n# }\n} The test is simple - instantiate the contract twice with different initial admins, and ensure the query result is proper each time. This is often the way we test our contract - we execute bunch o messages on the contract, and then we query it for some data, verifying if query responses are like expected. We are doing a pretty good job developing our contract. Now it is time to use the state and allow for some executions.","breadcrumbs":"Basics » Contract state » Testing state","id":"21","title":"Testing state"},"22":{"body":"We went through instantiate and query messages. It is finally time to introduce the last basic entry point - the execute messages. It is similar to what we have done so far that I expect this to be just chilling and revisiting our knowledge. I encourage you to try implementing what I am describing here on your own as an exercise - without checking out the source code. The idea of the contract will be easy - every contract admin would be eligible to call two execute messages: AddMembers message would allow the admin to add another address to the admin's list Leave would allow and admin to remove himself from the list Not too complicated. Let's go coding. Start with defining messages: # use cosmwasm_std::Addr;\n# use serde::{Deserialize, Serialize};\n# # #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\n# pub struct InstantiateMsg {\n# pub admins: Vec,\n# }\n# #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\npub enum ExecuteMsg { AddMembers { admins: Vec }, Leave {},\n}\n# # #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\n# pub struct GreetResp {\n# pub message: String,\n# }\n# # #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\n# pub struct AdminsListResp {\n# pub admins: Vec,\n# }\n# # #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\n# pub enum QueryMsg {\n# Greet {},\n# AdminsList {},\n# } And implement entry point: use crate::msg::{AdminsListResp, ExecuteMsg, GreetResp, InstantiateMsg, QueryMsg};\n# use crate::state::ADMINS;\n# use cosmwasm_std::{to_binary, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};\n# # pub fn instantiate(\n# deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# msg: InstantiateMsg,\n# ) -> StdResult {\n# let admins: StdResult> = msg\n# .admins\n# .into_iter()\n# .map(|addr| deps.api.addr_validate(&addr))\n# .collect();\n# ADMINS.save(deps.storage, &admins?)?;\n# # Ok(Response::new())\n# }\n# # pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult {\n# use QueryMsg::*;\n# # match msg {\n# Greet {} => to_binary(&query::greet()?),\n# AdminsList {} => to_binary(&query::admins_list(deps)?),\n# }\n# } #[allow(dead_code)]\npub fn execute( deps: DepsMut, _env: Env, info: MessageInfo, msg: ExecuteMsg,\n) -> StdResult { use ExecuteMsg::*; match msg { AddMembers { admins } => exec::add_members(deps, info, admins), Leave {} => exec::leave(deps, info), }\n} mod exec { use cosmwasm_std::StdError; use super::*; pub fn add_members( deps: DepsMut, info: MessageInfo, admins: Vec, ) -> StdResult { let mut curr_admins = ADMINS.load(deps.storage)?; if !curr_admins.contains(&info.sender) { return Err(StdError::generic_err(\"Unauthorised access\")); } let admins: StdResult> = admins .into_iter() .map(|addr| deps.api.addr_validate(&addr)) .collect(); curr_admins.append(&mut admins?); ADMINS.save(deps.storage, &curr_admins)?; Ok(Response::new()) } pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult { ADMINS.update(deps.storage, move |admins| -> StdResult<_> { let admins = admins .into_iter() .filter(|admin| *admin != info.sender) .collect(); Ok(admins) })?; Ok(Response::new()) }\n}\n# # mod query {\n# use super::*;\n# # pub fn greet() -> StdResult {\n# let resp = GreetResp {\n# message: \"Hello World\".to_owned(),\n# };\n# # Ok(resp)\n# }\n# # pub fn admins_list(deps: Deps) -> StdResult {\n# let admins = ADMINS.load(deps.storage)?;\n# let resp = AdminsListResp { admins };\n# Ok(resp)\n# }\n# }\n# # #[cfg(test)]\n# mod tests {\n# use cosmwasm_std::Addr;\n# use cw_multi_test::{App, ContractWrapper, Executor};\n# # use crate::msg::AdminsListResp;\n# # use super::*;\n# # #[test]\n# fn instantiation() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: AdminsListResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::AdminsList {})\n# .unwrap();\n# # assert_eq!(resp, AdminsListResp { admins: vec![] });\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![\"admin1\".to_owned(), \"admin2\".to_owned()],\n# },\n# &[],\n# \"Contract 2\",\n# None,\n# )\n# .unwrap();\n# # let resp: AdminsListResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::AdminsList {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# AdminsListResp {\n# admins: vec![Addr::unchecked(\"admin1\"), Addr::unchecked(\"admin2\")],\n# }\n# );\n# }\n# # #[test]\n# fn greet_query() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: GreetResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::Greet {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# GreetResp {\n# message: \"Hello World\".to_owned()\n# }\n# );\n# }\n# } The entry point itself also has to be created in src/lib.rs: use cosmwasm_std::{entry_point, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};\nuse msg::{ExecuteMsg, InstantiateMsg, QueryMsg}; mod contract;\nmod msg;\nmod state; #[entry_point]\npub fn instantiate( deps: DepsMut, env: Env, info: MessageInfo, msg: InstantiateMsg,\n) -> StdResult { contract::instantiate(deps, env, info, msg)\n} #[entry_point]\npub fn execute(deps: DepsMut, env: Env, info: MessageInfo, msg: ExecuteMsg) -> StdResult { contract::execute(deps, env, info, msg)\n} #[entry_point]\npub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult { contract::query(deps, env, msg)\n} There are a couple of new things, but nothing significant. First is how do I reach the message sender to verify he is an admin or remove him from the list - I used the info.sender field of MessageInfo, which is how it looks like - the member. As the message is always sent from the proper address, the sender is already of the Addr type - no need to validate it. Another new thing is the update function on an Item - it makes a read and update of an entity potentially more efficient. It is possible to do it by reading admins first, then updating and storing the result. You probably noticed that when working with Item, we always assume something is there. But nothing forces us to initialize the ADMINS value on instantiation! So what happens there? Well, both load and update functions would return an error. But there is a may_load function, which returns StdResult> - it would return Ok(None) in case of empty storage. There is even a possibility to remove an existing item from storage with the remove function. One thing to improve is error handling. While validating the sender to be admin, we are returning some arbitrary string as an error. We can do better.","breadcrumbs":"Basics » Execution messages » Execution messages","id":"22","title":"Execution messages"},"23":{"body":"In our contract, we now have an error situation when a user tries to execute AddMembers not being an admin himself. There is no proper error case in StdError to report this situation, so we have to return a generic error with a message. It is not the best approach. For error reporting, we encourage using thiserror crate. Start with updating your dependencies: [package]\nname = \"contract\"\nversion = \"0.1.0\"\nedition = \"2021\" [lib]\ncrate-type = [\"cdylib\"] [dependencies]\ncosmwasm-std = { version = \"1.0.0-beta8\", features = [\"staking\"] }\nserde = { version = \"1.0.103\", default-features = false, features = [\"derive\"] }\ncw-storage-plus = \"0.13.4\"\nthiserror = \"1\" [dev-dependencies]\ncw-multi-test = \"0.13.4\" Now we define an error type in src/error.rs: use cosmwasm_std::{Addr, StdError};\nuse thiserror::Error; #[derive(Error, Debug, PartialEq)]\npub enum ContractError { #[error(\"{0}\")] StdError(#[from] StdError), #[error(\"{sender} is not contract admin\")] Unauthorized { sender: Addr },\n} We also need to add the new module to src/lib.rs: # use cosmwasm_std::{entry_point, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};\n# use msg::{ExecuteMsg, InstantiateMsg, QueryMsg};\n# mod contract;\nmod error;\nmod msg;\nmod state;\n# # #[entry_point]\n# pub fn instantiate(\n# deps: DepsMut,\n# env: Env,\n# info: MessageInfo,\n# msg: InstantiateMsg,\n# ) -> StdResult {\n# contract::instantiate(deps, env, info, msg)\n# }\n# # #[entry_point]\n# pub fn execute(deps: DepsMut, env: Env, info: MessageInfo, msg: ExecuteMsg) -> StdResult {\n# contract::execute(deps, env, info, msg)\n# }\n# # #[entry_point]\n# pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult {\n# contract::query(deps, env, msg)\n# } Using thiserror we define errors like a simple enum, and the crate ensures that the type implements std::error::Error trait. A very nice feature of this crate is the inline definition of Display trait by an #[error] attribute. Also, another helpful thing is the #[from] attribute, which automatically generates proper From implementation, so it is easy to use ? operator with thiserror types. Now update the execute endpoint to use our new error type: use crate::error::ContractError;\nuse crate::msg::{AdminsListResp, ExecuteMsg, GreetResp, InstantiateMsg, QueryMsg};\n# use crate::state::ADMINS;\n# use cosmwasm_std::{to_binary, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};\n# # pub fn instantiate(\n# deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# msg: InstantiateMsg,\n# ) -> StdResult {\n# let admins: StdResult> = msg\n# .admins\n# .into_iter()\n# .map(|addr| deps.api.addr_validate(&addr))\n# .collect();\n# ADMINS.save(deps.storage, &admins?)?;\n# # Ok(Response::new())\n# }\n# # pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult {\n# use QueryMsg::*;\n# # match msg {\n# Greet {} => to_binary(&query::greet()?),\n# AdminsList {} => to_binary(&query::admins_list(deps)?),\n# }\n# } pub fn execute( deps: DepsMut, _env: Env, info: MessageInfo, msg: ExecuteMsg,\n) -> Result { use ExecuteMsg::*; match msg { AddMembers { admins } => exec::add_members(deps, info, admins), Leave {} => exec::leave(deps, info).map_err(Into::into), }\n} mod exec { use super::*; pub fn add_members( deps: DepsMut, info: MessageInfo, admins: Vec, ) -> Result { let mut curr_admins = ADMINS.load(deps.storage)?; if !curr_admins.contains(&info.sender) { return Err(ContractError::Unauthorized { sender: info.sender, }); } let admins: StdResult> = admins .into_iter() .map(|addr| deps.api.addr_validate(&addr)) .collect(); curr_admins.append(&mut admins?); ADMINS.save(deps.storage, &curr_admins)?; Ok(Response::new()) }\n# # pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult {\n# ADMINS.update(deps.storage, move |admins| -> StdResult<_> {\n# let admins = admins\n# .into_iter()\n# .filter(|admin| *admin != info.sender)\n# .collect();\n# Ok(admins)\n# })?;\n# # Ok(Response::new())\n# }\n}\n#\n# mod query {\n# use super::*;\n# # pub fn greet() -> StdResult {\n# let resp = GreetResp {\n# message: \"Hello World\".to_owned(),\n# };\n# # Ok(resp)\n# }\n# # pub fn admins_list(deps: Deps) -> StdResult {\n# let admins = ADMINS.load(deps.storage)?;\n# let resp = AdminsListResp { admins };\n# Ok(resp)\n# }\n# }\n# # #[cfg(test)]\n# mod tests {\n# use cosmwasm_std::Addr;\n# use cw_multi_test::{App, ContractWrapper, Executor};\n# # use crate::msg::AdminsListResp;\n# # use super::*;\n# # #[test]\n# fn instantiation() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: AdminsListResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::AdminsList {})\n# .unwrap();\n# # assert_eq!(resp, AdminsListResp { admins: vec![] });\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![\"admin1\".to_owned(), \"admin2\".to_owned()],\n# },\n# &[],\n# \"Contract 2\",\n# None,\n# )\n# .unwrap();\n# # let resp: AdminsListResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::AdminsList {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# AdminsListResp {\n# admins: vec![Addr::unchecked(\"admin1\"), Addr::unchecked(\"admin2\")],\n# }\n# );\n# }\n# # #[test]\n# fn greet_query() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: GreetResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::Greet {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# GreetResp {\n# message: \"Hello World\".to_owned()\n# }\n# );\n# }\n# } The entry point return type also has to be updated: # use cosmwasm_std::{entry_point, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};\nuse error::ContractError;\n# use msg::{ExecuteMsg, InstantiateMsg, QueryMsg}; # mod contract;\n# mod error;\n# mod msg;\n# mod state;\n# # #[entry_point]\n# pub fn instantiate(\n# deps: DepsMut,\n# env: Env,\n# info: MessageInfo,\n# msg: InstantiateMsg,\n# ) -> StdResult {\n# contract::instantiate(deps, env, info, msg)\n# }\n# #[entry_point]\npub fn execute( deps: DepsMut, env: Env, info: MessageInfo, msg: ExecuteMsg,\n) -> Result { contract::execute(deps, env, info, msg)\n}\n# # #[entry_point]\n# pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult {\n# contract::query(deps, env, msg)\n# }","breadcrumbs":"Basics » Execution messages » Error handling","id":"23","title":"Error handling"},"24":{"body":"Using proper custom error type has one nice upside - multi-test is maintaining error type using the anyhow crate. It is a sibling of thiserror, designed to implement type-erased errors in a way that allows getting the original error back. Let's write a test that verifies that a non-admin cannot add himself to a list: # use crate::error::ContractError;\n# use crate::msg::{AdminsListResp, ExecuteMsg, GreetResp, InstantiateMsg, QueryMsg};\n# use crate::state::ADMINS;\n# use cosmwasm_std::{to_binary, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};\n# # pub fn instantiate(\n# deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# msg: InstantiateMsg,\n# ) -> StdResult {\n# let admins: StdResult> = msg\n# .admins\n# .into_iter()\n# .map(|addr| deps.api.addr_validate(&addr))\n# .collect();\n# ADMINS.save(deps.storage, &admins?)?;\n# # Ok(Response::new())\n# }\n# # pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult {\n# use QueryMsg::*;\n# # match msg {\n# Greet {} => to_binary(&query::greet()?),\n# AdminsList {} => to_binary(&query::admins_list(deps)?),\n# }\n# }\n# # pub fn execute(\n# deps: DepsMut,\n# _env: Env,\n# info: MessageInfo,\n# msg: ExecuteMsg,\n# ) -> Result {\n# use ExecuteMsg::*;\n# # match msg {\n# AddMembers { admins } => exec::add_members(deps, info, admins),\n# Leave {} => exec::leave(deps, info).map_err(Into::into),\n# }\n# }\n# # mod exec {\n# use super::*;\n# # pub fn add_members(\n# deps: DepsMut,\n# info: MessageInfo,\n# admins: Vec,\n# ) -> Result {\n# let mut curr_admins = ADMINS.load(deps.storage)?;\n# if !curr_admins.contains(&info.sender) {\n# return Err(ContractError::Unauthorized {\n# sender: info.sender,\n# });\n# }\n# # let admins: StdResult> = admins\n# .into_iter()\n# .map(|addr| deps.api.addr_validate(&addr))\n# .collect();\n# # curr_admins.append(&mut admins?);\n# ADMINS.save(deps.storage, &curr_admins)?;\n# # Ok(Response::new())\n# }\n# # pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult {\n# ADMINS.update(deps.storage, move |admins| -> StdResult<_> {\n# let admins = admins\n# .into_iter()\n# .filter(|admin| *admin != info.sender)\n# .collect();\n# Ok(admins)\n# })?;\n# # Ok(Response::new())\n# }\n# }\n# # mod query {\n# use super::*;\n# # pub fn greet() -> StdResult {\n# let resp = GreetResp {\n# message: \"Hello World\".to_owned(),\n# };\n# # Ok(resp)\n# }\n# # pub fn admins_list(deps: Deps) -> StdResult {\n# let admins = ADMINS.load(deps.storage)?;\n# let resp = AdminsListResp { admins };\n# Ok(resp)\n# }\n# }\n# #[cfg(test)]\nmod tests {\n# use cosmwasm_std::Addr;\n# use cw_multi_test::{App, ContractWrapper, Executor};\n# # use crate::msg::AdminsListResp;\n# # use super::*;\n# # #[test]\n# fn instantiation() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: AdminsListResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::AdminsList {})\n# .unwrap();\n# # assert_eq!(resp, AdminsListResp { admins: vec![] });\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![\"admin1\".to_owned(), \"admin2\".to_owned()],\n# },\n# &[],\n# \"Contract 2\",\n# None,\n# )\n# .unwrap();\n# # let resp: AdminsListResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::AdminsList {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# AdminsListResp {\n# admins: vec![Addr::unchecked(\"admin1\"), Addr::unchecked(\"admin2\")],\n# }\n# );\n# }\n# # #[test]\n# fn greet_query() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: GreetResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::Greet {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# GreetResp {\n# message: \"Hello World\".to_owned()\n# }\n# );\n# }\n# #[test] fn unauthorized() { let mut app = App::default(); let code = ContractWrapper::new(execute, instantiate, query); let code_id = app.store_code(Box::new(code)); let addr = app .instantiate_contract( code_id, Addr::unchecked(\"owner\"), &InstantiateMsg { admins: vec![] }, &[], \"Contract\", None, ) .unwrap(); let err = app .execute_contract( Addr::unchecked(\"user\"), addr, &ExecuteMsg::AddMembers { admins: vec![\"user\".to_owned()], }, &[], ) .unwrap_err(); assert_eq!( ContractError::Unauthorized { sender: Addr::unchecked(\"user\") }, err.downcast().unwrap() ); }\n} Executing a contract is very similar to any other call - we use an execute_contract function. As the execution may fail, we get an error type out of this call, but instead of calling unwrap to extract a value out of it, we expect an error to occur - this is the purpose of the unwrap_err call. Now, as we have an error value, we can check if it matches what we expected with an assert_eq!. There is a slight complication - the error returned from execute_contract is an anyhow::Error error, but we expect it to be a ContractError. Fortunately, as I said before, anyhow errors can recover their original type using the downcast function. The unwrap right after it is needed because downcasting may fail. The reason is that downcast doesn't magically know the type kept in the underlying error. It deduces it by some context - here, it knows we expect it to be a ContractError, because of being compared to it - type elision miracles. But if the underlying error would not be a ContractError, then unwrap would panic. We just created a simple failure test for execution, but it is not enough to claim the contract is production-ready. All reasonable ok-cases should be covered for that. I encourage you to create some tests and experiment with them as an exercise after this chapter.","breadcrumbs":"Basics » Execution messages » Custom error and multi-test","id":"24","title":"Custom error and multi-test"},"25":{"body":"The only way our contract can communicate to the world, for now, is by queries. Smart contracts are passive - they cannot invoke any action by themselves. They can do it only as a reaction to a call. But if you tried playing with wasmd, you know that execution on the blockchain can return some metadata. There are two things the contract can return to the caller: events and data. Events are something produced by almost every real-life smart contract. In contrast, data is rarely used, designed for contract-to-contract communication.","breadcrumbs":"Basics » Events, attributes and data » Events attributes and data","id":"25","title":"Events attributes and data"},"26":{"body":"As an example, we would add an event admin_added emitted by our contract on the execution of AddMembers: # use crate::error::ContractError;\n# use crate::msg::{AdminsListResp, ExecuteMsg, GreetResp, InstantiateMsg, QueryMsg};\n# use crate::state::ADMINS;\nuse cosmwasm_std::{ to_binary, Binary, Deps, DepsMut, Env, Event, MessageInfo, Response, StdResult,\n}; # pub fn instantiate(\n# deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# msg: InstantiateMsg,\n# ) -> StdResult {\n# let admins: StdResult> = msg\n# .admins\n# .map(|addr| deps.api.addr_validate(&addr))\n# .collect();\n# ADMINS.save(deps.storage, &admins?)?;\n# # Ok(Response::new())\n# }\n# # pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult {\n# use QueryMsg::*;\n# # match msg {\n# Greet {} => to_binary(&query::greet()?),\n# AdminsList {} => to_binary(&query::admins_list(deps)?),\n# }\n# }\n# # pub fn execute(\n# deps: DepsMut,\n# _env: Env,\n# info: MessageInfo,\n# msg: ExecuteMsg,\n# ) -> Result {\n# use ExecuteMsg::*;\n# # match msg {\n# AddMembers { admins } => exec::add_members(deps, info, admins),\n# Leave {} => exec::leave(deps, info).map_err(Into::into),\n# }\n# }\n# mod exec {\n# use super::*;\n# pub fn add_members( deps: DepsMut, info: MessageInfo, admins: Vec, ) -> Result { let mut curr_admins = ADMINS.load(deps.storage)?; if !curr_admins.contains(&info.sender) { return Err(ContractError::Unauthorized { sender: info.sender, }); } let events = admins .iter() .map(|admin| Event::new(\"admin_added\").add_attribute(\"addr\", admin)); let resp = Response::new() .add_events(events) .add_attribute(\"action\", \"add_members\") .add_attribute(\"added_count\", admins.len().to_string()); let admins: StdResult> = admins .into_iter() .map(|addr| deps.api.addr_validate(&addr)) .collect(); curr_admins.append(&mut admins?); ADMINS.save(deps.storage, &curr_admins)?; Ok(resp) }\n# # pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult {\n# ADMINS.update(deps.storage, move |admins| -> StdResult<_> {\n# let admins = admins\n# .into_iter()\n# .filter(|admin| *admin != info.sender)\n# .collect();\n# Ok(admins)\n# })?;\n# # Ok(Response::new())\n# }\n}\n# # mod query {\n# use super::*;\n# # pub fn greet() -> StdResult {\n# let resp = GreetResp {\n# message: \"Hello World\".to_owned(),\n# };\n# # Ok(resp)\n# }\n# # pub fn admins_list(deps: Deps) -> StdResult {\n# let admins = ADMINS.load(deps.storage)?;\n# let resp = AdminsListResp { admins };\n# Ok(resp)\n# }\n# }\n# # #[cfg(test)]\n# mod tests {\n# use cosmwasm_std::Addr;\n# use cw_multi_test::{App, ContractWrapper, Executor};\n# # use crate::msg::AdminsListResp;\n# # use super::*;\n# # #[test]\n# fn instantiation() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: AdminsListResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::AdminsList {})\n# .unwrap();\n# # assert_eq!(resp, AdminsListResp { admins: vec![] });\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![\"admin1\".to_owned(), \"admin2\".to_owned()],\n# },\n# &[],\n# \"Contract 2\",\n# None,\n# )\n# .unwrap();\n# # let resp: AdminsListResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::AdminsList {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# AdminsListResp {\n# admins: vec![Addr::unchecked(\"admin1\"), Addr::unchecked(\"admin2\")],\n# }\n# );\n# }\n# # #[test]\n# fn greet_query() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: GreetResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::Greet {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# GreetResp {\n# message: \"Hello World\".to_owned()\n# }\n# );\n# }\n# # #[test]\n# fn unauthorized() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let err = app\n# .execute_contract(\n# Addr::unchecked(\"user\"),\n# addr,\n# &ExecuteMsg::AddMembers {\n# admins: vec![\"user\".to_owned()],\n# },\n# &[],\n# )\n# .unwrap_err();\n# # assert_eq!(\n# ContractError::Unauthorized {\n# sender: Addr::unchecked(\"user\")\n# },\n# err.downcast().unwrap()\n# );\n# }\n# } An event is built from two things: an event type provided in the new function and attributes. Attributes are added to an event with the add_attributes or the add_attribute call. Attributes are key-value pairs. Because an event cannot contain any list, to achieve reporting multiple similar actions taking place, we need to emit multiple small events instead of a collective one. Events are emitted by adding them to the response with add_event or add_events call. Additionally, there is a possibility to add attributes directly to the response. It is just sugar. By default, every execution emits a standard \"wasm\" event. Adding attributes to the result adds them to the default event. We can check if events are properly emitted by contract. It is not always done, as it is much of boilerplate in test, but events are, generally, more like logs - not necessarily considered main contract logic. Let's now write single test checking if execution emits events: # use crate::error::ContractError;\n# use crate::msg::{AdminsListResp, ExecuteMsg, GreetResp, InstantiateMsg, QueryMsg};\n# use crate::state::ADMINS;\n# use cosmwasm_std::{\n# to_binary, Binary, Deps, DepsMut, Env, Event, MessageInfo, Response, StdResult,\n# };\n# # pub fn instantiate(\n# deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# msg: InstantiateMsg,\n# ) -> StdResult {\n# let admins: StdResult> = msg\n# .admins\n# .into_iter()\n# .map(|addr| deps.api.addr_validate(&addr))\n# .collect();\n# ADMINS.save(deps.storage, &admins?)?;\n# # Ok(Response::new())\n# }\n# # pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult {\n# use QueryMsg::*;\n# # match msg {\n# Greet {} => to_binary(&query::greet()?),\n# AdminsList {} => to_binary(&query::admins_list(deps)?),\n# }\n# }\n# # pub fn execute(\n# deps: DepsMut,\n# _env: Env,\n# info: MessageInfo,\n# msg: ExecuteMsg,\n# ) -> Result {\n# use ExecuteMsg::*;\n# # match msg {\n# AddMembers { admins } => exec::add_members(deps, info, admins),\n# Leave {} => exec::leave(deps, info).map_err(Into::into),\n# }\n# }\n# # mod exec {\n# use super::*;\n# # pub fn add_members(\n# deps: DepsMut,\n# info: MessageInfo,\n# admins: Vec,\n# ) -> Result {\n# let mut curr_admins = ADMINS.load(deps.storage)?;\n# if !curr_admins.contains(&info.sender) {\n# return Err(ContractError::Unauthorized {\n# sender: info.sender,\n# });\n# }\n# # let events = admins\n# .iter()\n# .map(|admin| Event::new(\"admin_added\").add_attribute(\"addr\", admin));\n# let resp = Response::new()\n# .add_events(events)\n# .add_attribute(\"action\", \"add_members\")\n# .add_attribute(\"added_count\", admins.len().to_string());\n# # let admins: StdResult> = admins\n# .into_iter()\n# .map(|addr| deps.api.addr_validate(&addr))\n# .collect();\n# # curr_admins.append(&mut admins?);\n# ADMINS.save(deps.storage, &curr_admins)?;\n# # Ok(resp)\n# }\n# # pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult {\n# ADMINS.update(deps.storage, move |admins| -> StdResult<_> {\n# let admins = admins\n# .into_iter()\n# .filter(|admin| *admin != info.sender)\n# .collect();\n# Ok(admins)\n# })?;\n# # Ok(Response::new())\n# }\n# }\n# # mod query {\n# use super::*;\n# # pub fn greet() -> StdResult {\n# let resp = GreetResp {\n# message: \"Hello World\".to_owned(),\n# };\n# # Ok(resp)\n# }\n# # pub fn admins_list(deps: Deps) -> StdResult {\n# let admins = ADMINS.load(deps.storage)?;\n# let resp = AdminsListResp { admins };\n# Ok(resp)\n# }\n# }\n# #[cfg(test)]\nmod tests {\n# use cosmwasm_std::Addr;\n# use cw_multi_test::{App, ContractWrapper, Executor};\n# # use crate::msg::AdminsListResp;\n# # use super::*;\n# # #[test]\n# fn instantiation() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: AdminsListResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::AdminsList {})\n# .unwrap();\n# # assert_eq!(resp, AdminsListResp { admins: vec![] });\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![\"admin1\".to_owned(), \"admin2\".to_owned()],\n# },\n# &[],\n# \"Contract 2\",\n# None,\n# )\n# .unwrap();\n# # let resp: AdminsListResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::AdminsList {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# AdminsListResp {\n# admins: vec![Addr::unchecked(\"admin1\"), Addr::unchecked(\"admin2\")],\n# }\n# );\n# }\n# # #[test]\n# fn greet_query() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: GreetResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::Greet {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# GreetResp {\n# message: \"Hello World\".to_owned()\n# }\n# );\n# }\n# # #[test]\n# fn unauthorized() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let err = app\n# .execute_contract(\n# Addr::unchecked(\"user\"),\n# addr,\n# &ExecuteMsg::AddMembers {\n# admins: vec![\"user\".to_owned()],\n# },\n# &[],\n# )\n# .unwrap_err();\n# # assert_eq!(\n# ContractError::Unauthorized {\n# sender: Addr::unchecked(\"user\")\n# },\n# err.downcast().unwrap()\n# );\n# }\n# #[test] fn add_members() { let mut app = App::default(); let code = ContractWrapper::new(execute, instantiate, query); let code_id = app.store_code(Box::new(code)); let addr = app .instantiate_contract( code_id, Addr::unchecked(\"owner\"), &InstantiateMsg { admins: vec![\"owner\".to_owned()], }, &[], \"Contract\", None, ) .unwrap(); let resp = app .execute_contract( Addr::unchecked(\"owner\"), addr, &ExecuteMsg::AddMembers { admins: vec![\"user\".to_owned()], }, &[], ) .unwrap(); let wasm = resp.events.iter().find(|ev| ev.ty == \"wasm\").unwrap(); assert_eq!( wasm.attributes .iter() .find(|attr| attr.key == \"action\") .unwrap() .value, \"add_members\" ); assert_eq!( wasm.attributes .iter() .find(|attr| attr.key == \"added_count\") .unwrap() .value, \"1\" ); let admin_added: Vec<_> = resp .events .iter() .filter(|ev| ev.ty == \"wasm-admin_added\") .collect(); assert_eq!(admin_added.len(), 1); assert_eq!( admin_added[0] .attributes .iter() .find(|attr| attr.key == \"addr\") .unwrap() .value, \"user\" ); }\n} As you can see, testing events on a simple test made it clunky. First of all, every string is heavily string-based - a lack of type control makes writing such tests difficult. Also, even types are prefixed with \"wasm-\" - it may not be a huge problem, but it doesn't clarify verification. But the problem is, how layered events structure are, which makes verifying them tricky. Also, the \"wasm\" event is particularly tricky, as it contains an implied attribute - _contract_addr containing an address called a contract. My general rule is - do not test emitted events unless some logic depends on them.","breadcrumbs":"Basics » Events, attributes and data » Returning events","id":"26","title":"Returning events"},"27":{"body":"Besides events, any smart contract execution may produce a data object. In contrast to events, data can be structured. It makes it a way better choice to perform any communication logic relies on. On the other hand, it turns out it is very rarely helpful outside of contract-to-contract communication. Data is always only one single object on the response, which is set using the set_data function. Because of its low usefulness in a single contract environment, we will not spend time on it right now - an example of it will be covered later when contract-to-contract communication will be discussed. Until then, it is just helpful to know such an entity exists.","breadcrumbs":"Basics » Events, attributes and data » Data","id":"27","title":"Data"},"28":{"body":"When you hear smart contracts, you think blockchain. When you hear blockchain, you often think of cryptocurrencies. It is not the same, but crypto assets, or as we often call them: tokens, are very closely connected to the blockchain. CosmWasm has a notion of a native token. Native tokens are assets managed by the blockchain core instead of smart contracts. Often such assets have some special meaning, like being used for paying gas fees or staking for consensus algorithm, but can be just arbitrary assets. Native tokens are assigned to their owners but can be transferred by their nature. Everything had an address in the blockchain is eligible to have its native tokens. As a consequence - tokens can be assigned to smart contracts! Every message sent to the smart contract can have some funds sent with it. In this chapter, we will take advantage of that and create a way to reward hard work performed by admins. We will create a new message - Donate, which will be used by anyone to donate some funds to admins, divided equally.","breadcrumbs":"Basics » Dealing with funds » Dealing with funds","id":"28","title":"Dealing with funds"},"29":{"body":"Traditionally we need to prepare our messages. We need to create a new ExecuteMsg variant, but we will also modify the Instantiate message a bit - we need to have some way of defining the name of a native token we would use for donations. It would be possible to allow users to send any tokens they want, but we want to simplify things for now. # use cosmwasm_std::Addr;\n# use serde::{Deserialize, Serialize};\n# #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\npub struct InstantiateMsg { pub admins: Vec, pub donation_denom: String,\n} #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\npub enum ExecuteMsg { AddMembers { admins: Vec }, Leave {}, Donate {},\n}\n# # #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\n# pub struct GreetResp {\n# pub message: String,\n# }\n# # #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\n# pub struct AdminsListResp {\n# pub admins: Vec,\n# }\n# # #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\n# pub enum QueryMsg {\n# Greet {},\n# AdminsList {},\n# } We also need to add a new state part, to keep the donation_denom: use cosmwasm_std::Addr;\nuse cw_storage_plus::Item; pub const ADMINS: Item> = Item::new(\"admins\");\npub const DONATION_DENOM: Item = Item::new(\"donation_denom\"); And instantiate it properly: # use crate::error::ContractError;\n# use crate::msg::{AdminsListResp, ExecuteMsg, GreetResp, InstantiateMsg, QueryMsg};\nuse crate::state::{ADMINS, DONATION_DENOM};\n# use cosmwasm_std::{\n# to_binary, Binary, Deps, DepsMut, Env, Event, MessageInfo, Response, StdResult,\n# }; pub fn instantiate( deps: DepsMut, _env: Env, _info: MessageInfo, msg: InstantiateMsg,\n) -> StdResult { let admins: StdResult> = msg .admins .into_iter() .map(|addr| deps.api.addr_validate(&addr)) .collect(); ADMINS.save(deps.storage, &admins?)?; DONATION_DENOM.save(deps.storage, &msg.donation_denom)?; Ok(Response::new())\n}\n# # pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult {\n# use QueryMsg::*;\n# # match msg {\n# Greet {} => to_binary(&query::greet()?),\n# AdminsList {} => to_binary(&query::admins_list(deps)?),\n# }\n# }\n# # pub fn execute(\n# deps: DepsMut,\n# _env: Env,\n# info: MessageInfo,\n# msg: ExecuteMsg,\n# ) -> Result {\n# use ExecuteMsg::*;\n# # match msg {\n# AddMembers { admins } => exec::add_members(deps, info, admins),\n# Leave {} => exec::leave(deps, info).map_err(Into::into),\n# }\n# }\n# # mod exec {\n# use super::*;\n# # pub fn add_members(\n# deps: DepsMut,\n# info: MessageInfo,\n# admins: Vec,\n# ) -> Result {\n# let mut curr_admins = ADMINS.load(deps.storage)?;\n# if !curr_admins.contains(&info.sender) {\n# return Err(ContractError::Unauthorized {\n# sender: info.sender,\n# });\n# }\n# # let events = admins\n# .iter()\n# .map(|admin| Event::new(\"admin_added\").add_attribute(\"addr\", admin));\n# let resp = Response::new()\n# .add_events(events)\n# .add_attribute(\"action\", \"add_members\")\n# .add_attribute(\"added_count\", admins.len().to_string());\n# # let admins: StdResult> = admins\n# .into_iter()\n# .map(|addr| deps.api.addr_validate(&addr))\n# .collect();\n# # curr_admins.append(&mut admins?);\n# ADMINS.save(deps.storage, &curr_admins)?;\n# # Ok(resp)\n# }\n# # pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult {\n# ADMINS.update(deps.storage, move |admins| -> StdResult<_> {\n# let admins = admins\n# .into_iter()\n# .filter(|admin| *admin != info.sender)\n# .collect();\n# Ok(admins)\n# })?;\n# # Ok(Response::new())\n# }\n# }\n# # mod query {\n# use super::*;\n# # pub fn greet() -> StdResult {\n# let resp = GreetResp {\n# message: \"Hello World\".to_owned(),\n# };\n# # Ok(resp)\n# }\n# # pub fn admins_list(deps: Deps) -> StdResult {\n# let admins = ADMINS.load(deps.storage)?;\n# let resp = AdminsListResp { admins };\n# Ok(resp)\n# }\n# }\n# # #[cfg(test)]\n# mod tests {\n# use cosmwasm_std::Addr;\n# use cw_multi_test::{App, ContractWrapper, Executor};\n# # use crate::msg::AdminsListResp;\n# # use super::*;\n# # #[test]\n# fn instantiation() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: AdminsListResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::AdminsList {})\n# .unwrap();\n# # assert_eq!(resp, AdminsListResp { admins: vec![] });\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![\"admin1\".to_owned(), \"admin2\".to_owned()],\n# },\n# &[],\n# \"Contract 2\",\n# None,\n# )\n# .unwrap();\n# # let resp: AdminsListResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::AdminsList {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# AdminsListResp {\n# admins: vec![Addr::unchecked(\"admin1\"), Addr::unchecked(\"admin2\")],\n# }\n# );\n# }\n# # #[test]\n# fn greet_query() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: GreetResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::Greet {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# GreetResp {\n# message: \"Hello World\".to_owned()\n# }\n# );\n# }\n# # #[test]\n# fn unauthorized() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg { admins: vec![] },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let err = app\n# .execute_contract(\n# Addr::unchecked(\"user\"),\n# addr,\n# &ExecuteMsg::AddMembers {\n# admins: vec![\"user\".to_owned()],\n# },\n# &[],\n# )\n# .unwrap_err();\n# # assert_eq!(\n# ContractError::Unauthorized {\n# sender: Addr::unchecked(\"user\")\n# },\n# err.downcast().unwrap()\n# );\n# }\n# # #[test]\n# fn add_members() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![\"owner\".to_owned()],\n# },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp = app\n# .execute_contract(\n# Addr::unchecked(\"owner\"),\n# addr,\n# &ExecuteMsg::AddMembers {\n# admins: vec![\"user\".to_owned()],\n# },\n# &[],\n# )\n# .unwrap();\n# # let wasm = resp.events.iter().find(|ev| ev.ty == \"wasm\").unwrap();\n# assert_eq!(\n# wasm.attributes\n# .iter()\n# .find(|attr| attr.key == \"action\")\n# .unwrap()\n# .value,\n# \"add_members\"\n# );\n# assert_eq!(\n# wasm.attributes\n# .iter()\n# .find(|attr| attr.key == \"added_count\")\n# .unwrap()\n# .value,\n# \"1\"\n# );\n# # let admin_added: Vec<_> = resp\n# .events\n# .iter()\n# .filter(|ev| ev.ty == \"wasm-admin_added\")\n# .collect();\n# assert_eq!(admin_added.len(), 1);\n# # assert_eq!(\n# admin_added[0]\n# .attributes\n# .iter()\n# .find(|attr| attr.key == \"addr\")\n# .unwrap()\n# .value,\n# \"user\"\n# );\n# }\n# } What also needs some corrections are tests - instantiate messages have a new field. I leave it to you as an exercise. Now we have everything we need to implement donating funds to admins. First, a minor update to the Cargo.toml - we will use an additional utility crate: [package]\nname = \"contract\"\nversion = \"0.1.0\"\nedition = \"2021\" [lib]\ncrate-type = [\"cdylib\", \"rlib\"] [features]\nlibrary = [] [dependencies]\ncosmwasm-std = { version = \"1.0.0-beta8\", features = [\"staking\"] }\nserde = { version = \"1.0.103\", default-features = false, features = [\"derive\"] }\ncw-storage-plus = \"0.13.4\"\nthiserror = \"1\"\nschemars = \"0.8.1\"\ncw-utils = \"0.13\" [dev-dependencies]\ncw-multi-test = \"0.13.4\"\ncosmwasm-schema = { version = \"1.0.0\" } Then we can implement the donate handler: # use crate::error::ContractError;\n# use crate::msg::{AdminsListResp, ExecuteMsg, GreetResp, InstantiateMsg, QueryMsg};\n# use crate::state::{ADMINS, DONATION_DENOM};\nuse cosmwasm_std::{ coins, to_binary, BankMsg, Binary, Deps, DepsMut, Env, Event, MessageInfo, Response, StdResult,\n}; # pub fn instantiate(\n# deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# msg: InstantiateMsg,\n# ) -> StdResult {\n# let admins: StdResult> = msg\n# .admins\n# .into_iter()\n# .map(|addr| deps.api.addr_validate(&addr))\n# .collect();\n# ADMINS.save(deps.storage, &admins?)?;\n# DONATION_DENOM.save(deps.storage, &msg.donation_denom)?;\n# # Ok(Response::new())\n# }\n# # pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult {\n# use QueryMsg::*;\n# # match msg {\n# Greet {} => to_binary(&query::greet()?),\n# AdminsList {} => to_binary(&query::admins_list(deps)?),\n# }\n# }\n# pub fn execute( deps: DepsMut, _env: Env, info: MessageInfo, msg: ExecuteMsg,\n) -> Result { use ExecuteMsg::*; match msg { AddMembers { admins } => exec::add_members(deps, info, admins), Leave {} => exec::leave(deps, info).map_err(Into::into), Donate {} => exec::donate(deps, info), }\n} mod exec {\n# use super::*;\n# # pub fn add_members(\n# deps: DepsMut,\n# info: MessageInfo,\n# admins: Vec,\n# ) -> Result {\n# let mut curr_admins = ADMINS.load(deps.storage)?;\n# if !curr_admins.contains(&info.sender) {\n# return Err(ContractError::Unauthorized {\n# sender: info.sender,\n# });\n# }\n# # let events = admins\n# .iter()\n# .map(|admin| Event::new(\"admin_added\").add_attribute(\"addr\", admin));\n# let resp = Response::new()\n# .add_events(events)\n# .add_attribute(\"action\", \"add_members\")\n# .add_attribute(\"added_count\", admins.len().to_string());\n# # let admins: StdResult> = admins\n# .into_iter()\n# .map(|addr| deps.api.addr_validate(&addr))\n# .collect();\n# # curr_admins.append(&mut admins?);\n# ADMINS.save(deps.storage, &curr_admins)?;\n# # Ok(resp)\n# }\n# # pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult {\n# ADMINS.update(deps.storage, move |admins| -> StdResult<_> {\n# let admins = admins\n# .into_iter()\n# .filter(|admin| *admin != info.sender)\n# .collect();\n# Ok(admins)\n# })?;\n# # Ok(Response::new())\n# }\n# pub fn donate(deps: DepsMut, info: MessageInfo) -> Result { let denom = DONATION_DENOM.load(deps.storage)?; let admins = ADMINS.load(deps.storage)?; let donation = cw_utils::must_pay(&info, &denom)?.u128(); let donation_per_admin = donation / (admins.len() as u128); let messages = admins.into_iter().map(|admin| BankMsg::Send { to_address: admin.to_string(), amount: coins(donation_per_admin, &denom), }); let resp = Response::new() .add_messages(messages) .add_attribute(\"action\", \"donate\") .add_attribute(\"amount\", donation.to_string()) .add_attribute(\"per_admin\", donation_per_admin.to_string()); Ok(resp) }\n}\n# # mod query {\n# use super::*;\n# # pub fn greet() -> StdResult {\n# let resp = GreetResp {\n# message: \"Hello World\".to_owned(),\n# };\n# # Ok(resp)\n# }\n# # pub fn admins_list(deps: Deps) -> StdResult {\n# let admins = ADMINS.load(deps.storage)?;\n# let resp = AdminsListResp { admins };\n# Ok(resp)\n# }\n# }\n# # #[cfg(test)]\n# mod tests {\n# use cosmwasm_std::Addr;\n# use cw_multi_test::{App, ContractWrapper, Executor};\n# # use crate::msg::AdminsListResp;\n# # use super::*;\n# # #[test]\n# fn instantiation() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![],\n# donation_denom: \"eth\".to_owned(),\n# },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: AdminsListResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::AdminsList {})\n# .unwrap();\n# # assert_eq!(resp, AdminsListResp { admins: vec![] });\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![\"admin1\".to_owned(), \"admin2\".to_owned()],\n# donation_denom: \"eth\".to_owned(),\n# },\n# &[],\n# \"Contract 2\",\n# None,\n# )\n# .unwrap();\n# # let resp: AdminsListResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::AdminsList {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# AdminsListResp {\n# admins: vec![Addr::unchecked(\"admin1\"), Addr::unchecked(\"admin2\")],\n# }\n# );\n# }\n# # #[test]\n# fn greet_query() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![],\n# donation_denom: \"eth\".to_owned(),\n# },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: GreetResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::Greet {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# GreetResp {\n# message: \"Hello World\".to_owned()\n# }\n# );\n# }\n# # #[test]\n# fn unauthorized() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![],\n# donation_denom: \"eth\".to_owned(),\n# },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let err = app\n# .execute_contract(\n# Addr::unchecked(\"user\"),\n# addr,\n# &ExecuteMsg::AddMembers {\n# admins: vec![\"user\".to_owned()],\n# },\n# &[],\n# )\n# .unwrap_err();\n# # assert_eq!(\n# ContractError::Unauthorized {\n# sender: Addr::unchecked(\"user\")\n# },\n# err.downcast().unwrap()\n# );\n# }\n# # #[test]\n# fn add_members() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![\"owner\".to_owned()],\n# donation_denom: \"eth\".to_owned(),\n# },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp = app\n# .execute_contract(\n# Addr::unchecked(\"owner\"),\n# addr,\n# &ExecuteMsg::AddMembers {\n# admins: vec![\"user\".to_owned()],\n# },\n# &[],\n# )\n# .unwrap();\n# # let wasm = resp.events.iter().find(|ev| ev.ty == \"wasm\").unwrap();\n# assert_eq!(\n# wasm.attributes\n# .iter()\n# .find(|attr| attr.key == \"action\")\n# .unwrap()\n# .value,\n# \"add_members\"\n# );\n# assert_eq!(\n# wasm.attributes\n# .iter()\n# .find(|attr| attr.key == \"added_count\")\n# .unwrap()\n# .value,\n# \"1\"\n# );\n# # let admin_added: Vec<_> = resp\n# .events\n# .iter()\n# .filter(|ev| ev.ty == \"wasm-admin_added\")\n# .collect();\n# assert_eq!(admin_added.len(), 1);\n# # assert_eq!(\n# admin_added[0]\n# .attributes\n# .iter()\n# .find(|attr| attr.key == \"addr\")\n# .unwrap()\n# .value,\n# \"user\"\n# );\n# }\n# } Sending the funds to another contract is performed by adding bank messages to the response. The blockchain would expect any message which is returned in contract response as a part of an execution. This design is related to an actor model implemented by CosmWasm. The whole actor model will be described in detail later. For now, you can assume this is a way to handle token transfers. Before sending tokens to admins, we have to calculate the amount of donation per admin. It is done by searching funds for an entry describing our donation token and dividing the number of tokens sent by the number of admins. Note that because the integral division is always rounding down. As a consequence, it is possible that not all tokens sent as a donation would end up with no admins accounts. Any leftover would be left on our contract account forever. There are plenty of ways of dealing with this issue - figuring out one of them would be a great exercise. The last missing part is updating the ContractError - the must_pay call returns a cw_utils::PaymentError which we can't convert to our error type yet: use cosmwasm_std::{Addr, StdError};\nuse cw_utils::PaymentError;\nuse thiserror::Error; #[derive(Error, Debug, PartialEq)]\npub enum ContractError { #[error(\"{0}\")] StdError(#[from] StdError), #[error(\"{sender} is not contract admin\")] Unauthorized { sender: Addr }, #[error(\"Payment error: {0}\")] Payment(#[from] PaymentError),\n} As you can see, to handle incoming funds, I used the utility function - I encourage you to take a look at its implementation - this would give you a good understanding of how incoming funds are structured in MessageInfo. Now it's time to check if the funds are distributed correctly. The way for that is to write a test. # use crate::error::ContractError;\n# use crate::msg::{AdminsListResp, ExecuteMsg, GreetResp, InstantiateMsg, QueryMsg};\n# use crate::state::{ADMINS, DONATION_DENOM};\n# use cosmwasm_std::{\n# coins, to_binary, BankMsg, Binary, Deps, DepsMut, Env, Event, MessageInfo, Response, StdResult,\n# };\n# # pub fn instantiate(\n# deps: DepsMut,\n# _env: Env,\n# _info: MessageInfo,\n# msg: InstantiateMsg,\n# ) -> StdResult {\n# let admins: StdResult> = msg\n# .admins\n# .into_iter()\n# .map(|addr| deps.api.addr_validate(&addr))\n# .collect();\n# ADMINS.save(deps.storage, &admins?)?;\n# DONATION_DENOM.save(deps.storage, &msg.donation_denom)?;\n# # Ok(Response::new())\n# }\n# # pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult {\n# use QueryMsg::*;\n# # match msg {\n# Greet {} => to_binary(&query::greet()?),\n# AdminsList {} => to_binary(&query::admins_list(deps)?),\n# }\n# }\n# # pub fn execute(\n# deps: DepsMut,\n# _env: Env,\n# info: MessageInfo,\n# msg: ExecuteMsg,\n# ) -> Result {\n# use ExecuteMsg::*;\n# # match msg {\n# AddMembers { admins } => exec::add_members(deps, info, admins),\n# Leave {} => exec::leave(deps, info).map_err(Into::into),\n# Donate {} => exec::donate(deps, info),\n# }\n# }\n# # mod exec {\n# use super::*;\n# # pub fn add_members(\n# deps: DepsMut,\n# info: MessageInfo,\n# admins: Vec,\n# ) -> Result {\n# let mut curr_admins = ADMINS.load(deps.storage)?;\n# if !curr_admins.contains(&info.sender) {\n# return Err(ContractError::Unauthorized {\n# sender: info.sender,\n# });\n# }\n# # let events = admins\n# .iter()\n# .map(|admin| Event::new(\"admin_added\").add_attribute(\"addr\", admin));\n# let resp = Response::new()\n# .add_events(events)\n# .add_attribute(\"action\", \"add_members\")\n# .add_attribute(\"added_count\", admins.len().to_string());\n# # let admins: StdResult> = admins\n# .into_iter()\n# .map(|addr| deps.api.addr_validate(&addr))\n# .collect();\n# # curr_admins.append(&mut admins?);\n# ADMINS.save(deps.storage, &curr_admins)?;\n# # Ok(resp)\n# }\n# # pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult {\n# ADMINS.update(deps.storage, move |admins| -> StdResult<_> {\n# let admins = admins\n# .into_iter()\n# .filter(|admin| *admin != info.sender)\n# .collect();\n# Ok(admins)\n# })?;\n# # Ok(Response::new())\n# }\n# # pub fn donate(deps: DepsMut, info: MessageInfo) -> Result {\n# let denom = DONATION_DENOM.load(deps.storage)?;\n# let admins = ADMINS.load(deps.storage)?;\n# # let donation = cw_utils::must_pay(&info, &denom)\n# .map_err(|err| StdError::generic_err(err.to_string()))?\n# .u128();\n# # let donation_per_admin = donation / (admins.len() as u128);\n# # let messages = admins.into_iter().map(|admin| BankMsg::Send {\n# to_address: admin.to_string(),\n# amount: coins(donation_per_admin, &denom),\n# });\n# # let resp = Response::new()\n# .add_messages(messages)\n# .add_attribute(\"action\", \"donate\")\n# .add_attribute(\"amount\", donation.to_string())\n# .add_attribute(\"per_admin\", donation_per_admin.to_string());\n# # Ok(resp)\n# }\n# }\n# # mod query {\n# use super::*;\n# # pub fn greet() -> StdResult {\n# let resp = GreetResp {\n# message: \"Hello World\".to_owned(),\n# };\n# # Ok(resp)\n# }\n# # pub fn admins_list(deps: Deps) -> StdResult {\n# let admins = ADMINS.load(deps.storage)?;\n# let resp = AdminsListResp { admins };\n# Ok(resp)\n# }\n# }\n# #[cfg(test)]\nmod tests {\n# use cosmwasm_std::Addr;\n# use cw_multi_test::{App, ContractWrapper, Executor};\n# # use crate::msg::AdminsListResp;\n# # use super::*;\n# # #[test]\n# fn instantiation() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![],\n# donation_denom: \"eth\".to_owned(),\n# },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: AdminsListResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::AdminsList {})\n# .unwrap();\n# # assert_eq!(resp, AdminsListResp { admins: vec![] });\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![\"admin1\".to_owned(), \"admin2\".to_owned()],\n# donation_denom: \"eth\".to_owned(),\n# },\n# &[],\n# \"Contract 2\",\n# None,\n# )\n# .unwrap();\n# # let resp: AdminsListResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::AdminsList {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# AdminsListResp {\n# admins: vec![Addr::unchecked(\"admin1\"), Addr::unchecked(\"admin2\")],\n# }\n# );\n# }\n# # #[test]\n# fn greet_query() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![],\n# donation_denom: \"eth\".to_owned(),\n# },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp: GreetResp = app\n# .wrap()\n# .query_wasm_smart(addr, &QueryMsg::Greet {})\n# .unwrap();\n# # assert_eq!(\n# resp,\n# GreetResp {\n# message: \"Hello World\".to_owned()\n# }\n# );\n# }\n# # #[test]\n# fn unauthorized() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![],\n# donation_denom: \"eth\".to_owned(),\n# },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let err = app\n# .execute_contract(\n# Addr::unchecked(\"user\"),\n# addr,\n# &ExecuteMsg::AddMembers {\n# admins: vec![\"user\".to_owned()],\n# },\n# &[],\n# )\n# .unwrap_err();\n# # assert_eq!(\n# ContractError::Unauthorized {\n# sender: Addr::unchecked(\"user\")\n# },\n# err.downcast().unwrap()\n# );\n# }\n# # #[test]\n# fn add_members() {\n# let mut app = App::default();\n# # let code = ContractWrapper::new(execute, instantiate, query);\n# let code_id = app.store_code(Box::new(code));\n# # let addr = app\n# .instantiate_contract(\n# code_id,\n# Addr::unchecked(\"owner\"),\n# &InstantiateMsg {\n# admins: vec![\"owner\".to_owned()],\n# donation_denom: \"eth\".to_owned(),\n# },\n# &[],\n# \"Contract\",\n# None,\n# )\n# .unwrap();\n# # let resp = app\n# .execute_contract(\n# Addr::unchecked(\"owner\"),\n# addr,\n# &ExecuteMsg::AddMembers {\n# admins: vec![\"user\".to_owned()],\n# },\n# &[],\n# )\n# .unwrap();\n# # let wasm = resp.events.iter().find(|ev| ev.ty == \"wasm\").unwrap();\n# assert_eq!(\n# wasm.attributes\n# .iter()\n# .find(|attr| attr.key == \"action\")\n# .unwrap()\n# .value,\n# \"add_members\"\n# );\n# assert_eq!(\n# wasm.attributes\n# .iter()\n# .find(|attr| attr.key == \"added_count\")\n# .unwrap()\n# .value,\n# \"1\"\n# );\n# # let admin_added: Vec<_> = resp\n# .events\n# .iter()\n# .filter(|ev| ev.ty == \"wasm-admin_added\")\n# .collect();\n# assert_eq!(admin_added.len(), 1);\n# # assert_eq!(\n# admin_added[0]\n# .attributes\n# .iter()\n# .find(|attr| attr.key == \"addr\")\n# .unwrap()\n# .value,\n# \"user\"\n# );\n# }\n# #[test] fn donations() { let mut app = App::new(|router, _, storage| { router .bank .init_balance(storage, &Addr::unchecked(\"user\"), coins(5, \"eth\")) .unwrap() }); let code = ContractWrapper::new(execute, instantiate, query); let code_id = app.store_code(Box::new(code)); let addr = app .instantiate_contract( code_id, Addr::unchecked(\"owner\"), &InstantiateMsg { admins: vec![\"admin1\".to_owned(), \"admin2\".to_owned()], donation_denom: \"eth\".to_owned(), }, &[], \"Contract\", None, ) .unwrap(); app.execute_contract( Addr::unchecked(\"user\"), addr.clone(), &ExecuteMsg::Donate {}, &coins(5, \"eth\"), ) .unwrap(); assert_eq!( app.wrap() .query_balance(\"user\", \"eth\") .unwrap() .amount .u128(), 0 ); assert_eq!( app.wrap() .query_balance(&addr, \"eth\") .unwrap() .amount .u128(), 1 ); assert_eq!( app.wrap() .query_balance(\"admin1\", \"eth\") .unwrap() .amount .u128(), 2 ); assert_eq!( app.wrap() .query_balance(\"admin2\", \"eth\") .unwrap() .amount .u128(), 2 ); }\n} Fairly simple. I don't particularly appreciate that every balance check is eight lines of code, but it can be improved by enclosing this assertion into a separate function, probably with the #[track_caller] attribute. The critical thing to talk about is how app creation changed. Because we need some initial tokens on a user account, instead of using the default constructor, we have to provide it with an initializer function. Unfortunately, new documentation is not easy to follow - even if a function is not very complicated. What it takes as an argument is a closure with three arguments - the Router with all modules supported by multi-test, the API object, and the state. This function is called once during contract instantiation. The router object contains some generic fields - we are interested in bank in particular. It has a type of BankKeeper , where the init_balance function sits.","breadcrumbs":"Basics » Dealing with funds » Preparing messages","id":"29","title":"Preparing messages"},"3":{"body":"This book is maintained on Github and auto deployed from there. Please create an issue or pull request if you find any mistakes, bugs, or ambiguities.","breadcrumbs":"Introduction » Contributing to the book","id":"3","title":"Contributing to the book"},"30":{"body":"As we covered most of the important basics about building Rust smart contracts, I have a serious exercise for you. The contract we built has an exploitable bug. All donations are distributed equally across admins. However, every admin is eligible to add another admin. And nothing is preventing the admin from adding himself to the list and receiving twice as many rewards as others! Try to write a test that detects such a bug, then fix it and ensure the bug nevermore occurs. Even if the admin cannot add the same address to the list, he can always create new accounts and add them, but this is something unpreventable on the contract level, so do not prevent that. Handling this kind of case is done by properly designing whole applications, which is out of this chapter's scope.","breadcrumbs":"Basics » Dealing with funds » Plot Twist!","id":"30","title":"Plot Twist!"},"31":{"body":"All the relevant basics are covered. Now let's talk about some good practices.","breadcrumbs":"Basics » Good practices » Good practices","id":"31","title":"Good practices"},"32":{"body":"Due to Rust style, all our message variants are spelled in a camel-case . It is standard practice, but it has a drawback - all messages are serialized and deserialized by serde using those variant names. The problem is that it is more common to use snake cases for field names in the JSON world. Fortunately, there is an effortless way to tell serde, to change the names casing for serialization purposes. Let's update our messages with a #[serde] attribute: use cosmwasm_std::Addr;\nuse serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\n#[serde(rename_all = \"snake_case\")]\npub struct InstantiateMsg { pub admins: Vec, pub donation_denom: String,\n} #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\n#[serde(rename_all = \"snake_case\")]\npub enum ExecuteMsg { AddMembers { admins: Vec }, Leave {}, Donate {},\n} #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\n#[serde(rename_all = \"snake_case\")]\npub struct GreetResp { pub message: String,\n} #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\n#[serde(rename_all = \"snake_case\")]\npub struct AdminsListResp { pub admins: Vec,\n} #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]\n#[serde(rename_all = \"snake_case\")]\npub enum QueryMsg { Greet {}, AdminsList {},\n}","breadcrumbs":"Basics » Good practices » JSON renaming","id":"32","title":"JSON renaming"},"33":{"body":"Talking about JSON API, it is worth mentioning JSON Schema. It is a way of defining a shape for JSON messages. It is good practice to provide a way to generate schemas for contract API. The problem is that writing JSON schemas by hand is a pain. The good news is that there is a crate that would help us with that. Go to the Cargo.toml: [package]\nname = \"contract\"\nversion = \"0.1.0\"\nedition = \"2021\" [lib]\ncrate-type = [\"cdylib\", \"rlib\"] [dependencies]\ncosmwasm-std = { version = \"1.1.4\", features = [\"staking\"] }\nserde = { version = \"1.0.103\", default-features = false, features = [\"derive\"] }\ncw-storage-plus = \"0.15.1\"\nthiserror = \"1\"\nschemars = \"0.8.1\"\ncosmwasm-schema = \"1.1.4\" [dev-dependencies]\ncw-multi-test = \"0.13.4\" There is one additional change in this file - in crate-type I added \"rlib\". \"cdylib\" crates cannot be used as typical Rust dependencies. As a consequence, it is impossible to create examples for such crates. Now go back to src/msg.rs and add a new derive for all messages: # use cosmwasm_std::Addr;\nuse schemars::JsonSchema;\n# use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]\n#[serde(rename_all = \"snake_case\")]\npub struct InstantiateMsg { pub admins: Vec, pub donation_denom: String,\n} #[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]\n#[serde(rename_all = \"snake_case\")]\npub enum ExecuteMsg { AddMembers { admins: Vec }, Leave {}, Donate {},\n} #[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]\n#[serde(rename_all = \"snake_case\")]\npub struct GreetResp { pub message: String,\n} #[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]\n#[serde(rename_all = \"snake_case\")]\npub struct AdminsListResp { pub admins: Vec,\n} #[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]\n#[serde(rename_all = \"snake_case\")]\npub enum QueryMsg { Greet {}, AdminsList {},\n} You may argue that all those derives look slightly clunky, and I agree. Fortunately, the cosmwasm-schema crate delivers a utility cw_serde macro, which we can use to reduce a boilerplate: # use cosmwasm_std::Addr;\nuse cosmwasm_schema::cw_serde #[cw_serde]\npub struct InstantiateMsg { pub admins: Vec, pub donation_denom: String,\n} #[cw_serde]\npub enum ExecuteMsg { AddMembers { admins: Vec }, Leave {}, Donate {},\n} #[cw_serde]\npub struct GreetResp { pub message: String,\n} #[cw_serde]\npub struct AdminsListResp { pub admins: Vec,\n} #[cw_serde]\npub enum QueryMsg { Greet {}, AdminsList {},\n} Additionally, we have to derive the additional QueryResponses trait for our query message to correlate the message variants with responses we would generate for them: # use cosmwasm_std::Addr;\nuse cosmwasm_schema::{cw_serde, QueryResponses} # #[cw_serde]\n# pub struct InstantiateMsg {\n# pub admins: Vec,\n# pub donation_denom: String,\n# }\n# # #[cw_serde]\n# pub enum ExecuteMsg {\n# AddMembers { admins: Vec },\n# Leave {},\n# Donate {},\n# }\n# # #[cw_serde]\n# pub struct GreetResp {\n# pub message: String,\n# }\n# # #[cw_serde]\n# pub struct AdminsListResp {\n# pub admins: Vec,\n# }\n# #[cw_serde]\n#[derive(QueryResponses)]\npub enum QueryMsg { #[returns(GreetResp)] Greet {}, #[returns(AdminsListResp)] AdminsList {},\n} The QueryResponses is a trait that requires the #[returns(...)] attribute to all your query variants to generate additional information about the query-response relationship. Now, we want to make the msg module public and accessible by crates depending on our contract (in this case - for schema example). Update a src/lib.rs: # use cosmwasm_std::{entry_point, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};\n# use error::ContractError;\n# use msg::{ExecuteMsg, InstantiateMsg, QueryMsg};\n# pub mod contract;\npub mod error;\npub mod msg;\npub mod state;\n# # #[entry_point]\n# pub fn instantiate(\n# deps: DepsMut,\n# env: Env,\n# info: MessageInfo,\n# msg: InstantiateMsg,\n# ) -> StdResult {\n# contract::instantiate(deps, env, info, msg)\n# }\n# # #[entry_point]\n# pub fn execute(\n# deps: DepsMut,\n# env: Env,\n# info: MessageInfo,\n# msg: ExecuteMsg,\n# ) -> Result {\n# contract::execute(deps, env, info, msg)\n# }\n# # #[entry_point]\n# pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult {\n# contract::query(deps, env, msg)\n# } I changed the visibility of all modules - as our crate can now be used as a dependency. If someone would like to do so, he may need access to handlers or state. The next step is to create a tool generating actual schemas. We will do it by creating an binary in our crate. Create a new bin/schema.rs file: use contract::msg::{ExecuteMsg, InstantiateMsg, QueryMsg};\nuse cosmwasm_schema::write_api; fn main() { write_api! { instantiate: InstantiateMsg, execute: ExecuteMsg, query: QueryMsg }\n} Cargo is smart enough to recognize files in src/bin directory as utility binaries for the crate. Now we can generate our schemas: $ cargo run schema Finished dev [unoptimized + debuginfo] target(s) in 0.52s Running `target/debug/schema schema`\nRemoving \"/home/hashed/confio/git/book/examples/03-basics/schema/contract.json\" …\nExported the full API as /home/hashed/confio/git/book/examples/03-basics/schema/contract.json I encourage you to go to generated file to see what the schema looks like. The problem is that, unfortunately, creating this binary makes our project fail to compile on the Wasm target - which is, in the end, the most important one. Fortunately, we don't need to build the schema binary for the Wasm target - let's align the .cargo/config file: [alias]\nwasm = \"build --target wasm32-unknown-unknown --release --lib\"\nwasm-debug = \"build --target wasm32-unknown-unknown --lib\"\nschema = \"run schema\" The --lib flag added to wasm cargo aliases tells the toolchain to build only the library target - it would skip building any binaries. Additionally, I added the convenience schema alias so that one can generate schema calling simply cargo schema.","breadcrumbs":"Basics » Good practices » JSON schema","id":"33","title":"JSON schema"},"34":{"body":"Since we added the \"rlib\" target for the contract, it is, as mentioned before, useable as a dependency. The problem is that the contract depended on ours would have Wasm entry points generated twice - once in the dependency and once in the final contract. We can work this around by disabling generating Wasm entry points for the contract if the crate is used as a dependency. We would use feature flags for that. Start with updating Cargo.toml: [features]\nlibrary = [] This way, we created a new feature for our crate. Now we want to disable the entry_point attribute on entry points - we will do it by a slight update of src/lib.rs: # use cosmwasm_std::{entry_point, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};\n# use error::ContractError;\n# use msg::{ExecuteMsg, InstantiateMsg, QueryMsg};\n# # pub mod contract;\n# pub mod error;\n# pub mod msg;\n# pub mod state;\n# #[cfg_attr(not(feature = \"library\"), entry_point)]\npub fn instantiate( deps: DepsMut, env: Env, info: MessageInfo, msg: InstantiateMsg,\n) -> StdResult { contract::instantiate(deps, env, info, msg)\n} #[cfg_attr(not(feature = \"library\"), entry_point)]\npub fn execute( deps: DepsMut, env: Env, info: MessageInfo, msg: ExecuteMsg,\n) -> Result { contract::execute(deps, env, info, msg)\n} #[cfg_attr(not(feature = \"library\"), entry_point)]\npub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult { contract::query(deps, env, msg)\n} The cfg_attr attribute is a conditional compilation attribute, similar to the cfg we used before for the test. It expands to the given attribute if the condition expands to true. In our case - it would expand to nothing if the feature \"library\" is enabled, or it would expand just to #[entry_point] in another case. Since now to add this contract as a dependency, don't forget to enable the feature like this: [dependencies]\nmy_contract = { version = \"0.1\", features = [\"library\"] }","breadcrumbs":"Basics » Good practices » Disabling entry points for libraries","id":"34","title":"Disabling entry points for libraries"},"35":{"body":"Now you are ready to create smart contracts on your own. It is time to discuss an important limitation of CosmWasm smart contracts - floating-point numbers. The story is short: you cannot use floating-point types in smart contracts. Never. CosmWasm virtual machine on purpose does not implement floating-point Wasm instructions, even such basics as F32Load. The reasoning is simple: they are not safe to work with in the blockchain world. The biggest problem is that contract will compile, but uploading it to the blockchain would fail with an error message claiming there is a floating-point operation in the contract. A tool that verifies if the contract is valid (it does not contain any fp operations but also has all needed entry points and so on) is called cosmwasm-check utility . This limitation has two implications. First, you always have to use decimal of fixed-point arithmetic in your contracts. It is not a problem, considering that cosmwasm-std provides you with the Decimal and Decimal256 types. The other implication is tricky - you must be careful with the crates you use. In particular, one gotcha in the serde crate - deserialization of usize type is using floating-point operations. That means you can never use usize (or isize) types in your deserialized messages in the contract. Another thing that will not work with serde is untagged enums deserialization. The workaround is to create custom deserialization of such enums using serde-cw-value crate. It is a fork of serde-value crate which avoids generating floating-point instructions.","breadcrumbs":"Basics » Floating point types » Floating point types","id":"35","title":"Floating point types"},"36":{"body":"This section describes the fundaments of CosmWasm smart contracts architecture, which determines how do they communicate with each other. I want to go through this before teaching step by step how to create multiple contracts relating to each other, to give you a grasp of what to expect. Don't worry if it will not be clear after the first read - I suggest going through this chapter once now and maybe giving it another take in the future when you know the practical part of this. The whole thing described here is officially documented in the SEMANTICS.md , of the cosmwasm repository.","breadcrumbs":"The Actor Model » Actor model","id":"36","title":"Actor model"},"37":{"body":"The actor model is the solution to the problem of communication between smart contracts. Let's take a look at the reasons why this particular solution is chosen in CosmWasm, and what are the consequences of that.","breadcrumbs":"The Actor Model » The idea » Idea behind an Actor Model","id":"37","title":"Idea behind an Actor Model"},"38":{"body":"Smart contracts can be imagined as sandboxed microservices. Due to SOLID principles, it is valuable to split responsibilities between entities. However, to split the work between contracts themselves, there is a need to communicate between them, so if one contract is responsible for managing group membership, it is possible to call its functionality from another contract. The traditional way to solve this problem in SW engineering is to model services as functions that would be called with some RPC mechanism, and return its result as a response. Even though this approach looks nice, it creates sort of problems, in particular with shared state consistency. The other approach which is far more popular in business-level modeling is to treat entities as actors, which can perform some tasks, but without interrupting it with calls to other contracts. Any calls to other contracts can only be called after the whole execution is performed. When \"subcall\" is finished, it will call the original contract back. This solution may feel unnatural, and it requires different kinds of design solutions, but it turns out to work pretty well for smart contract execution. I will try to explain how to reason about it, and how it maps to contract structure step by step.","breadcrumbs":"The Actor Model » The idea » The problem","id":"38","title":"The problem"},"39":{"body":"The most important thing in the whole model is an Actor itself. So, what is this? The Actor is a single instantiation of a contract, which can perform several actions. When the actor finishes his job, he prepares a summary of it, which includes the list of things that have to be done, to complete the whole scheduled task. An example of an actor is the Seller in the KFC restaurant. The first thing you do is order your BSmart, so you are requesting action from him. So, from the system user, you can think about this task as \"sell and prepare my meal\", but the action performed by the seller is just \"Charge payment and create order\". The first part of this operation is to create a bill and charge you for it, and then it requests the Sandwich and Fries to be prepared by other actors, probably chefs. Then when the chef is done with his part of the meal, he checks if all meals are ready. If so, it calls the last actor, the waiter, to deliver the food to you. At this point, you can receive your delivery, and the task is considered complete. The above-described workflow is kind of simplified. In particular - in a typical restaurant, a waiter would observe the kitchen instead of being triggered by a chef, but in the Actor model, it is not possible. Here, entities of the system are passive and cannot observe the environment actively - they only react to messages from other system participants. Also in KFC, the seller would not schedule subtasks for particular chefs; instead, he would leave tasks to be taken by them, when they are free. It is not the case, because as before - chefs cannot actively listen to the environment. However, it would be possible to create a contract for being a chef's dispatcher which would collect all orders from sellers, and balance them across chefs for some reason.","breadcrumbs":"The Actor Model » The idea » The Actor","id":"39","title":"The Actor"},"4":{"body":"To work with CosmWasm smart contract, you will need rust installed on your machine. If you don't have one, you can find installation instructions on the Rust website . I assume you are working with a stable Rust channel in this book. Additionally, you will need the Wasm rust compiler backend installed to build Wasm binaries. To install it, run: rustup target add wasm32-unknown-unknown Optionally if you want to try out your contracts on a testnet, you will need a wasmd binary. We would focus on testing contracts with Rust unit testing utility throughout the book, so it is not required to follow. However, seeing the product working in a real-world environment may be nice. To install wasmd, first install the golang . Then clone the wasmd and install it: $ git clone git@github.com:CosmWasm/wasmd.git\n$ cd ./wasmd\n$ make install Also, to be able to upload Rust Wasm Contracts into the blockchain, you will need to install docker . To minimize your contract sizes, it will be required to run CosmWasm Rust Optimizer; without that, more complex contracts might exceed a size limit.","breadcrumbs":"Setting up the environment » Setting up the environment","id":"4","title":"Setting up the environment"},"40":{"body":"Actors are the model entities, but to properly communicate with them, we need some kind of protocol. Every actor is capable of performing several actions. In my previous KFC example, the only action seller can do is \"Charge payment and create order\". However, it is not always the case - our chefs were proficient at performing both \"Prepare fries\" and \"Prepare Sandwich\" actions - and also many more. So, when we want to do something in an actor system, we schedule some action to the actor being the closest to us, very often with some additional parameters (as we can pick if we want to exchange fries with salad). However, naming the action after the exact thing which happened in the very contract would be misleading. Take a look at the KFC example once again. As I mentioned, the action performed by a seller is \"Charge payment and create order\". The problem is, that for the client who schedules this action, it doesn't matter what exactly is the responsibility of the actor himself - what the client is scheduling is \"Prepare Meal\" with some description of what exactly to prepare. So, we can say, that the action is the thing performed by the contract itself, plus all the sub-actions it schedules.","breadcrumbs":"The Actor Model » The idea » The Action","id":"40","title":"The Action"},"41":{"body":"So as the whole idea makes some sense, there is the problem created by the actor model: what if I want to perform some action in my contract, but to completely finalize some steps, the contract has to make sure that some sub-action he scheduled are finished? Imagine that in the previous KFC situation, there is no dedicated Waiter. Instead the Seller was serving you a meal when the Chefs finished their job. This kind of pattern is so important and common that in CosmWasm, we developed a special way to handle it, which is dedicated Reply action. So when Seller is scheduling actions for chefs, he assigns some number to this action (like order id) and passes it to chefs. He also remembers how many actions he scheduled for every order id. Now every time chef is finished with his action; he would call the special Reply action on Seller, in which he would pass back the order id. Then, Seller would decrease the number of actions left for this order, and if it reached zero, he would serve a meal. Now you can say, that the Reply action is completely not needed, as Chefs could just schedule any arbitrary action on Seller, like Serve, why is there the special Reply for? The reason is abstraction and reusability. The Chefs task is to prepare a meal, and that is all. There is no reason for him to know why he is even preparing Fries - if it is part of the bigger task (like order for a client), or the seller is just hungry. It is possible that not only the seller is eligible to call the chef for food - possibly any restaurant employee can do that just for themselves. Therefore, we need a way to be able to react to an actor finishing his job in some universal way, to handle this situation properly in any context. It is worth noting that the Reply can contain some additional data. The id assigned previously is the only required information in the Reply call, but the actor can pass some additional data - events emitted, which are mostly metadata (to be observed by non-blockchain applications mostly), and any arbitrary data it wants to pass.","breadcrumbs":"The Actor Model » The idea » Multi-stage Actions","id":"41","title":"Multi-stage Actions"},"42":{"body":"Up until this point, we were considering actors as entities performing some job, like preparing the meal. If we are considering computer programs, such a job would be to show something on the screen, maybe print something. This is not the case with Smart Contracts. The only thing which can be affected by the Smart Contract is their internal state. So, the state is arbitrary data that is kept by the contract. Previously in the KFC example I mentioned, the Seller is keeping in mind how many actions he scheduled for chefs are not yet finished - this number is part of the Seller's state. To give a more realistic example of a contract state, let's think about a more real-life Smart Contract than the restaurant. Let's imagine we want to create our currency - maybe we want to create some smart contracts-based market for some MMORPG game. So, we need some way to be able to at least transfer currency between players. We can do that, by creating the contract we would call MmoCurrency, which would support the Transfer action to transfer money to another player. Then what would be the state of such a contract? It would be just a table mapping player names to the amount of currency they own. The contract we just invited exists in CosmWasm examples, and it is called the cw20-base contract (it is a bit more complicated, but it is its core idea). And now there is a question - how is this helpful to transfer currency if I cannot check how much of it do I own? It is a very good question, and the answer to that is simple - the whole state of every contract in our system is public. It is not universal for every Actor model, but it is how it works in CosmWasm, and it is kind of forced by the nature of blockchain. Everything happening in blockchain has to be public, and if some information should be hidden, it has to be stored indirectly. There is one very important thing about the state in CosmWasm, and it is the state being transactional. Any updates to the state are not applied immediately, but only when the whole action succeeds. It is very important, as it guarantees that if something goes wrong in the contract, it is always left in some proper state. Let's consider our MmoCurrency case. Imagine, that in the Transfer action we first increase the receiver currency amount (by updating the state), and only then do we decrease the sender amount. However, before decreasing it, we need to check if a sender possesses enough funds to perform the transaction. In case we realize that we cannot do it, we don't need to do any rolling back by hand - we would just return a failure from the action execution, and the state would not be updated. So, when in the contract state is updated, it is just a local copy of this state being altered, but the partial changes would never be visible by other contracts.","breadcrumbs":"The Actor Model » The idea » State","id":"42","title":"State"},"43":{"body":"There is one building block in the CosmWasm approach to the Actor model, which I haven't yet cover. As I said, the whole state of every contract is public and available for everyone to look at. The problem is that this way of looking at state is not very convenient - it requires users of contracts to know its internal structure, which kind of violates the SOLID rules (Liskov substitution principle in particular). If, for example a contract is updated and its state structure changes a bit, another contract looking at its state would just nevermore work. Also, it is often the case, that the contract state is kind of simplified, and information that is relevant to the observer would be calculated from the state. This is where queries come into play. Queries are the type of messages to contract, which does not perform any actions, so do not update any state, but can return an answer immediately. In our KFC comparison, the query would be if Seller goes to Chef to ask \"Do we still have pickles available for our cheeseburgers\"? It can be done while operating, and response can be used in it. It is possible because queries can never update their state, so they do not need to be handled in a transactional manner. However, the existence of queries doesn't mean that we cannot look at the contract's state directly - the state is still public, and the technique of looking at them directly is called Raw Queries. For clarity, non-raw queries are sometimes denoted as Smart Queries.","breadcrumbs":"The Actor Model » The idea » Queries","id":"43","title":"Queries"},"44":{"body":"So, we touched on many things here, and I know it may be kind of confusing. Because of that, I would like to go through some more complicated calls to the CosmWasm contract to visualize what the \"transactional state\" means. Let's imagine two contracts: The MmoCurrency contract mentioned before, which can perform the Transfer action, allows transferring some amount of currency to some receiver. The WarriorNpc contract, which would have some amount of our currency, and he would be used by our MMO engine to pay the reward out for some quest player could perform. It would be triggered by Payout action, which can be called only by a specific client (which would be our game engine). Now here is an interesting thing - this model forces us to make our MMO more realistic in terms of the economy that we traditionally see - it is because WarriorNpc has some amount of currency, and cannot create more out of anything. It is not always the case (the previously mentioned cw20 has a notion of Minting for this case), but for the sake of simplicity let's assume this is what we want. To make the quest reasonable for longer, we would make a reward for it to be always between 1 mmo and 100 mmo, but it would be ideally 15% of what Warrior owns. This means that the quest reward decreases for every subsequent player, until Warrior would be broke, left with nothing, and will no longer be able to payout players. So, what would the flow look like? The first game would send a Payout message to the WarriorNpc contract, with info on who should get the reward. Warrior would keep track of players who fulfilled the quest, to not pay out the same person twice - there would be a list of players in his state. First, he would check the list looking for players to pay out - if he is there, he will finish the transaction with an error. However, in most cases the player would not be on the list - so then WarriorNpc would add him to the list. Now the Warrior would finish his part of the task, and schedule the Transfer action to be performed by MmoCurrency. But there is the important thing - because Transfer action is actually part of the bigger Payout flow, it would not be executed on the original blockchain state, but on the local copy of it, to which the player's list is already applied to. So if the MmoCurrency would for any reason takes a look at WarriorNpc internal list, it would be already updated. Now MmoCurrency is doing its job, updating the state of Warrior and player balance (note, that our Warrior is here just treated as another player!). When it finishes, two things may happen: There was an error - possibly Warrior is out of cash, and it can nevermore pay for the task. In such case, none of the changes - neither updating the list of players succeeding, nor balance changes are not applied to the original blockchain storage, so they are like they never happened. In the database world, it is denoted as rolling back the transaction. Operation succeed - all changes on the state are now applied to the blockchain, and any further observation of MmoCurrency or WarriorNpc by the external world would see updated data. There is one problem - in this model, our list is not a list of players who fulfilled the quest (as we wanted it to be), but the list of players who paid out (as in transfer failure, the list is not updated). We can do better.","breadcrumbs":"The Actor Model » The idea » Wrapping everything together - transactional call flow","id":"44","title":"Wrapping everything together - transactional call flow"},"45":{"body":"Note that we didn't mention a Reply operation at all. So why was it not called by MmoCurrency on WarriorNpc? The reason is that this operation is optional. When scheduling sub-actions on another contract we may choose when Reply how the result should be handled: Never call Reply, action fails if sub-message fails Call Reply on success Call Reply on failure Always call Reply So, if we do not request Reply to be called by subsequent contract, it will not happen. In such a case if a sub-call fails, the whole transaction is rolled back - sub-message failure transitively causes the original message failure. It is probably a bit complicated for now, but I promise it would be simple if you would did some practice with that. When handling the reply, it is important to remember, that although changes are not yet applied to the blockchain (the transaction still can be failed), the reply handler is already working on the copy of the state with all changes made by sub-message so far applied. In most cases, it would be a good thing, but it has a tricky consequence - if the contract is calling itself recursively, it is possible that subsequent call overwrote things set up in the original message. It rarely happens, but may need special treatment in some cases - for now I don't want to go deeply into details, but I want you to remember about what to expect after state in the actor's flow. Now let's take a look at handling results with 2-4 options. It is actually interesting, that using 2, even if the transaction is performed by sub-call succeed, we may now take a look at the data it returned with Reply, and on its final state after it finished, and we can still decide, that act as a whole is a failure, in which case everything would be rolled back - even currency transfer performed by external contract. In our case, an interesting option is 3. So, if the contract would call Reply on failure, we can decide to claim success, and commit a transaction on the state if the sub call failed. Why may it be relevant for us? Possibly because our internal list was supposed to keep the list of players succeeding with the quest, not paid out! So, if we have no more currency, we still want to update the list! The most common way to use the replies (option 2 in particular) is to instantiate another contract, managed by the one called. The idea is that in those use cases, the creator contract wants to keep the address of the created contract in its state. To do so it has to create an Instantiate sub-message, and subscribe for its success response, which contains the address of the freshly created contract. In the end, you can see that performing actions in CosmWasm is built with hierarchical state change transactions. The sub-transaction can be applied to the blockchain only if everything succeeds, but in case that sub-transaction failed, only its part may be rolled back, end other changes may be applied. It is very similar to how most database systems work.","breadcrumbs":"The Actor Model » The idea » Different ways of handling responses","id":"45","title":"Different ways of handling responses"},"46":{"body":"Now you have seen the power of the actor model to avoid reentrancy, properly handle errors, and safely sandbox contracts. This helps us provide the solid security guarantees of the CosmWasm platform. Let’s get started playing around with real contracts in the wasmd blockchain.","breadcrumbs":"The Actor Model » The idea » Conclusion","id":"46","title":"Conclusion"},"47":{"body":"Previously we were talking about actors mostly in the abstraction of any blockchain-specific terms. However, before we would dive into the code, we need to establish some common language, and to do so we would look at contracts from the perspective of external users, instead of their implementation. In this part, I would use the wasmd binary to communicate with the malaga testnet. To properly set it up, check the Quick start with wasmd .","breadcrumbs":"The Actor Model » Actors in the blockchain » Actors in blockchain","id":"47","title":"Actors in blockchain"},"48":{"body":"It is kind of starting from the end, but I would start with the state part of the actor model. Relating to traditional systems, there is one particular thing I like to compare blockchain with - it is a database. Going back to the previous section we learned that the most important part of a contract is its state. Manipulating the state is the only way to persistently manifest work performed to the world. But What is the thing which purpose is to keep the state? It is a database! So here is my (as a contract developer) point of view on contracts: it is a distributed database, with some magical mechanisms to make it democratic. Those \"magical mechanisms\" are crucial for BC's existence and they make they are reasons why even use blockchain, but they are not relevant from the contract creator's point of view - for us, everything that matters is the state. But you can say: what about the financial part?! Isn't blockchain (wasmd in particular) the currency implementation? With all of those gas costs, sending funds seems very much like a money transfer, not database updates. And yes, you are kind of right, but I have a solution for that too. Just imagine, that for every native token (by \"native tokens\" we meant tokens handled directly by blockchain, in contradiction to for example cw20 tokens) there is a special database bucket (or table if you prefer) with mapping of address to how much of a token the address possesses. You can query this table (querying for token balance), but you cannot modify it directly. To modify it you just send a message to a special build-in bank contract. And everything is still a database. But if blockchain is a database, then where are smart contracts stored? Obviously - in the database itself! So now imagine another special table - this one would contain a single table of code-ids mapped to blobs of wasm binaries. And again - to operate on this table, you use \"special contract\" which is not accessible from another contract, but you can use it via wasmd binary. Now there is a question - why do I even care about BC being a DB? So the reason is that it makes reasoning about everything in blockchain very natural. Do you remember that every message in the actor model is transactional? It perfectly matches traditional database transactions (meaning: every message starts a new transaction)! Also, when we later talk about migrations, it would turn out, that migrations in CosmWasm are very much equivalents of schema migrations in traditional databases. So, the thing to remember - blockchain is very similar to a database, having some specially reserved tables (like native tokens, code repository), with a special bucket created for every contract. A contract can look at every table in every bucket in the whole blockchain, but it can modify the only one he created.","breadcrumbs":"The Actor Model » Actors in the blockchain » Blockchain as a database","id":"48","title":"Blockchain as a database"},"49":{"body":"I will not go into the code for now, but to start with something we need compiled contract binary. The cw4-group contract from cw-plus is simple enough to work with, for now, so we will start with compiling it. Start with cloning the repository: $ git clone git@github.com:CosmWasm/cw-plus.git Then go to cw4-group contract and build it: $ cd cw-plus/contracts/cw4-group\n$ docker run --rm -v \"$(pwd)\":/code \\ --mount type=volume,source=\"$(basename \"$(pwd)\")_cache\",target=/code/target \\ --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \\ cosmwasm/workspace-optimizer:0.12.6 Your final binary should be located in the cw-plus/artifacts folder (cw-plus being where you cloned your repository).","breadcrumbs":"The Actor Model » Actors in the blockchain » Compile the contract","id":"49","title":"Compile the contract"},"5":{"body":"An additional helpful tool for building smart contracts is the cosmwasm-check utility . It allows you to check if the wasm binary is a proper smart contract ready to upload into the blockchain. You can install it using cargo: $ cargo install cosmwasm-check If the installation succeeds, you should be able to execute the utility from your command line. $ cosmwasm-check --version\nContract checking 1.2.3","breadcrumbs":"Setting up the environment » cosmwasm-check utility","id":"5","title":"cosmwasm-check utility"},"50":{"body":"When the contract binary is built, the first interaction with CosmWasm is uploading it to the blockchain (assuming you have your wasm binary in the working directory): $ wasmd tx wasm store ./cw4-group.wasm --from wallet $TXFLAG -y -b block As a result of such an operation you would get json output like this: ..\nlogs:\n..\n- events: .. - attributes: - key: code_id value: \"1069\" type: store_code I ignored most of not fields as they are not relevant for now - what we care about is the event emitted by blockchain with information about code_id of stored contract - in my case the contract code was stored in blockchain under the id of 1069. I can now look at the code by querying for it: $ wasmd query wasm code 1069 code.wasm And now the important thing - the contract code is not an actor. So, what is a contract code? I think that the easiest way to think about that is a class or a type in programming. It defines some stuff about what can be done, but the class itself is in most cases not very useful unless we create an instance of a type, on which we can call class methods. So now let's move forward to instances of such contract classes.","breadcrumbs":"The Actor Model » Actors in the blockchain » Contract code","id":"50","title":"Contract code"},"51":{"body":"Now we have a contract code, but what we want is an actual contract itself. To create it, we need to instantiate it. Relating to analogy to programming, instantiation is calling a constructor. To do that, I would send an instantiate message to my contract: $ wasmd tx wasm instantiate 1069 '{\"members\": []}' --from wallet --label \"Group 1\" --no-admin $TXFLAG -y What I do here is create a new contract and immediately call the Instantiate message on it. The structure of such a message is different for every contract code. In particular, the cw4-group Instantiate message contains two fields: members field which is the list of initial group members optional admin field which defines an address of who can add or remove a group member In this case, I created an empty group with no admin - so which could never change! It may seem like a not very useful contract, but it serves us as a contract example. As the result of instantiating, I got the result: ..\nlogs:\n..\n- events: .. - attributes: - key: _contract_address value: wasm1u0grxl65reu6spujnf20ngcpz3jvjfsp5rs7lkavud3rhppnyhmqqnkcx6 - key: code_id value: \"1069\" type: instantiate As you can see, we again look at logs[].events[] field, looking for interesting event and extracting information from it - it is the common case. I will talk about events and their attributes in the future but in general, it is a way to notify the world that something happened. Do you remember the KFC example? If a waiter is serving our dish, he would put a tray on the bar, and she would yell (or put on the screen) the order number - this would be announcing an event, so you know some summary of operation, so you can go and do something useful with it. So, what use can we do with the contract? We obviously can call it! But first I want to tell you about addresses.","breadcrumbs":"The Actor Model » Actors in the blockchain » Contract instance","id":"51","title":"Contract instance"},"52":{"body":"Address in CosmWasm is a way to refer to entities in the blockchain. There are two types of addresses: contract addresses, and non-contracts. The difference is that you can send messages to contract addresses, as there is some smart contract code associated with them, and non-contracts are just users of the system. In an actor model, contract addresses represent actors, and non-contracts represent clients of the system. When operating with blockchain using wasmd, you also have an address - you got one when you added the key to wasmd: # add wallets for testing\n$ wasmd keys add wallet3\n- name: wallet3 type: local address: wasm1dk6sq0786m6ayg9kd0ylgugykxe0n6h0ts7d8t pubkey: '{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"Ap5zuScYVRr5Clz7QLzu0CJNTg07+7GdAAh3uwgdig2X\"}' mnemonic: \"\" You can always check your address: $ wasmd keys show wallet\n- name: wallet type: local address: wasm1um59mldkdj8ayl5gknp9pnrdlw33v40sh5l4nx pubkey: '{\"@type\":\"/cosmos.crypto.secp256k1.PubKey\",\"key\":\"A5bBdhYS/4qouAfLUH9h9+ndRJKvK0co31w4lS4p5cTE\"}' mnemonic: \"\" Having an address is very important because it is a requirement for being able to call anything. When we send a message to a contract it always knows the address which sends this message so it can identify it - not to mention that this sender is an address that would play a gas cost.","breadcrumbs":"The Actor Model » Actors in the blockchain » Addresses in CosmWasm","id":"52","title":"Addresses in CosmWasm"},"53":{"body":"So, we have our contract, let's try to do something with it - query would be the easiest thing to do. Let's do it: $ wasmd query wasm contract-state smart wasm1u0grxl65reu6spujnf20ngcpz3jvjfsp5rs7lkavud3rhppnyhmqqnkcx6 '{ \"list_members\": {} }'\ndata: members: [] The wasm... string is the contract address, and you have to substitute it with your contract address. { \"list_members\": {} } is query message we send to contract. Typically, CW smart contract queries are in the form of a single JSON object, with one field: the query name (list_members in our case). The value of this field is another object, being query parameters - if there are any. list_members query handles two parameters: limit, and start_after, which are both optional and which support result pagination. However, in our case of an empty group they don't matter. The query result we got is in human-readable text form (if we want to get the JSON from - for example, to process it further with jq, just pass the -o json flag). As you can see response contains one field: members which is an empty array. So, can we do anything more with this contract? Not much. But let's try to do something with a new one!","breadcrumbs":"The Actor Model » Actors in the blockchain » Querying the contract","id":"53","title":"Querying the contract"},"54":{"body":"The problem with our previous contract is that for the cw4-group contract, the only one who can perform executions on it is an admin, but our contract doesn't have one. This is not true for every smart contract, but it is the nature of this one. So, let's make a new group contract, but this time we would make ourselves an admin. First, check our wallet address: $ wasmd keys show wallet And instantiate a new group contract - this time with proper admin: $ wasmd tx wasm instantiate 1069 '{\"members\": [], \"admin\": \"wasm1um59mldkdj8ayl5gknp9pnrdlw33v40sh5l4nx\"}' --from wallet --label \"Group 1\" --no-admin $TXFLAG -y\n..\nlogs:\n- events: .. - attributes: - key: _contract_address value: wasm1n5x8hmstlzdzy5jxd70273tuptr4zsclrwx0nsqv7qns5gm4vraqeam24u - key: code_id value: \"1069\" type: instantiate You may ask, why do we pass some kind of --no-admin flag, if we just said, we want to set an admin to the contract? The answer is sad and confusing, but... it is a different admin. The admin we want to set is one checked by the contract itself and managed by him. The admin which is declined with --no-admin flag, is a wasmd-level admin, which can migrate the contract. You don't need to worry about the second one at least until you learn about contract migrations - until then you can always pass the --no-admin flag to the contract. Now let's query our new contract for the member's list: $ wasmd query wasm contract-state smart wasm1n5x8hmstlzdzy5jxd70273tuptr4zsclrwx0nsqv7qns5gm4vraqeam24u '{ \"list_members\": {} }'\ndata: members: [] Just like before - no members initially. Now check an admin: $ wasmd query wasm contract-state smart wasm1n5x8hmstlzdzy5jxd70273tuptr4zsclrwx0nsqv7qns5gm4vraqeam24u '{ \"admin\": {} }'\ndata: admin: wasm1um59mldkdj8ayl5gknp9pnrdlw33v40sh5l4nx So, there is an admin, it seems like the one we wanted to have there. So now we would add someone to the group - maybe ourselves? wasmd tx wasm execute wasm1n5x8hmstlzdzy5jxd70273tuptr4zsclrwx0nsqv7qns5gm4vraqeam24u '{ \"update_members\": { \"add\": [{ \"addr\": \"wasm1um59mldkdj8ayl5gkn\np9pnrdlw33v40sh5l4nx\", \"weight\": 1 }], \"remove\": [] } }' --from wallet $TXFLAG -y The message for modifying the members is update_members and it has two fields: members to remove, and members to add. Members to remove are just addresses. Members to add have a bit more complex structure: they are records with two fields: address and weight. Weight is not relevant for us now, it is just metadata stored with every group member - for us, it would always be 1. Let's query the contract again to check if our message changed anything: $ wasmd query wasm contract-state smart wasm1n5x8hmstlzdzy5jxd70273tuptr4zsclrwx0nsqv7qns5gm4vraqeam24u '{ \"list_members\": {} }'\ndata: members: - addr: wasm1um59mldkdj8ayl5gknp9pnrdlw33v40sh5l4nx weight: 1 As you can see, the contract updated its state. This is basically how it works - sending messages to contracts causes them to update the state, and the state can be queried at any time. For now, to keep things simple we were just interacting with the contract directly by wasmd, but as described before - contracts can communicate with each other. However, to investigate this we need to understand how to write contracts. Next time we will look at the contract structure and we will map it part by part to what we have learned until now.","breadcrumbs":"The Actor Model » Actors in the blockchain » Executions to perform some actions","id":"54","title":"Executions to perform some actions"},"55":{"body":"In previous chapters, we talked about the actor model and how it is implemented in the blockchain. Now it is time to look closer into the typical contract structure to understand how different features of the actor model are mapped to it. This will not be a step-by-step guide on contract creation, as it is a topic for the series itself. It would be going through contract elements roughly to visualize how to handle architecture in the actor model.","breadcrumbs":"The Actor Model » Contract as an actor » Smart contract as an actor","id":"55","title":"Smart contract as an actor"},"56":{"body":"As before we would start with the state. Previously we were working with the cw4-group contract, so let's start by looking at its code. Go to cw-plus/contracts/cw4-group/src. The folder structure should look like this:  src\n├──  contract.rs\n├──  error.rs\n├──  helpers.rs\n├──  lib.rs\n├──  msg.rs\n└──  state.rs As you may already figure out, we want to check the state.rs first. The most important thing here is a couple of constants: ADMIN, HOOKS, TOTAL, and MEMBERS. Every one of such constants represents a single portion of the contract state - as tables in databases. The types of those constants represent what kind of table this is. The most basic ones are Item, which keeps zero or one element of a given type, and Map which is a key-value map. You can see Item is used to keep an admin and some other data: HOOKS, and TOTAL. HOOKS is used by the cw4-group to allow subscription to any changes to a group - a contract can be added as a hook, so when the group changes, a message is sent to it. The TOTAL is just a sum of all members' weights. The MEMBERS in the group contract is the SnapshotMap - as you can imagine, it is a Map, with some steroids - this particular one, gives us access to the state of the map at some point in history, accessing it by the blockchain height. height is the count of blocks created since the beggining of blockchain, and it is the most atomic time representation in smart contracts. There is a way to access the clock time in them, but everything happening in a single block is considered happening in the same moment. Other types of storage objects not used in group contracts are: IndexedMap - another map type, that allows accessing values by a variety of keys IndexedSnapshotMap - IndexedMap and SnapshotMap married What is very important - every state type in the contract is accessed using some name. All of those types are not containers, just accessors to the state. Do you remember that I told you before that blockchain is our database? And that is correct! All those types are just ORM to this database - when we use them to get actual data from it, we pass a special State object to them, so they can retrieve items from it. You may ask - why all that data for a contract are not auto-fetched by whatever is running it. That is a good question. The reason is that we want contracts to be lazy with fetching. Copying data is a very expensive operation, and for everything happening on it, someone has to pay - it is realized by gas cost. I told you before, that as a contract developer you don't need to worry about gas at all, but it was only partially true. You don't need to know exactly how gas is calculated, but by lowering your gas cost, you would may execution of your contracts cheaper which is typically a good thing. One good practice to achieve that is to avoid fetching data you will not use in a particular call.","breadcrumbs":"The Actor Model » Contract as an actor » The state","id":"56","title":"The state"},"57":{"body":"In a blockchain, contracts communicate with each other by some JSON messages. They are defined in most contracts in the msg.rs file. Take a look at it. There are three types on it, let's go through them one by one. The first one is an InstantiateMsg. This is the one, that is sent on contract instantiation. It typically contains some data which is needed to properly initialize it. In most cases, it is just a simple structure. Then there are two enums: ExecuteMsg, and QueryMsg. They are enums because every single variant of them represents a different message which can be sent. For example, the ExecuteMsg::UpdateAdmin corresponds to the update_admin message we were sending previously. Note, that all the messages are attributed with #[derive(Serialize, Deserialize)], and #[serde(rename_all=\"snake_case\")]. Those attributes come from the serde crate, and they help us with deserialization of them (and serialization in case of sending them to other contracts). The second one is not required, but it allows us to keep a camel-case style in our Rust code, and yet still have JSONs encoded with a snake-case style more typical to this format. I encourage you to take a closer look at the serde documentation, like everything there, can be used with the messages. One important thing to notice - empty variants of those enums, tend to use the empty brackets, like Admin {} instead of more Rusty Admin. It is on purpose, to make JSONs cleaner, and it is related to how serde serializes enum. Also worth noting is that those message types are not set in stone, they can be anything. This is just a convention, but sometimes you would see things like ExecuteCw4Msg, or similar. Just keep in mind, to keep your message name obvious in terms of their purpose - sticking to ExecuteMsg/QueryMsg is generally a good idea.","breadcrumbs":"The Actor Model » Contract as an actor » Messages","id":"57","title":"Messages"},"58":{"body":"So now, when we have our contract message, we need a way to handle them. They are sent to our contract via entry points. There are three entry points in the cw4-group contract: #[cfg_attr(not(feature = \"library\"), entry_point)]\npub fn instantiate( deps: DepsMut, env: Env, _info: MessageInfo, msg: InstantiateMsg,\n) -> Result { // ...\n}\n#[cfg_attr(not(feature = \"library\"), entry_point)]\npub fn execute( deps: DepsMut, env: Env, info: MessageInfo, msg: ExecuteMsg,\n) -> Result { // ..\n}\n#[cfg_attr(not(feature = \"library\"), entry_point)]\npub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { // ..\n} Those functions are called by the CosmWasm virtual machine when a message is to be handled by contract. You can think about them as the main function of normal programs, except they have a signature that better describes the blockchain itself. What is very important is that the names of those entry points (similarly to the main function) are fixed - it is relevant, so the virtual machine knows exactly what to call. So, let's start with the first line. Every entry point is attributed with #[cfg_attr(not(feature = \"library\"), entry_point)]. It may look a bit scary, but it is just a conditional equivalent of #[entry_point] - the attribute would be there if and only if the \"library\" feature is not set. We do this to be able to use our contracts as dependencies for other contracts - the final binary can contain only one copy of each entry point, so we make sure, that only the top-level one is compiled without this feature. The entry_point attribute is a macro that generates some boilerplate. As the binary is run by WASM virtual machine, it doesn't know much about Rust types - the actual entry point signatures are very inconvenient to use. To overcome this issue, there is a macro created, which generates entry points for us, and those entry points are just calling our functions. Now take a look at functions arguments. Every single entry point takes as the last argument a message which triggered the execution of it (except for reply - I will explain it later). In addition to that, there are additional arguments provided by blockchain: Deps or DepsMut object is the gateway to the world outside the smart contract context. It allows accessing the contract state, as well as querying other contracts, and also delivers an Api object with a couple of useful utility functions. The difference is that DepsMut allows updating state, while Deps allows only to look at it. Env object delivers information about the blockchain state at the moment of execution - its height, the timestamp of execution and information about the executing contract itself. MessageInfo object is information about the contract call - it contains the address which sends the message, and the funds sent with the message. Keep in mind, that the signatures of those functions are fixed (except the messages type), so you cannot interchange Deps with DepsMut to update the contract state in the query call. The last portion of entry points is the return type. Every entry point returns a Result type, with any error which can be turned into a string - in case of contract failure, the returned error is just logged. In most cases, the error type is defined for a contract itself, typically using a thiserror crate. Thiserror is not required here, but is strongly recommended - using it makes the error definition very straightforward, and also improves the testability of the contract. The important thing is the Ok part of Result. Let's start with the query because this one is the simplest. The query always returns the Binary object on the Ok case, which would contain just serialized response. The common way to create it is just calling a to_binary method on an object implementing serde::Serialize, and they are typically defined in msg.rs next to message types. Slightly more complex is the return type returned by any other entry point - the cosmwasm_std::Response type. This one keep everything needed to complete contract execution. There are three chunks of information in that. The first one is an events field. It contains all events, which would be emitted to the blockchain as a result of the execution. Events have a really simple structure: they have a type, which is just a string, and a list of attributes which are just string-string key-value pairs. You can notice that there is another attributes field on the Response. This is just for convenience - most executions would return only a single event, and to make it a bit easier to operate one, there is a set of attributes directly on response. All of them would be converted to a single wasm event which would be emitted. Because of that, I consider events and attributes to be the same chunk of data. Then we have the messages field, of SubMsg type. This one is the clue of cross-contact communication. Those messages would be sent to the contracts after processing. What is important - the whole execution is not finished, unless the processing of all sub-messages scheduled by the contract finishes. So, if the group contract sends some messages as a result of update_members execution, the execution would be considered done only if all the messages sent by it would also be handled (even if they failed). So, when all the sub-messages sent by contract are processed, then all the attributes generated by all sub-calls and top-level calls are collected and reported to the blockchain. But there is one additional piece of information - the data. So, this is another Binary field, just like the result of a query call, and just like it, it typically contains serialized JSON. Every contract call can return some additional information in any format. You may ask - in this case, why do we even bother returning attributes? It is because of a completely different way of emitting events and data. Any attributes emitted by the contract would be visible on blockchain eventually (unless the whole message handling fails). So, if your contract emitted some event as a result of being sub-call of some bigger use case, the event would always be there visible to everyone. This is not true for data. Every contract call would return only a single data chunk, and it has to decide if it would just forward the data field of one of the sub-calls, or maybe it would construct something by itself. I would explain it in a bit more detail in a while.","breadcrumbs":"The Actor Model » Contract as an actor » Entry points","id":"58","title":"Entry points"},"59":{"body":"I don't want to go into details of the Response API, as it can be read directly from documentation, but I want to take a bit closer look at the part about sending messages. The first function to use here is add_message, which takes as an argument the CosmosMsg (or rather anything convertible to it). A message added to response this way would be sent and processed, and its execution would not affect the result of the contract at all. The other function to use is add_submessage, taking a SubMsg argument. It doesn't differ much from add_message - SubMsg just wraps the CosmosMsg, adding some info to it: the id field, and reply_on. There is also a gas_limit thing, but it is not so important - it just causes sub-message processing to fail early if the gas threshold is reached. The simple thing is reply_on - it describes if the reply message should be sent on processing success, on failure, or both. The id field is an equivalent of the order id in our KFC example from the very beginning. If you send multiple different sub-messages, it would be impossible to distinguish them without that field. It would not even be possible to figure out what type of original message reply handling is! This is why the id field is there - sending a sub-message you can set it to any value, and then on the reply, you can figure out what is happening based on this field. An important note here - you don't need to worry about some sophisticated way of generating ids. Remember, that the whole processing is atomic, and only one execution can be in progress at once. In most cases, your contract sends a fixed number of sub-messages on very concrete executions. Because of that, you can hardcode most of those ids while sending (preferably using some constant). To easily create submessages, instead of setting all the fields separately, you would typically use helper constructors: SubMsg::reply_on_success, SubMsg::reply_on_error and SubMsg::reply_always.","breadcrumbs":"The Actor Model » Contract as an actor » Sending submessages","id":"59","title":"Sending submessages"},"6":{"body":"To guarantee you are ready to build your smart contracts, you need to make sure you can build examples. Checkout the cw-plus repository and run the testing command in its folder: $ git clone git@github.com:CosmWasm/cw-plus.git\n$ cd ./cw-plus\ncw-plus $ cargo test You should see that everything in the repository gets compiled, and all tests pass. cw-plus is a great place to find example contracts - look for them in contracts directory. The repository is maintained by CosmWasm creators, so contracts in there should follow good practices. To verify the cosmwasm-check utility, first, you need to build a smart contract. Go to some contract directory, for example, contracts/cw1-whitelist, and call cargo wasm: cw-plus $ cd contracts/cw1-whitelist\ncw-plus/contracts/cw1-whitelist $ cargo wasm You should be able to find your output binary in the target/wasm32-unknown-unknown/release/ of the root repo directory - not in the contract directory itself! Now you can check if contract validation passes: cw-plus/contracts/cw1-whitelist $ cosmwasm-check ../../target/wasm32-unknown-unknown/release/cw1_whitelist.wasm\nAvailable capabilities: {\"iterator\", \"cosmwasm_1_1\", \"cosmwasm_1_2\", \"stargate\", \"staking\"} ../../target/wasm32-unknown-unknown/release/cw1_whitelist.wasm: pass All contracts (1) passed checks!","breadcrumbs":"Setting up the environment » Verifying the installation","id":"6","title":"Verifying the installation"},"60":{"body":"If you took a look at the CosmosMsg type, you could be very surprised - there are so many variants of them, and it is not obvious how they relate to communication with other contracts. The message you are looking for is the WasmMsg (CosmosMsg::Wasm variant). This one is very much similar to what we already know - it has a couple of variants of operation to be performed by contracts: Execute, but also Instantiate (so we can create new contracts in contract executions), and also Migrate, UpdateAdmin, and ClearAdmin - those are used to manage migrations (will tell a bit about them at the end of this chapter). Another interesting message is the BankMsg (CosmosMsg::Bank). This one allows a contract to transfer native tokens to other contracts (or burn them - equivalent to transferring them to some black whole contract). I like to think about it as sending a message to a very special contract responsible for handling native tokens - this is not a true contract, as it is handled by the blockchain itself, but at least to me it simplifies things. Other variants of CosmosMsg are not very interesting for now. The Custom one is there to allow other CosmWasm-based blockchains to add some blockchain-handled variant of the message. This is a reason why most message-related types in CosmWasm are generic over some T - this is just a blockchain-specific type of message. We will never use it in the wasmd. All other messages are related to advanced CosmWasm features, and I will not describe them here.","breadcrumbs":"The Actor Model » Contract as an actor » CosmosMsg","id":"60","title":"CosmosMsg"},"61":{"body":"So now that we know how to send a submessage, it is time to talk about handling the reply. When sub-message processing is finished, and it is requested to reply, the contract is called with an entry point: #[cfg_attr(not(feature = \"library\"), entry_point)]\npub fn reply(deps: DepsMut, env: Env, msg: Reply) -> Result { // ...\n} The DepsMut, and Env arguments are already familiar, but there is a new one, substituting the typical message argument: the cosmwasm_std::Reply. This is a type representing the execution status of the sub-message. It is slightly processed cosmwasm_std::Response. The first important thing it contains is an id - the same, which you set sending sub-message, so now you can identify your response. The other one is the ContractResult, which is very similar to the Rust Result type, except it is there for serialization purposes. You can easily convert it into a Result with an into_result function. In the error case of ContracResult, there is a string - as I mentioned before, errors are converted to strings right after execution. The Ok case contains SubMsgExecutionResponse with two fields: events emitted by sub-call, and the data field embedded on response. As said before, you never need to worry about forwarding events - CosmWasm would do it anyway. The data however, is another story. As mentioned before, every call would return only a single data object. In the case of sending sub-messages and not capturing a reply, it would always be whatever is returned by the top-level message. But it is not the case when reply is called. If a a reply is called, then it is a function deciding about the final data. It can decide to either forward the data from the sub-message (by returning None) or to overwrite it. It cannot choose, to return data from the original execution processing - if the contract sends sub-messages waiting for replies, it is supposed to not return any data, unless replies are called. But what happens if multiple sub-messages are sent? What would the final data contain? The rule is - the last non-None. All sub-messages are always called in the order of adding them to the Response. As the order is deterministic and well defined, it is always easy to predict which reply would be used.","breadcrumbs":"The Actor Model » Contract as an actor » Reply handling","id":"61","title":"Reply handling"},"62":{"body":"I mentioned migrations earlier when describing the WasmMsg. So, migration is another action possible to be performed by contracts, which is kind of similar to instantiate. In software engineering, it is a common thing to release an updated version of applications. It is also a case in the blockchain - SmartContract can be updated with some new features. In such cases, a new code is uploaded, and the contract is migrated - so it knows that from this point, its messages are handled by another, updated contract code. However, it may be that the contract state used by the older version of the contract differs from the new one. It is not a problem if some info was added (for example some additional map - it would be just empty right after migration). But the problem is, when the state changes, for example, the field is renamed. In such a case, every contract execution would fail because of (de)serialization problems. Or even more subtle cases, like adding a map, but one which should be synchronized with the whole contract state, not empty. This is the purpose of the migration entry point. It looks like this: #[cfg_attr(not(feature = \"library\"), entry_point)]\npub fn migrate(deps: DepsMut, env: Env, msg: MigrateMsg) -> Result, ContracError> { // ..\n} MigrateMsg is the type defined by the contract in msg.rs. The migrate entry point would be called at the moment of performing the migration, and it is responsible for making sure the state is correct after the migration. It is very similar to schema migrations in traditional database applications. And it is also kind of difficult, because of version management involved - you can never assume, that you are migrating a contract from the previous version - it can be migrated from any version, released anytime - even later than that version we are migrating to! It is worth bringing back one issue from the past - the contract admin. Do you remember the --no-admin flag we set previously on every contract instantiation? It made our contract unmigrateable. Migrations can be performed only by contract admin. To be able to use it, you should pass --admin address flag instead, with the address being the address that would be able to perform migrations.","breadcrumbs":"The Actor Model » Contract as an actor » Migrations","id":"62","title":"Migrations"},"63":{"body":"Sudo is the last basic entry point in CosmWasm, and it is the one we would never use in wasmd. It is equivalent to CosmosMsg::Custom, but instead of being a special blockchain-specific message to be sent and handled by a blockchain itself, it is now a special blockchain-specific message sent by the blockchain to contract in some conditions. There are many uses for those, but I will not cover them, because would not be related to CosmWasm itself. The signature of sudo looks like this: #[cfg_attr(not(feature = \"library\"), entry_point)]\npub fn sudo(deps: DepsMut, env: Env, msg: SudoMsg) -> Result { // ..\n} The important difference is that because sudo messages are blockchain specific, the SudoMsg type is typically defined by some blockchain helper crate, not the contract itself.","breadcrumbs":"The Actor Model » Contract as an actor » Sudo","id":"63","title":"Sudo"},"64":{"body":"We already covered creating a single isolating contract. However, SOLID principles tell us that entities should be as small as reasonably possible - such as they have a single responsibility . Entities we are focusing on now are smart contracts, and we want to make sure that every smart contract has a sole responsibility it takes care of. But we also want to build complex systems using smart contracts. To do so, we need to be able to communicate between them. We already talked about what such communication looks like using an actor model. Now it's time to use this knowledge in practice. In this chapter, we will improve the previously created administration group model to solve the problem I brought - the possibility of adding own multiple addresses by a single admin to take bigger donation parts. We would also give admins some work to do besides being admins.","breadcrumbs":"Cross contract communication » Cross contract communication","id":"64","title":"Cross contract communication"},"65":{"body":"This time we will start discussing the design of our system a bit. Building multi-contract systems tend to be a bit more complicated than just isolated contracts, so I want to give you some anchor on what we are building in this chapter. If you feel lost with a design, don't worry - it will get clear while implementing contracts. For now, go through it to get a general idea. First, let's think about the problem we want to solve. Our admins are a vector of addresses. Anyone already an admin can add anyone he wants to the list. But this \"anyone\" can be a second instance of the same admin account, so he counts twice for donations! This issue is relatively simple to fix, but there is another problem - as we already learned, the admin could create a smart contract which he and only he can withdraw tokens from and register as another admin in the group! Instantiating it multiple times, he can achieve his goal even if we prevent adding the same address multiple times. There would be many distinct addresses that the same person owns. It looks like an unpleasant situation, but there are ways to manage it. The one we would implement is voting. Instead of being able to add another admin to the list, admins would be allowed to propose their colleagues as new admins. It would start a voting process - everyone who was an admin at the time of the proposal creation would be able to support it. If more than half admins would support the new candidate, he would immediately become an admin. It is not the most convoluted voting process, but it would be enough for our purposes.","breadcrumbs":"Cross contract communication » Design » Design","id":"65","title":"Design"},"66":{"body":"To achieve this goal, we would create two smart contracts. First, one would be reused contract from the Basics chapter - it would be an admin contract. Additionally, we would add a voting contract. It would be responsible for managing a single voting process. It would be instantiated by an admin contract whenever an admin wants to add his friend to a list. Here is a diagram of the contracts relationship: Here is adding an admin flowchart - assuming there are 5 admins on the contract already, but 2 of them did nothing: I already put some hints about contracts implementation, but I will not go into them yet.","breadcrumbs":"Cross contract communication » Design » Voting process","id":"66","title":"Voting process"},"67":{"body":"There is one other thing we want to add - some way to give admins work. The admin contract would behave like a proxy to call another contract. That means that some other external contract would just set our admin instance as a specific address that can perform executions on it, and admins would perform actions this way. The external contract would see execution as the admin contract would do it. Here is an updated contracts diagram: And calling external contract flowchart: Note that the msg on execute admin contract message is some arbitrary message just forwarded to the external contract. It would be a base64-encoded message in the real world, but it is just an implementation detail. Ultimately, we will create a simple example of an external contract to understand how to use such a pattern.","breadcrumbs":"Cross contract communication » Design » Messages forwarding","id":"67","title":"Messages forwarding"},"68":{"body":"Now that we know what we want to achieve, we can start by aligning the contract we already have to become an admin contract. It is primarily fine at this point, but we want to do a cleanup.","breadcrumbs":"Cross contract communication » Fixing admin contract » Fixing admin contract","id":"68","title":"Fixing admin contract"},"69":{"body":"The first thing to do is to get rid of the Greet query - it was good as a starter query example, but it has no practical purpose and only generates noise. We want to remove the unnecessary variant from the query enum: # use cosmwasm_schema::{cw_serde, QueryResponses};\n# use cosmwasm_std::Addr;\n# # #[cw_serde]\n# pub struct InstantiateMsg {\n# pub admins: Vec,\n# pub donation_denom: String,\n# }\n# # #[cw_serde]\n# pub enum ExecuteMsg {\n# Leave {},\n# Donate {},\n# }\n# # #[cw_serde]\n# pub struct AdminsListResp {\n# pub admins: Vec,\n# }\n#\n#[cw_serde]\n#[derive(QueryResponses)]\npub enum QueryMsg { #[returns(AdminsListResp)] AdminsList {},\n} Then we also remove the invalid path in the query dispatcher: pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { use QueryMsg::*; match msg { AdminsList {} => to_binary(&query::admins_list(deps)?), }\n} Finally, we remove the irrelevant handler from the contract::query module. We also need to make sure all references to it are gone (eg. if there are any in the tests).","breadcrumbs":"Cross contract communication » Fixing admin contract » Cleaning up queries","id":"69","title":"Cleaning up queries"},"7":{"body":"In the past, we suggested playing with contracts on the malaga testnet using wasmd. Now malaga is no longer operative, and the best way to test the contract in the real environment is to use one of the big CosmWasm chains testnets - Osmosis, Juno, Terra, or other ones. Here is the recommended introduction on how to start with the Osmosis testnet.","breadcrumbs":"Quick start with wasmd » Quick start with wasmd","id":"7","title":"Quick start with wasmd"},"70":{"body":"At the very beginning of the book, we set the crate-type in Cargo.toml as \"cdylib\". It was required to generate the wasm output, but it comes with a drawback - the dynamic libraries, as this cannot be used as dependencies in other crates. It was not a problem before, but in practice we often want to depend contract on others to get access to some types of them - for example, defined messages. Good for us. It is easy to fix. You might notice that the crate-type is an array, not a single string. The reason for that is that our project can emit several targets - in particular, we can add there the default \"rlib\" crate type to make it generate a \"rust library\" output - which is what we need to use as a dependency. Let's update our Cargo.toml: [package]\nname = \"admin\"\nversion = \"0.1.0\"\nedition = \"2021\" [lib]\ncrate-type = [\"cdylib\", \"rlib\"]\n# # [features]\n# library = []\n# # [dependencies]\n# cosmwasm-std = { version = \"1.1.4\", features = [\"staking\"] }\n# serde = { version = \"1.0.103\", default-features = false, features = [\"derive\"] }\n# cw-storage-plus = \"0.15.1\"\n# thiserror = \"1\"\n# schemars = \"0.8.1\"\n# cw-utils = \"0.15.1\"\n# cosmwasm-schema = \"1.1.4\"\n# # [dev-dependencies]\n# cw-multi-test = \"0.15.1\" Also, note I changed the contract name - \"contract\" is not very descriptive, so I updated it to \"admin\".","breadcrumbs":"Cross contract communication » Fixing admin contract » Generating the library output","id":"70","title":"Generating the library output"},"71":{"body":"Last but not least - we want to better structure our project. So far, we have only one contract, so we just worked on it as a whole project. Now we want some directory tree that reflects relations between contracts we create. First, create a directory for the project. Then we want to create a \"contracts\" subdirectory in it. It is not technically required from Rust's POV, but there are tools in our environment, like the workspace optimizer, which would assume it is where it should look for a contract. It is a common pattern you will see in CosmWasm contracts repos. Then we copy the whole project directory from the previous chapter into the contracts, renaming it to admin. Finally, we want to couple all our projects (for now, it is just one, but we know there will be more there). To do so, we create the workspace-level Cargo.toml file in the top-level project directory: [workspace]\nmembers = [\"contracts/*\"]\nresolver = \"2\" This Cargo.toml differs slightly from the typical project-level one - it defines the workspace. The most important field here is the members - it defines projects being part of the workspace. The other field is the resolver. It is something to remember to add - it instructs cargo to use version 2 of the dependency resolver. This has been the default for non-workspaces since Rust 2021, but because of compatibility reasons, the default couldn't be changed for workspaces - but it is advised to add it to every single newly created workspace. The last field which might be useful for workspaces is exclude - it allows to create projects in the workspace directory tree, which is not a part of this workspace - we will not use it, but it is good to know about it. Now just for clarity, let's see the top-level directory structure: .\n├── Cargo.lock\n├── Cargo.toml\n├── contracts\n│ └── admin\n└── target ├── CACHEDIR.TAG └── debug You can see the target directory and Cargo.lock files existing in the tree - it is because I already built and ran tests for the admin contract - in Rust workspaces, `cargo`` knows to build everything in the top level, even if it would be built from the inner directory.","breadcrumbs":"Cross contract communication » Fixing admin contract » Project structure","id":"71","title":"Project structure"},"72":{"body":"There is one thing to be immediately improved in the admin contract. Let's check the contract state: # use cosmwasm_std::Addr;\n# use cw_storage_plus::Item;\n# pub const ADMINS: Item> = Item::new(\"admins\");\npub const DONATION_DENOM: Item = Item::new(\"donation_denom\"); Note that we keep our admin list as a single vector. However, in the whole contract, in most cases, we access only a single element of this vector. This is not ideal, as now, whenever we want to access the single admin entry, we have first to deserialize the list containing all of them and then iterate over them until we find the interesting one. This might consume a serious amount of gas and is completely unnecessary overhead - we can avoid that using the Map storage accessor.","breadcrumbs":"Cross contract communication » Map storage » Map storage","id":"72","title":"Map storage"},"73":{"body":"First, let's define a map - in this context, it would be a set of keys with values assigned to them, just like a HashMap in Rust or dictionaries in many languages. We define it as similar to an Item, but this time we need two types - the key type and the value type: use cw_storage_plus::Map; pub const STR_TO_INT_MAP: Map = Map::new(\"str_to_int_map\"); Then to store some items on the Map , we use a save method - same as for an Item: STR_TO_INT_MAP.save(deps.storage, \"ten\".to_owned(), 10);\nSTR_TO_INT_MAP.save(deps.storage, \"one\".to_owned(), 1); Accessing entries in the map is also as easy as reading an item: let ten = STR_TO_INT_MAP.load(deps.storage, \"ten\".to_owned())?;\nassert_eq!(ten, 10); let two = STR_TO_INT_MAP.may_load(deps.storage, \"two\".to_owned())?;\nassert_eq!(two, None); Obviously, if the element is missing in the map, the load function will result in an error - just like for an item. On the other hand - may_load returns a Some variant when element exits. Another very useful accessor that is specific to the map is the has function, which checks for the existence of the key in the map: let contains = STR_TO_INT_MAP.has(deps.storage, \"three\".to_owned())?;\nassert!(!contains); Finally, we can iterate over elements of the maps - either its keys or key-value pairs: use cosmwasm_std::Order; for k in STR_TO_INT_MAP.keys(deps.storage, None, None, Order::Ascending) { let _addr = deps.api.addr_validate(k?);\n} for item in STR_TO_INT_MAP.range(deps.storage, None, None, Order::Ascending) { let (_key, _value) = item?;\n} First, you might wonder about extra values passed to keys and range - those are in order: lower and higher bounds of iterated elements, and the order elements should be traversed. While working with typical Rust iterators, you would probably first create an iterator over all the elements and then somehow skip those you are not interested in. After that, you will stop after the last interesting element. It would more often than not require accessing elements you filter out, and this is the problem - it requires reading the element from the storage. And reading it from the storage is the expensive part of working with data, which we try to avoid as much as possible. One way to do it is to instruct the Map where to start and stop deserializing elements from storage so it never reaches those outside the range. Another critical thing to notice is that the iterator returned by both keys and range functions are not iterators over elements - they are iterators over Results. It is a thing because, as it is rare, it might be that item is supposed to exist, but there is some error while reading from storage - maybe the stored value is serialized in a way we didn't expect, and deserialization fails. This is actually a real thing that happened in one of the contracts I worked on in the past - we changed the value type of the Map, and then forgot to migrate it, which caused all sorts of problems.","breadcrumbs":"Cross contract communication » Map storage » The Map storage","id":"73","title":"The Map storage"},"74":{"body":"So I imagine you can call me crazy right now - why do I spam about a Map, while we are working with vector? It is clear that those two represent two distinct things! Or do they? Let's reconsider what we keep in the ADMINS vector - we have a list of objects which we expect to be unique, which is a definition of a mathematical set. So now let me bring back my initial definition of the map: First, let's define a map - in this context, it would be a set of keys with values assigned to them, just like a HashMap in Rust or dictionaries in many languages. I purposely used the word \"set\" here - the map has the set built into it. It is a generalization of a set or reversing the logic - the set is a particular case of a map. If you imagine a set that map every single key to the same value, then the values become irrelevant, and such a map becomes a set semantically. How can you make a map mapping all the keys to the same value? We pick a type with a single value. Typically in Rust, it would be a unit type (()), but in CosmWasm, we tend to use the Empty type from CW standard crate: use cosmwasm_std::{Addr, Empty};\nuse cw_storage_plus::Map; pub const ADMINS: Map = Map::new(\"admins\"); We now need to fix the usage of the map in our contract. Let's start with contract instantiation: use crate::msg::InstantiateMsg;\nuse crate::state::{ADMINS, DONATION_DENOM};\nuse cosmwasm_std::{ DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n}; pub fn instantiate( deps: DepsMut, _env: Env, _info: MessageInfo, msg: InstantiateMsg,\n) -> StdResult { for addr in msg.admins { let admin = deps.api.addr_validate(&addr)?; ADMINS.save(deps.storage, admin, &Empty {})?; } DONATION_DENOM.save(deps.storage, &msg.donation_denom)?; Ok(Response::new())\n} It didn't simplify much, but we no longer need to collect our address. Then let's move to the leaving logic: use crate::state::ADMINS;\nuse cosmwasm_std::{DepsMut, MessageInfo}; pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult { ADMINS.remove(deps.storage, info.sender.clone()); let resp = Response::new() .add_attribute(\"action\", \"leave\") .add_attribute(\"sender\", info.sender.as_str()); Ok(resp)\n} Here we see a difference - we don't need to load a whole vector. We remove a single entry with the remove function. What I didn't emphasize before, and what is relevant, is that Map stores every single key as a distinct item. This way, accessing a single element will be cheaper than using a vector. However, this has its downside - accessing all the elements is more gas-consuming using Map! In general, we tend to avoid such situations - the linear complexity of the contract might lead to very expensive executions (gas-wise) and potential vulnerabilities - if the user finds a way to create many dummy elements in such a vector, he may make the execution cost exceeding any gas limit. Unfortunately, we have such an iteration in our contract - the distribution flow becomes as follows: use crate::error::ContractError;\nuse crate::state::{ADMINS, DONATION_DENOM};\nuse cosmwasm_std::{ coins, BankMsg,DepsMut, MessageInfo, Order, Response\n}; pub fn donate(deps: DepsMut, info: MessageInfo) -> Result { let denom = DONATION_DENOM.load(deps.storage)?; let admins: Result, _> = ADMINS .keys(deps.storage, None, None, Order::Ascending) .collect(); let admins = admins?; let donation = cw_utils::must_pay(&info, &denom)?.u128(); let donation_per_admin = donation / (admins.len() as u128); let messages = admins.into_iter().map(|admin| BankMsg::Send { to_address: admin.to_string(), amount: coins(donation_per_admin, &denom), }); let resp = Response::new() .add_messages(messages) .add_attribute(\"action\", \"donate\") .add_attribute(\"amount\", donation.to_string()) .add_attribute(\"per_admin\", donation_per_admin.to_string()); Ok(resp)\n} If I had to write a contract like this, and this donate would be a critical, often called flow, I would advocate for going for an Item> here. Fortunately, it is not the case - the distribution does not have to be linear in complexity! It might sound a bit crazy, as we have to iterate over all receivers to distribute funds, but this is not true - there is a pretty nice way to do so in constant time, which I will describe later in the book. For now, we will leave it as it is, acknowledging the flaw of the contract, which we will fix later. The final function to fix is the admins_list query handler: use crate::state::ADMINS;\nuse cosmwasm_std::{Deps, Order, StdResult}; pub fn admins_list(deps: Deps) -> StdResult { let admins: Result, _> = ADMINS .keys(deps.storage, None, None, Order::Ascending) .collect(); let admins = admins?; let resp = AdminsListResp { admins }; Ok(resp)\n} Here we also have an issue with linear complexity, but it is far less of a problem. First, queries are often purposed to be called on local nodes, with no gas cost - we can query contracts as much as we want. And then, even if we have some limit on execution time/cost, there is no reason to query all the items every single time! We will fix this function later, adding pagination - to limit the execution time/cost of the query caller would be able to ask for a limited amount of items starting from the given one. Knowing this chapter, you can probably figure implementation of it right now, but I will show the common way we do that when I go through common CosmWasm practices.","breadcrumbs":"Cross contract communication » Map storage » Maps as sets","id":"74","title":"Maps as sets"},"75":{"body":"There is one subtlety to improve in our map usage. The thing is that right now, we index the map with the owned Addr key. That forces us to clone it if we want to reuse the key (particularly in the leave implementation). This is not a huge cost, but we can avoid it - we can define the key of the map to be a reference: use cosmwasm_std::{Addr, Empty};\nuse cw_storage_plus::Map; pub const ADMINS: Map<&Addr, Empty> = Map::new(\"admins\");\npub const DONATION_DENOM: Item = Item::new(\"donation_denom\"); Finally, we need to fix the usages of the map in two places: # use crate::state::{ADMINS, DONATION_DENOM};\n# use cosmwasm_std::{\n# DepsMut, Empty, Env, MessageInfo, Response, StdResult,\n# };\n#\npub fn instantiate( deps: DepsMut, _env: Env, _info: MessageInfo, msg: InstantiateMsg,\n) -> StdResult { for addr in msg.admins { let admin = deps.api.addr_validate(&addr)?; ADMINS.save(deps.storage, &admin, &Empty {})?; } // ... # DONATION_DENOM.save(deps.storage, &msg.donation_denom)?;\n# Ok(Response::new())\n} pub fn leave(deps: DepsMut, info: MessageInfo) -> StdResult { ADMINS.remove(deps.storage, &info.sender); // ... # let resp = Response::new()\n# .add_attribute(\"action\", \"leave\")\n# .add_attribute(\"sender\", info.sender.as_str());\n# Ok(resp)\n}","breadcrumbs":"Cross contract communication » Map storage » Reference keys","id":"75","title":"Reference keys"},"76":{"body":"The concept of time in the blockchain is tricky - as in every distributed system, it is not easy to synchronize the clocks of all the nodes. However, there is the notion of a time that is even monotonic - which means that it should never go \"backward\" between executions. Also, what is important is - time is always unique throughout the whole transaction - and even the entire block, which is built of multiple transactions. The time is encoded in the Env type in its block field, which looks like this: pub struct BlockInfo { pub height: u64, pub time: Timestamp, pub chain_id: String,\n} You can see the time field, which is the timestamp of the processed block. The height field is also worth mentioning - it contains a sequence number of the processed block. It is sometimes more useful than time, as it is guaranteed that the height field is guaranteed to increase between blocks, while two blocks may be executed with the same time (even though it is rather not probable). Also, many transactions might be executed in a single block. That means that if we need a unique id for the execution of a particular message, we should look for something more. This thing is a transaction field of the Env type: pub struct TransactionInfo { pub index: u32,\n} The index here contains a unique index of the transaction in the block. That means that to get the unique identifier of a transaction through the whole block, we can use the (height, transaction_index) pair.","breadcrumbs":"Cross contract communication » Working with time » Working with time","id":"76","title":"Working with time"},"77":{"body":"We want to use the time in our system to keep track of the join time of admins. We don't yet add new members to the group, but we can already set the join time of initial admins. Let's start updating our state: use cosmwasm_std::{Addr, Timestamp};\nuse cw_storage_plus::Map;\n# use cw_storage_plus::Item; pub const ADMINS: Map<&Addr, Timestamp> = Map::new(\"admins\");\n# pub const DONATION_DENOM: Item = Item::new(\"donation_denom\"); As you can see, our admins set became a proper map - we will assign the join time to every admin. Now we need to update how we initialize a map - we stored the Empty data previously, but it nevermore matches our value type. Let's check an updated instantiation function: You might argue to create a separate structure for the value of this map, so in the future, if we would need to add something there, but in my opinion, it would be premature - we can also change the entire value type in the future, as it would be the same breaking change. Now we need to update how we initialize a map - we stored the Empty data previously, but it nevermore matches our value type. Let's check an updated instantiation function: use crate::state::{ADMINS, DONATION_DENOM};\nuse cosmwasm_std::{ DepsMut, Env, MessageInfo, Response, StdResult,\n}; pub fn instantiate( deps: DepsMut, env: Env, _info: MessageInfo, msg: InstantiateMsg,\n) -> StdResult { for addr in msg.admins { let admin = deps.api.addr_validate(&addr)?; ADMINS.save(deps.storage, &admin, &env.block.time)?; } DONATION_DENOM.save(deps.storage, &msg.donation_denom)?; Ok(Response::new())\n} Instead of storing &Empty {} as an admin value, we store the join time, which we read from &env.block.time. Also, note that I removed the underscore from the name of the env block - it was there only to ensure the Rust compiler the variable is purposely unused and not some kind of a bug. Finally, remember to remove any obsolete Empty imports through the project - the compiler should help you point out unused imports.","breadcrumbs":"Cross contract communication » Working with time » Join time","id":"77","title":"Join time"},"78":{"body":"The last thing to add regarding join time is the new query asking for the join time of a particular admin. Everything you need to do that was already discussed, I'll leave it for you as an exercise. The query variant should look like: #[returns(JoinTimeResp)]\nJoinTime { admin: String }, And the example response type: #[cw_serde]\npub struct JoinTimeResp { pub joined: Timestamp,\n} You may question that in response type, I suggest always returning a joined value, but what to do when no such admin is added? Well, in such a case, I would rely on the fact that load function returns a descriptive error of missing value in storage - however, feel free to define your own error for such a case or even make the joined field optional, and be returned if requested admin exists. Finally, there would be a good idea to make a test for new functionality - call a new query right after instantiation to verify initial admins has proper join time (possibly by extending the existing instantiation test). One thing you might need help with in tests might be how to get the time of execution. Using any OS-time would be doomed to fail - instead, you can call the block_info function to reach the BlockInfo structure containing the block state at a particular moment in the app - calling it just before instantiation would make you sure you are working with the same state which would be simulated on the call.","breadcrumbs":"Cross contract communication » Working with time » Query and tests","id":"78","title":"Query and tests"},"79":{"body":"Infomation according to § 5 TMG","breadcrumbs":"Legal Information » Legal Information","id":"79","title":"Legal Information"},"8":{"body":"In this chapter, we will go through creating basic smart contracts step by step. I will try to explain the core ideas behind CosmWasm and the typical contract structure.","breadcrumbs":"Basics » Basics","id":"8","title":"Basics"},"80":{"body":"Confio GmbH 7th Floor Potsdamer Platz 1 10785 Berlin","breadcrumbs":"Legal Information » Provider","id":"80","title":"Provider"},"81":{"body":"Simon Warta","breadcrumbs":"Legal Information » Managing Director","id":"81","title":"Managing Director"},"82":{"body":"hello@confio.gmbh","breadcrumbs":"Legal Information » Contact","id":"82","title":"Contact"},"83":{"body":"HRB 221575, Amtsgericht Charlottenburg","breadcrumbs":"Legal Information » Commercial Register","id":"83","title":"Commercial Register"},"84":{"body":"DE339802279","breadcrumbs":"Legal Information » VAT number","id":"84","title":"VAT number"},"85":{"body":"Simon Warta c/o Confio GmbH 7th Floor Potsdamer Platz 1 10785 Berlin","breadcrumbs":"Legal Information » Responsible for the content","id":"85","title":"Responsible for the content"},"9":{"body":"As smart contracts are Rust library crates, we will start with creating one: $ cargo new --lib ./empty-contract You created a simple Rust library, but it is not yet ready to be a smart contract. The first thing to do is to update the Cargo.toml file: [package]\nname = \"contract\"\nversion = \"0.1.0\"\nedition = \"2021\" [lib]\ncrate-type = [\"cdylib\"] [dependencies]\ncosmwasm-std = { version = \"1.0.0-beta8\", features = [\"staking\"] } As you can see, I added a crate-type field for the library section. Generating the cdylib is required to create a proper web assembly binary. The downside of this is that such a library cannot be used as a dependency for other Rust crates - for now, it is not needed, but later we will show how to approach reusing contracts as dependencies. Additionally, there is one core dependency for smart contracts: the cosmwasm-std. This crate is a standard library for smart contracts. It provides essential utilities for communication with the outside world and a couple of helper functions and types. Every smart contract we will build will use this dependency.","breadcrumbs":"Basics » Create a Rust project » Create a Rust project","id":"9","title":"Create a Rust project"}},"length":86,"save":true},"fields":["title","body","breadcrumbs"],"index":{"body":{"root":{"0":{".":{"0":{"0":{"df":2,"docs":{"17":{"tf":1.0},"20":{"tf":1.0}}},"df":0,"docs":{}},"1":{".":{"0":{"df":8,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}},"3":{".":{"4":{"df":6,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"33":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"29":{"tf":1.0}}},"5":{".":{"1":{"df":2,"docs":{"33":{"tf":1.0},"70":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"34":{"tf":1.0}}},"5":{"2":{"df":1,"docs":{"33":{"tf":1.0}}},"df":0,"docs":{}},"8":{".":{"1":{"df":3,"docs":{"29":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"17":{"tf":2.0},"20":{"tf":2.0},"29":{"tf":1.4142135623730951}}},"1":{".":{"0":{".":{"0":{"df":6,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"1":{"0":{"3":{"df":7,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"1":{".":{"4":{"df":2,"docs":{"33":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{".":{"3":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"0":{"df":1,"docs":{"44":{"tf":1.0}}},"6":{"9":{"df":3,"docs":{"50":{"tf":1.7320508075688772},"51":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"7":{"8":{"5":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"73":{"tf":1.4142135623730951}}},"5":{"df":1,"docs":{"44":{"tf":1.0}}},"df":14,"docs":{"17":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"23":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.8284271247461903},"33":{"tf":1.0},"44":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":2.0},"6":{"tf":1.0},"70":{"tf":1.0},"73":{"tf":1.0},"80":{"tf":1.0},"85":{"tf":1.0}}},"2":{"0":{"2":{"1":{"df":9,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"1":{"5":{"7":{"5":{"df":1,"docs":{"83":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":9,"docs":{"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.23606797749979},"45":{"tf":1.7320508075688772},"66":{"tf":1.0},"71":{"tf":1.4142135623730951}}},"3":{"df":1,"docs":{"45":{"tf":1.0}}},"4":{"df":1,"docs":{"45":{"tf":1.0}}},"5":{"0":{"df":1,"docs":{"16":{"tf":1.0}}},"df":2,"docs":{"66":{"tf":1.0},"79":{"tf":1.0}}},"7":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}}}},"_":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"_":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"26":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"51":{"tf":1.0},"54":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":7,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951}}}}},"df":2,"docs":{"29":{"tf":1.0},"74":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":18,"docs":{"10":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":2.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.7320508075688772},"20":{"tf":2.449489742783178},"21":{"tf":2.449489742783178},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"26":{"tf":2.449489742783178},"29":{"tf":3.0},"58":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":18,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":2.0},"21":{"tf":2.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"58":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"73":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":9,"docs":{"10":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"73":{"tf":1.0}}}}},"df":0,"docs":{}}},"a":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":1,"docs":{"39":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"18":{"tf":1.0},"19":{"tf":1.4142135623730951},"41":{"tf":1.0},"47":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":12,"docs":{"10":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"33":{"tf":1.4142135623730951},"48":{"tf":1.0},"56":{"tf":2.23606797749979},"58":{"tf":1.0},"70":{"tf":1.0},"72":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951}},"o":{"df":0,"docs":{},"r":{"df":5,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"56":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"79":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"29":{"tf":1.7320508075688772},"30":{"tf":1.0},"65":{"tf":1.0}}}}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":5,"docs":{"26":{"tf":1.0},"56":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0}}}}}},"k":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"g":{"df":1,"docs":{"74":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"t":{"df":1,"docs":{"45":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":15,"docs":{"10":{"tf":1.0},"14":{"tf":2.0},"25":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"39":{"tf":1.7320508075688772},"40":{"tf":3.1622776601683795},"41":{"tf":3.4641016151377544},"42":{"tf":2.23606797749979},"43":{"tf":1.0},"44":{"tf":2.0},"45":{"tf":1.7320508075688772},"54":{"tf":1.0},"62":{"tf":1.0},"67":{"tf":1.0}}}},"v":{"df":1,"docs":{"39":{"tf":1.4142135623730951}}}},"o":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"45":{"tf":1.0}}},"df":18,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"29":{"tf":1.4142135623730951},"36":{"tf":1.0},"37":{"tf":1.4142135623730951},"38":{"tf":1.0},"39":{"tf":2.8284271247461903},"40":{"tf":2.23606797749979},"41":{"tf":1.7320508075688772},"42":{"tf":1.4142135623730951},"43":{"tf":1.0},"46":{"tf":1.0},"47":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"50":{"tf":1.0},"52":{"tf":1.4142135623730951},"55":{"tf":2.0},"64":{"tf":1.0}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":10,"docs":{"10":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.4142135623730951},"33":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"51":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{}}}},"d":{"d":{"_":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"26":{"tf":1.4142135623730951}},"e":{"(":{"\"":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":2.23606797749979},"74":{"tf":1.4142135623730951},"75":{"tf":1.0}}}},"d":{"d":{"df":0,"docs":{},"e":{"d":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"74":{"tf":1.0},"75":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"26":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}}}}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":2.449489742783178},"29":{"tf":3.4641016151377544}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"59":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"59":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":25,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"17":{"tf":1.0},"19":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.7320508075688772},"29":{"tf":1.0},"30":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.0},"4":{"tf":1.0},"44":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.4142135623730951},"54":{"tf":2.0},"60":{"tf":1.0},"65":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"67":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.4142135623730951},"77":{"tf":1.4142135623730951},"78":{"tf":1.0}},"e":{"d":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"26":{"tf":1.0},"29":{"tf":1.7320508075688772}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"t":{"df":11,"docs":{"11":{"tf":1.0},"12":{"tf":1.0},"15":{"tf":1.4142135623730951},"17":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.7320508075688772},"40":{"tf":1.0},"41":{"tf":1.4142135623730951},"5":{"tf":1.0},"58":{"tf":2.0},"62":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":7,"docs":{"11":{"tf":1.0},"20":{"tf":1.0},"26":{"tf":1.0},"33":{"tf":1.4142135623730951},"4":{"tf":1.0},"66":{"tf":1.0},"9":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":7,"docs":{"22":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"26":{"tf":1.7320508075688772},"29":{"tf":2.0},"32":{"tf":1.0},"33":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}},"r":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"d":{"(":{"\"":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"2":{"df":6,"docs":{"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":8,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":2.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":2.0},"26":{"tf":3.1622776601683795},"29":{"tf":4.358898943540674}}}}},"u":{"df":0,"docs":{},"s":{"df":3,"docs":{"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.8284271247461903}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":12,"docs":{"19":{"tf":1.0},"20":{"tf":1.7320508075688772},"21":{"tf":2.0},"22":{"tf":2.0},"23":{"tf":2.0},"24":{"tf":2.23606797749979},"26":{"tf":3.605551275463989},"29":{"tf":5.0990195135927845},"54":{"tf":1.4142135623730951},"74":{"tf":1.0},"75":{"tf":1.4142135623730951},"77":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":21,"docs":{"10":{"tf":1.7320508075688772},"15":{"tf":1.0},"18":{"tf":2.0},"19":{"tf":1.0},"20":{"tf":2.6457513110645907},"22":{"tf":1.4142135623730951},"26":{"tf":1.0},"28":{"tf":1.0},"30":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"51":{"tf":1.4142135623730951},"52":{"tf":3.605551275463989},"53":{"tf":1.4142135623730951},"54":{"tf":1.7320508075688772},"58":{"tf":1.0},"62":{"tf":1.7320508075688772},"64":{"tf":1.0},"65":{"tf":1.7320508075688772},"67":{"tf":1.0},"74":{"tf":1.0}}}}}}},"df":20,"docs":{"12":{"tf":1.0},"17":{"tf":1.4142135623730951},"19":{"tf":2.0},"21":{"tf":1.0},"26":{"tf":1.7320508075688772},"29":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":1.7320508075688772},"34":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":1.0},"59":{"tf":1.4142135623730951},"61":{"tf":1.0},"62":{"tf":1.4142135623730951},"64":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"74":{"tf":1.0},"78":{"tf":1.0},"9":{"tf":1.0}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"'":{"df":1,"docs":{"22":{"tf":1.0}}},".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"2":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":6,"docs":{"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"a":{"d":{"d":{"df":0,"docs":{},"e":{"d":{"[":{"0":{"df":2,"docs":{"26":{"tf":1.0},"29":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":2,"docs":{"26":{"tf":1.7320508075688772},"29":{"tf":2.449489742783178}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":30,"docs":{"19":{"tf":1.0},"20":{"tf":4.123105625617661},"21":{"tf":4.47213595499958},"22":{"tf":5.477225575051661},"23":{"tf":4.69041575982343},"24":{"tf":4.795831523312719},"26":{"tf":7.0710678118654755},"28":{"tf":1.4142135623730951},"29":{"tf":9.539392014169456},"30":{"tf":2.23606797749979},"32":{"tf":1.7320508075688772},"33":{"tf":3.0},"51":{"tf":1.7320508075688772},"54":{"tf":4.123105625617661},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"62":{"tf":2.0},"64":{"tf":1.7320508075688772},"65":{"tf":3.3166247903554},"66":{"tf":2.23606797749979},"67":{"tf":2.449489742783178},"68":{"tf":1.4142135623730951},"69":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951},"71":{"tf":1.7320508075688772},"72":{"tf":2.0},"74":{"tf":3.605551275463989},"75":{"tf":1.7320508075688772},"77":{"tf":2.8284271247461903},"78":{"tf":2.23606797749979}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"64":{"tf":1.0}}}}}},"s":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"(":{"df":0,"docs":{},"|":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"(":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}},"o":{"a":{"d":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":7,"docs":{"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.8284271247461903}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"74":{"tf":1.0},"75":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"s":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":10,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":8,"docs":{"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"74":{"tf":1.0}}}}},"df":0,"docs":{}},"df":1,"docs":{"74":{"tf":1.0}}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":10,"docs":{"20":{"tf":1.0},"21":{"tf":2.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.0},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"69":{"tf":1.4142135623730951}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":11,"docs":{"20":{"tf":1.0},"21":{"tf":2.8284271247461903},"22":{"tf":2.449489742783178},"23":{"tf":2.23606797749979},"24":{"tf":2.23606797749979},"26":{"tf":3.1622776601683795},"29":{"tf":4.0},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"69":{"tf":1.0},"74":{"tf":1.0}}}}}}}}}}}}}},"v":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"19":{"tf":1.0},"28":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"71":{"tf":1.0}}}},"o":{"c":{"df":1,"docs":{"74":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.0},"21":{"tf":1.0},"42":{"tf":1.0},"59":{"tf":1.0}}}},"df":0,"docs":{}}}},"g":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"19":{"tf":1.0},"40":{"tf":1.0},"48":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":2,"docs":{"15":{"tf":1.0},"33":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":1,"docs":{"28":{"tf":1.0}}}}}}}}},"i":{"a":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951}},"s":{"df":2,"docs":{"12":{"tf":1.0},"33":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":2,"docs":{"33":{"tf":1.0},"68":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"(":{"d":{"df":0,"docs":{},"e":{"a":{"d":{"_":{"c":{"df":0,"docs":{},"o":{"d":{"df":4,"docs":{"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":15,"docs":{"10":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.4142135623730951},"24":{"tf":1.0},"29":{"tf":1.0},"44":{"tf":1.0},"5":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951},"65":{"tf":1.0},"71":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"1":{"tf":1.0}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"i":{"df":17,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"56":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"64":{"tf":1.4142135623730951},"65":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"68":{"tf":1.0},"71":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"14":{"tf":1.0},"20":{"tf":1.4142135623730951},"42":{"tf":1.0}}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}},"w":{"a":{"df":0,"docs":{},"y":{"df":19,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.7320508075688772},"15":{"tf":1.7320508075688772},"22":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"52":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"61":{"tf":1.7320508075688772},"76":{"tf":1.0},"78":{"tf":1.0}}}},"df":0,"docs":{}}},"m":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":1,"docs":{"3":{"tf":1.0}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"29":{"tf":2.6457513110645907},"42":{"tf":1.7320508075688772},"44":{"tf":1.7320508075688772},"72":{"tf":1.0},"74":{"tf":1.4142135623730951}}}}}},"t":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"83":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"51":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"65":{"tf":1.0}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"51":{"tf":1.0}}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":25,"docs":{"15":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"38":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"53":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.4142135623730951},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.4142135623730951},"65":{"tf":1.7320508075688772},"67":{"tf":1.0},"73":{"tf":1.4142135623730951}}}}},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"20":{"tf":1.7320508075688772},"42":{"tf":1.0},"43":{"tf":1.0},"54":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"24":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"24":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"28":{"tf":1.0},"65":{"tf":1.7320508075688772}}}},"t":{"df":0,"docs":{},"h":{"df":8,"docs":{"10":{"tf":1.0},"20":{"tf":1.0},"44":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0}}},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"62":{"tf":1.0}}}}},"w":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"61":{"tf":1.0}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"19":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"i":{"df":8,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"19":{"tf":1.4142135623730951},"2":{"tf":1.4142135623730951},"29":{"tf":1.0},"33":{"tf":1.7320508075688772},"58":{"tf":1.0},"59":{"tf":1.0}}},"p":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"(":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"x":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"c":{"df":0,"docs":{},"o":{"d":{"df":8,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.7320508075688772},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.7320508075688772},"26":{"tf":2.6457513110645907},"29":{"tf":3.605551275463989}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"29":{"tf":2.0}}}},"df":0,"docs":{}}}},":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":8,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.7320508075688772},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.7320508075688772},"26":{"tf":2.6457513110645907},"29":{"tf":3.4641016151377544}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"df":0,"docs":{},"|":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"29":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":10,"docs":{"12":{"tf":1.0},"19":{"tf":2.23606797749979},"20":{"tf":2.449489742783178},"21":{"tf":3.3166247903554},"22":{"tf":2.8284271247461903},"23":{"tf":2.8284271247461903},"24":{"tf":3.3166247903554},"26":{"tf":5.0},"29":{"tf":6.708203932499369},"78":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"c":{"df":4,"docs":{"10":{"tf":1.4142135623730951},"30":{"tf":1.0},"41":{"tf":1.0},"62":{"tf":1.4142135623730951}}},"df":3,"docs":{"42":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":2.0}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"a":{"c":{"df":0,"docs":{},"h":{"df":6,"docs":{"17":{"tf":1.0},"18":{"tf":1.0},"23":{"tf":1.0},"38":{"tf":1.4142135623730951},"43":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"r":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":6,"docs":{"14":{"tf":1.0},"22":{"tf":1.0},"28":{"tf":1.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.0},"67":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"36":{"tf":1.0},"55":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":2,"docs":{"33":{"tf":1.0},"77":{"tf":1.0}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":10,"docs":{"10":{"tf":2.23606797749979},"11":{"tf":1.7320508075688772},"14":{"tf":2.0},"15":{"tf":1.4142135623730951},"18":{"tf":1.7320508075688772},"20":{"tf":2.0},"29":{"tf":1.4142135623730951},"58":{"tf":1.7320508075688772},"59":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951}}}}}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"35":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"17":{"tf":1.0},"19":{"tf":1.0},"34":{"tf":1.0},"46":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"y":{"df":2,"docs":{"53":{"tf":1.0},"70":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"18":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"18":{"tf":1.0}}}}}},"df":0,"docs":{},"k":{"df":7,"docs":{"20":{"tf":1.0},"43":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"74":{"tf":1.0},"78":{"tf":1.0}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"!":{"(":{"!":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"73":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"!":{"(":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"a":{"d":{"d":{"df":0,"docs":{},"e":{"d":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"26":{"tf":1.0},"29":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":6,"docs":{"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"73":{"tf":1.0}}}},"w":{"df":0,"docs":{},"o":{"df":1,"docs":{"73":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":10,"docs":{"17":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.7320508075688772},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":2.0},"26":{"tf":3.0},"29":{"tf":4.69041575982343}}}}},"df":2,"docs":{"17":{"tf":1.0},"29":{"tf":1.0}}}},"t":{"df":1,"docs":{"28":{"tf":2.0}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":6,"docs":{"15":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"41":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0}}}}},"o":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"52":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"m":{"df":12,"docs":{"1":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"29":{"tf":1.0},"4":{"tf":1.0},"44":{"tf":1.0},"50":{"tf":1.0},"62":{"tf":1.0},"66":{"tf":1.0},"71":{"tf":1.0}},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}}}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"56":{"tf":1.0},"59":{"tf":1.0}}}},"t":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":2,"docs":{"26":{"tf":1.7320508075688772},"29":{"tf":3.0}}}}}},"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":15,"docs":{"10":{"tf":1.0},"16":{"tf":1.4142135623730951},"19":{"tf":1.0},"23":{"tf":1.4142135623730951},"25":{"tf":1.0},"26":{"tf":2.6457513110645907},"29":{"tf":2.0},"32":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":2.0},"50":{"tf":1.0},"51":{"tf":1.4142135623730951},"54":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":3.1622776601683795}}}}},"df":0,"docs":{}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":2,"docs":{"3":{"tf":1.0},"56":{"tf":1.0}},"m":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"14":{"tf":1.0},"23":{"tf":1.0}}}},"df":0,"docs":{}}}}},"v":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"13":{"tf":1.0},"43":{"tf":1.4142135623730951},"6":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":8,"docs":{"15":{"tf":1.0},"35":{"tf":1.0},"46":{"tf":1.0},"56":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0}}},"df":0,"docs":{}}}}},"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":11,"docs":{"17":{"tf":1.0},"24":{"tf":1.0},"33":{"tf":1.0},"38":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"48":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"4":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"76":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":4,"docs":{"29":{"tf":1.0},"39":{"tf":1.0},"44":{"tf":1.4142135623730951},"48":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"k":{"df":2,"docs":{"29":{"tf":1.7320508075688772},"48":{"tf":1.0}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{",":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"74":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":2,"docs":{"29":{"tf":1.4142135623730951},"60":{"tf":1.0}}}}}}},"r":{"df":1,"docs":{"51":{"tf":1.0}}},"s":{"df":0,"docs":{},"e":{"6":{"4":{"df":1,"docs":{"67":{"tf":1.0}}},"df":0,"docs":{}},"df":6,"docs":{"14":{"tf":1.4142135623730951},"20":{"tf":1.0},"26":{"tf":1.0},"42":{"tf":1.4142135623730951},"59":{"tf":1.0},"60":{"tf":1.0}}},"i":{"c":{"df":12,"docs":{"1":{"tf":1.0},"10":{"tf":1.4142135623730951},"17":{"tf":1.0},"22":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0},"35":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"63":{"tf":1.0},"66":{"tf":1.0},"8":{"tf":1.4142135623730951}},"s":{"/":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"c":{"'":{"df":1,"docs":{"48":{"tf":1.0}}},"df":1,"docs":{"48":{"tf":1.0}}},"df":1,"docs":{"50":{"tf":1.0}},"e":{"c":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"77":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":6,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.0},"65":{"tf":1.0},"68":{"tf":1.0},"74":{"tf":1.7320508075688772}}}}},"df":17,"docs":{"19":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"28":{"tf":1.0},"39":{"tf":1.4142135623730951},"40":{"tf":1.0},"42":{"tf":1.4142135623730951},"48":{"tf":1.0},"49":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"58":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"71":{"tf":1.0}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":15,"docs":{"20":{"tf":1.0},"24":{"tf":1.0},"29":{"tf":1.0},"34":{"tf":1.4142135623730951},"36":{"tf":1.0},"39":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"47":{"tf":1.0},"54":{"tf":1.4142135623730951},"56":{"tf":1.7320508075688772},"61":{"tf":1.7320508075688772},"70":{"tf":1.0},"74":{"tf":1.0},"78":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"56":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"19":{"tf":1.0},"59":{"tf":1.0},"70":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"v":{"df":1,"docs":{"67":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"15":{"tf":1.0},"20":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"37":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"17":{"tf":1.0},"27":{"tf":1.0},"64":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":2,"docs":{"23":{"tf":1.0},"7":{"tf":1.0}}}},"t":{"a":{"8":{"df":6,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":9,"docs":{"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"18":{"tf":1.4142135623730951},"20":{"tf":1.0},"22":{"tf":1.0},"27":{"tf":1.0},"44":{"tf":1.0},"58":{"tf":1.0},"71":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":9,"docs":{"15":{"tf":1.0},"19":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.7320508075688772},"42":{"tf":1.0},"44":{"tf":1.0},"64":{"tf":1.0},"71":{"tf":1.0},"76":{"tf":1.4142135623730951}}}}}}}},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"7":{"tf":1.0}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"16":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.0},"58":{"tf":1.0},"64":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"35":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"39":{"tf":1.0}}}},"n":{"/":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"33":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":27,"docs":{"10":{"tf":1.0},"11":{"tf":2.0},"12":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":2.0},"20":{"tf":2.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"33":{"tf":2.449489742783178},"34":{"tf":1.0},"4":{"tf":1.4142135623730951},"47":{"tf":1.0},"48":{"tf":1.4142135623730951},"49":{"tf":1.4142135623730951},"5":{"tf":1.0},"50":{"tf":1.4142135623730951},"58":{"tf":2.0},"6":{"tf":1.0},"9":{"tf":1.0}}},"y":{"(":{"7":{"b":{"7":{"d":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"d":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":15,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"29":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.7320508075688772},"59":{"tf":1.0},"60":{"tf":1.0},"65":{"tf":1.4142135623730951},"74":{"tf":1.0}}}},"l":{"a":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"18":{"tf":1.7320508075688772},"60":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"48":{"tf":1.0}}},"c":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":1,"docs":{"78":{"tf":1.0}}}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":28,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":2.23606797749979},"20":{"tf":2.23606797749979},"25":{"tf":1.0},"28":{"tf":2.23606797749979},"29":{"tf":1.0},"35":{"tf":1.4142135623730951},"4":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951},"46":{"tf":1.0},"47":{"tf":1.4142135623730951},"48":{"tf":3.0},"5":{"tf":1.0},"50":{"tf":1.7320508075688772},"52":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":1.7320508075688772},"57":{"tf":1.0},"58":{"tf":2.449489742783178},"60":{"tf":2.0},"62":{"tf":1.0},"63":{"tf":2.449489742783178},"76":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":6,"docs":{"43":{"tf":1.0},"50":{"tf":1.0},"56":{"tf":1.4142135623730951},"76":{"tf":3.0},"77":{"tf":1.0},"78":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":2,"docs":{"76":{"tf":1.0},"78":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"o":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":4,"docs":{"15":{"tf":1.0},"26":{"tf":1.0},"33":{"tf":1.0},"58":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"k":{"df":6,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":1.4142135623730951},"3":{"tf":1.4142135623730951},"4":{"tf":1.4142135623730951},"70":{"tf":1.0},"74":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":6,"docs":{"17":{"tf":1.4142135623730951},"22":{"tf":1.0},"40":{"tf":1.0},"53":{"tf":1.0},"59":{"tf":1.0},"73":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"58":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"73":{"tf":1.0}}},"df":0,"docs":{}}},"x":{"df":1,"docs":{"18":{"tf":1.7320508075688772}}}},"r":{"a":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"15":{"tf":1.0}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"k":{"df":1,"docs":{"77":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":4,"docs":{"15":{"tf":1.0},"20":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":2,"docs":{"20":{"tf":1.0},"44":{"tf":1.0}}}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"64":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"39":{"tf":1.0}}}}},"df":0,"docs":{}}},"u":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"48":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{},"g":{"df":3,"docs":{"3":{"tf":1.0},"30":{"tf":1.7320508075688772},"77":{"tf":1.0}}},"i":{"df":0,"docs":{},"l":{"d":{"df":17,"docs":{"10":{"tf":1.0},"11":{"tf":2.8284271247461903},"12":{"tf":3.0},"17":{"tf":1.0},"18":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":2.23606797749979},"4":{"tf":1.0},"43":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.7320508075688772},"64":{"tf":1.0},"65":{"tf":1.4142135623730951},"71":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":8,"docs":{"13":{"tf":1.0},"26":{"tf":1.0},"30":{"tf":1.0},"45":{"tf":1.0},"50":{"tf":1.0},"71":{"tf":1.4142135623730951},"74":{"tf":1.0},"76":{"tf":1.0}}}}},"n":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"21":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"60":{"tf":1.0}}}},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"38":{"tf":1.0}}}}}},"c":{"/":{"df":0,"docs":{},"o":{"df":1,"docs":{"85":{"tf":1.0}}}},"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"14":{"tf":1.4142135623730951}},"e":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"71":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":4,"docs":{"14":{"tf":1.0},"29":{"tf":1.0},"43":{"tf":1.0},"56":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"df":32,"docs":{"10":{"tf":2.449489742783178},"13":{"tf":1.0},"18":{"tf":2.449489742783178},"19":{"tf":1.7320508075688772},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":2.0},"25":{"tf":1.0},"26":{"tf":1.7320508075688772},"28":{"tf":1.0},"29":{"tf":1.4142135623730951},"33":{"tf":1.0},"35":{"tf":1.0},"38":{"tf":2.449489742783178},"39":{"tf":1.0},"41":{"tf":1.7320508075688772},"42":{"tf":1.4142135623730951},"43":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":3.605551275463989},"50":{"tf":1.0},"51":{"tf":1.7320508075688772},"52":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":3.605551275463989},"6":{"tf":1.0},"61":{"tf":2.6457513110645907},"62":{"tf":1.0},"67":{"tf":1.4142135623730951},"74":{"tf":1.7320508075688772},"78":{"tf":2.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"25":{"tf":1.0},"74":{"tf":1.0}}}}},"m":{"df":1,"docs":{"20":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"32":{"tf":1.0},"57":{"tf":1.0}}}}},"n":{"'":{"df":0,"docs":{},"t":{"df":1,"docs":{"29":{"tf":1.0}}}},"d":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"65":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"p":{"a":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"13":{"tf":1.0},"40":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"61":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"df":6,"docs":{"11":{"tf":1.0},"19":{"tf":1.0},"35":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"64":{"tf":1.0}},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"20":{"tf":1.0}}}}}}}},"g":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"71":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":9,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.7320508075688772},"9":{"tf":1.0}}}}}}},"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":2,"docs":{"12":{"tf":1.0},"33":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":11,"docs":{"11":{"tf":2.23606797749979},"12":{"tf":1.4142135623730951},"13":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"33":{"tf":2.0},"5":{"tf":1.4142135623730951},"6":{"tf":1.7320508075688772},"71":{"tf":1.4142135623730951},"9":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":32,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"18":{"tf":2.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"30":{"tf":1.0},"32":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"39":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.7320508075688772},"43":{"tf":1.0},"44":{"tf":2.0},"45":{"tf":2.6457513110645907},"50":{"tf":1.4142135623730951},"51":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951},"57":{"tf":2.0},"58":{"tf":2.23606797749979},"59":{"tf":1.0},"61":{"tf":2.0},"62":{"tf":2.0},"72":{"tf":1.0},"74":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951}}},"h":{"df":1,"docs":{"44":{"tf":1.0}}}},"u":{"df":0,"docs":{},"s":{"df":5,"docs":{"20":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.0},"59":{"tf":1.0},"73":{"tf":1.0}}}}},"d":{"df":3,"docs":{"4":{"tf":1.0},"49":{"tf":1.0},"6":{"tf":1.4142135623730951}},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"b":{"df":8,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"g":{"(":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":10,"docs":{"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}},"_":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"(":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"34":{"tf":1.7320508075688772},"58":{"tf":2.0},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":1,"docs":{"34":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":1,"docs":{"34":{"tf":1.0}}}},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"76":{"tf":1.0}}},"df":0,"docs":{}}},"df":4,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.0},"14":{"tf":1.0},"7":{"tf":1.0}}}},"n":{"df":0,"docs":{},"g":{"df":17,"docs":{"14":{"tf":1.7320508075688772},"18":{"tf":1.0},"29":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.4142135623730951},"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":2.0},"51":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.4142135623730951},"62":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":1.4142135623730951}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"4":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"30":{"tf":1.0}}},"df":12,"docs":{"20":{"tf":1.0},"24":{"tf":1.0},"28":{"tf":1.0},"36":{"tf":1.0},"55":{"tf":1.0},"60":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"g":{"df":2,"docs":{"39":{"tf":1.4142135623730951},"40":{"tf":1.4142135623730951}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"83":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"56":{"tf":1.0},"74":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"k":{"df":23,"docs":{"13":{"tf":1.7320508075688772},"14":{"tf":1.0},"17":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"35":{"tf":1.0},"39":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.0},"47":{"tf":1.0},"5":{"tf":2.449489742783178},"52":{"tf":1.0},"54":{"tf":2.0},"56":{"tf":1.0},"6":{"tf":2.0},"72":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":1.4142135623730951}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"43":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"f":{"'":{"df":1,"docs":{"39":{"tf":1.0}}},"df":5,"docs":{"39":{"tf":2.449489742783178},"40":{"tf":1.0},"41":{"tf":2.6457513110645907},"42":{"tf":1.0},"43":{"tf":1.0}}}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"22":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"27":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"s":{"df":2,"docs":{"45":{"tf":1.0},"61":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"37":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":1,"docs":{"58":{"tf":1.7320508075688772}}}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":3,"docs":{"24":{"tf":1.0},"35":{"tf":1.0},"45":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"26":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"43":{"tf":1.0},"71":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"50":{"tf":2.0}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"n":{"df":2,"docs":{"0":{"tf":1.0},"69":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"57":{"tf":1.0}}}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"68":{"tf":1.0}}}}},"r":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":3,"docs":{"36":{"tf":1.0},"65":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"40":{"tf":1.4142135623730951},"41":{"tf":1.0},"44":{"tf":1.0},"52":{"tf":1.0}}}}}},"o":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"56":{"tf":1.0},"76":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":11,"docs":{"17":{"tf":2.0},"20":{"tf":1.7320508075688772},"21":{"tf":2.0},"22":{"tf":2.23606797749979},"29":{"tf":2.23606797749979},"32":{"tf":2.23606797749979},"33":{"tf":2.23606797749979},"4":{"tf":1.4142135623730951},"49":{"tf":1.7320508075688772},"6":{"tf":1.0},"75":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":1,"docs":{"28":{"tf":1.0}},"r":{"df":4,"docs":{"10":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"40":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"e":{"df":1,"docs":{"58":{"tf":1.0}}},"n":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":2,"docs":{"26":{"tf":1.0},"33":{"tf":1.0}}}}}}},"o":{"d":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"50":{"tf":1.0}}}}},"df":0,"docs":{}}},"_":{"df":0,"docs":{},"i":{"d":{"df":11,"docs":{"19":{"tf":1.4142135623730951},"20":{"tf":2.23606797749979},"21":{"tf":2.6457513110645907},"22":{"tf":2.23606797749979},"23":{"tf":2.23606797749979},"24":{"tf":2.6457513110645907},"26":{"tf":4.0},"29":{"tf":5.385164807134504},"50":{"tf":1.4142135623730951},"51":{"tf":1.0},"54":{"tf":1.0}}},"df":0,"docs":{}}},"df":20,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"19":{"tf":2.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.7320508075688772},"22":{"tf":2.0},"23":{"tf":1.4142135623730951},"24":{"tf":1.7320508075688772},"26":{"tf":2.6457513110645907},"29":{"tf":3.7416573867739413},"47":{"tf":1.0},"48":{"tf":1.4142135623730951},"49":{"tf":1.0},"50":{"tf":2.449489742783178},"51":{"tf":1.4142135623730951},"52":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"62":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}},"s":{"(":{"5":{"df":1,"docs":{"29":{"tf":1.4142135623730951}}},"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":1,"docs":{"65":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"t":{"df":10,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"26":{"tf":2.8284271247461903},"29":{"tf":3.4641016151377544},"39":{"tf":1.0},"58":{"tf":1.0},"74":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"15":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"e":{"df":4,"docs":{"14":{"tf":1.0},"43":{"tf":1.0},"57":{"tf":1.0},"70":{"tf":1.0}}},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":2.0},"5":{"tf":1.0},"6":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"83":{"tf":1.0}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"o":{"df":0,"docs":{},"n":{"df":10,"docs":{"12":{"tf":1.0},"32":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"51":{"tf":1.0},"58":{"tf":1.0},"62":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"n":{"df":16,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"19":{"tf":1.0},"25":{"tf":1.4142135623730951},"27":{"tf":1.7320508075688772},"36":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"40":{"tf":1.0},"47":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"64":{"tf":1.7320508075688772},"9":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":3,"docs":{"17":{"tf":1.0},"24":{"tf":1.0},"48":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"43":{"tf":1.0}}}}}}},"t":{"df":1,"docs":{"71":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":9,"docs":{"11":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.0},"4":{"tf":1.0},"49":{"tf":1.7320508075688772},"58":{"tf":1.0},"6":{"tf":1.0},"77":{"tf":1.4142135623730951}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"19":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":4,"docs":{"39":{"tf":1.4142135623730951},"41":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"72":{"tf":1.0}}},"x":{"df":7,"docs":{"10":{"tf":1.0},"20":{"tf":1.0},"4":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.0},"64":{"tf":1.0},"74":{"tf":1.7320508075688772}}}},"i":{"c":{"df":8,"docs":{"14":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.0},"29":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"65":{"tf":1.0}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"42":{"tf":1.0}}}}}},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"76":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"46":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"59":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"34":{"tf":1.4142135623730951},"58":{"tf":1.0},"63":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}}},"u":{"df":0,"docs":{},"s":{"df":3,"docs":{"20":{"tf":1.0},"44":{"tf":1.0},"54":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"18":{"tf":1.0},"28":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":1,"docs":{"28":{"tf":1.0}}}}},"q":{"df":0,"docs":{},"u":{"df":6,"docs":{"14":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":1.0},"45":{"tf":1.0}}}}},"i":{"d":{"df":7,"docs":{"20":{"tf":1.0},"26":{"tf":1.0},"35":{"tf":1.0},"39":{"tf":1.0},"42":{"tf":1.7320508075688772},"56":{"tf":1.0},"58":{"tf":1.4142135623730951}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.0},"15":{"tf":1.7320508075688772},"17":{"tf":1.0},"38":{"tf":1.0}}}}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"20":{"tf":2.23606797749979},"56":{"tf":1.7320508075688772},"59":{"tf":1.0},"74":{"tf":1.0}}}}},"df":7,"docs":{"20":{"tf":1.0},"29":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.4142135623730951},"77":{"tf":1.4142135623730951}},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"18":{"tf":1.0},"58":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"10":{"tf":1.0},"29":{"tf":1.0},"51":{"tf":1.0},"59":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"m":{"df":2,"docs":{"72":{"tf":1.0},"74":{"tf":1.0}}}}},"t":{"a":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"58":{"tf":1.0},"82":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":20,"docs":{"10":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"26":{"tf":1.7320508075688772},"29":{"tf":1.0},"35":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":2.23606797749979},"61":{"tf":1.7320508075688772},"72":{"tf":1.0},"73":{"tf":1.0},"76":{"tf":1.4142135623730951},"78":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"12":{"tf":1.0},"85":{"tf":1.0}}}},"x":{"df":0,"docs":{},"t":{"df":5,"docs":{"24":{"tf":1.0},"41":{"tf":1.0},"58":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0}}}}},"r":{"a":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"62":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"61":{"tf":1.0}}}}}}}},"t":{"'":{"df":2,"docs":{"14":{"tf":1.0},"43":{"tf":1.0}}},".":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.0}}}},":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":4,"docs":{"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":6,"docs":{"16":{"tf":1.0},"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"20":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"{":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"33":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"16":{"tf":1.0},"69":{"tf":1.0}}},"y":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":6,"docs":{"16":{"tf":1.0},"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"17":{"tf":1.0},"20":{"tf":2.0}}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":69,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":1.0},"10":{"tf":3.605551275463989},"11":{"tf":2.0},"12":{"tf":1.4142135623730951},"13":{"tf":1.7320508075688772},"14":{"tf":2.23606797749979},"15":{"tf":1.0},"16":{"tf":2.449489742783178},"18":{"tf":3.0},"19":{"tf":3.872983346207417},"20":{"tf":4.358898943540674},"21":{"tf":2.8284271247461903},"22":{"tf":2.449489742783178},"23":{"tf":2.8284271247461903},"24":{"tf":2.449489742783178},"25":{"tf":2.449489742783178},"26":{"tf":3.605551275463989},"27":{"tf":2.449489742783178},"28":{"tf":2.0},"29":{"tf":4.69041575982343},"30":{"tf":1.7320508075688772},"33":{"tf":2.0},"34":{"tf":2.449489742783178},"35":{"tf":2.8284271247461903},"36":{"tf":1.4142135623730951},"37":{"tf":1.0},"38":{"tf":3.0},"39":{"tf":1.4142135623730951},"4":{"tf":2.449489742783178},"40":{"tf":1.4142135623730951},"41":{"tf":1.4142135623730951},"42":{"tf":3.7416573867739413},"43":{"tf":2.449489742783178},"44":{"tf":2.23606797749979},"45":{"tf":3.0},"46":{"tf":1.4142135623730951},"47":{"tf":1.0},"48":{"tf":3.1622776601683795},"49":{"tf":2.0},"5":{"tf":1.7320508075688772},"50":{"tf":2.6457513110645907},"51":{"tf":3.0},"52":{"tf":2.8284271247461903},"53":{"tf":2.8284271247461903},"54":{"tf":4.69041575982343},"55":{"tf":2.0},"56":{"tf":3.3166247903554},"57":{"tf":2.0},"58":{"tf":4.898979485566356},"59":{"tf":1.4142135623730951},"6":{"tf":3.0},"60":{"tf":3.0},"61":{"tf":1.4142135623730951},"62":{"tf":3.605551275463989},"63":{"tf":1.4142135623730951},"64":{"tf":2.23606797749979},"65":{"tf":2.0},"66":{"tf":2.8284271247461903},"67":{"tf":3.1622776601683795},"68":{"tf":1.7320508075688772},"7":{"tf":1.4142135623730951},"70":{"tf":1.7320508075688772},"71":{"tf":3.0},"72":{"tf":1.7320508075688772},"73":{"tf":1.0},"74":{"tf":2.6457513110645907},"8":{"tf":1.4142135623730951},"9":{"tf":2.8284271247461903}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":10,"docs":{"23":{"tf":2.0},"24":{"tf":2.23606797749979},"26":{"tf":2.0},"29":{"tf":3.1622776601683795},"33":{"tf":1.0},"34":{"tf":1.0},"58":{"tf":1.4142135623730951},"61":{"tf":1.0},"63":{"tf":1.0},"74":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"61":{"tf":1.0}}}}}}}},"s":{"/":{"c":{"df":0,"docs":{},"w":{"1":{"df":1,"docs":{"6":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":8,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":8,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.7320508075688772},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.7320508075688772},"26":{"tf":2.6457513110645907},"29":{"tf":3.605551275463989}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"d":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"48":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"25":{"tf":1.0},"27":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"3":{"tf":1.0}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":2,"docs":{"18":{"tf":1.0},"26":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":3,"docs":{"33":{"tf":1.0},"43":{"tf":1.0},"58":{"tf":1.0}}},"t":{"df":1,"docs":{"57":{"tf":1.0}}}},"r":{"df":0,"docs":{},"t":{"df":4,"docs":{"29":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"65":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"i":{"df":6,"docs":{"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"71":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":5,"docs":{"19":{"tf":1.4142135623730951},"28":{"tf":1.0},"42":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":1.0}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"29":{"tf":1.0},"56":{"tf":1.0},"62":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"df":0,"docs":{},"l":{"df":1,"docs":{"33":{"tf":1.0}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"10":{"tf":1.0},"18":{"tf":1.0},"21":{"tf":1.0},"57":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{":":{":":{"b":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":1,"docs":{"60":{"tf":1.0}}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"63":{"tf":1.0}}}}}}}},"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"60":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":2,"docs":{"59":{"tf":1.4142135623730951},"60":{"tf":1.7320508075688772}}}}}}},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"/":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":1,"docs":{"49":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"_":{"1":{"_":{"1":{"df":2,"docs":{"13":{"tf":1.0},"6":{"tf":1.0}}},"2":{"df":2,"docs":{"13":{"tf":1.0},"6":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{":":{":":{"c":{"df":0,"docs":{},"w":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"33":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"33":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"{":{"c":{"df":0,"docs":{},"w":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"d":{"df":2,"docs":{"33":{"tf":1.0},"69":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"t":{"d":{":":{":":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":12,"docs":{"19":{"tf":1.0},"20":{"tf":2.0},"21":{"tf":2.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.23606797749979},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"69":{"tf":1.0},"72":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"73":{"tf":1.0}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"61":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"58":{"tf":1.0},"61":{"tf":1.0}}}}}}}}},"s":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"22":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"{":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"{":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":5,"docs":{"23":{"tf":1.0},"29":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"74":{"tf":1.0}},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"74":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"o":{"_":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":3,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":14,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.7320508075688772},"21":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"77":{"tf":1.0}}},"df":0,"docs":{}}}},"df":39,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":1.0},"10":{"tf":1.0},"11":{"tf":1.0},"13":{"tf":1.7320508075688772},"14":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"23":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.7320508075688772},"33":{"tf":1.7320508075688772},"35":{"tf":2.0},"36":{"tf":1.4142135623730951},"37":{"tf":1.0},"4":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.7320508075688772},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"5":{"tf":2.0},"50":{"tf":1.0},"52":{"tf":1.4142135623730951},"58":{"tf":1.0},"6":{"tf":1.7320508075688772},"60":{"tf":1.7320508075688772},"61":{"tf":1.0},"63":{"tf":1.4142135623730951},"7":{"tf":1.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.0},"74":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"t":{"df":6,"docs":{"11":{"tf":1.0},"48":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951},"75":{"tf":1.0}}}},"u":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"n":{"'":{"df":0,"docs":{},"t":{"df":1,"docs":{"71":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"56":{"tf":1.0},"65":{"tf":1.0}}}},"p":{"df":0,"docs":{},"l":{"df":9,"docs":{"10":{"tf":1.7320508075688772},"15":{"tf":1.0},"18":{"tf":1.0},"22":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"71":{"tf":1.0},"9":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":9,"docs":{"18":{"tf":1.0},"19":{"tf":1.0},"24":{"tf":1.0},"27":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0},"43":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0}}}}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{":":{":":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":5,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"74":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{":":{":":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":6,"docs":{"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"74":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"{":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":6,"docs":{"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":5,"docs":{"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.4142135623730951}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{":":{":":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":7,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"{":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"29":{"tf":1.7320508075688772},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"77":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":16,"docs":{"14":{"tf":1.7320508075688772},"16":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":2.0},"24":{"tf":1.0},"29":{"tf":1.4142135623730951},"33":{"tf":3.1622776601683795},"34":{"tf":1.4142135623730951},"35":{"tf":2.0},"57":{"tf":1.0},"58":{"tf":1.0},"63":{"tf":1.0},"70":{"tf":2.23606797749979},"74":{"tf":1.0},"9":{"tf":2.23606797749979}}}},"z":{"df":0,"docs":{},"i":{"df":1,"docs":{"74":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":45,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":1.0},"14":{"tf":2.0},"15":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.7320508075688772},"19":{"tf":1.7320508075688772},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"29":{"tf":1.0},"3":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":2.23606797749979},"34":{"tf":1.0},"35":{"tf":1.4142135623730951},"36":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.7320508075688772},"40":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.7320508075688772},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"48":{"tf":1.4142135623730951},"50":{"tf":1.0},"51":{"tf":1.7320508075688772},"56":{"tf":1.0},"58":{"tf":1.4142135623730951},"59":{"tf":1.0},"60":{"tf":1.0},"64":{"tf":1.4142135623730951},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"71":{"tf":2.449489742783178},"73":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":2.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"29":{"tf":1.0},"55":{"tf":1.0},"65":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"48":{"tf":1.0}}},"df":4,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"45":{"tf":1.0},"6":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":3,"docs":{"29":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"11":{"tf":1.0},"58":{"tf":1.0},"64":{"tf":1.0}}}}},"u":{"c":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"11":{"tf":1.0},"48":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"28":{"tf":1.0}}}}}},"df":1,"docs":{"28":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"15":{"tf":1.0}}}},"r":{"_":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178}},"s":{".":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"(":{"&":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"(":{"&":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":4,"docs":{"42":{"tf":2.23606797749979},"44":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951},"48":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":2,"docs":{"10":{"tf":1.0},"18":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":3,"docs":{"24":{"tf":1.4142135623730951},"35":{"tf":1.0},"60":{"tf":1.0}}}}}}},"w":{"2":{"0":{"df":3,"docs":{"42":{"tf":1.0},"44":{"tf":1.0},"48":{"tf":1.0}}},"df":0,"docs":{}},"4":{"df":6,"docs":{"49":{"tf":1.4142135623730951},"50":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.4142135623730951},"58":{"tf":1.0}}},"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"{":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":8,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"d":{"df":3,"docs":{"33":{"tf":3.3166247903554},"69":{"tf":2.0},"78":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":4,"docs":{"20":{"tf":1.0},"29":{"tf":1.0},"72":{"tf":1.0},"77":{"tf":1.0}}}}}},"m":{"a":{"df":0,"docs":{},"p":{"df":4,"docs":{"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"y":{"(":{"&":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"p":{"a":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.4142135623730951}}}}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":15,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.7320508075688772},"20":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"33":{"tf":1.4142135623730951},"35":{"tf":1.0},"49":{"tf":2.0},"53":{"tf":1.0},"56":{"tf":1.0},"6":{"tf":2.6457513110645907},"70":{"tf":1.7320508075688772},"74":{"tf":1.0}}}},"d":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"n":{"df":1,"docs":{"20":{"tf":1.0}}}},"t":{"a":{"b":{"a":{"df":0,"docs":{},"s":{"df":6,"docs":{"10":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":3.4641016151377544},"56":{"tf":1.7320508075688772},"62":{"tf":1.0}}}},"df":0,"docs":{}},"df":17,"docs":{"14":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"21":{"tf":1.0},"25":{"tf":1.7320508075688772},"27":{"tf":2.0},"41":{"tf":1.7320508075688772},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.7320508075688772},"56":{"tf":2.23606797749979},"57":{"tf":1.0},"58":{"tf":2.449489742783178},"61":{"tf":2.8284271247461903},"73":{"tf":1.0},"77":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"b":{"df":1,"docs":{"48":{"tf":1.0}}},"df":0,"docs":{},"e":{")":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"62":{"tf":1.0}}}}}}},"3":{"3":{"9":{"8":{"0":{"2":{"2":{"7":{"9":{"df":1,"docs":{"84":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"10":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0}}}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":11,"docs":{"11":{"tf":1.0},"12":{"tf":1.7320508075688772},"17":{"tf":2.23606797749979},"20":{"tf":1.7320508075688772},"21":{"tf":2.0},"22":{"tf":2.23606797749979},"23":{"tf":1.0},"29":{"tf":2.449489742783178},"32":{"tf":2.23606797749979},"33":{"tf":2.449489742783178},"71":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":1,"docs":{"33":{"tf":1.0}}}}}}}}},"c":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"45":{"tf":1.4142135623730951},"58":{"tf":1.0},"61":{"tf":1.4142135623730951}}},"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"l":{"2":{"5":{"6":{"df":1,"docs":{"35":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"35":{"tf":1.4142135623730951}}},"s":{"df":1,"docs":{"15":{"tf":1.0}}}},"l":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"54":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":3,"docs":{"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.0}}}},"df":0,"docs":{}}}},"d":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"41":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"u":{"c":{"df":1,"docs":{"24":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":10,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"33":{"tf":1.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":18,"docs":{"10":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"29":{"tf":1.0},"33":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.4142135623730951},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"74":{"tf":1.0},"75":{"tf":1.0},"78":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"16":{"tf":1.7320508075688772},"23":{"tf":1.0},"58":{"tf":1.0},"74":{"tf":1.4142135623730951}}}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":4,"docs":{"10":{"tf":1.0},"33":{"tf":1.0},"39":{"tf":1.0},"58":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"39":{"tf":1.0}}}}}}}},"m":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"48":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{")":{"?":{".":{"df":0,"docs":{},"u":{"1":{"2":{"8":{"df":2,"docs":{"29":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"29":{"tf":2.23606797749979},"74":{"tf":1.4142135623730951}}},"t":{"df":2,"docs":{"43":{"tf":1.0},"44":{"tf":1.0}}}}},"p":{"df":21,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":2.23606797749979},"15":{"tf":2.23606797749979},"16":{"tf":2.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.8284271247461903},"19":{"tf":1.4142135623730951},"20":{"tf":3.605551275463989},"21":{"tf":2.8284271247461903},"22":{"tf":3.0},"23":{"tf":3.605551275463989},"24":{"tf":2.449489742783178},"26":{"tf":3.4641016151377544},"29":{"tf":4.242640687119285},"33":{"tf":2.0},"34":{"tf":2.0},"58":{"tf":2.449489742783178},"69":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"77":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"d":{"df":13,"docs":{"14":{"tf":1.7320508075688772},"18":{"tf":1.0},"19":{"tf":2.23606797749979},"20":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"26":{"tf":1.0},"29":{"tf":1.4142135623730951},"33":{"tf":2.23606797749979},"34":{"tf":2.449489742783178},"58":{"tf":1.0},"70":{"tf":2.23606797749979},"71":{"tf":1.0},"9":{"tf":2.23606797749979}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"y":{"df":1,"docs":{"3":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"14":{"tf":1.0}}}}},"s":{".":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{".":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"&":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":10,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"k":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"18":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":23,"docs":{"10":{"tf":1.7320508075688772},"14":{"tf":1.4142135623730951},"15":{"tf":2.0},"16":{"tf":2.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.23606797749979},"19":{"tf":1.7320508075688772},"20":{"tf":3.1622776601683795},"21":{"tf":2.449489742783178},"22":{"tf":2.8284271247461903},"23":{"tf":3.3166247903554},"24":{"tf":2.23606797749979},"26":{"tf":3.1622776601683795},"29":{"tf":4.123105625617661},"33":{"tf":1.7320508075688772},"34":{"tf":1.7320508075688772},"58":{"tf":2.23606797749979},"61":{"tf":1.4142135623730951},"62":{"tf":1.0},"63":{"tf":1.0},"74":{"tf":2.0},"75":{"tf":1.7320508075688772},"77":{"tf":1.4142135623730951}}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":8,"docs":{"14":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":2.0},"70":{"tf":1.0}},"e":{"(":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"23":{"tf":1.0},"29":{"tf":1.0}}}}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"33":{"tf":1.0},"69":{"tf":1.0}}}}}}}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":11,"docs":{"14":{"tf":1.0},"15":{"tf":2.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"21":{"tf":2.0},"22":{"tf":2.23606797749979},"29":{"tf":2.23606797749979},"32":{"tf":2.23606797749979},"33":{"tf":2.23606797749979},"57":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":10,"docs":{"22":{"tf":1.0},"29":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"39":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":3,"docs":{"40":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"10":{"tf":1.0}}}}}},"df":15,"docs":{"14":{"tf":1.7320508075688772},"15":{"tf":2.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":2.23606797749979},"21":{"tf":2.0},"22":{"tf":2.23606797749979},"29":{"tf":2.23606797749979},"32":{"tf":2.449489742783178},"33":{"tf":2.23606797749979},"35":{"tf":2.0},"57":{"tf":1.4142135623730951},"72":{"tf":1.0},"73":{"tf":1.4142135623730951}}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":6,"docs":{"24":{"tf":1.0},"25":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"38":{"tf":1.0},"65":{"tf":1.7320508075688772}}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":5,"docs":{"29":{"tf":1.0},"45":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"67":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"30":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"20":{"tf":1.0},"36":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"61":{"tf":1.0}}}}}}}}}}},"v":{"df":7,"docs":{"14":{"tf":1.0},"19":{"tf":1.4142135623730951},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.4142135623730951},"70":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":5,"docs":{"19":{"tf":1.0},"21":{"tf":1.0},"41":{"tf":1.0},"48":{"tf":1.0},"56":{"tf":1.0}}}}}}}},"i":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"66":{"tf":1.0},"67":{"tf":1.0}}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"73":{"tf":1.0},"74":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"d":{"df":0,"docs":{},"n":{"'":{"df":0,"docs":{},"t":{"df":4,"docs":{"19":{"tf":1.0},"45":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":20,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":2.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.7320508075688772},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"21":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"62":{"tf":1.0},"63":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0}}}},"i":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":3,"docs":{"15":{"tf":1.0},"26":{"tf":1.0},"62":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":7,"docs":{"14":{"tf":1.0},"26":{"tf":1.0},"43":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"54":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"81":{"tf":1.0}},"i":{"df":5,"docs":{"12":{"tf":1.0},"33":{"tf":1.0},"50":{"tf":1.0},"6":{"tf":2.0},"71":{"tf":2.8284271247461903}}}}}}},"df":0,"docs":{}}},"s":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"34":{"tf":1.7320508075688772}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"12":{"tf":1.0}}}}}}}}},"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":5,"docs":{"10":{"tf":1.0},"27":{"tf":1.0},"35":{"tf":1.0},"65":{"tf":1.0},"78":{"tf":1.0}}}}}},"df":0,"docs":{},"h":{"df":1,"docs":{"51":{"tf":1.0}}},"p":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":4,"docs":{"15":{"tf":1.0},"16":{"tf":1.4142135623730951},"39":{"tf":1.0},"69":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"y":{"df":3,"docs":{"17":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"65":{"tf":1.0},"74":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"16":{"tf":1.0},"59":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":5,"docs":{"29":{"tf":1.0},"30":{"tf":1.0},"48":{"tf":1.0},"74":{"tf":1.7320508075688772},"76":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"47":{"tf":1.0}}},"i":{"d":{"df":3,"docs":{"16":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"4":{"tf":1.0},"49":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"2":{"tf":1.7320508075688772},"29":{"tf":1.0},"36":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0}}}}}}}},"df":3,"docs":{"10":{"tf":1.0},"21":{"tf":1.0},"44":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"n":{"'":{"df":0,"docs":{},"t":{"df":10,"docs":{"15":{"tf":1.0},"17":{"tf":1.4142135623730951},"20":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"40":{"tf":1.0},"43":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0}}}},"df":0,"docs":{}}}},"n":{"'":{"df":0,"docs":{},"t":{"df":17,"docs":{"11":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"29":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"36":{"tf":1.0},"4":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"65":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0}}}},"a":{"df":0,"docs":{},"t":{"df":9,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":4.0},"30":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"64":{"tf":1.0},"65":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":2.0}},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":4,"docs":{"29":{"tf":1.7320508075688772},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":8,"docs":{"29":{"tf":4.123105625617661},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"69":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.4142135623730951},"77":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":8,"docs":{"22":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"39":{"tf":1.4142135623730951},"43":{"tf":1.0},"50":{"tf":1.0},"58":{"tf":1.0}}}},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"78":{"tf":1.0}}}},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"24":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"df":1,"docs":{"29":{"tf":1.0}},"s":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"74":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}}}},"r":{"a":{"df":0,"docs":{},"w":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"32":{"tf":1.0},"70":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"e":{"df":2,"docs":{"32":{"tf":1.0},"38":{"tf":1.0}}},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"74":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"29":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"70":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"g":{"df":1,"docs":{"15":{"tf":1.0}}}},"a":{"c":{"df":0,"docs":{},"h":{"df":6,"docs":{"18":{"tf":1.0},"21":{"tf":1.0},"36":{"tf":1.4142135623730951},"54":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"59":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"62":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"i":{"df":8,"docs":{"12":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"61":{"tf":1.0},"70":{"tf":1.0},"73":{"tf":1.0},"76":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"15":{"tf":1.0},"58":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"0":{"tf":1.0},"50":{"tf":1.0},"53":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"59":{"tf":1.0},"61":{"tf":1.0}}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.0}}}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":8,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0},"9":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"22":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"32":{"tf":1.0}}}}}}}}}}},"g":{"df":1,"docs":{"69":{"tf":1.0}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"55":{"tf":1.0},"56":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":3.3166247903554},"74":{"tf":1.7320508075688772}}}}}}},"i":{"df":0,"docs":{},"g":{"df":5,"docs":{"20":{"tf":1.0},"22":{"tf":1.0},"28":{"tf":1.0},"30":{"tf":1.0},"41":{"tf":1.0}}},"s":{"df":2,"docs":{"19":{"tf":1.0},"24":{"tf":1.0}}}}},"m":{"b":{"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"61":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":6,"docs":{"26":{"tf":2.6457513110645907},"41":{"tf":1.0},"50":{"tf":1.0},"58":{"tf":2.23606797749979},"61":{"tf":1.0},"70":{"tf":1.0}}}},"p":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"df":2,"docs":{"20":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"y":{"df":0,"docs":{},"e":{"df":1,"docs":{"41":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"i":{"df":18,"docs":{"10":{"tf":2.23606797749979},"14":{"tf":2.449489742783178},"15":{"tf":2.6457513110645907},"16":{"tf":2.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.449489742783178},"19":{"tf":2.23606797749979},"20":{"tf":3.1622776601683795},"21":{"tf":2.0},"22":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951},"74":{"tf":2.23606797749979},"75":{"tf":2.0},"77":{"tf":2.0},"9":{"tf":1.0}}}}}},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"19":{"tf":1.0},"34":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":2,"docs":{"15":{"tf":1.0},"29":{"tf":1.0}}}}},"o":{"d":{"df":4,"docs":{"14":{"tf":1.0},"57":{"tf":1.0},"67":{"tf":1.0},"76":{"tf":1.0}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":7,"docs":{"0":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"57":{"tf":1.0}}}},"df":0,"docs":{}}}}},"d":{"df":5,"docs":{"29":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.0},"60":{"tf":1.0}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"14":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"18":{"tf":1.0},"38":{"tf":1.0},"44":{"tf":1.4142135623730951},"62":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":5,"docs":{"24":{"tf":1.0},"33":{"tf":1.0},"42":{"tf":1.0},"49":{"tf":1.0},"65":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"13":{"tf":1.0},"21":{"tf":1.0},"23":{"tf":1.0},"30":{"tf":1.0},"77":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"76":{"tf":1.0},"77":{"tf":1.0}}},"t":{"df":0,"docs":{},"i":{"df":12,"docs":{"16":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":1.0},"22":{"tf":1.0},"27":{"tf":1.0},"38":{"tf":1.4142135623730951},"39":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.0},"52":{"tf":1.0},"64":{"tf":1.4142135623730951}}}}},"r":{"df":0,"docs":{},"i":{"df":17,"docs":{"10":{"tf":4.0},"14":{"tf":2.0},"16":{"tf":2.449489742783178},"19":{"tf":1.4142135623730951},"20":{"tf":2.23606797749979},"22":{"tf":1.7320508075688772},"23":{"tf":1.0},"29":{"tf":1.0},"34":{"tf":2.0},"35":{"tf":1.0},"58":{"tf":3.605551275463989},"61":{"tf":1.0},"62":{"tf":1.4142135623730951},"63":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0}}},"y":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":13,"docs":{"10":{"tf":2.0},"14":{"tf":1.7320508075688772},"15":{"tf":2.449489742783178},"16":{"tf":2.0},"20":{"tf":2.23606797749979},"22":{"tf":1.7320508075688772},"23":{"tf":2.449489742783178},"33":{"tf":1.7320508075688772},"34":{"tf":2.23606797749979},"58":{"tf":2.449489742783178},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"m":{"df":14,"docs":{"10":{"tf":1.0},"15":{"tf":2.6457513110645907},"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"32":{"tf":1.4142135623730951},"33":{"tf":2.449489742783178},"35":{"tf":1.4142135623730951},"57":{"tf":2.0},"69":{"tf":1.7320508075688772}}}},"v":{".":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"77":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"18":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":25,"docs":{"10":{"tf":2.0},"14":{"tf":1.7320508075688772},"15":{"tf":2.6457513110645907},"16":{"tf":3.1622776601683795},"17":{"tf":1.7320508075688772},"18":{"tf":3.1622776601683795},"19":{"tf":2.0},"20":{"tf":4.69041575982343},"21":{"tf":2.8284271247461903},"22":{"tf":3.7416573867739413},"23":{"tf":4.898979485566356},"24":{"tf":2.0},"26":{"tf":2.8284271247461903},"29":{"tf":3.4641016151377544},"33":{"tf":3.1622776601683795},"34":{"tf":3.1622776601683795},"58":{"tf":2.449489742783178},"61":{"tf":1.7320508075688772},"62":{"tf":1.4142135623730951},"63":{"tf":1.4142135623730951},"69":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.4142135623730951},"76":{"tf":1.4142135623730951},"77":{"tf":2.0}},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":8,"docs":{"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"27":{"tf":1.0},"39":{"tf":1.4142135623730951},"4":{"tf":1.4142135623730951},"7":{"tf":1.0},"71":{"tf":1.0}}}}}}}},"q":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"17":{"tf":1.4142135623730951},"28":{"tf":1.0},"30":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":6,"docs":{"18":{"tf":1.0},"48":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.0}}}},"df":0,"docs":{}}}}},"r":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"24":{"tf":1.0}}}},"df":0,"docs":{},"r":{"(":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"c":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"(":{"\"":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"22":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},".":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":3,"docs":{"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":4,"docs":{"20":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}},"o":{"df":0,"docs":{},"r":{"(":{"\"":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}},"{":{"0":{"df":2,"docs":{"23":{"tf":1.0},"29":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"23":{"tf":1.0},"29":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},".":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.0}}}},":":{":":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"23":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":16,"docs":{"10":{"tf":1.0},"15":{"tf":1.0},"20":{"tf":2.23606797749979},"22":{"tf":1.7320508075688772},"23":{"tf":3.3166247903554},"24":{"tf":3.605551275463989},"29":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.0},"44":{"tf":1.4142135623730951},"46":{"tf":1.0},"58":{"tf":2.0},"61":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":3,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"9":{"tf":1.0}}}}}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"0":{"tf":1.0},"47":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"h":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"29":{"tf":3.3166247903554}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":1,"docs":{"29":{"tf":2.449489742783178}}}},"v":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":2.449489742783178}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":20,"docs":{"11":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"38":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"59":{"tf":1.0},"62":{"tf":1.4142135623730951},"65":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.7320508075688772},"78":{"tf":1.0}},"t":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"\"":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"a":{"d":{"d":{"df":0,"docs":{},"e":{"d":{"\"":{")":{".":{"a":{"d":{"d":{"_":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"\"":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":10,"docs":{"25":{"tf":1.7320508075688772},"26":{"tf":4.69041575982343},"27":{"tf":1.4142135623730951},"29":{"tf":3.0},"41":{"tf":1.0},"50":{"tf":1.4142135623730951},"51":{"tf":2.0},"54":{"tf":1.0},"58":{"tf":3.0},"61":{"tf":1.4142135623730951}},"u":{"df":1,"docs":{"58":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"43":{"tf":1.0},"58":{"tf":1.0},"65":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":13,"docs":{"19":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.7320508075688772},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":1.0},"71":{"tf":1.0},"78":{"tf":1.0}}}}}}}},"x":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"40":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":3,"docs":{"40":{"tf":1.4142135623730951},"56":{"tf":1.0},"58":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":21,"docs":{"10":{"tf":1.0},"14":{"tf":1.4142135623730951},"19":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"33":{"tf":1.4142135623730951},"39":{"tf":1.0},"40":{"tf":1.4142135623730951},"42":{"tf":1.7320508075688772},"43":{"tf":1.0},"48":{"tf":1.0},"51":{"tf":1.4142135623730951},"53":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.7320508075688772},"62":{"tf":1.4142135623730951},"67":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"4":{"tf":1.0}},"e":{"d":{"df":1,"docs":{"74":{"tf":1.0}}},"df":0,"docs":{}},"l":{"df":3,"docs":{"15":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0}}},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"58":{"tf":1.7320508075688772},"61":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"40":{"tf":1.0}}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"u":{"d":{"df":1,"docs":{"71":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"c":{":":{":":{"a":{"d":{"d":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"29":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}},"u":{"df":0,"docs":{},"t":{"df":31,"docs":{"10":{"tf":2.449489742783178},"12":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"19":{"tf":1.7320508075688772},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":2.0},"23":{"tf":2.0},"24":{"tf":2.0},"25":{"tf":1.0},"26":{"tf":2.23606797749979},"27":{"tf":1.0},"29":{"tf":2.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"38":{"tf":1.4142135623730951},"42":{"tf":1.0},"44":{"tf":1.0},"5":{"tf":1.0},"54":{"tf":1.7320508075688772},"56":{"tf":1.0},"58":{"tf":3.3166247903554},"59":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951},"61":{"tf":1.7320508075688772},"62":{"tf":1.0},"67":{"tf":1.7320508075688772},"74":{"tf":2.0},"76":{"tf":2.0},"78":{"tf":1.0}},"e":{"(":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":2,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":2,"docs":{"22":{"tf":1.0},"23":{"tf":1.0}}}}},"df":0,"docs":{}},"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"24":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"29":{"tf":2.449489742783178}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"w":{"4":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"57":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"57":{"tf":1.0}}}}}}}}}}},":":{":":{"a":{"d":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":3,"docs":{"24":{"tf":1.0},"26":{"tf":1.7320508075688772},"29":{"tf":2.449489742783178}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"29":{"tf":1.0}}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"57":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":11,"docs":{"22":{"tf":2.23606797749979},"23":{"tf":2.23606797749979},"24":{"tf":1.7320508075688772},"26":{"tf":2.449489742783178},"29":{"tf":3.3166247903554},"32":{"tf":1.0},"33":{"tf":2.23606797749979},"34":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"69":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"r":{"df":8,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}},"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":5,"docs":{"22":{"tf":1.0},"24":{"tf":1.0},"29":{"tf":1.4142135623730951},"30":{"tf":1.0},"78":{"tf":1.0}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":9,"docs":{"20":{"tf":1.0},"22":{"tf":1.0},"27":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"48":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951}}}},"t":{"df":2,"docs":{"20":{"tf":1.0},"73":{"tf":1.0}}}},"p":{"a":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"34":{"tf":2.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":9,"docs":{"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":2.0},"29":{"tf":1.0},"36":{"tf":1.0},"45":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":3,"docs":{"56":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"24":{"tf":1.0}}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":6,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"20":{"tf":1.0},"38":{"tf":1.0},"58":{"tf":1.4142135623730951},"8":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"30":{"tf":1.0}}}},"r":{"df":1,"docs":{"1":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"33":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"78":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"n":{"df":4,"docs":{"44":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"67":{"tf":2.23606797749979}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"16":{"tf":1.0},"18":{"tf":1.0},"24":{"tf":1.0},"51":{"tf":1.0}}}},"df":1,"docs":{"73":{"tf":1.0}}},"df":0,"docs":{}}}}},"f":{"3":{"2":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"35":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"a":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"10":{"tf":1.0},"78":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":12,"docs":{"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"20":{"tf":2.0},"24":{"tf":1.4142135623730951},"33":{"tf":1.0},"35":{"tf":1.0},"45":{"tf":2.449489742783178},"58":{"tf":1.4142135623730951},"59":{"tf":1.0},"62":{"tf":1.0},"73":{"tf":1.0},"78":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":8,"docs":{"15":{"tf":1.0},"20":{"tf":1.4142135623730951},"24":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.23606797749979},"58":{"tf":1.0},"59":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"s":{"df":7,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"61":{"tf":1.0}}}},"df":0,"docs":{}}}}},"n":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":5,"docs":{"22":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":13,"docs":{"14":{"tf":1.7320508075688772},"19":{"tf":1.7320508075688772},"20":{"tf":1.7320508075688772},"23":{"tf":2.0},"29":{"tf":2.0},"33":{"tf":1.7320508075688772},"34":{"tf":2.449489742783178},"55":{"tf":1.0},"58":{"tf":1.4142135623730951},"60":{"tf":1.0},"62":{"tf":1.0},"70":{"tf":2.0},"9":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":1,"docs":{"28":{"tf":1.0}},"l":{"df":3,"docs":{"38":{"tf":1.0},"65":{"tf":1.0},"78":{"tf":1.0}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"56":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":18,"docs":{"15":{"tf":1.7320508075688772},"16":{"tf":1.0},"20":{"tf":1.7320508075688772},"22":{"tf":1.0},"29":{"tf":1.4142135623730951},"32":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":2.0},"53":{"tf":1.7320508075688772},"54":{"tf":1.4142135623730951},"58":{"tf":2.23606797749979},"59":{"tf":2.449489742783178},"61":{"tf":1.4142135623730951},"62":{"tf":1.0},"71":{"tf":1.7320508075688772},"76":{"tf":2.23606797749979},"78":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"20":{"tf":1.0},"29":{"tf":1.0},"56":{"tf":1.0},"59":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"e":{"df":9,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":2.0},"20":{"tf":1.0},"33":{"tf":2.23606797749979},"57":{"tf":1.0},"71":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"|":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":2,"docs":{"26":{"tf":1.0},"29":{"tf":1.7320508075688772}}}}}},"df":3,"docs":{"17":{"tf":1.0},"20":{"tf":1.0},"73":{"tf":1.0}}}}}},"n":{"a":{"df":0,"docs":{},"l":{"df":15,"docs":{"19":{"tf":1.0},"22":{"tf":1.0},"34":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":1.0},"49":{"tf":1.0},"58":{"tf":1.0},"61":{"tf":1.4142135623730951},"69":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0}}},"n":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"48":{"tf":1.0}}}},"df":0,"docs":{}}},"d":{"(":{"df":0,"docs":{},"|":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"26":{"tf":1.7320508075688772},"29":{"tf":3.0}}}}}},"df":0,"docs":{}}},"df":6,"docs":{"1":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0},"6":{"tf":1.4142135623730951},"72":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":1,"docs":{"68":{"tf":1.0}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":11,"docs":{"17":{"tf":1.0},"20":{"tf":1.0},"33":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.0},"41":{"tf":2.0},"42":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.0},"58":{"tf":1.4142135623730951},"61":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":33,"docs":{"1":{"tf":1.0},"10":{"tf":1.0},"14":{"tf":1.7320508075688772},"15":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":2.0},"22":{"tf":1.4142135623730951},"26":{"tf":1.0},"29":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"39":{"tf":1.4142135623730951},"4":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"50":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.4142135623730951},"59":{"tf":1.0},"6":{"tf":1.0},"61":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.7320508075688772},"74":{"tf":1.4142135623730951},"9":{"tf":1.0}}}}},"t":{"df":1,"docs":{"10":{"tf":1.0}}},"x":{"df":10,"docs":{"20":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"58":{"tf":1.4142135623730951},"59":{"tf":1.0},"65":{"tf":1.0},"68":{"tf":1.0},"70":{"tf":1.0},"74":{"tf":2.0},"75":{"tf":1.0}}}},"l":{"a":{"df":0,"docs":{},"g":{"df":5,"docs":{"33":{"tf":1.0},"34":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.7320508075688772},"62":{"tf":1.4142135623730951}}},"w":{"df":1,"docs":{"74":{"tf":1.0}}}},"df":0,"docs":{},"o":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"35":{"tf":2.6457513110645907}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}}},"w":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"66":{"tf":1.0},"67":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":4,"docs":{"14":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.0},"74":{"tf":1.4142135623730951}}}}},"n":{"df":24,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"15":{"tf":2.23606797749979},"16":{"tf":2.23606797749979},"17":{"tf":2.0},"18":{"tf":2.8284271247461903},"19":{"tf":2.23606797749979},"20":{"tf":3.872983346207417},"21":{"tf":3.605551275463989},"22":{"tf":3.4641016151377544},"23":{"tf":3.872983346207417},"24":{"tf":3.1622776601683795},"26":{"tf":4.58257569495584},"29":{"tf":6.0},"33":{"tf":2.0},"34":{"tf":1.7320508075688772},"58":{"tf":1.7320508075688772},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":2.0},"75":{"tf":1.4142135623730951},"77":{"tf":1.0}}},"o":{"c":{"df":0,"docs":{},"u":{"df":1,"docs":{"4":{"tf":1.0}},"s":{"df":1,"docs":{"64":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"49":{"tf":1.0},"56":{"tf":1.0},"6":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":7,"docs":{"12":{"tf":1.0},"18":{"tf":1.0},"2":{"tf":1.0},"29":{"tf":1.0},"4":{"tf":1.0},"6":{"tf":1.0},"74":{"tf":1.0}}}}}},"n":{"d":{"df":1,"docs":{"15":{"tf":1.0}}},"df":0,"docs":{}},"o":{"d":{"df":2,"docs":{"39":{"tf":1.0},"41":{"tf":1.0}}},"df":0,"docs":{}},"r":{"c":{"df":4,"docs":{"22":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"75":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"29":{"tf":1.0}}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"34":{"tf":1.0}}}},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"73":{"tf":1.0}}}}},"k":{"df":1,"docs":{"35":{"tf":1.0}}},"m":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"57":{"tf":1.0},"58":{"tf":1.0}}}},"df":2,"docs":{"10":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951}}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"17":{"tf":1.0}}},"u":{"df":0,"docs":{},"n":{"df":6,"docs":{"12":{"tf":1.0},"18":{"tf":1.0},"24":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":6,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"50":{"tf":1.0},"58":{"tf":1.0},"61":{"tf":1.4142135623730951},"67":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"10":{"tf":1.0}}}}},"p":{"df":1,"docs":{"35":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":3,"docs":{"19":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":2,"docs":{"39":{"tf":1.0},"78":{"tf":1.0}}},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"i":{"df":3,"docs":{"39":{"tf":1.0},"40":{"tf":1.4142135623730951},"41":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"66":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"18":{"tf":1.0}}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"m":{"_":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"(":{"&":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}},"l":{"df":1,"docs":{"33":{"tf":1.0}}}},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"'":{"df":1,"docs":{"19":{"tf":1.0}}},"df":22,"docs":{"10":{"tf":2.0},"14":{"tf":1.0},"15":{"tf":2.23606797749979},"16":{"tf":2.449489742783178},"17":{"tf":1.0},"18":{"tf":2.23606797749979},"19":{"tf":2.449489742783178},"20":{"tf":2.0},"22":{"tf":2.0},"24":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":2.449489742783178},"38":{"tf":1.4142135623730951},"58":{"tf":2.6457513110645907},"59":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951},"73":{"tf":1.7320508075688772},"74":{"tf":1.7320508075688772},"77":{"tf":1.4142135623730951},"78":{"tf":1.7320508075688772},"9":{"tf":1.0}}}}}}},"d":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"36":{"tf":1.0}}}}}}},"df":9,"docs":{"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"28":{"tf":1.7320508075688772},"29":{"tf":2.449489742783178},"42":{"tf":1.0},"48":{"tf":1.0},"58":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.0},"44":{"tf":1.0},"53":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":8,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"20":{"tf":1.0},"36":{"tf":1.0},"51":{"tf":1.0},"77":{"tf":1.4142135623730951}}}}}}},"g":{"a":{"df":8,"docs":{"11":{"tf":1.0},"28":{"tf":1.0},"48":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":2.0},"59":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":2.0}},"m":{"df":0,"docs":{},"e":{"df":2,"docs":{"42":{"tf":1.0},"44":{"tf":1.4142135623730951}}}},"s":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"59":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"58":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":19,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"29":{"tf":1.0},"33":{"tf":2.6457513110645907},"34":{"tf":1.4142135623730951},"35":{"tf":1.0},"51":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.7320508075688772},"59":{"tf":1.0},"60":{"tf":1.0},"65":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.7320508075688772},"74":{"tf":1.4142135623730951},"9":{"tf":1.0}}}}},"t":{"df":3,"docs":{"19":{"tf":1.0},"24":{"tf":1.0},"6":{"tf":1.0}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"t":{"@":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"b":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{":":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"/":{"c":{"df":0,"docs":{},"w":{"df":2,"docs":{"49":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"d":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"4":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":3,"docs":{"4":{"tf":1.0},"49":{"tf":1.0},"6":{"tf":1.0}},"h":{"df":0,"docs":{},"u":{"b":{"df":1,"docs":{"3":{"tf":1.0}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"e":{"df":8,"docs":{"10":{"tf":1.0},"29":{"tf":1.0},"36":{"tf":1.4142135623730951},"42":{"tf":1.0},"56":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0}},"n":{"df":6,"docs":{"11":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"34":{"tf":1.0},"56":{"tf":1.0},"74":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"o":{"b":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"18":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"m":{"b":{"df":0,"docs":{},"h":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"65":{"tf":1.0},"66":{"tf":1.0}}}},"df":24,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"20":{"tf":1.7320508075688772},"22":{"tf":1.0},"33":{"tf":1.7320508075688772},"36":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.4142135623730951},"51":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"74":{"tf":1.4142135623730951},"76":{"tf":1.0},"8":{"tf":1.0}},"e":{"df":2,"docs":{"42":{"tf":1.0},"43":{"tf":1.0}}},"l":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"4":{"tf":1.0}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"69":{"tf":1.0}}}},"o":{"d":{"df":16,"docs":{"15":{"tf":1.0},"17":{"tf":1.4142135623730951},"20":{"tf":1.0},"21":{"tf":1.0},"29":{"tf":1.0},"31":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"42":{"tf":1.0},"45":{"tf":1.0},"56":{"tf":1.7320508075688772},"57":{"tf":1.0},"6":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"78":{"tf":1.0}}},"df":0,"docs":{}},"t":{"c":{"df":0,"docs":{},"h":{"a":{"df":1,"docs":{"35":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":2,"docs":{"1":{"tf":1.0},"36":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":3,"docs":{"1":{"tf":1.0},"29":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":10,"docs":{"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}}},"df":15,"docs":{"15":{"tf":3.3166247903554},"16":{"tf":1.7320508075688772},"17":{"tf":1.7320508075688772},"18":{"tf":2.0},"19":{"tf":1.4142135623730951},"20":{"tf":2.23606797749979},"21":{"tf":2.23606797749979},"22":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.6457513110645907},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"69":{"tf":1.0}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":14,"docs":{"15":{"tf":2.0},"16":{"tf":1.7320508075688772},"17":{"tf":1.7320508075688772},"18":{"tf":2.449489742783178},"19":{"tf":1.7320508075688772},"20":{"tf":2.6457513110645907},"21":{"tf":3.0},"22":{"tf":2.23606797749979},"23":{"tf":2.0},"24":{"tf":2.0},"26":{"tf":2.8284271247461903},"29":{"tf":3.605551275463989},"32":{"tf":1.0},"33":{"tf":1.7320508075688772}}}}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"50":{"tf":1.0}}}}},"df":0,"docs":{}}},"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}}}},"df":10,"docs":{"38":{"tf":1.0},"49":{"tf":1.7320508075688772},"51":{"tf":2.23606797749979},"53":{"tf":1.0},"54":{"tf":2.449489742783178},"56":{"tf":2.449489742783178},"58":{"tf":1.4142135623730951},"64":{"tf":1.0},"65":{"tf":1.0},"77":{"tf":1.0}}}}}},"u":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":4,"docs":{"42":{"tf":1.0},"46":{"tf":1.0},"6":{"tf":1.0},"76":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"d":{"df":4,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"2":{"tf":1.0},"55":{"tf":1.0}}},"df":0,"docs":{}}}},"h":{"a":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"65":{"tf":1.0}}}},"n":{"d":{"df":4,"docs":{"27":{"tf":1.0},"33":{"tf":1.0},"42":{"tf":1.0},"73":{"tf":1.0}},"l":{"df":22,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.4142135623730951},"30":{"tf":1.0},"41":{"tf":1.4142135623730951},"43":{"tf":1.0},"45":{"tf":2.0},"46":{"tf":1.0},"48":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"58":{"tf":2.0},"59":{"tf":1.0},"60":{"tf":1.7320508075688772},"61":{"tf":1.4142135623730951},"62":{"tf":1.0},"63":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":8,"docs":{"15":{"tf":1.7320508075688772},"16":{"tf":1.4142135623730951},"19":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":1.0}}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":13,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"19":{"tf":1.0},"22":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.4142135623730951},"51":{"tf":1.0},"56":{"tf":1.7320508075688772},"59":{"tf":1.0},"61":{"tf":1.0},"73":{"tf":1.0}}}}}},"r":{"d":{"c":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"59":{"tf":1.0}}},"df":0,"docs":{}}},"df":1,"docs":{"28":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"18":{"tf":1.0}},"m":{"a":{"df":0,"docs":{},"p":{"df":2,"docs":{"73":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"e":{"df":3,"docs":{"20":{"tf":1.0},"48":{"tf":1.0},"52":{"tf":1.0}},"n":{"'":{"df":0,"docs":{},"t":{"df":1,"docs":{"43":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"28":{"tf":1.4142135623730951}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"26":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.0},"56":{"tf":1.4142135623730951},"58":{"tf":1.0},"76":{"tf":2.0}}}}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"@":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"h":{"df":1,"docs":{"82":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":13,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.4142135623730951},"20":{"tf":2.0},"21":{"tf":2.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178}}}},"p":{"df":11,"docs":{"14":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"27":{"tf":1.4142135623730951},"33":{"tf":1.0},"42":{"tf":1.0},"46":{"tf":1.0},"5":{"tf":1.0},"57":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"10":{"tf":1.0},"59":{"tf":1.0},"63":{"tf":1.0},"9":{"tf":1.0}},"s":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"e":{"df":24,"docs":{"10":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.7320508075688772},"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"24":{"tf":1.0},"36":{"tf":1.0},"39":{"tf":1.0},"44":{"tf":1.7320508075688772},"48":{"tf":1.0},"51":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.4142135623730951},"60":{"tf":1.0},"66":{"tf":1.4142135623730951},"67":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":2.0},"76":{"tf":1.0}}}}},"i":{"d":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"42":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"h":{"df":2,"docs":{"10":{"tf":1.0},"20":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"18":{"tf":1.0},"73":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"30":{"tf":1.0},"40":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"66":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"56":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"d":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"/":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"/":{"0":{"3":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"56":{"tf":2.0}}}}},"r":{"b":{"df":1,"docs":{"83":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":2,"docs":{"26":{"tf":1.0},"75":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"53":{"tf":1.0}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"41":{"tf":1.0}}}}}}}},"i":{"'":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"78":{"tf":1.0}}}},"m":{"df":1,"docs":{"15":{"tf":1.0}}}},"d":{"df":8,"docs":{"10":{"tf":1.0},"19":{"tf":1.4142135623730951},"41":{"tf":2.0},"48":{"tf":1.0},"50":{"tf":1.0},"59":{"tf":2.449489742783178},"61":{"tf":1.0},"76":{"tf":1.0}},"e":{"a":{"df":12,"docs":{"0":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"22":{"tf":1.0},"37":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0},"65":{"tf":1.0},"78":{"tf":1.0},"8":{"tf":1.0}},"l":{"df":2,"docs":{"44":{"tf":1.0},"72":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":3,"docs":{"52":{"tf":1.0},"61":{"tf":1.0},"76":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"17":{"tf":1.0},"20":{"tf":1.0},"50":{"tf":1.0}}}}}},"m":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":7,"docs":{"38":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.0},"48":{"tf":1.4142135623730951},"56":{"tf":1.0},"74":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":5,"docs":{"42":{"tf":1.0},"43":{"tf":1.0},"51":{"tf":1.0},"65":{"tf":1.0},"72":{"tf":1.0}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":18,"docs":{"10":{"tf":1.0},"14":{"tf":1.7320508075688772},"19":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"29":{"tf":2.0},"35":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"55":{"tf":1.0},"58":{"tf":1.0},"65":{"tf":1.4142135623730951},"66":{"tf":1.0},"67":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0}}}}}}},"i":{"c":{"df":1,"docs":{"35":{"tf":1.4142135623730951}}},"df":1,"docs":{"26":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":21,"docs":{"10":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":1.0},"35":{"tf":1.0},"39":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.7320508075688772},"59":{"tf":1.4142135623730951},"61":{"tf":1.0},"63":{"tf":1.0},"71":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"14":{"tf":1.0},"33":{"tf":1.0},"59":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":7,"docs":{"15":{"tf":2.0},"22":{"tf":1.0},"29":{"tf":1.0},"58":{"tf":1.0},"64":{"tf":1.0},"72":{"tf":1.0},"75":{"tf":1.0}}}}}}},"n":{"a":{"c":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"18":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"d":{"df":2,"docs":{"12":{"tf":1.0},"39":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"29":{"tf":1.4142135623730951}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"58":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":2,"docs":{"42":{"tf":1.0},"76":{"tf":1.0}}}},"df":0,"docs":{}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":2,"docs":{"75":{"tf":1.0},"76":{"tf":1.7320508075688772}},"e":{"d":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"56":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"42":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{")":{".":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":4,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":6,"docs":{"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178},"75":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"74":{"tf":1.0},"75":{"tf":1.0}}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"74":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":18,"docs":{"10":{"tf":1.0},"14":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"18":{"tf":1.7320508075688772},"20":{"tf":2.0},"22":{"tf":3.0},"23":{"tf":3.4641016151377544},"24":{"tf":2.0},"26":{"tf":2.8284271247461903},"29":{"tf":4.0},"33":{"tf":2.0},"34":{"tf":2.0},"44":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.0}},"m":{"df":1,"docs":{"79":{"tf":1.0}}},"r":{"df":0,"docs":{},"m":{"df":12,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":1.0},"17":{"tf":1.0},"33":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"58":{"tf":2.449489742783178},"79":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"t":{"_":{"b":{"a":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":11,"docs":{"10":{"tf":1.0},"20":{"tf":1.7320508075688772},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"29":{"tf":1.4142135623730951},"51":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.7320508075688772},"78":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"23":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"71":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"18":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"4":{"tf":3.0},"5":{"tf":1.7320508075688772},"6":{"tf":1.0}}},"n":{"c":{"df":5,"docs":{"18":{"tf":1.0},"50":{"tf":1.4142135623730951},"51":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":2,"docs":{"16":{"tf":1.0},"20":{"tf":1.0}}}}},"df":0,"docs":{}},"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":8,"docs":{"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":2.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":2.0},"26":{"tf":3.0},"29":{"tf":4.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":16,"docs":{"20":{"tf":2.6457513110645907},"21":{"tf":3.0},"22":{"tf":2.8284271247461903},"23":{"tf":3.0},"24":{"tf":2.449489742783178},"26":{"tf":3.605551275463989},"29":{"tf":4.795831523312719},"32":{"tf":1.0},"33":{"tf":2.6457513110645907},"34":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}}}}}},"df":30,"docs":{"10":{"tf":2.449489742783178},"14":{"tf":2.449489742783178},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":2.8284271247461903},"19":{"tf":2.449489742783178},"20":{"tf":3.3166247903554},"21":{"tf":3.0},"22":{"tf":2.6457513110645907},"23":{"tf":2.449489742783178},"24":{"tf":2.23606797749979},"26":{"tf":3.3166247903554},"29":{"tf":4.795831523312719},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"39":{"tf":1.0},"45":{"tf":1.4142135623730951},"51":{"tf":2.8284271247461903},"54":{"tf":1.7320508075688772},"57":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.4142135623730951},"65":{"tf":1.0},"66":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"77":{"tf":1.7320508075688772},"78":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{},"e":{"a":{"d":{"df":19,"docs":{"11":{"tf":1.0},"12":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"18":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"39":{"tf":1.4142135623730951},"41":{"tf":1.0},"47":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"35":{"tf":1.4142135623730951},"4":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"19":{"tf":1.0},"50":{"tf":1.0},"54":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"58":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":9,"docs":{"19":{"tf":1.0},"2":{"tf":1.0},"29":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"51":{"tf":1.0},"60":{"tf":1.4142135623730951},"72":{"tf":1.0},"73":{"tf":1.4142135623730951}}}}},"n":{"df":8,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"38":{"tf":1.0}}}}}}}},"o":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":7,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"26":{"tf":2.23606797749979},"29":{"tf":3.0}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"61":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":5,"docs":{"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"19":{"tf":1.4142135623730951},"20":{"tf":1.0},"22":{"tf":1.0}},"t":{"df":2,"docs":{"0":{"tf":1.0},"7":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"69":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"54":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"42":{"tf":1.0}}}},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"25":{"tf":1.0}}},"l":{"df":0,"docs":{},"v":{"df":2,"docs":{"19":{"tf":1.0},"62":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":2,"docs":{"69":{"tf":1.0},"74":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"35":{"tf":1.0}}}},"n":{"'":{"df":0,"docs":{},"t":{"df":1,"docs":{"48":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":2,"docs":{"64":{"tf":1.0},"65":{"tf":1.0}}}},"s":{"df":0,"docs":{},"u":{"df":6,"docs":{"29":{"tf":1.0},"3":{"tf":1.0},"58":{"tf":1.0},"62":{"tf":1.0},"65":{"tf":1.0},"74":{"tf":1.0}}}}},"t":{"'":{"df":3,"docs":{"19":{"tf":1.0},"29":{"tf":1.0},"64":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"\"":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"20":{"tf":1.0},"29":{"tf":1.0},"72":{"tf":1.0}}}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":4,"docs":{"29":{"tf":1.0},"72":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"<":{"_":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":4,"docs":{"29":{"tf":1.0},"72":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}}},"t":{"df":1,"docs":{"56":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"c":{"<":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":4,"docs":{"20":{"tf":1.4142135623730951},"29":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":5,"docs":{"20":{"tf":1.7320508075688772},"22":{"tf":1.7320508075688772},"56":{"tf":1.4142135623730951},"73":{"tf":2.8284271247461903},"74":{"tf":1.7320508075688772}}},"r":{"df":7,"docs":{"13":{"tf":1.0},"26":{"tf":2.449489742783178},"29":{"tf":3.872983346207417},"6":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":2.6457513110645907},"74":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":18,"docs":{"1":{"tf":1.0},"10":{"tf":1.0},"15":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"39":{"tf":1.0},"40":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"58":{"tf":2.0},"6":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.7320508075688772}}}}}}}},"j":{"df":0,"docs":{},"o":{"b":{"df":6,"docs":{"19":{"tf":1.0},"21":{"tf":1.0},"39":{"tf":1.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"44":{"tf":1.0}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"77":{"tf":2.23606797749979},"78":{"tf":2.449489742783178}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"78":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":1,"docs":{"78":{"tf":1.0}}}}}}}}}}}}},"q":{"df":1,"docs":{"53":{"tf":1.0}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":10,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":2.0},"20":{"tf":1.0},"32":{"tf":1.4142135623730951},"33":{"tf":2.23606797749979},"50":{"tf":1.0},"53":{"tf":1.7320508075688772},"57":{"tf":1.7320508075688772},"58":{"tf":1.0}},"s":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":1,"docs":{"33":{"tf":2.23606797749979}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"u":{"d":{"df":0,"docs":{},"g":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"k":{"df":1,"docs":{"73":{"tf":1.0}},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":14,"docs":{"16":{"tf":1.0},"20":{"tf":1.7320508075688772},"29":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772},"58":{"tf":1.4142135623730951},"72":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0}}}},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"24":{"tf":1.0},"42":{"tf":1.0}}}},"y":{"df":11,"docs":{"20":{"tf":2.23606797749979},"26":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.4142135623730951},"52":{"tf":1.7320508075688772},"54":{"tf":1.7320508075688772},"56":{"tf":1.4142135623730951},"58":{"tf":1.0},"73":{"tf":2.6457513110645907},"74":{"tf":2.0},"75":{"tf":2.0}},"s":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"74":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"f":{"c":{"df":7,"docs":{"39":{"tf":1.4142135623730951},"40":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"51":{"tf":1.0},"59":{"tf":1.0}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"n":{"d":{"df":13,"docs":{"30":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.4142135623730951},"44":{"tf":1.0},"48":{"tf":1.4142135623730951},"54":{"tf":1.0},"56":{"tf":1.0},"62":{"tf":1.4142135623730951},"77":{"tf":1.0}}},"df":0,"docs":{}},"t":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"39":{"tf":1.0}}}}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":18,"docs":{"11":{"tf":1.0},"24":{"tf":1.4142135623730951},"25":{"tf":1.0},"27":{"tf":1.0},"36":{"tf":1.0},"41":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.4142135623730951},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"68":{"tf":1.0},"71":{"tf":1.7320508075688772},"74":{"tf":1.0}},"l":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"g":{"df":4,"docs":{"1":{"tf":1.0},"17":{"tf":1.0},"22":{"tf":1.0},"64":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"l":{"a":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":4,"docs":{"19":{"tf":1.0},"20":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"14":{"tf":1.0},"26":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"g":{"df":4,"docs":{"1":{"tf":1.0},"47":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"df":13,"docs":{"13":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.4142135623730951},"22":{"tf":1.0},"29":{"tf":1.0},"39":{"tf":1.0},"58":{"tf":1.4142135623730951},"61":{"tf":1.0},"63":{"tf":1.0},"71":{"tf":1.4142135623730951},"73":{"tf":1.0},"78":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":9,"docs":{"17":{"tf":1.0},"18":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"48":{"tf":1.0},"58":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.7320508075688772},"9":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"26":{"tf":1.0}}}}},"z":{"df":0,"docs":{},"i":{"df":1,"docs":{"56":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"d":{"df":2,"docs":{"0":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":5,"docs":{"1":{"tf":1.4142135623730951},"11":{"tf":1.0},"48":{"tf":1.0},"54":{"tf":1.4142135623730951},"65":{"tf":1.0}}}},"v":{"df":14,"docs":{"15":{"tf":1.0},"18":{"tf":1.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.23606797749979},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"39":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":1.7320508075688772},"75":{"tf":1.4142135623730951},"78":{"tf":1.0}},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":7,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"74":{"tf":1.0},"75":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":4,"docs":{"29":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0}},"o":{"df":0,"docs":{},"v":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"g":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"79":{"tf":1.0}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"74":{"tf":1.0}}}},"t":{"'":{"df":30,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.4142135623730951},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":1.0},"42":{"tf":1.7320508075688772},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"50":{"tf":1.0},"53":{"tf":1.7320508075688772},"54":{"tf":1.7320508075688772},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.4142135623730951},"65":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":2.0},"77":{"tf":1.7320508075688772}}},"df":0,"docs":{},"’":{"df":1,"docs":{"46":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":10,"docs":{"10":{"tf":1.0},"16":{"tf":1.7320508075688772},"18":{"tf":1.0},"20":{"tf":1.0},"30":{"tf":1.0},"38":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.4142135623730951},"61":{"tf":1.0},"71":{"tf":2.23606797749979}}}}}},"i":{"b":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.0}}}},"df":8,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":2.0},"70":{"tf":1.0},"9":{"tf":1.4142135623730951}},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":11,"docs":{"16":{"tf":1.0},"19":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":2.6457513110645907},"58":{"tf":2.23606797749979},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"70":{"tf":2.0},"9":{"tf":2.23606797749979}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":1,"docs":{"15":{"tf":1.0}}},"f":{"df":0,"docs":{},"e":{"df":4,"docs":{"19":{"tf":1.0},"20":{"tf":1.0},"25":{"tf":1.0},"42":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"10":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":5,"docs":{"14":{"tf":1.0},"35":{"tf":1.4142135623730951},"4":{"tf":1.0},"53":{"tf":1.0},"74":{"tf":2.0}}}}},"n":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"74":{"tf":1.7320508075688772}}}},"df":5,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"29":{"tf":1.0},"5":{"tf":1.0},"58":{"tf":1.0}}}},"s":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":1,"docs":{"43":{"tf":1.0}}}}},"t":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":2,"docs":{"53":{"tf":2.0},"54":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"df":16,"docs":{"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":1.0},"30":{"tf":1.4142135623730951},"39":{"tf":1.0},"44":{"tf":3.3166247903554},"45":{"tf":1.7320508075688772},"51":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.0},"65":{"tf":1.4142135623730951},"66":{"tf":1.0},"72":{"tf":1.4142135623730951},"74":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"39":{"tf":1.0}}}}}}},"o":{"a":{"d":{"df":4,"docs":{"22":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"78":{"tf":1.0}}},"df":0,"docs":{}},"c":{"a":{"df":0,"docs":{},"l":{"df":6,"docs":{"11":{"tf":1.0},"17":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"52":{"tf":1.4142135623730951},"74":{"tf":1.0}}},"t":{"df":1,"docs":{"49":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":5,"docs":{"26":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.0}},"i":{"c":{"df":4,"docs":{"16":{"tf":1.0},"26":{"tf":1.4142135623730951},"27":{"tf":1.0},"74":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"s":{"[":{"]":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"51":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"44":{"tf":1.4142135623730951},"7":{"tf":1.0},"74":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"k":{"df":33,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.4142135623730951},"2":{"tf":1.0},"22":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.4142135623730951},"37":{"tf":1.0},"38":{"tf":1.0},"40":{"tf":1.0},"43":{"tf":2.23606797749979},"44":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951},"47":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.4142135623730951},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":1.7320508075688772},"59":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.4142135623730951},"62":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"71":{"tf":1.0},"76":{"tf":1.4142135623730951},"78":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"65":{"tf":1.0}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"18":{"tf":1.0}}}}},"w":{"df":1,"docs":{"27":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"56":{"tf":1.0},"73":{"tf":1.0}}}}}}},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"35":{"tf":1.0},"4":{"tf":1.0},"58":{"tf":1.7320508075688772}}}}},"r":{"df":0,"docs":{},"o":{"df":3,"docs":{"10":{"tf":1.0},"33":{"tf":1.0},"58":{"tf":1.4142135623730951}}}}},"d":{"df":0,"docs":{},"e":{"df":4,"docs":{"16":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.0},"62":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"c":{"df":3,"docs":{"10":{"tf":1.0},"24":{"tf":1.0},"48":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"10":{"tf":1.4142135623730951},"26":{"tf":1.0},"33":{"tf":1.0},"58":{"tf":1.4142135623730951}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"0":{"tf":1.0},"24":{"tf":1.0},"3":{"tf":1.0},"6":{"tf":1.0}}}}},"df":0,"docs":{}}}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"15":{"tf":1.0}}}}},"k":{"df":0,"docs":{},"e":{"df":25,"docs":{"12":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"26":{"tf":1.4142135623730951},"27":{"tf":1.0},"33":{"tf":1.4142135623730951},"4":{"tf":1.0},"41":{"tf":1.4142135623730951},"44":{"tf":1.7320508075688772},"48":{"tf":1.7320508075688772},"54":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.7320508075688772},"6":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"74":{"tf":1.4142135623730951},"78":{"tf":1.7320508075688772}}}},"l":{"a":{"df":0,"docs":{},"g":{"a":{"df":2,"docs":{"47":{"tf":1.0},"7":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"g":{"df":10,"docs":{"20":{"tf":1.0},"28":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"81":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":12,"docs":{"16":{"tf":1.0},"30":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.4142135623730951},"76":{"tf":1.0}},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"48":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"48":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"43":{"tf":1.0}}}}}},"p":{"(":{"df":0,"docs":{},"|":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":7,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"\"":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"<":{"&":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":2,"docs":{"75":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"74":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"k":{"df":1,"docs":{"56":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"73":{"tf":1.0}}}}}},"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":12,"docs":{"38":{"tf":1.0},"42":{"tf":1.0},"48":{"tf":1.4142135623730951},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":2.0},"62":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951},"73":{"tf":3.1622776601683795},"74":{"tf":3.605551275463989},"75":{"tf":2.0},"77":{"tf":2.0}}},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"42":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"56":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":2,"docs":{"15":{"tf":1.0},"20":{"tf":1.0}}}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":15,"docs":{"15":{"tf":1.7320508075688772},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.7320508075688772},"26":{"tf":2.0},"29":{"tf":2.449489742783178},"48":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"74":{"tf":1.0}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"15":{"tf":1.0},"20":{"tf":1.0},"40":{"tf":1.0},"48":{"tf":1.0},"53":{"tf":1.0}}}}}},"y":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":2,"docs":{"22":{"tf":1.0},"73":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"b":{"df":6,"docs":{"16":{"tf":1.0},"36":{"tf":1.0},"42":{"tf":1.4142135623730951},"54":{"tf":1.0},"58":{"tf":1.0},"73":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"df":4,"docs":{"39":{"tf":1.7320508075688772},"40":{"tf":1.0},"41":{"tf":1.7320508075688772},"42":{"tf":1.0}}},"n":{"df":8,"docs":{"14":{"tf":1.0},"28":{"tf":1.0},"35":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.4142135623730951},"48":{"tf":1.0},"67":{"tf":1.0},"76":{"tf":1.7320508075688772}},"t":{"df":1,"docs":{"48":{"tf":1.0}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"17":{"tf":1.0},"20":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":2,"docs":{"38":{"tf":1.0},"48":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"54":{"tf":1.0}}},"df":7,"docs":{"22":{"tf":1.0},"51":{"tf":2.0},"53":{"tf":1.4142135623730951},"54":{"tf":3.1622776601683795},"56":{"tf":1.7320508075688772},"71":{"tf":1.4142135623730951},"77":{"tf":1.0}},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":1,"docs":{"38":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":10,"docs":{"33":{"tf":1.0},"34":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"52":{"tf":1.0},"61":{"tf":1.4142135623730951},"62":{"tf":1.0},"76":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":39,"docs":{"10":{"tf":3.0},"14":{"tf":3.0},"15":{"tf":3.872983346207417},"16":{"tf":2.23606797749979},"17":{"tf":2.6457513110645907},"18":{"tf":2.8284271247461903},"19":{"tf":2.23606797749979},"20":{"tf":3.7416573867739413},"21":{"tf":2.8284271247461903},"22":{"tf":3.3166247903554},"23":{"tf":1.7320508075688772},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"28":{"tf":1.4142135623730951},"29":{"tf":3.872983346207417},"32":{"tf":2.0},"33":{"tf":2.6457513110645907},"35":{"tf":1.4142135623730951},"39":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.449489742783178},"48":{"tf":1.7320508075688772},"51":{"tf":2.0},"52":{"tf":1.7320508075688772},"53":{"tf":1.0},"54":{"tf":1.7320508075688772},"56":{"tf":1.0},"57":{"tf":2.8284271247461903},"58":{"tf":3.7416573867739413},"59":{"tf":2.8284271247461903},"60":{"tf":2.6457513110645907},"61":{"tf":3.1622776601683795},"62":{"tf":1.0},"63":{"tf":1.7320508075688772},"67":{"tf":2.0},"70":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0}},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":20,"docs":{"10":{"tf":1.7320508075688772},"14":{"tf":1.4142135623730951},"15":{"tf":2.0},"16":{"tf":2.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.7320508075688772},"20":{"tf":3.1622776601683795},"21":{"tf":2.449489742783178},"22":{"tf":3.0},"23":{"tf":3.3166247903554},"24":{"tf":2.23606797749979},"26":{"tf":3.1622776601683795},"29":{"tf":4.242640687119285},"33":{"tf":1.7320508075688772},"34":{"tf":1.7320508075688772},"58":{"tf":1.7320508075688772},"74":{"tf":2.449489742783178},"75":{"tf":1.7320508075688772},"77":{"tf":1.4142135623730951}}}}}}}}},"df":1,"docs":{"18":{"tf":1.0}}}},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":4,"docs":{"14":{"tf":1.4142135623730951},"25":{"tf":1.0},"41":{"tf":1.0},"54":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":2,"docs":{"10":{"tf":1.0},"20":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"d":{"df":3,"docs":{"50":{"tf":1.0},"58":{"tf":1.0},"73":{"tf":1.0}}},"df":0,"docs":{}}}}},"i":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"38":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":7,"docs":{"10":{"tf":1.0},"19":{"tf":1.0},"48":{"tf":1.7320508075688772},"54":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"62":{"tf":3.872983346207417},"73":{"tf":1.0}},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"62":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"62":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{}}},"n":{"d":{"df":3,"docs":{"42":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"11":{"tf":1.0},"4":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}},"t":{"df":1,"docs":{"44":{"tf":1.0}}}},"r":{"a":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"24":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"40":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"m":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"s":{"df":4,"docs":{"20":{"tf":1.4142135623730951},"29":{"tf":1.0},"73":{"tf":1.0},"78":{"tf":1.0}}},"t":{"a":{"df":0,"docs":{},"k":{"df":1,"docs":{"3":{"tf":1.0}}}},"df":0,"docs":{}}}},"m":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":3,"docs":{"42":{"tf":1.4142135623730951},"44":{"tf":2.23606797749979},"45":{"tf":1.0}}}}}},"df":1,"docs":{"44":{"tf":2.0}},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"g":{"df":1,"docs":{"42":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"52":{"tf":1.4142135623730951}}}}}}},"o":{"c":{"df":0,"docs":{},"k":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"18":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"(":{")":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"18":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"18":{"tf":2.23606797749979}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"(":{"\"":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"18":{"tf":1.4142135623730951}}}}}}},"df":1,"docs":{"18":{"tf":1.4142135623730951}}}},"d":{"df":14,"docs":{"15":{"tf":1.0},"16":{"tf":1.7320508075688772},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.4142135623730951},"20":{"tf":3.1622776601683795},"21":{"tf":2.0},"22":{"tf":2.449489742783178},"23":{"tf":3.3166247903554},"24":{"tf":1.7320508075688772},"26":{"tf":2.449489742783178},"29":{"tf":3.0},"33":{"tf":2.0},"34":{"tf":2.0}},"e":{"df":0,"docs":{},"l":{"df":17,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"29":{"tf":1.4142135623730951},"36":{"tf":1.0},"37":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"39":{"tf":1.4142135623730951},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.4142135623730951},"46":{"tf":1.0},"48":{"tf":1.4142135623730951},"52":{"tf":1.0},"55":{"tf":1.7320508075688772},"64":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":5,"docs":{"10":{"tf":1.0},"20":{"tf":1.0},"29":{"tf":1.0},"48":{"tf":1.7320508075688772},"54":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"df":8,"docs":{"15":{"tf":1.0},"16":{"tf":1.7320508075688772},"17":{"tf":1.4142135623730951},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.4142135623730951},"69":{"tf":1.0}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"56":{"tf":1.0},"58":{"tf":1.0},"62":{"tf":1.0},"78":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":2,"docs":{"42":{"tf":1.0},"48":{"tf":1.0}}}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"76":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":25,"docs":{"10":{"tf":1.7320508075688772},"15":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"26":{"tf":1.0},"32":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.7320508075688772},"44":{"tf":1.7320508075688772},"45":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"62":{"tf":1.0},"65":{"tf":1.4142135623730951},"71":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"41":{"tf":1.4142135623730951},"47":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"49":{"tf":1.4142135623730951}}}}},"v":{"df":0,"docs":{},"e":{"df":8,"docs":{"16":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"50":{"tf":1.0},"74":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"g":{".":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":4,"docs":{"29":{"tf":1.7320508075688772},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"r":{"df":4,"docs":{"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"62":{"tf":1.0}}}},":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"20":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":2,"docs":{"16":{"tf":1.0},"20":{"tf":1.4142135623730951}}}}}}}}}},"{":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":4,"docs":{"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":25,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":2.0},"16":{"tf":2.6457513110645907},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.4142135623730951},"20":{"tf":4.358898943540674},"21":{"tf":2.8284271247461903},"22":{"tf":3.605551275463989},"23":{"tf":4.47213595499958},"24":{"tf":2.449489742783178},"26":{"tf":3.4641016151377544},"29":{"tf":4.242640687119285},"33":{"tf":2.8284271247461903},"34":{"tf":2.6457513110645907},"58":{"tf":1.7320508075688772},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.4142135623730951},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}},"t":{"df":1,"docs":{"20":{"tf":1.0}}},"u":{"c":{"df":0,"docs":{},"h":{"df":12,"docs":{"10":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"26":{"tf":1.0},"42":{"tf":1.0},"48":{"tf":1.7320508075688772},"53":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":11,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":1.0},"24":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"33":{"tf":1.0},"41":{"tf":1.0},"65":{"tf":1.0},"70":{"tf":1.0}},"p":{"df":0,"docs":{},"l":{"df":7,"docs":{"26":{"tf":1.4142135623730951},"36":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.4142135623730951},"76":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"19":{"tf":2.8284271247461903}}}}}}}}},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"t":{"df":9,"docs":{"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.7320508075688772},"21":{"tf":1.7320508075688772},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":2.0},"26":{"tf":3.0},"29":{"tf":4.0}}}},"y":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"34":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"18":{"tf":1.0}}}}}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":19,"docs":{"11":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":2.0},"19":{"tf":1.4142135623730951},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.4142135623730951},"32":{"tf":1.7320508075688772},"33":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.0},"52":{"tf":1.4142135623730951},"53":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"70":{"tf":1.4142135623730951},"77":{"tf":1.0},"9":{"tf":1.0}},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":1,"docs":{"15":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":8,"docs":{"10":{"tf":1.7320508075688772},"11":{"tf":1.0},"12":{"tf":1.0},"19":{"tf":1.0},"28":{"tf":2.0},"29":{"tf":1.0},"48":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"r":{"df":4,"docs":{"28":{"tf":1.0},"42":{"tf":1.0},"48":{"tf":1.0},"54":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"26":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"d":{"df":40,"docs":{"11":{"tf":1.0},"14":{"tf":1.7320508075688772},"17":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"19":{"tf":2.0},"20":{"tf":2.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":2.6457513110645907},"33":{"tf":1.4142135623730951},"35":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":2.0},"40":{"tf":1.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.7320508075688772},"43":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.4142135623730951},"59":{"tf":1.0},"6":{"tf":1.4142135623730951},"61":{"tf":1.0},"64":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.7320508075688772},"75":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.7320508075688772},"78":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":16,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.0},"35":{"tf":1.4142135623730951},"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"51":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"73":{"tf":1.0},"76":{"tf":1.0}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"30":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"77":{"tf":1.4142135623730951}}}}}}}},"w":{"df":26,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.7320508075688772},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"26":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":2.0},"30":{"tf":1.0},"33":{"tf":1.7320508075688772},"34":{"tf":1.0},"48":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.7320508075688772},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.7320508075688772},"65":{"tf":1.4142135623730951},"77":{"tf":1.0},"78":{"tf":1.7320508075688772},"9":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"71":{"tf":1.0}}}}},"x":{"df":0,"docs":{},"t":{"df":6,"docs":{"10":{"tf":1.0},"15":{"tf":1.0},"19":{"tf":1.4142135623730951},"33":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.0}}}}},"i":{"c":{"df":0,"docs":{},"e":{"df":7,"docs":{"18":{"tf":1.0},"19":{"tf":1.4142135623730951},"23":{"tf":1.0},"24":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"d":{"df":0,"docs":{},"e":{"df":2,"docs":{"74":{"tf":1.0},"76":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"69":{"tf":1.0}}}},"n":{"df":8,"docs":{"15":{"tf":1.0},"20":{"tf":1.0},"24":{"tf":1.0},"41":{"tf":1.0},"43":{"tf":1.0},"52":{"tf":1.7320508075688772},"61":{"tf":1.0},"71":{"tf":1.0}},"e":{"df":12,"docs":{"19":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"21":{"tf":2.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":2.0},"26":{"tf":3.0},"29":{"tf":4.0},"44":{"tf":1.0},"61":{"tf":1.4142135623730951},"73":{"tf":2.23606797749979},"74":{"tf":2.0}}}},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"58":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":14,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"17":{"tf":1.0},"20":{"tf":1.4142135623730951},"29":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.4142135623730951},"59":{"tf":1.0},"67":{"tf":1.0},"70":{"tf":1.0},"72":{"tf":1.0},"77":{"tf":1.0}}},"h":{"df":10,"docs":{"14":{"tf":1.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"30":{"tf":1.0},"34":{"tf":1.0},"44":{"tf":1.0},"66":{"tf":1.0}}},"i":{"c":{"df":9,"docs":{"10":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"22":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"70":{"tf":1.0},"73":{"tf":1.0}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"51":{"tf":1.0}}}},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"20":{"tf":1.0},"28":{"tf":1.0},"44":{"tf":1.0},"76":{"tf":1.0}}}}}},"w":{"df":48,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"15":{"tf":2.23606797749979},"16":{"tf":2.449489742783178},"17":{"tf":1.7320508075688772},"18":{"tf":1.7320508075688772},"19":{"tf":1.7320508075688772},"20":{"tf":2.449489742783178},"21":{"tf":1.4142135623730951},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":2.0},"31":{"tf":1.0},"33":{"tf":2.0},"34":{"tf":1.4142135623730951},"35":{"tf":1.0},"36":{"tf":1.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.0},"44":{"tf":2.0},"45":{"tf":2.0},"46":{"tf":1.0},"48":{"tf":1.4142135623730951},"49":{"tf":1.4142135623730951},"50":{"tf":2.0},"51":{"tf":1.0},"54":{"tf":2.449489742783178},"55":{"tf":1.0},"58":{"tf":1.4142135623730951},"6":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.4142135623730951},"63":{"tf":1.0},"64":{"tf":1.4142135623730951},"65":{"tf":1.0},"68":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":1.7320508075688772},"72":{"tf":1.0},"74":{"tf":2.23606797749979},"75":{"tf":1.0},"77":{"tf":1.4142135623730951},"9":{"tf":1.0}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":8,"docs":{"29":{"tf":1.4142135623730951},"35":{"tf":1.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.0},"51":{"tf":1.0},"59":{"tf":1.0},"76":{"tf":1.0},"84":{"tf":1.0}}}}},"df":0,"docs":{}}}},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":13,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.7320508075688772},"15":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":1.0},"27":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"58":{"tf":2.449489742783178},"61":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":4,"docs":{"39":{"tf":1.4142135623730951},"41":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"77":{"tf":1.0}}}}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":3,"docs":{"15":{"tf":1.4142135623730951},"57":{"tf":1.0},"60":{"tf":1.0}},"s":{"df":3,"docs":{"48":{"tf":1.0},"51":{"tf":1.0},"73":{"tf":1.0}}}}}}}},"c":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"18":{"tf":1.0},"24":{"tf":1.0},"30":{"tf":1.0}}}}},"df":0,"docs":{}},"df":2,"docs":{"21":{"tf":1.0},"53":{"tf":1.0}},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"36":{"tf":1.0}}}},"df":0,"docs":{}}}},"k":{"(":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"22":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":14,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.7320508075688772},"21":{"tf":2.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.449489742783178},"29":{"tf":3.3166247903554},"74":{"tf":1.7320508075688772},"75":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":17,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"26":{"tf":2.0},"29":{"tf":2.449489742783178},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"df":5,"docs":{"10":{"tf":1.0},"17":{"tf":1.4142135623730951},"24":{"tf":1.0},"58":{"tf":1.4142135623730951},"61":{"tf":1.0}}},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"62":{"tf":1.0}}}}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"14":{"tf":1.0}}}}},"n":{"c":{"df":6,"docs":{"10":{"tf":1.0},"29":{"tf":1.0},"34":{"tf":1.4142135623730951},"36":{"tf":1.0},"40":{"tf":1.0},"59":{"tf":1.0}}},"df":44,"docs":{"0":{"tf":1.0},"10":{"tf":1.4142135623730951},"14":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.7320508075688772},"35":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.7320508075688772},"52":{"tf":1.0},"53":{"tf":1.7320508075688772},"54":{"tf":2.449489742783178},"56":{"tf":2.23606797749979},"57":{"tf":2.449489742783178},"58":{"tf":3.0},"59":{"tf":1.0},"60":{"tf":1.7320508075688772},"61":{"tf":1.4142135623730951},"62":{"tf":1.7320508075688772},"63":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"7":{"tf":1.4142135623730951},"71":{"tf":1.7320508075688772},"72":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"74":{"tf":1.0},"75":{"tf":1.0},"78":{"tf":1.0},"9":{"tf":1.4142135623730951}},"e":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"73":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"19":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":15,"docs":{"10":{"tf":1.0},"23":{"tf":1.0},"35":{"tf":1.7320508075688772},"39":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"7":{"tf":1.0}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"77":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":3,"docs":{"11":{"tf":1.0},"4":{"tf":1.0},"71":{"tf":1.0}},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{"0":{".":{"1":{"2":{".":{"6":{"df":1,"docs":{"49":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"o":{"df":0,"docs":{},"n":{"df":7,"docs":{"17":{"tf":1.0},"20":{"tf":1.0},"4":{"tf":1.0},"45":{"tf":2.0},"51":{"tf":1.0},"53":{"tf":1.0},"78":{"tf":1.0}}}}}}},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"a":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"73":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":8,"docs":{"39":{"tf":1.7320508075688772},"40":{"tf":1.4142135623730951},"41":{"tf":2.23606797749979},"51":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":6,"docs":{"24":{"tf":1.4142135623730951},"38":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.4142135623730951},"59":{"tf":1.0},"61":{"tf":1.0}}}}}},"m":{"df":1,"docs":{"56":{"tf":1.0}}}},"s":{"df":2,"docs":{"11":{"tf":1.0},"78":{"tf":1.0}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"7":{"tf":1.4142135623730951}}}}}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"30":{"tf":1.0},"70":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"34":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}}}}}},"t":{"df":18,"docs":{"15":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"24":{"tf":1.4142135623730951},"27":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.0},"44":{"tf":2.449489742783178},"45":{"tf":1.0},"48":{"tf":1.0},"56":{"tf":1.0},"59":{"tf":1.4142135623730951},"73":{"tf":1.0},"77":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"10":{"tf":1.0}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"50":{"tf":1.0},"6":{"tf":1.0},"70":{"tf":1.7320508075688772}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":5,"docs":{"18":{"tf":1.0},"27":{"tf":1.0},"58":{"tf":1.0},"73":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"58":{"tf":1.0}},"p":{"df":0,"docs":{},"l":{"df":2,"docs":{"10":{"tf":1.0},"12":{"tf":1.0}}}}}}},"df":5,"docs":{"15":{"tf":1.0},"60":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":2.0},"74":{"tf":1.0}},"h":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"14":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"w":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"61":{"tf":1.0}}}},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}}},"w":{"df":0,"docs":{},"n":{"df":4,"docs":{"20":{"tf":1.0},"44":{"tf":1.0},"65":{"tf":1.0},"75":{"tf":1.0}},"e":{"d":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"18":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":2,"docs":{"20":{"tf":1.0},"28":{"tf":1.0}}}}}}},"p":{"9":{"df":0,"docs":{},"p":{"df":0,"docs":{},"n":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"w":{"3":{"3":{"df":0,"docs":{},"v":{"4":{"0":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"5":{"df":0,"docs":{},"l":{"4":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"df":1,"docs":{"54":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"a":{"c":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"g":{"df":8,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":1,"docs":{"1":{"tf":1.0}}},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"53":{"tf":1.0},"74":{"tf":1.0}}}}},"i":{"d":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}}},"df":0,"docs":{},"n":{"df":1,"docs":{"33":{"tf":1.0}}},"r":{"df":5,"docs":{"20":{"tf":1.0},"26":{"tf":1.0},"58":{"tf":1.0},"73":{"tf":1.0},"76":{"tf":1.0}}}},"n":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"24":{"tf":1.0}},"k":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"40":{"tf":1.0},"53":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"s":{"df":1,"docs":{"20":{"tf":1.4142135623730951}}},"t":{"df":16,"docs":{"16":{"tf":1.0},"29":{"tf":1.7320508075688772},"36":{"tf":1.0},"39":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.7320508075688772},"54":{"tf":1.4142135623730951},"58":{"tf":1.0},"59":{"tf":1.0},"64":{"tf":1.0},"71":{"tf":1.4142135623730951},"73":{"tf":1.0}},"i":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"42":{"tf":1.0},"56":{"tf":1.0}},"e":{"df":0,"docs":{},"q":{"df":8,"docs":{"17":{"tf":2.0},"20":{"tf":1.7320508075688772},"21":{"tf":2.0},"22":{"tf":2.23606797749979},"23":{"tf":1.0},"29":{"tf":2.449489742783178},"32":{"tf":2.23606797749979},"33":{"tf":2.23606797749979}}}}}},"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":1,"docs":{"39":{"tf":1.0}}}},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":14,"docs":{"29":{"tf":1.0},"35":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.4142135623730951},"43":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.4142135623730951},"51":{"tf":1.0},"56":{"tf":1.4142135623730951},"70":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0},"78":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"i":{"df":3,"docs":{"26":{"tf":1.0},"29":{"tf":1.0},"75":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"s":{"df":15,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.4142135623730951},"13":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.0},"20":{"tf":2.23606797749979},"41":{"tf":2.0},"53":{"tf":1.0},"54":{"tf":1.4142135623730951},"56":{"tf":1.0},"6":{"tf":2.0},"62":{"tf":1.0},"73":{"tf":1.0}},"i":{"df":0,"docs":{},"v":{"df":2,"docs":{"25":{"tf":1.0},"39":{"tf":1.0}}}}},"t":{"df":3,"docs":{"62":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"69":{"tf":1.0}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":4,"docs":{"0":{"tf":1.0},"41":{"tf":1.0},"67":{"tf":1.0},"71":{"tf":1.0}}}}}}},"y":{"df":3,"docs":{"28":{"tf":1.0},"44":{"tf":2.0},"56":{"tf":1.0}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"(":{"#":{"[":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"29":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"39":{"tf":1.0},"40":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}}}}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"44":{"tf":2.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"10":{"tf":1.0},"29":{"tf":1.0}},"f":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"48":{"tf":1.0}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":21,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"14":{"tf":1.7320508075688772},"18":{"tf":1.0},"19":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"38":{"tf":1.4142135623730951},"39":{"tf":1.4142135623730951},"40":{"tf":2.0},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"43":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.7320508075688772},"48":{"tf":1.0},"54":{"tf":1.4142135623730951},"60":{"tf":1.0},"62":{"tf":2.0},"67":{"tf":1.4142135623730951}}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"18":{"tf":1.0},"48":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"44":{"tf":1.0},"65":{"tf":1.0}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"47":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"40":{"tf":1.0},"74":{"tf":1.0}},"l":{"df":1,"docs":{"43":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"c":{"df":1,"docs":{"58":{"tf":1.0}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}},"l":{"a":{"c":{"df":0,"docs":{},"e":{"df":4,"docs":{"20":{"tf":1.0},"26":{"tf":1.0},"6":{"tf":1.0},"75":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"14":{"tf":1.0}}}},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"46":{"tf":1.0}}}}}},"z":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}}},"y":{"df":5,"docs":{"25":{"tf":1.0},"43":{"tf":1.0},"46":{"tf":1.0},"52":{"tf":1.0},"7":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"44":{"tf":1.0}}},"df":3,"docs":{"42":{"tf":1.7320508075688772},"44":{"tf":3.4641016151377544},"45":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"3":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"30":{"tf":1.0}}}},"u":{"df":9,"docs":{"2":{"tf":1.0},"20":{"tf":2.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"40":{"tf":1.0},"49":{"tf":1.4142135623730951},"6":{"tf":2.23606797749979},"70":{"tf":1.0}},"s":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"49":{"tf":1.0},"6":{"tf":1.0}}}}}},"/":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"49":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"/":{"c":{"df":0,"docs":{},"w":{"1":{"df":1,"docs":{"6":{"tf":1.4142135623730951}}},"4":{"df":2,"docs":{"49":{"tf":1.0},"56":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":19,"docs":{"10":{"tf":4.0},"14":{"tf":2.0},"16":{"tf":2.23606797749979},"19":{"tf":1.4142135623730951},"20":{"tf":2.23606797749979},"22":{"tf":1.7320508075688772},"23":{"tf":1.0},"34":{"tf":2.0},"35":{"tf":3.0},"39":{"tf":1.0},"42":{"tf":1.0},"48":{"tf":1.4142135623730951},"56":{"tf":1.0},"58":{"tf":3.605551275463989},"61":{"tf":1.0},"62":{"tf":1.7320508075688772},"63":{"tf":1.0},"68":{"tf":1.0},"77":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"38":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"56":{"tf":1.0},"58":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"42":{"tf":1.0},"48":{"tf":1.0}}}}},"i":{"b":{"df":0,"docs":{},"l":{"df":14,"docs":{"22":{"tf":1.4142135623730951},"26":{"tf":1.0},"29":{"tf":1.4142135623730951},"38":{"tf":1.0},"39":{"tf":1.4142135623730951},"41":{"tf":1.4142135623730951},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"59":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.4142135623730951},"73":{"tf":1.0},"78":{"tf":1.0}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"22":{"tf":1.0},"74":{"tf":1.0}}}}}},"s":{"d":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"v":{"df":1,"docs":{"71":{"tf":1.0}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"46":{"tf":1.0}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":14,"docs":{"12":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.4142135623730951},"31":{"tf":1.4142135623730951},"32":{"tf":1.0},"33":{"tf":1.0},"36":{"tf":1.0},"45":{"tf":1.0},"56":{"tf":1.0},"6":{"tf":1.0},"64":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}}},"df":0,"docs":{}}}},"d":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"20":{"tf":1.0},"61":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"15":{"tf":1.0},"48":{"tf":1.0},"59":{"tf":1.0}}}},"i":{"df":0,"docs":{},"x":{"df":2,"docs":{"20":{"tf":1.7320508075688772},"26":{"tf":1.0}}}}},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"77":{"tf":1.0}}}}}},"df":0,"docs":{}},"p":{"a":{"df":0,"docs":{},"r":{"df":6,"docs":{"19":{"tf":1.0},"29":{"tf":1.4142135623730951},"39":{"tf":1.7320508075688772},"40":{"tf":2.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"1":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"14":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":3,"docs":{"21":{"tf":1.0},"38":{"tf":1.0},"74":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"30":{"tf":1.4142135623730951},"65":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":7,"docs":{"40":{"tf":1.0},"41":{"tf":1.0},"48":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"62":{"tf":1.0},"71":{"tf":1.0}},"s":{"df":10,"docs":{"14":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"47":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"77":{"tf":1.4142135623730951}}}}}}}},"i":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"68":{"tf":1.0}}}}}}},"df":0,"docs":{}},"n":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":3,"docs":{"38":{"tf":1.0},"43":{"tf":1.0},"64":{"tf":1.0}}}}}},"df":0,"docs":{},"t":{"df":2,"docs":{"17":{"tf":1.0},"42":{"tf":1.0}}}}},"o":{"b":{"a":{"b":{"df":0,"docs":{},"l":{"df":10,"docs":{"1":{"tf":1.0},"16":{"tf":1.0},"19":{"tf":1.4142135623730951},"22":{"tf":1.0},"29":{"tf":1.0},"39":{"tf":1.0},"45":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":22,"docs":{"15":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"26":{"tf":1.4142135623730951},"32":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"35":{"tf":1.4142135623730951},"37":{"tf":1.0},"38":{"tf":1.7320508075688772},"40":{"tf":1.0},"41":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"54":{"tf":1.0},"62":{"tf":1.7320508075688772},"64":{"tf":1.0},"65":{"tf":1.4142135623730951},"70":{"tf":1.0},"73":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":8,"docs":{"19":{"tf":1.0},"53":{"tf":1.0},"58":{"tf":1.7320508075688772},"59":{"tf":2.0},"61":{"tf":1.7320508075688772},"65":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"76":{"tf":1.4142135623730951}}}}}},"d":{"df":0,"docs":{},"u":{"c":{"df":3,"docs":{"18":{"tf":1.0},"25":{"tf":1.0},"27":{"tf":1.0}},"t":{"df":3,"docs":{"11":{"tf":1.0},"24":{"tf":1.0},"4":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"40":{"tf":1.0}}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":4,"docs":{"42":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"58":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"10":{"tf":1.0},"59":{"tf":1.0}}}}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":6,"docs":{"12":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":3.1622776601683795},"77":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":13,"docs":{"10":{"tf":1.0},"15":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"42":{"tf":1.0},"5":{"tf":1.0},"54":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"9":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":8,"docs":{"26":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"46":{"tf":1.0},"47":{"tf":1.0},"57":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"65":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"40":{"tf":1.0}}}}},"df":0,"docs":{}}},"v":{"df":0,"docs":{},"i":{"d":{"df":11,"docs":{"18":{"tf":1.0},"19":{"tf":1.7320508075688772},"21":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"35":{"tf":1.0},"46":{"tf":1.0},"58":{"tf":1.0},"80":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}},"x":{"df":0,"docs":{},"i":{"df":1,"docs":{"67":{"tf":1.0}}}}}},"u":{"b":{"df":29,"docs":{"10":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":2.8284271247461903},"16":{"tf":2.8284271247461903},"17":{"tf":2.449489742783178},"18":{"tf":2.449489742783178},"19":{"tf":2.0},"20":{"tf":4.358898943540674},"21":{"tf":4.123105625617661},"22":{"tf":4.242640687119285},"23":{"tf":3.7416573867739413},"24":{"tf":2.6457513110645907},"26":{"tf":3.7416573867739413},"29":{"tf":5.916079783099616},"32":{"tf":3.0},"33":{"tf":5.830951894845301},"34":{"tf":2.6457513110645907},"58":{"tf":1.7320508075688772},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"69":{"tf":2.8284271247461903},"72":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":2.23606797749979},"75":{"tf":2.0},"76":{"tf":2.449489742783178},"77":{"tf":1.7320508075688772},"78":{"tf":1.4142135623730951}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"52":{"tf":1.4142135623730951}}}}},"l":{"df":0,"docs":{},"i":{"c":{"df":4,"docs":{"16":{"tf":1.0},"33":{"tf":1.0},"42":{"tf":1.4142135623730951},"43":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"3":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"14":{"tf":1.0}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":16,"docs":{"10":{"tf":1.0},"11":{"tf":1.4142135623730951},"15":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.7320508075688772},"24":{"tf":1.0},"32":{"tf":1.0},"35":{"tf":1.0},"48":{"tf":1.0},"57":{"tf":1.4142135623730951},"61":{"tf":1.0},"62":{"tf":1.0},"65":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":1.4142135623730951},"77":{"tf":1.0}}}}}},"t":{"df":2,"docs":{"51":{"tf":1.4142135623730951},"66":{"tf":1.0}}}},"w":{"d":{")":{"\"":{")":{"_":{"c":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"\"":{",":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"=":{"/":{"c":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"49":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},":":{"/":{"c":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"49":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":25,"docs":{"10":{"tf":2.23606797749979},"14":{"tf":3.4641016151377544},"15":{"tf":4.0},"16":{"tf":2.23606797749979},"17":{"tf":1.7320508075688772},"18":{"tf":3.0},"19":{"tf":2.8284271247461903},"20":{"tf":2.23606797749979},"21":{"tf":3.1622776601683795},"22":{"tf":2.0},"23":{"tf":1.7320508075688772},"24":{"tf":2.0},"25":{"tf":1.0},"26":{"tf":3.0},"29":{"tf":4.0},"33":{"tf":2.0},"43":{"tf":3.0},"48":{"tf":1.4142135623730951},"50":{"tf":1.4142135623730951},"53":{"tf":3.0},"54":{"tf":2.449489742783178},"58":{"tf":2.23606797749979},"69":{"tf":2.23606797749979},"74":{"tf":2.23606797749979},"78":{"tf":2.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"14":{"tf":1.0}}}}},"y":{"(":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":7,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.0}}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":12,"docs":{"16":{"tf":1.0},"20":{"tf":1.7320508075688772},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.0},"58":{"tf":1.0},"69":{"tf":1.0}},"s":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"18":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"_":{"b":{"a":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"(":{"\"":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"1":{"df":1,"docs":{"29":{"tf":1.0}}},"2":{"df":1,"docs":{"29":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"29":{"tf":1.0}}}}},"&":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"(":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":8,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":2.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"26":{"tf":2.449489742783178},"29":{"tf":3.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"19":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{":":{":":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":6,"docs":{"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":9,"docs":{"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}}},"df":0,"docs":{}},"df":18,"docs":{"15":{"tf":2.449489742783178},"16":{"tf":2.0},"17":{"tf":2.23606797749979},"18":{"tf":2.449489742783178},"19":{"tf":1.7320508075688772},"20":{"tf":2.6457513110645907},"21":{"tf":2.6457513110645907},"22":{"tf":2.449489742783178},"23":{"tf":2.6457513110645907},"24":{"tf":1.7320508075688772},"26":{"tf":2.449489742783178},"29":{"tf":3.1622776601683795},"32":{"tf":1.0},"33":{"tf":2.6457513110645907},"34":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.0},"69":{"tf":1.7320508075688772}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":2,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"33":{"tf":1.7320508075688772},"69":{"tf":1.0}}}}}}}}}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":2.23606797749979},"45":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":6,"docs":{"15":{"tf":1.0},"20":{"tf":1.0},"42":{"tf":1.4142135623730951},"48":{"tf":1.0},"56":{"tf":1.0},"78":{"tf":1.0}}}}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"47":{"tf":1.0},"7":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"71":{"tf":1.0}},"g":{"df":1,"docs":{"73":{"tf":1.7320508075688772}}}},"r":{"df":0,"docs":{},"e":{"df":5,"docs":{"12":{"tf":1.0},"25":{"tf":1.0},"27":{"tf":1.0},"45":{"tf":1.0},"73":{"tf":1.0}}}},"w":{"df":2,"docs":{"10":{"tf":1.0},"43":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"e":{"a":{"c":{"df":0,"docs":{},"h":{"df":5,"docs":{"22":{"tf":1.0},"41":{"tf":1.0},"59":{"tf":1.0},"73":{"tf":1.0},"78":{"tf":1.0}}},"t":{"df":3,"docs":{"14":{"tf":1.0},"39":{"tf":1.0},"41":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"25":{"tf":1.0}}}},"v":{"df":1,"docs":{"14":{"tf":1.0}}}}}},"d":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"53":{"tf":1.0}}}},"df":0,"docs":{}},"df":8,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"20":{"tf":1.0},"22":{"tf":1.4142135623730951},"36":{"tf":1.0},"59":{"tf":1.0},"73":{"tf":2.0},"77":{"tf":1.0}},"i":{"df":9,"docs":{"16":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"24":{"tf":1.0},"35":{"tf":1.0},"39":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":9,"docs":{"18":{"tf":1.0},"19":{"tf":1.0},"25":{"tf":1.0},"4":{"tf":1.0},"42":{"tf":1.0},"46":{"tf":1.0},"67":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"42":{"tf":1.0},"44":{"tf":1.0}}}},"z":{"df":2,"docs":{"42":{"tf":1.0},"56":{"tf":1.0}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"58":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":17,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"24":{"tf":1.4142135623730951},"35":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.0},"41":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"48":{"tf":1.7320508075688772},"56":{"tf":1.0},"60":{"tf":1.0},"64":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":5,"docs":{"30":{"tf":1.0},"39":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"74":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"33":{"tf":1.0}}}},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":3,"docs":{"1":{"tf":1.0},"58":{"tf":1.0},"7":{"tf":1.0}}},"df":0,"docs":{}}}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"74":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"d":{"df":1,"docs":{"54":{"tf":1.0}}},"df":0,"docs":{}},"v":{"df":1,"docs":{"24":{"tf":1.0}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"u":{"c":{"df":2,"docs":{"11":{"tf":1.0},"33":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"46":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"f":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"15":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"52":{"tf":1.0},"69":{"tf":1.0},"75":{"tf":1.4142135623730951}}}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"18":{"tf":1.0},"71":{"tf":1.0}}}},"df":0,"docs":{}}}},"g":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"78":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"65":{"tf":1.0},"83":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"20":{"tf":1.0}}}}}}},"l":{"a":{"df":0,"docs":{},"t":{"df":9,"docs":{"15":{"tf":1.0},"29":{"tf":1.0},"36":{"tf":1.0},"48":{"tf":1.0},"51":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.7320508075688772},"63":{"tf":1.0},"71":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":2,"docs":{"33":{"tf":1.0},"66":{"tf":1.0}}}}}}}}}}},"df":1,"docs":{"65":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"s":{"df":4,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":1.0},"33":{"tf":1.0},"62":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"v":{"df":9,"docs":{"0":{"tf":1.0},"31":{"tf":1.0},"43":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.0},"74":{"tf":1.0}}}},"i":{"df":2,"docs":{"27":{"tf":1.0},"78":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":9,"docs":{"41":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"51":{"tf":1.0},"56":{"tf":1.0},"59":{"tf":1.0},"62":{"tf":1.0},"71":{"tf":1.0},"77":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"v":{"df":9,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":2.0},"33":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.7320508075688772},"69":{"tf":1.7320508075688772},"74":{"tf":1.4142135623730951},"77":{"tf":1.4142135623730951}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":4,"docs":{"15":{"tf":1.0},"32":{"tf":1.0},"62":{"tf":1.0},"71":{"tf":1.0}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":5,"docs":{"41":{"tf":2.449489742783178},"45":{"tf":3.4641016151377544},"58":{"tf":1.0},"59":{"tf":1.7320508075688772},"61":{"tf":3.1622776601683795}}},"y":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"61":{"tf":1.0}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"59":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"o":{"df":2,"docs":{"6":{"tf":1.0},"71":{"tf":1.0}},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"23":{"tf":1.4142135623730951},"26":{"tf":1.0},"58":{"tf":1.0}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":4,"docs":{"36":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.4142135623730951},"6":{"tf":1.7320508075688772}}}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":8,"docs":{"10":{"tf":1.4142135623730951},"18":{"tf":1.0},"19":{"tf":1.0},"52":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"61":{"tf":1.0},"74":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"15":{"tf":1.4142135623730951},"19":{"tf":1.0},"56":{"tf":1.0}}}}}}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":6,"docs":{"10":{"tf":1.0},"3":{"tf":1.0},"39":{"tf":1.4142135623730951},"45":{"tf":1.0},"61":{"tf":1.0},"78":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"r":{"df":16,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.0},"14":{"tf":1.0},"17":{"tf":1.7320508075688772},"33":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.4142135623730951},"41":{"tf":1.0},"43":{"tf":1.0},"52":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.4142135623730951},"9":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":3,"docs":{"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":1,"docs":{"48":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":1,"docs":{"71":{"tf":1.7320508075688772}}}},"u":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"1":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"(":{"df":0,"docs":{},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":2,"docs":{"26":{"tf":1.0},"29":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":15,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.7320508075688772},"18":{"tf":2.8284271247461903},"19":{"tf":1.7320508075688772},"20":{"tf":2.6457513110645907},"21":{"tf":3.3166247903554},"22":{"tf":2.6457513110645907},"23":{"tf":2.6457513110645907},"24":{"tf":2.6457513110645907},"26":{"tf":4.242640687119285},"29":{"tf":5.656854249492381},"74":{"tf":1.7320508075688772},"75":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":34,"docs":{"10":{"tf":1.7320508075688772},"14":{"tf":1.4142135623730951},"15":{"tf":2.23606797749979},"16":{"tf":2.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":2.0},"21":{"tf":2.23606797749979},"22":{"tf":1.4142135623730951},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":2.0},"27":{"tf":1.0},"29":{"tf":2.23606797749979},"33":{"tf":1.7320508075688772},"34":{"tf":1.0},"38":{"tf":1.7320508075688772},"40":{"tf":1.0},"43":{"tf":1.0},"45":{"tf":1.4142135623730951},"53":{"tf":1.0},"58":{"tf":1.7320508075688772},"59":{"tf":1.4142135623730951},"60":{"tf":1.0},"61":{"tf":1.7320508075688772},"62":{"tf":1.0},"64":{"tf":1.4142135623730951},"66":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.4142135623730951},"85":{"tf":1.0}},"e":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":4,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":2.23606797749979},"74":{"tf":1.4142135623730951},"75":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"t":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"39":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.0}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"<":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":11,"docs":{"10":{"tf":1.0},"23":{"tf":1.7320508075688772},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.8284271247461903},"33":{"tf":1.0},"34":{"tf":1.0},"58":{"tf":1.4142135623730951},"61":{"tf":1.0},"63":{"tf":1.0},"74":{"tf":1.0}},"e":{"<":{"df":0,"docs":{},"t":{"df":1,"docs":{"62":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}}},"t":{"df":1,"docs":{"61":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"c":{"<":{"_":{"df":1,"docs":{"74":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":16,"docs":{"10":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"22":{"tf":1.0},"26":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.4142135623730951},"50":{"tf":1.0},"51":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951},"58":{"tf":2.449489742783178},"59":{"tf":1.0},"61":{"tf":1.0},"73":{"tf":1.4142135623730951}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"56":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":19,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":2.8284271247461903},"15":{"tf":1.4142135623730951},"21":{"tf":1.0},"22":{"tf":2.23606797749979},"23":{"tf":1.7320508075688772},"24":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"26":{"tf":1.7320508075688772},"29":{"tf":2.23606797749979},"33":{"tf":1.0},"38":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"45":{"tf":1.0},"58":{"tf":3.1622776601683795},"61":{"tf":2.23606797749979},"73":{"tf":1.4142135623730951},"78":{"tf":1.7320508075688772}},"s":{"(":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":2,"docs":{"33":{"tf":1.0},"69":{"tf":1.0}}}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":1,"docs":{"33":{"tf":1.0}}}}}}}}}}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":1,"docs":{"78":{"tf":1.0}}}}}}}}}}}}}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"s":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"41":{"tf":1.0}}}},"df":0,"docs":{}},"df":3,"docs":{"66":{"tf":1.0},"75":{"tf":1.0},"9":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"74":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"22":{"tf":1.0}}}}}}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":3,"docs":{"28":{"tf":1.0},"30":{"tf":1.0},"44":{"tf":2.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"i":{"d":{"df":1,"docs":{"69":{"tf":1.0}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":11,"docs":{"15":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"24":{"tf":1.0},"27":{"tf":1.0},"48":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"78":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"i":{"b":{"df":4,"docs":{"29":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"70":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"m":{"df":1,"docs":{"49":{"tf":1.0}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":3,"docs":{"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772}}}},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}}}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"55":{"tf":1.0}}}}}},"n":{"d":{"df":1,"docs":{"29":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.7320508075688772}}}}}}},"p":{"c":{"df":1,"docs":{"38":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":3,"docs":{"26":{"tf":1.0},"43":{"tf":1.0},"61":{"tf":1.0}}}},"n":{"df":10,"docs":{"11":{"tf":1.7320508075688772},"17":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.7320508075688772},"33":{"tf":1.7320508075688772},"4":{"tf":1.4142135623730951},"49":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}}}},"s":{"df":0,"docs":{},"t":{"'":{"df":1,"docs":{"71":{"tf":1.0}}},"_":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"e":{"=":{"1":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":20,"docs":{"1":{"tf":2.0},"10":{"tf":1.7320508075688772},"11":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"19":{"tf":1.7320508075688772},"30":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"4":{"tf":2.6457513110645907},"57":{"tf":1.0},"58":{"tf":1.0},"61":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951},"77":{"tf":1.0},"9":{"tf":2.0}},"i":{"df":1,"docs":{"57":{"tf":1.0}}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"4":{"tf":1.0}}}}}}}},"s":{"a":{"d":{"df":1,"docs":{"54":{"tf":1.0}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":2,"docs":{"35":{"tf":1.0},"46":{"tf":1.0}}}},"k":{"df":0,"docs":{},"e":{"df":1,"docs":{"44":{"tf":1.0}}}},"l":{"a":{"d":{"df":1,"docs":{"40":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"e":{"df":14,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"28":{"tf":1.0},"30":{"tf":1.0},"44":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"61":{"tf":1.0},"65":{"tf":1.7320508075688772},"73":{"tf":1.0},"74":{"tf":1.4142135623730951},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0}}}},"n":{"d":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"x":{"df":2,"docs":{"38":{"tf":1.0},"46":{"tf":1.0}}}}},"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"39":{"tf":1.0},"40":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"e":{"df":2,"docs":{"20":{"tf":1.4142135623730951},"73":{"tf":1.0}}}}},"c":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"58":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":2,"docs":{"18":{"tf":1.0},"19":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}},"h":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":7,"docs":{"39":{"tf":1.4142135623730951},"40":{"tf":2.0},"41":{"tf":2.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"58":{"tf":1.0}}}}},"df":0,"docs":{},"m":{"a":{"df":6,"docs":{"15":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":4.242640687119285},"48":{"tf":1.0},"62":{"tf":1.0},"70":{"tf":1.0}},"r":{"df":3,"docs":{"29":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0}},"s":{":":{":":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":1,"docs":{"33":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"30":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"42":{"tf":1.0},"51":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":5,"docs":{"18":{"tf":1.0},"20":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.0},"65":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"19":{"tf":1.0},"36":{"tf":1.0},"48":{"tf":1.0},"9":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"46":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":22,"docs":{"12":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"4":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0},"67":{"tf":1.0},"71":{"tf":1.7320508075688772},"74":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"9":{"tf":1.0}},"m":{"df":4,"docs":{"18":{"tf":1.4142135623730951},"48":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0}}},"n":{"df":1,"docs":{"46":{"tf":1.0}}}},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"39":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"42":{"tf":1.0}}},"df":5,"docs":{"39":{"tf":2.0},"40":{"tf":1.4142135623730951},"41":{"tf":2.6457513110645907},"42":{"tf":1.0},"43":{"tf":1.0}}}}}},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"74":{"tf":1.0}},"i":{"c":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"36":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"n":{"d":{"df":15,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"20":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"44":{"tf":1.0},"48":{"tf":1.4142135623730951},"51":{"tf":1.0},"52":{"tf":1.7320508075688772},"53":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"59":{"tf":2.449489742783178},"60":{"tf":1.0},"61":{"tf":2.0}},"e":{"df":0,"docs":{},"r":{"df":10,"docs":{"14":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.6457513110645907},"42":{"tf":1.4142135623730951},"52":{"tf":1.0}}}}},"df":0,"docs":{},"s":{"df":3,"docs":{"10":{"tf":1.0},"16":{"tf":1.0},"41":{"tf":1.0}}},"t":{"df":12,"docs":{"10":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"22":{"tf":1.0},"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"56":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":2.23606797749979},"59":{"tf":1.4142135623730951},"61":{"tf":1.0},"63":{"tf":1.4142135623730951}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":4,"docs":{"15":{"tf":1.4142135623730951},"29":{"tf":1.0},"59":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"76":{"tf":1.0}}},"df":0,"docs":{}}}}},"r":{"d":{"df":11,"docs":{"14":{"tf":1.7320508075688772},"15":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"32":{"tf":1.7320508075688772},"33":{"tf":1.0},"35":{"tf":2.0},"57":{"tf":1.7320508075688772},"70":{"tf":1.0}},"e":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"32":{"tf":2.23606797749979},"33":{"tf":2.23606797749979}},"l":{"=":{"\"":{"df":0,"docs":{},"s":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"_":{"c":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"58":{"tf":1.0}}}}}},"{":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":10,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"29":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":14,"docs":{"14":{"tf":1.7320508075688772},"15":{"tf":2.0},"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"22":{"tf":1.0},"29":{"tf":1.0},"32":{"tf":1.7320508075688772},"33":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"61":{"tf":1.0},"73":{"tf":1.0}},"i":{"df":0,"docs":{},"z":{"df":3,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"20":{"tf":1.0}}}}}},"df":1,"docs":{"55":{"tf":1.0}},"o":{"df":0,"docs":{},"u":{"df":2,"docs":{"30":{"tf":1.0},"72":{"tf":1.0}}}}},"v":{"df":2,"docs":{"41":{"tf":1.7320508075688772},"51":{"tf":1.4142135623730951}},"i":{"c":{"df":1,"docs":{"38":{"tf":1.0}}},"df":0,"docs":{}}}},"t":{"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"27":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":16,"docs":{"10":{"tf":1.0},"27":{"tf":1.0},"4":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"54":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"61":{"tf":1.0},"62":{"tf":1.0},"67":{"tf":1.0},"70":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":3.0},"77":{"tf":1.4142135623730951}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"39":{"tf":1.0},"40":{"tf":1.0},"70":{"tf":1.0}}}}}},"h":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"33":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"38":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"35":{"tf":1.0}}}},"w":{"df":8,"docs":{"0":{"tf":1.4142135623730951},"14":{"tf":1.0},"16":{"tf":1.0},"42":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"74":{"tf":1.0},"9":{"tf":1.0}}}}},"i":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"24":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"58":{"tf":1.7320508075688772},"63":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"10":{"tf":1.0}}}}}}},"df":2,"docs":{"14":{"tf":1.0},"22":{"tf":1.0}}},"df":0,"docs":{}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":12,"docs":{"14":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"34":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.4142135623730951},"73":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"58":{"tf":1.0}}}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"81":{"tf":1.0},"85":{"tf":1.0}}}},"p":{"df":0,"docs":{},"l":{"df":20,"docs":{"10":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"14":{"tf":1.0},"17":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"35":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"49":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"9":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"20":{"tf":1.0},"58":{"tf":1.0}}}}},"i":{"c":{"df":2,"docs":{"14":{"tf":1.0},"44":{"tf":1.0}}},"df":1,"docs":{"33":{"tf":1.0}},"f":{"df":0,"docs":{},"i":{"df":5,"docs":{"29":{"tf":1.0},"39":{"tf":1.0},"43":{"tf":1.0},"60":{"tf":1.0},"74":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"l":{"df":2,"docs":{"19":{"tf":1.0},"78":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":22,"docs":{"10":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"18":{"tf":1.7320508075688772},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.4142135623730951},"39":{"tf":1.0},"48":{"tf":1.0},"53":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":2.0},"61":{"tf":1.0},"64":{"tf":1.7320508075688772},"66":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.7320508075688772},"74":{"tf":2.449489742783178},"76":{"tf":1.0}}}}},"t":{"df":1,"docs":{"29":{"tf":1.0}},"u":{"a":{"df":0,"docs":{},"t":{"df":4,"docs":{"23":{"tf":1.4142135623730951},"41":{"tf":1.4142135623730951},"65":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}}},"z":{"df":0,"docs":{},"e":{"df":2,"docs":{"11":{"tf":1.0},"4":{"tf":1.4142135623730951}}}}},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":2,"docs":{"33":{"tf":1.0},"73":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"18":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":2,"docs":{"24":{"tf":1.0},"34":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":4,"docs":{"33":{"tf":1.0},"58":{"tf":1.0},"61":{"tf":1.0},"71":{"tf":1.0}}}}}}}}},"m":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":2,"docs":{"26":{"tf":1.0},"64":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"11":{"tf":1.0},"20":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"62":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":33,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":1.0},"10":{"tf":2.0},"14":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"27":{"tf":1.0},"28":{"tf":2.0},"30":{"tf":1.0},"33":{"tf":1.0},"35":{"tf":1.7320508075688772},"36":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.4142135623730951},"4":{"tf":1.0},"42":{"tf":2.0},"43":{"tf":1.0},"48":{"tf":1.0},"5":{"tf":1.4142135623730951},"52":{"tf":1.0},"53":{"tf":1.4142135623730951},"54":{"tf":2.0},"55":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":1.4142135623730951},"64":{"tf":1.7320508075688772},"65":{"tf":1.0},"66":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":2.23606797749979}}}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"_":{"c":{"a":{"df":0,"docs":{},"s":{"df":2,"docs":{"32":{"tf":2.23606797749979},"33":{"tf":2.23606797749979}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"32":{"tf":1.0},"57":{"tf":1.0}}}},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":1,"docs":{"20":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"df":2,"docs":{"18":{"tf":1.0},"62":{"tf":1.0}}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"64":{"tf":1.0}}},"i":{"d":{"df":5,"docs":{"15":{"tf":1.0},"38":{"tf":1.0},"43":{"tf":1.0},"46":{"tf":1.0},"64":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"37":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"48":{"tf":1.0}}}},"v":{"df":3,"docs":{"38":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"73":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"33":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":15,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"25":{"tf":1.0},"30":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.7320508075688772},"49":{"tf":1.0},"51":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951},"58":{"tf":1.0},"71":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0}}},"i":{"df":0,"docs":{},"m":{"df":3,"docs":{"43":{"tf":1.0},"57":{"tf":1.0},"76":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"59":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"38":{"tf":1.0},"73":{"tf":1.0}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"74":{"tf":1.0}}},"df":0,"docs":{}},"r":{"c":{"df":1,"docs":{"22":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"74":{"tf":1.0}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":7,"docs":{"28":{"tf":1.0},"41":{"tf":1.7320508075688772},"45":{"tf":1.0},"48":{"tf":2.449489742783178},"56":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"f":{"df":7,"docs":{"10":{"tf":1.0},"44":{"tf":1.0},"47":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.7320508075688772},"67":{"tf":1.0},"73":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"32":{"tf":1.0}}}},"n":{"d":{"df":1,"docs":{"27":{"tf":1.0}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"16":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951}}}}}},"r":{"c":{"/":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"33":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"r":{"df":4,"docs":{"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0}},"s":{":":{"8":{"0":{":":{"1":{"4":{"df":1,"docs":{"20":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"23":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"l":{"df":0,"docs":{},"i":{"b":{".":{"df":0,"docs":{},"r":{"df":8,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"r":{"df":5,"docs":{"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"33":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"4":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":1,"docs":{"41":{"tf":1.0}}}},"k":{"df":0,"docs":{},"e":{"df":11,"docs":{"13":{"tf":1.0},"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"6":{"tf":1.0},"70":{"tf":1.0},"9":{"tf":1.0}}}},"n":{"d":{"a":{"df":0,"docs":{},"r":{"d":{"df":4,"docs":{"26":{"tf":1.0},"32":{"tf":1.0},"74":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"13":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{}},"t":{"_":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":1,"docs":{"53":{"tf":1.0}}}}},"df":0,"docs":{}},"df":22,"docs":{"1":{"tf":1.0},"10":{"tf":2.23606797749979},"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"34":{"tf":1.0},"46":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.7320508075688772},"49":{"tf":1.7320508075688772},"56":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"65":{"tf":1.4142135623730951},"68":{"tf":1.0},"7":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":1.4142135623730951},"77":{"tf":1.0},"9":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"69":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}}},"df":26,"docs":{"10":{"tf":2.23606797749979},"14":{"tf":2.0},"15":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":4.358898943540674},"21":{"tf":2.0},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"38":{"tf":1.0},"42":{"tf":3.872983346207417},"43":{"tf":3.1622776601683795},"44":{"tf":2.23606797749979},"45":{"tf":2.449489742783178},"48":{"tf":2.23606797749979},"53":{"tf":1.0},"54":{"tf":2.449489742783178},"56":{"tf":2.6457513110645907},"58":{"tf":2.0},"62":{"tf":2.0},"72":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.4142135623730951}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}}}}},"i":{"c":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":1,"docs":{"61":{"tf":1.0}}}}},"d":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"23":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":11,"docs":{"14":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"35":{"tf":1.0},"70":{"tf":1.0},"9":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"(":{"#":{"[":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"23":{"tf":1.0},"29":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"c":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":3,"docs":{"10":{"tf":1.0},"23":{"tf":1.7320508075688772},"29":{"tf":1.4142135623730951}}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"<":{"_":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}},"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":8,"docs":{"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"74":{"tf":1.0}}}}}}}}}}}}}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":17,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":2.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.0},"58":{"tf":1.0},"69":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":12,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"<":{"df":0,"docs":{},"t":{"df":1,"docs":{"22":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":19,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":2.449489742783178},"21":{"tf":2.0},"22":{"tf":2.449489742783178},"23":{"tf":2.23606797749979},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178},"33":{"tf":1.0},"34":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.4142135623730951},"77":{"tf":1.0}}}}}}}}},"v":{"df":0,"docs":{},"e":{"c":{"<":{"_":{"df":7,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":19,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.7320508075688772},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":2.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"77":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":10,"docs":{"0":{"tf":1.4142135623730951},"13":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"33":{"tf":1.0},"36":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"41":{"tf":1.0},"55":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":11,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"43":{"tf":1.4142135623730951},"45":{"tf":1.7320508075688772},"48":{"tf":1.0},"57":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"57":{"tf":1.0}}}},"p":{"df":1,"docs":{"73":{"tf":1.4142135623730951}}},"r":{"a":{"df":0,"docs":{},"g":{"df":12,"docs":{"2":{"tf":1.0},"20":{"tf":3.1622776601683795},"22":{"tf":1.4142135623730951},"23":{"tf":1.0},"29":{"tf":1.4142135623730951},"33":{"tf":1.0},"44":{"tf":1.0},"56":{"tf":1.0},"70":{"tf":1.0},"72":{"tf":1.4142135623730951},"73":{"tf":2.23606797749979},"78":{"tf":1.0}}}},"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"o":{"d":{"df":2,"docs":{"19":{"tf":1.0},"50":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":10,"docs":{"19":{"tf":1.0},"20":{"tf":2.449489742783178},"22":{"tf":1.0},"42":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.7320508075688772},"54":{"tf":1.0},"73":{"tf":1.4142135623730951},"74":{"tf":1.0},"77":{"tf":2.0}}},"i":{"df":3,"docs":{"18":{"tf":1.0},"35":{"tf":1.0},"61":{"tf":1.0}}}}},"r":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"m":{"a":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"s":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"73":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":2,"docs":{"16":{"tf":1.0},"58":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"18":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":18,"docs":{"14":{"tf":1.0},"15":{"tf":1.7320508075688772},"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":2.6457513110645907},"21":{"tf":1.0},"22":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"32":{"tf":1.4142135623730951},"33":{"tf":2.449489742783178},"53":{"tf":1.0},"58":{"tf":2.0},"61":{"tf":1.7320508075688772},"69":{"tf":1.0},"70":{"tf":1.0},"76":{"tf":1.0},"78":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"1":{"tf":1.0},"58":{"tf":1.0}}}}}}},"u":{"c":{"df":0,"docs":{},"t":{"df":13,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.7320508075688772},"22":{"tf":1.7320508075688772},"29":{"tf":1.7320508075688772},"32":{"tf":1.7320508075688772},"33":{"tf":3.0},"69":{"tf":1.4142135623730951},"76":{"tf":1.4142135623730951},"78":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":19,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.0},"16":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"38":{"tf":1.0},"43":{"tf":1.4142135623730951},"51":{"tf":1.0},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"71":{"tf":1.7320508075688772},"77":{"tf":1.0},"78":{"tf":1.0},"8":{"tf":1.0}}}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"50":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":3,"docs":{"15":{"tf":1.0},"32":{"tf":1.0},"57":{"tf":1.4142135623730951}}}}}},"u":{"b":{"c":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"38":{"tf":1.0}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"71":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":6,"docs":{"40":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":3.1622776601683795},"58":{"tf":2.23606797749979},"59":{"tf":2.0},"61":{"tf":3.0}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"59":{"tf":1.4142135623730951},"61":{"tf":1.0}}}},"df":0,"docs":{}}}},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"16":{"tf":1.0}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"_":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"59":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"59":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"u":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"59":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":2,"docs":{"58":{"tf":1.0},"59":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"61":{"tf":1.0}}}}}}}}}}}}}}},"df":0,"docs":{}}}}}}},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"56":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"43":{"tf":1.0},"53":{"tf":1.0},"61":{"tf":1.0}}}}}}}},"t":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"df":1,"docs":{"39":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"df":2,"docs":{"16":{"tf":1.0},"62":{"tf":1.0}},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"75":{"tf":1.0}}}}}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":5,"docs":{"10":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"5":{"tf":1.0}},"e":{"d":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"s":{"df":4,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"45":{"tf":1.7320508075688772},"59":{"tf":1.0}}}}}},"df":0,"docs":{},"h":{"df":21,"docs":{"10":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":1.0},"35":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.0},"50":{"tf":1.4142135623730951},"51":{"tf":1.0},"56":{"tf":1.0},"62":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"67":{"tf":1.0},"74":{"tf":2.0},"78":{"tf":1.7320508075688772},"9":{"tf":1.0}}}},"d":{"df":0,"docs":{},"o":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"63":{"tf":1.0}}}}},"df":0,"docs":{}},"df":2,"docs":{"10":{"tf":1.0},"63":{"tf":2.0}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"63":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"26":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"36":{"tf":1.0},"7":{"tf":1.0},"78":{"tf":1.0}}}}}}},"m":{"df":1,"docs":{"56":{"tf":1.0}},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"39":{"tf":1.0},"51":{"tf":1.0}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":12,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.4142135623730951},"20":{"tf":2.0},"21":{"tf":2.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"26":{"tf":2.449489742783178},"29":{"tf":3.0}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":5,"docs":{"10":{"tf":1.0},"29":{"tf":1.0},"42":{"tf":1.0},"53":{"tf":1.0},"65":{"tf":1.4142135623730951}}}},"s":{"df":4,"docs":{"14":{"tf":1.0},"45":{"tf":1.0},"61":{"tf":1.0},"73":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"df":8,"docs":{"20":{"tf":1.0},"41":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"69":{"tf":1.0},"78":{"tf":1.0}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":2,"docs":{"17":{"tf":1.0},"60":{"tf":1.0}}}}}}}},"w":{"df":1,"docs":{"38":{"tf":1.0}}},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"a":{"df":1,"docs":{"2":{"tf":1.0}}},"df":0,"docs":{}}}},"n":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"62":{"tf":1.0},"76":{"tf":1.0}}}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":11,"docs":{"10":{"tf":1.0},"39":{"tf":1.7320508075688772},"40":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.0},"52":{"tf":1.4142135623730951},"64":{"tf":1.0},"65":{"tf":1.4142135623730951},"76":{"tf":1.0},"77":{"tf":1.0}}}}}}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"42":{"tf":1.0},"48":{"tf":2.6457513110645907},"56":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":19,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"26":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.4142135623730951},"36":{"tf":1.0},"37":{"tf":1.0},"40":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"59":{"tf":1.7320508075688772},"64":{"tf":1.4142135623730951}},"n":{"df":1,"docs":{"39":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"k":{"df":10,"docs":{"18":{"tf":1.0},"29":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"51":{"tf":1.0},"55":{"tf":1.0},"61":{"tf":1.0},"64":{"tf":1.0}}}},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"(":{"df":1,"docs":{"33":{"tf":1.0}}},"/":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":1,"docs":{"33":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"3":{"2":{"df":2,"docs":{"13":{"tf":1.4142135623730951},"6":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":7,"docs":{"11":{"tf":2.0},"12":{"tf":1.4142135623730951},"33":{"tf":2.23606797749979},"34":{"tf":1.0},"4":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.4142135623730951}}}}}},"s":{"df":0,"docs":{},"k":{"df":4,"docs":{"38":{"tf":1.0},"39":{"tf":2.0},"41":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951}}}}},"df":2,"docs":{"56":{"tf":1.0},"60":{"tf":1.0}},"e":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"36":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"20":{"tf":1.0},"71":{"tf":1.0}}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"43":{"tf":1.0}}}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":7,"docs":{"0":{"tf":1.0},"11":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"51":{"tf":1.0},"60":{"tf":1.0},"64":{"tf":1.0}}}},"n":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"73":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"d":{"df":3,"docs":{"57":{"tf":1.0},"65":{"tf":1.0},"74":{"tf":1.4142135623730951}}},"df":1,"docs":{"73":{"tf":1.0}}},"r":{"df":0,"docs":{},"m":{"df":3,"docs":{"44":{"tf":1.0},"47":{"tf":1.0},"57":{"tf":1.0}}},"r":{"a":{"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"15":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"17":{"tf":1.0},"58":{"tf":1.0}}}},"df":0,"docs":{}},"df":25,"docs":{"11":{"tf":1.7320508075688772},"14":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":4.123105625617661},"18":{"tf":4.123105625617661},"19":{"tf":3.7416573867739413},"2":{"tf":1.0},"20":{"tf":4.123105625617661},"21":{"tf":3.3166247903554},"22":{"tf":1.7320508075688772},"23":{"tf":2.0},"24":{"tf":3.0},"26":{"tf":3.872983346207417},"29":{"tf":4.47213595499958},"30":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"4":{"tf":1.4142135623730951},"52":{"tf":1.0},"6":{"tf":1.7320508075688772},"69":{"tf":1.0},"7":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"78":{"tf":2.0}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":3,"docs":{"4":{"tf":1.0},"47":{"tf":1.0},"7":{"tf":1.7320508075688772}}}}}}},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"53":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"t":{"'":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":3,"docs":{"25":{"tf":1.0},"38":{"tf":1.0},"41":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"41":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":1.0}},"g":{"df":39,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"22":{"tf":1.7320508075688772},"23":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.4142135623730951},"35":{"tf":1.0},"36":{"tf":1.0},"39":{"tf":1.7320508075688772},"40":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"44":{"tf":2.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.7320508075688772},"50":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":1.0},"59":{"tf":1.4142135623730951},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.7320508075688772},"74":{"tf":1.0},"75":{"tf":1.0},"76":{"tf":1.0},"78":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"k":{"df":10,"docs":{"10":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"39":{"tf":1.0},"42":{"tf":1.0},"50":{"tf":1.4142135623730951},"58":{"tf":1.0},"60":{"tf":1.0},"65":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"23":{"tf":1.0},"29":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":6,"docs":{"23":{"tf":2.0},"24":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"58":{"tf":1.4142135623730951},"70":{"tf":1.0}}}}}}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":14,"docs":{"10":{"tf":1.0},"18":{"tf":1.4142135623730951},"32":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.4142135623730951},"56":{"tf":1.7320508075688772},"57":{"tf":1.7320508075688772},"58":{"tf":2.23606797749979},"59":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.0},"73":{"tf":1.7320508075688772},"74":{"tf":1.0}}}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":2,"docs":{"38":{"tf":1.0},"76":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"73":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":6,"docs":{"10":{"tf":1.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"29":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.4142135623730951}}},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"59":{"tf":1.0}}},"df":0,"docs":{}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":10,"docs":{"22":{"tf":1.0},"36":{"tf":1.4142135623730951},"44":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"65":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"8":{"tf":1.0}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"4":{"tf":1.0},"76":{"tf":1.0}}}}}}}}}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"74":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":22,"docs":{"11":{"tf":1.0},"14":{"tf":1.0},"17":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"35":{"tf":1.0},"41":{"tf":1.0},"54":{"tf":2.0},"55":{"tf":1.0},"56":{"tf":1.4142135623730951},"61":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":2.0},"73":{"tf":1.0},"74":{"tf":1.4142135623730951},"76":{"tf":3.0},"77":{"tf":2.449489742783178},"78":{"tf":2.23606797749979}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":5,"docs":{"10":{"tf":1.0},"58":{"tf":1.0},"76":{"tf":1.4142135623730951},"77":{"tf":1.4142135623730951},"78":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"m":{"df":0,"docs":{},"g":{"df":1,"docs":{"79":{"tf":1.0}}}},"o":{"_":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":11,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"58":{"tf":1.0}}},"y":{"(":{"&":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{":":{":":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":8,"docs":{"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"69":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":12,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":2,"docs":{"14":{"tf":1.0},"15":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"44":{"tf":1.0}}}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":7,"docs":{"10":{"tf":1.0},"18":{"tf":1.0},"28":{"tf":2.449489742783178},"29":{"tf":2.8284271247461903},"48":{"tf":2.6457513110645907},"60":{"tf":1.4142135623730951},"65":{"tf":1.0}}}}},"l":{"d":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"60":{"tf":1.0}}},"l":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"33":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":8,"docs":{"11":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"21":{"tf":1.0},"33":{"tf":1.0},"35":{"tf":1.0},"5":{"tf":1.0},"71":{"tf":1.0}}}},"p":{"df":4,"docs":{"16":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"61":{"tf":1.0},"71":{"tf":1.7320508075688772}},"i":{"c":{"df":2,"docs":{"0":{"tf":1.0},"55":{"tf":1.0}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"10":{"tf":1.0}}}}},"t":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"56":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"u":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"a":{"c":{"df":0,"docs":{},"k":{"_":{"c":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"44":{"tf":1.0},"77":{"tf":1.0}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"11":{"tf":1.0},"38":{"tf":1.0},"48":{"tf":1.7320508075688772},"62":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"29":{"tf":1.0},"44":{"tf":1.0}}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":5,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"17":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951}}}},"n":{"df":0,"docs":{},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":6,"docs":{"42":{"tf":1.4142135623730951},"43":{"tf":1.0},"44":{"tf":2.0},"45":{"tf":2.6457513110645907},"48":{"tf":1.7320508075688772},"76":{"tf":2.449489742783178}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":1,"docs":{"76":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":1,"docs":{"76":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":8,"docs":{"18":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"42":{"tf":2.23606797749979},"44":{"tf":2.23606797749979},"45":{"tf":1.0},"48":{"tf":1.0},"60":{"tf":1.4142135623730951}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":2,"docs":{"14":{"tf":1.0},"20":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"73":{"tf":1.0}}}}}},"y":{"df":1,"docs":{"51":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":3,"docs":{"18":{"tf":1.0},"38":{"tf":1.0},"44":{"tf":1.0}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"df":1,"docs":{"71":{"tf":1.7320508075688772}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":5,"docs":{"20":{"tf":1.0},"26":{"tf":1.4142135623730951},"35":{"tf":1.0},"45":{"tf":1.0},"76":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"0":{"tf":1.0}}}}}}},"df":10,"docs":{"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"25":{"tf":1.0},"30":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.0},"53":{"tf":1.4142135623730951},"73":{"tf":1.0},"8":{"tf":1.0}},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":7,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"39":{"tf":1.0},"44":{"tf":1.0},"58":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"e":{"df":7,"docs":{"20":{"tf":1.0},"34":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"74":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":4,"docs":{"27":{"tf":1.0},"38":{"tf":1.0},"48":{"tf":1.0},"58":{"tf":1.0}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"1":{"tf":1.0}}}}}}},"w":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"k":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"e":{"df":5,"docs":{"21":{"tf":1.0},"30":{"tf":1.0},"34":{"tf":1.0},"44":{"tf":1.0},"65":{"tf":1.0}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"30":{"tf":1.0}}}}},"o":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"73":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":18,"docs":{"15":{"tf":1.0},"18":{"tf":1.7320508075688772},"22":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"35":{"tf":1.0},"44":{"tf":1.4142135623730951},"51":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.4142135623730951},"57":{"tf":1.0},"61":{"tf":1.0},"66":{"tf":1.0},"73":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"76":{"tf":1.0}}}},"x":{"df":3,"docs":{"50":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"50":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"\"":{":":{"\"":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{".":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"p":{"2":{"5":{"6":{"df":0,"docs":{},"k":{"1":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"\"":{",":{"\"":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"\"":{":":{"\"":{"a":{"5":{"b":{"b":{"d":{"df":0,"docs":{},"h":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"/":{"4":{"df":0,"docs":{},"q":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"h":{"9":{"df":0,"docs":{},"h":{"9":{"+":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"j":{"df":0,"docs":{},"k":{"df":0,"docs":{},"v":{"df":0,"docs":{},"k":{"0":{"c":{"df":0,"docs":{},"o":{"3":{"1":{"df":0,"docs":{},"w":{"4":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"4":{"df":0,"docs":{},"p":{"5":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"52":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"5":{"df":0,"docs":{},"z":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"y":{"df":0,"docs":{},"v":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"5":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"z":{"7":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"df":0,"docs":{},"z":{"df":0,"docs":{},"u":{"0":{"c":{"df":0,"docs":{},"j":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"0":{"7":{"+":{"7":{"df":0,"docs":{},"g":{"d":{"a":{"a":{"df":0,"docs":{},"h":{"3":{"df":0,"docs":{},"u":{"df":0,"docs":{},"w":{"df":0,"docs":{},"g":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"2":{"df":0,"docs":{},"x":{"df":1,"docs":{"52":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"=":{"df":0,"docs":{},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{",":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"e":{"=":{"\"":{"$":{"(":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"49":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"_":{"c":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{",":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"=":{"/":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"/":{"c":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"49":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":35,"docs":{"10":{"tf":3.605551275463989},"14":{"tf":2.449489742783178},"15":{"tf":2.23606797749979},"16":{"tf":1.0},"17":{"tf":1.7320508075688772},"18":{"tf":1.0},"19":{"tf":1.7320508075688772},"20":{"tf":2.6457513110645907},"22":{"tf":1.0},"23":{"tf":2.449489742783178},"24":{"tf":2.6457513110645907},"26":{"tf":1.7320508075688772},"29":{"tf":1.7320508075688772},"33":{"tf":1.4142135623730951},"35":{"tf":2.23606797749979},"43":{"tf":1.0},"50":{"tf":1.7320508075688772},"51":{"tf":1.0},"52":{"tf":1.7320508075688772},"54":{"tf":1.0},"56":{"tf":2.6457513110645907},"57":{"tf":1.4142135623730951},"58":{"tf":3.1622776601683795},"59":{"tf":1.0},"60":{"tf":1.7320508075688772},"61":{"tf":1.4142135623730951},"62":{"tf":1.0},"63":{"tf":1.0},"70":{"tf":2.23606797749979},"73":{"tf":2.0},"74":{"tf":1.7320508075688772},"76":{"tf":1.4142135623730951},"77":{"tf":1.7320508075688772},"78":{"tf":1.4142135623730951},"9":{"tf":1.7320508075688772}}},"i":{"c":{"df":20,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"33":{"tf":1.0},"39":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":1.7320508075688772},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}}}}},"u":{"1":{"2":{"8":{"df":2,"docs":{"29":{"tf":2.6457513110645907},"74":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"3":{"2":{"df":1,"docs":{"76":{"tf":1.0}}},"df":0,"docs":{}},"6":{"4":{"df":2,"docs":{"73":{"tf":1.0},"76":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"67":{"tf":1.0}}}}}},"n":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.0}}}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"50":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"24":{"tf":1.4142135623730951}}}},"s":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"77":{"tf":1.0}}}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"d":{"df":5,"docs":{"10":{"tf":1.0},"29":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"67":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":5,"docs":{"14":{"tf":1.0},"20":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"74":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":3,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951}}}}},"q":{"df":0,"docs":{},"u":{"df":4,"docs":{"18":{"tf":1.0},"20":{"tf":1.4142135623730951},"74":{"tf":1.0},"76":{"tf":2.0}}}},"t":{"df":3,"docs":{"17":{"tf":1.7320508075688772},"4":{"tf":1.0},"74":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":2,"docs":{"41":{"tf":1.0},"42":{"tf":1.0}}}}}}},"k":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"6":{"tf":1.0}},"e":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"13":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"w":{"1":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"6":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":6,"docs":{"11":{"tf":2.0},"12":{"tf":2.0},"13":{"tf":1.4142135623730951},"33":{"tf":2.0},"4":{"tf":1.4142135623730951},"6":{"tf":1.7320508075688772}}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":4,"docs":{"26":{"tf":1.0},"50":{"tf":1.0},"58":{"tf":1.4142135623730951},"61":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"k":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"62":{"tf":1.0}}}},"df":0,"docs":{}}}}},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"38":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":3,"docs":{"15":{"tf":1.0},"69":{"tf":1.0},"72":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"33":{"tf":1.0}}}}}}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"65":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"30":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"15":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"35":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":5,"docs":{"27":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"54":{"tf":1.7320508075688772},"72":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"77":{"tf":1.4142135623730951}}}},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":3,"docs":{"24":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}},"df":9,"docs":{"18":{"tf":1.7320508075688772},"19":{"tf":1.4142135623730951},"20":{"tf":2.0},"21":{"tf":2.8284271247461903},"22":{"tf":2.449489742783178},"23":{"tf":2.449489742783178},"24":{"tf":3.1622776601683795},"26":{"tf":4.358898943540674},"29":{"tf":6.557438524302}}}},"df":0,"docs":{}}}},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":24,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":2.0},"22":{"tf":2.0},"23":{"tf":1.7320508075688772},"29":{"tf":1.4142135623730951},"32":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"42":{"tf":2.0},"43":{"tf":1.7320508075688772},"44":{"tf":2.23606797749979},"45":{"tf":1.0},"48":{"tf":1.0},"54":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"62":{"tf":1.7320508075688772},"67":{"tf":1.0},"70":{"tf":1.4142135623730951},"77":{"tf":2.23606797749979},"9":{"tf":1.0}},"e":{"_":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"57":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":2,"docs":{"54":{"tf":1.4142135623730951},"58":{"tf":1.0}}},"df":0,"docs":{}}}}},"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":6,"docs":{"29":{"tf":1.0},"4":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"69":{"tf":1.0}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":7,"docs":{"11":{"tf":1.4142135623730951},"19":{"tf":1.0},"35":{"tf":1.0},"4":{"tf":1.0},"5":{"tf":1.0},"50":{"tf":1.0},"62":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"24":{"tf":1.0}}},"df":0,"docs":{}}}},"s":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"10":{"tf":1.4142135623730951},"74":{"tf":1.0},"75":{"tf":1.4142135623730951}}}},"df":54,"docs":{"0":{"tf":1.0},"10":{"tf":2.449489742783178},"11":{"tf":1.7320508075688772},"14":{"tf":2.23606797749979},"15":{"tf":2.8284271247461903},"16":{"tf":2.449489742783178},"17":{"tf":2.6457513110645907},"18":{"tf":4.0},"19":{"tf":3.4641016151377544},"20":{"tf":5.291502622129181},"21":{"tf":4.358898943540674},"22":{"tf":4.123105625617661},"23":{"tf":4.795831523312719},"24":{"tf":4.0},"25":{"tf":1.0},"26":{"tf":4.898979485566356},"27":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"29":{"tf":6.855654600401044},"32":{"tf":2.0},"33":{"tf":3.872983346207417},"34":{"tf":2.449489742783178},"35":{"tf":2.449489742783178},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"47":{"tf":1.0},"48":{"tf":1.7320508075688772},"5":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.7320508075688772},"52":{"tf":1.0},"56":{"tf":2.449489742783178},"57":{"tf":1.4142135623730951},"58":{"tf":2.449489742783178},"59":{"tf":2.0},"60":{"tf":1.4142135623730951},"61":{"tf":1.0},"62":{"tf":1.4142135623730951},"63":{"tf":1.4142135623730951},"64":{"tf":1.7320508075688772},"67":{"tf":1.0},"69":{"tf":1.7320508075688772},"7":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951},"71":{"tf":1.7320508075688772},"72":{"tf":1.7320508075688772},"73":{"tf":2.0},"74":{"tf":4.0},"75":{"tf":2.0},"76":{"tf":1.4142135623730951},"77":{"tf":2.449489742783178},"78":{"tf":1.0},"9":{"tf":1.4142135623730951}},"e":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"34":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":8,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":2.23606797749979},"39":{"tf":1.0},"43":{"tf":1.0},"47":{"tf":1.0},"52":{"tf":1.0},"74":{"tf":1.0}}}},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"35":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":14,"docs":{"10":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"2":{"tf":1.0},"20":{"tf":1.0},"29":{"tf":1.7320508075688772},"33":{"tf":1.4142135623730951},"35":{"tf":1.0},"4":{"tf":1.0},"5":{"tf":1.7320508075688772},"58":{"tf":1.0},"6":{"tf":1.0},"70":{"tf":1.0},"9":{"tf":1.0}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":7,"docs":{"10":{"tf":1.0},"13":{"tf":1.4142135623730951},"18":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.4142135623730951},"35":{"tf":1.0},"6":{"tf":1.0}}},"df":0,"docs":{}},"u":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"38":{"tf":1.0}}}},"df":0,"docs":{}},"df":18,"docs":{"15":{"tf":1.0},"20":{"tf":2.23606797749979},"22":{"tf":1.0},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":3.0},"35":{"tf":1.4142135623730951},"50":{"tf":1.0},"51":{"tf":1.4142135623730951},"53":{"tf":1.0},"54":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"58":{"tf":1.0},"59":{"tf":1.0},"73":{"tf":2.449489742783178},"74":{"tf":2.23606797749979},"77":{"tf":2.23606797749979},"78":{"tf":1.4142135623730951}}}},"r":{"df":0,"docs":{},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"18":{"tf":1.7320508075688772},"20":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":10,"docs":{"15":{"tf":3.4641016151377544},"21":{"tf":1.4142135623730951},"29":{"tf":1.0},"32":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"60":{"tf":2.23606797749979},"69":{"tf":1.0},"73":{"tf":1.0},"78":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"56":{"tf":1.0}}}}}}},"t":{"df":1,"docs":{"84":{"tf":1.0}}}},"df":1,"docs":{"49":{"tf":1.0}},"e":{"c":{"!":{"[":{"\"":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"1":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":6,"docs":{"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":2,"docs":{"26":{"tf":1.0},"29":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":3,"docs":{"24":{"tf":1.0},"26":{"tf":1.7320508075688772},"29":{"tf":2.449489742783178}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"a":{"d":{"d":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"d":{"(":{"\"":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"1":{"df":6,"docs":{"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"_":{"df":2,"docs":{"26":{"tf":1.0},"29":{"tf":1.7320508075688772}}},"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":7,"docs":{"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"29":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"69":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":9,"docs":{"20":{"tf":1.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.23606797749979},"32":{"tf":1.4142135623730951},"33":{"tf":2.449489742783178},"69":{"tf":1.0}}}}}},"df":7,"docs":{"20":{"tf":1.0},"21":{"tf":2.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":2.0},"26":{"tf":2.8284271247461903},"29":{"tf":3.4641016151377544}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":5,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"65":{"tf":1.0},"72":{"tf":1.4142135623730951},"74":{"tf":2.23606797749979}}}}}},"df":0,"docs":{},"r":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"18":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":27,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.0},"14":{"tf":1.4142135623730951},"16":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"40":{"tf":1.4142135623730951},"42":{"tf":1.7320508075688772},"43":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":2.0},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":1.4142135623730951},"58":{"tf":1.7320508075688772},"59":{"tf":1.4142135623730951},"60":{"tf":2.0},"61":{"tf":1.0},"62":{"tf":1.0},"70":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":1.0}},"f":{"df":1,"docs":{"26":{"tf":1.0}},"i":{"df":7,"docs":{"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"35":{"tf":1.0},"6":{"tf":1.4142135623730951},"78":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":12,"docs":{"14":{"tf":1.7320508075688772},"19":{"tf":1.7320508075688772},"20":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"29":{"tf":2.0},"33":{"tf":1.7320508075688772},"34":{"tf":1.0},"5":{"tf":1.0},"62":{"tf":2.449489742783178},"70":{"tf":1.7320508075688772},"71":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}}}}},"i":{"a":{"df":5,"docs":{"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"48":{"tf":1.0},"58":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"48":{"tf":1.4142135623730951}}}},"o":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"43":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"19":{"tf":1.0},"35":{"tf":1.0},"58":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":4,"docs":{"18":{"tf":1.4142135623730951},"33":{"tf":1.0},"42":{"tf":1.0},"58":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"u":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"44":{"tf":1.0},"55":{"tf":1.0}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":2,"docs":{"65":{"tf":1.7320508075688772},"66":{"tf":1.7320508075688772}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"74":{"tf":1.0}}}}}}}},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"61":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"39":{"tf":1.4142135623730951},"41":{"tf":1.0},"51":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"3":{"df":1,"docs":{"52":{"tf":1.4142135623730951}}},"df":4,"docs":{"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.7320508075688772},"54":{"tf":2.0}}}}}},"n":{"df":0,"docs":{},"t":{"df":32,"docs":{"12":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":2.0},"21":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.0},"36":{"tf":1.0},"4":{"tf":1.0},"40":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"45":{"tf":1.7320508075688772},"51":{"tf":1.4142135623730951},"53":{"tf":1.0},"54":{"tf":1.7320508075688772},"56":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"65":{"tf":1.4142135623730951},"67":{"tf":1.0},"68":{"tf":1.4142135623730951},"69":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":2.0},"72":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"44":{"tf":2.6457513110645907}},"n":{"df":0,"docs":{},"p":{"c":{"df":2,"docs":{"44":{"tf":2.449489742783178},"45":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"t":{"a":{"df":2,"docs":{"81":{"tf":1.0},"85":{"tf":1.0}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"m":{"\"":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":2,"docs":{"26":{"tf":1.0},"29":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},".":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":2.449489742783178}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"1":{"d":{"df":0,"docs":{},"k":{"6":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"0":{"7":{"8":{"6":{"df":0,"docs":{},"m":{"6":{"a":{"df":0,"docs":{},"y":{"df":0,"docs":{},"g":{"9":{"df":0,"docs":{},"k":{"d":{"0":{"df":0,"docs":{},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"y":{"df":0,"docs":{},"k":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"0":{"df":0,"docs":{},"n":{"6":{"df":0,"docs":{},"h":{"0":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"7":{"d":{"8":{"df":0,"docs":{},"t":{"df":1,"docs":{"52":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"n":{"5":{"df":0,"docs":{},"x":{"8":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"z":{"d":{"df":0,"docs":{},"z":{"df":0,"docs":{},"y":{"5":{"df":0,"docs":{},"j":{"df":0,"docs":{},"x":{"d":{"7":{"0":{"2":{"7":{"3":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"4":{"df":0,"docs":{},"z":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"r":{"df":0,"docs":{},"w":{"df":0,"docs":{},"x":{"0":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"v":{"7":{"df":0,"docs":{},"q":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"5":{"df":0,"docs":{},"g":{"df":0,"docs":{},"m":{"4":{"df":0,"docs":{},"v":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"q":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"2":{"4":{"df":0,"docs":{},"u":{"df":1,"docs":{"54":{"tf":2.23606797749979}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"u":{"0":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"x":{"df":0,"docs":{},"l":{"6":{"5":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"6":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"j":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"2":{"0":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"c":{"df":0,"docs":{},"p":{"df":0,"docs":{},"z":{"3":{"df":0,"docs":{},"j":{"df":0,"docs":{},"v":{"df":0,"docs":{},"j":{"df":0,"docs":{},"f":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"5":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"7":{"df":0,"docs":{},"l":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"u":{"d":{"3":{"df":0,"docs":{},"r":{"df":0,"docs":{},"h":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"n":{"df":0,"docs":{},"y":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":0,"docs":{},"q":{"df":0,"docs":{},"q":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"c":{"df":0,"docs":{},"x":{"6":{"df":2,"docs":{"51":{"tf":1.0},"53":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"m":{"5":{"9":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"k":{"d":{"df":0,"docs":{},"j":{"8":{"a":{"df":0,"docs":{},"y":{"df":0,"docs":{},"l":{"5":{"df":0,"docs":{},"g":{"df":0,"docs":{},"k":{"df":0,"docs":{},"n":{"df":1,"docs":{"54":{"tf":1.0}},"p":{"9":{"df":0,"docs":{},"p":{"df":0,"docs":{},"n":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"w":{"3":{"3":{"df":0,"docs":{},"v":{"4":{"0":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"5":{"df":0,"docs":{},"l":{"4":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"df":2,"docs":{"52":{"tf":1.0},"54":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"3":{"2":{"df":4,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"4":{"tf":1.0}}},"df":0,"docs":{}},"d":{"df":14,"docs":{"19":{"tf":1.4142135623730951},"25":{"tf":1.0},"4":{"tf":2.0},"46":{"tf":1.0},"47":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"50":{"tf":1.4142135623730951},"51":{"tf":1.0},"52":{"tf":2.0},"53":{"tf":1.0},"54":{"tf":2.8284271247461903},"60":{"tf":1.0},"63":{"tf":1.0},"7":{"tf":1.4142135623730951}}},"df":21,"docs":{"10":{"tf":2.23606797749979},"11":{"tf":1.4142135623730951},"12":{"tf":2.449489742783178},"13":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"26":{"tf":2.23606797749979},"29":{"tf":2.449489742783178},"33":{"tf":2.23606797749979},"34":{"tf":1.4142135623730951},"35":{"tf":1.0},"4":{"tf":1.7320508075688772},"48":{"tf":1.0},"5":{"tf":1.0},"50":{"tf":1.7320508075688772},"51":{"tf":1.0},"53":{"tf":1.4142135623730951},"54":{"tf":2.23606797749979},"58":{"tf":1.4142135623730951},"6":{"tf":1.4142135623730951},"70":{"tf":1.0}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":3,"docs":{"20":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0}}}}}}},"y":{"df":33,"docs":{"0":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"24":{"tf":1.0},"25":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":2.0},"32":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"38":{"tf":1.0},"41":{"tf":1.7320508075688772},"42":{"tf":1.0},"43":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.7320508075688772},"59":{"tf":1.4142135623730951},"65":{"tf":1.0},"67":{"tf":1.4142135623730951},"7":{"tf":1.0},"73":{"tf":1.4142135623730951},"74":{"tf":2.0}}}},"df":0,"docs":{},"e":{"'":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"21":{"tf":1.0}}}}},"b":{"df":1,"docs":{"9":{"tf":1.0}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"4":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":2,"docs":{"54":{"tf":2.0},"56":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"l":{"df":8,"docs":{"10":{"tf":1.0},"15":{"tf":1.0},"19":{"tf":1.4142135623730951},"22":{"tf":1.0},"38":{"tf":1.0},"58":{"tf":1.0},"61":{"tf":1.0},"78":{"tf":1.0}}}},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"14":{"tf":1.0},"22":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":3,"docs":{"20":{"tf":1.0},"56":{"tf":1.0},"61":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":2,"docs":{"66":{"tf":1.0},"72":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":2.0}}}}}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":22,"docs":{"10":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"36":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"43":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.0},"58":{"tf":1.4142135623730951},"59":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"71":{"tf":1.4142135623730951},"72":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.4142135623730951}}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":1,"docs":{"74":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"d":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"w":{"df":1,"docs":{"65":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":7,"docs":{"15":{"tf":1.4142135623730951},"18":{"tf":1.0},"22":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"73":{"tf":1.0}}}}},"df":0,"docs":{}},"r":{"d":{"df":1,"docs":{"74":{"tf":1.0}}},"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"35":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":24,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"28":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"4":{"tf":1.7320508075688772},"42":{"tf":1.0},"43":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.0},"49":{"tf":1.0},"50":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.7320508075688772},"74":{"tf":1.0},"76":{"tf":1.0},"78":{"tf":1.0}},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"39":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":1,"docs":{"71":{"tf":3.4641016151377544}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"l":{"d":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":13,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.4142135623730951},"20":{"tf":2.0},"21":{"tf":2.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":12,"docs":{"10":{"tf":1.0},"18":{"tf":1.0},"25":{"tf":1.0},"32":{"tf":1.0},"35":{"tf":1.0},"4":{"tf":1.0},"44":{"tf":1.4142135623730951},"48":{"tf":1.0},"51":{"tf":1.0},"58":{"tf":1.0},"67":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"i":{"df":6,"docs":{"36":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"65":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":6,"docs":{"11":{"tf":1.0},"33":{"tf":1.0},"41":{"tf":1.0},"57":{"tf":1.0},"62":{"tf":1.0},"76":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"n":{"'":{"df":0,"docs":{},"t":{"df":1,"docs":{"18":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"p":{"df":11,"docs":{"10":{"tf":1.0},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":2.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"26":{"tf":2.449489742783178},"29":{"tf":3.0},"44":{"tf":1.0},"59":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"33":{"tf":1.0}}}}},"df":0,"docs":{}},"df":10,"docs":{"14":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":1.0},"54":{"tf":1.0},"74":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"42":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"17":{"tf":1.0}}}}}}},"y":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":3,"docs":{"50":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.4142135623730951}},"e":{"df":1,"docs":{"48":{"tf":1.0}},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"51":{"tf":1.0}}}}}},"z":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":2,"docs":{"41":{"tf":1.0},"56":{"tf":1.0}}}}}}}},"breadcrumbs":{"root":{"0":{".":{"0":{"0":{"df":2,"docs":{"17":{"tf":1.0},"20":{"tf":1.0}}},"df":0,"docs":{}},"1":{".":{"0":{"df":8,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}},"3":{".":{"4":{"df":6,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"33":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"29":{"tf":1.0}}},"5":{".":{"1":{"df":2,"docs":{"33":{"tf":1.0},"70":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"34":{"tf":1.0}}},"5":{"2":{"df":1,"docs":{"33":{"tf":1.0}}},"df":0,"docs":{}},"8":{".":{"1":{"df":3,"docs":{"29":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"17":{"tf":2.0},"20":{"tf":2.0},"29":{"tf":1.4142135623730951}}},"1":{".":{"0":{".":{"0":{"df":6,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"1":{"0":{"3":{"df":7,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"1":{".":{"4":{"df":2,"docs":{"33":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{".":{"3":{"df":1,"docs":{"5":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"0":{"df":1,"docs":{"44":{"tf":1.0}}},"6":{"9":{"df":3,"docs":{"50":{"tf":1.7320508075688772},"51":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"7":{"8":{"5":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"73":{"tf":1.4142135623730951}}},"5":{"df":1,"docs":{"44":{"tf":1.0}}},"df":14,"docs":{"17":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"23":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.8284271247461903},"33":{"tf":1.0},"44":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":2.0},"6":{"tf":1.0},"70":{"tf":1.0},"73":{"tf":1.0},"80":{"tf":1.0},"85":{"tf":1.0}}},"2":{"0":{"2":{"1":{"df":9,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"1":{"5":{"7":{"5":{"df":1,"docs":{"83":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":9,"docs":{"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.23606797749979},"45":{"tf":1.7320508075688772},"66":{"tf":1.0},"71":{"tf":1.4142135623730951}}},"3":{"df":1,"docs":{"45":{"tf":1.0}}},"4":{"df":1,"docs":{"45":{"tf":1.0}}},"5":{"0":{"df":1,"docs":{"16":{"tf":1.0}}},"df":2,"docs":{"66":{"tf":1.0},"79":{"tf":1.0}}},"7":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}}}},"_":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"_":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"26":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"51":{"tf":1.0},"54":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":7,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951}}}}},"df":2,"docs":{"29":{"tf":1.0},"74":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":18,"docs":{"10":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":2.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.7320508075688772},"20":{"tf":2.449489742783178},"21":{"tf":2.449489742783178},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"26":{"tf":2.449489742783178},"29":{"tf":3.0},"58":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":18,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":2.0},"21":{"tf":2.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"58":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"73":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":9,"docs":{"10":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"73":{"tf":1.0}}}}},"df":0,"docs":{}}},"a":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":1,"docs":{"39":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"18":{"tf":1.0},"19":{"tf":1.4142135623730951},"41":{"tf":1.0},"47":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":12,"docs":{"10":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"33":{"tf":1.4142135623730951},"48":{"tf":1.0},"56":{"tf":2.23606797749979},"58":{"tf":1.0},"70":{"tf":1.0},"72":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951}},"o":{"df":0,"docs":{},"r":{"df":5,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"56":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"79":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"29":{"tf":1.7320508075688772},"30":{"tf":1.0},"65":{"tf":1.0}}}}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":5,"docs":{"26":{"tf":1.0},"56":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"68":{"tf":1.0}}}}}},"k":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"g":{"df":1,"docs":{"74":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"t":{"df":1,"docs":{"45":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":15,"docs":{"10":{"tf":1.0},"14":{"tf":2.0},"25":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"39":{"tf":1.7320508075688772},"40":{"tf":3.3166247903554},"41":{"tf":3.605551275463989},"42":{"tf":2.23606797749979},"43":{"tf":1.0},"44":{"tf":2.0},"45":{"tf":1.7320508075688772},"54":{"tf":1.4142135623730951},"62":{"tf":1.0},"67":{"tf":1.0}}}},"v":{"df":1,"docs":{"39":{"tf":1.4142135623730951}}}},"o":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"45":{"tf":1.0}}},"df":32,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"29":{"tf":1.4142135623730951},"36":{"tf":1.7320508075688772},"37":{"tf":2.0},"38":{"tf":1.4142135623730951},"39":{"tf":3.1622776601683795},"40":{"tf":2.449489742783178},"41":{"tf":2.0},"42":{"tf":1.7320508075688772},"43":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.0},"46":{"tf":1.4142135623730951},"47":{"tf":2.23606797749979},"48":{"tf":2.0},"49":{"tf":1.4142135623730951},"50":{"tf":1.7320508075688772},"51":{"tf":1.4142135623730951},"52":{"tf":2.0},"53":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"55":{"tf":2.6457513110645907},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951},"63":{"tf":1.4142135623730951},"64":{"tf":1.0}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":10,"docs":{"10":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.4142135623730951},"33":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"51":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{}}}},"d":{"d":{"_":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"26":{"tf":1.4142135623730951}},"e":{"(":{"\"":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":2.23606797749979},"74":{"tf":1.4142135623730951},"75":{"tf":1.0}}}},"d":{"d":{"df":0,"docs":{},"e":{"d":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"74":{"tf":1.0},"75":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"26":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}}}}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":2.449489742783178},"29":{"tf":3.4641016151377544}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"59":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"59":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":25,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"17":{"tf":1.0},"19":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.7320508075688772},"29":{"tf":1.0},"30":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.0},"4":{"tf":1.0},"44":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.4142135623730951},"54":{"tf":2.0},"60":{"tf":1.0},"65":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"67":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.4142135623730951},"77":{"tf":1.4142135623730951},"78":{"tf":1.0}},"e":{"d":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"26":{"tf":1.0},"29":{"tf":1.7320508075688772}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"t":{"df":11,"docs":{"11":{"tf":1.0},"12":{"tf":1.0},"15":{"tf":1.4142135623730951},"17":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.7320508075688772},"40":{"tf":1.0},"41":{"tf":1.4142135623730951},"5":{"tf":1.0},"58":{"tf":2.0},"62":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":7,"docs":{"11":{"tf":1.0},"20":{"tf":1.0},"26":{"tf":1.0},"33":{"tf":1.4142135623730951},"4":{"tf":1.0},"66":{"tf":1.0},"9":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":7,"docs":{"22":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"26":{"tf":1.7320508075688772},"29":{"tf":2.0},"32":{"tf":1.0},"33":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}},"r":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"d":{"(":{"\"":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"2":{"df":6,"docs":{"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":8,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":2.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":2.0},"26":{"tf":3.1622776601683795},"29":{"tf":4.358898943540674}}}}},"u":{"df":0,"docs":{},"s":{"df":3,"docs":{"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.8284271247461903}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":12,"docs":{"19":{"tf":1.0},"20":{"tf":1.7320508075688772},"21":{"tf":2.0},"22":{"tf":2.0},"23":{"tf":2.0},"24":{"tf":2.23606797749979},"26":{"tf":3.605551275463989},"29":{"tf":5.0990195135927845},"54":{"tf":1.4142135623730951},"74":{"tf":1.0},"75":{"tf":1.4142135623730951},"77":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":21,"docs":{"10":{"tf":1.7320508075688772},"15":{"tf":1.0},"18":{"tf":2.0},"19":{"tf":1.0},"20":{"tf":2.6457513110645907},"22":{"tf":1.4142135623730951},"26":{"tf":1.0},"28":{"tf":1.0},"30":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"51":{"tf":1.4142135623730951},"52":{"tf":3.7416573867739413},"53":{"tf":1.4142135623730951},"54":{"tf":1.7320508075688772},"58":{"tf":1.0},"62":{"tf":1.7320508075688772},"64":{"tf":1.0},"65":{"tf":1.7320508075688772},"67":{"tf":1.0},"74":{"tf":1.0}}}}}}},"df":20,"docs":{"12":{"tf":1.0},"17":{"tf":1.4142135623730951},"19":{"tf":2.0},"21":{"tf":1.0},"26":{"tf":1.7320508075688772},"29":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":1.7320508075688772},"34":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":1.0},"59":{"tf":1.4142135623730951},"61":{"tf":1.0},"62":{"tf":1.4142135623730951},"64":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"74":{"tf":1.0},"78":{"tf":1.0},"9":{"tf":1.0}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"'":{"df":1,"docs":{"22":{"tf":1.0}}},".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"2":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":6,"docs":{"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"a":{"d":{"d":{"df":0,"docs":{},"e":{"d":{"[":{"0":{"df":2,"docs":{"26":{"tf":1.0},"29":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":2,"docs":{"26":{"tf":1.7320508075688772},"29":{"tf":2.449489742783178}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":30,"docs":{"19":{"tf":1.0},"20":{"tf":4.123105625617661},"21":{"tf":4.47213595499958},"22":{"tf":5.477225575051661},"23":{"tf":4.69041575982343},"24":{"tf":4.795831523312719},"26":{"tf":7.0710678118654755},"28":{"tf":1.4142135623730951},"29":{"tf":9.539392014169456},"30":{"tf":2.23606797749979},"32":{"tf":1.7320508075688772},"33":{"tf":3.0},"51":{"tf":1.7320508075688772},"54":{"tf":4.123105625617661},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"62":{"tf":2.0},"64":{"tf":1.7320508075688772},"65":{"tf":3.3166247903554},"66":{"tf":2.23606797749979},"67":{"tf":2.449489742783178},"68":{"tf":2.0},"69":{"tf":1.7320508075688772},"70":{"tf":1.7320508075688772},"71":{"tf":2.0},"72":{"tf":2.0},"74":{"tf":3.605551275463989},"75":{"tf":1.7320508075688772},"77":{"tf":2.8284271247461903},"78":{"tf":2.23606797749979}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"64":{"tf":1.0}}}}}},"s":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"(":{"df":0,"docs":{},"|":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"(":{")":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}},"o":{"a":{"d":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":7,"docs":{"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.8284271247461903}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"74":{"tf":1.0},"75":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"s":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":10,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":8,"docs":{"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"74":{"tf":1.0}}}}},"df":0,"docs":{}},"df":1,"docs":{"74":{"tf":1.0}}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":10,"docs":{"20":{"tf":1.0},"21":{"tf":2.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.0},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"69":{"tf":1.4142135623730951}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":11,"docs":{"20":{"tf":1.0},"21":{"tf":2.8284271247461903},"22":{"tf":2.449489742783178},"23":{"tf":2.23606797749979},"24":{"tf":2.23606797749979},"26":{"tf":3.1622776601683795},"29":{"tf":4.0},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"69":{"tf":1.0},"74":{"tf":1.0}}}}}}}}}}}}}},"v":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"19":{"tf":1.0},"28":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"71":{"tf":1.0}}}},"o":{"c":{"df":1,"docs":{"74":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.0},"21":{"tf":1.0},"42":{"tf":1.0},"59":{"tf":1.0}}}},"df":0,"docs":{}}}},"g":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"19":{"tf":1.0},"40":{"tf":1.0},"48":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":2,"docs":{"15":{"tf":1.0},"33":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":1,"docs":{"28":{"tf":1.0}}}}}}}}},"i":{"a":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951}},"s":{"df":2,"docs":{"12":{"tf":1.4142135623730951},"33":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":2,"docs":{"33":{"tf":1.0},"68":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"(":{"d":{"df":0,"docs":{},"e":{"a":{"d":{"_":{"c":{"df":0,"docs":{},"o":{"d":{"df":4,"docs":{"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":15,"docs":{"10":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.4142135623730951},"24":{"tf":1.0},"29":{"tf":1.0},"44":{"tf":1.0},"5":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951},"65":{"tf":1.0},"71":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"1":{"tf":1.0}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"i":{"df":17,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"56":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"64":{"tf":1.4142135623730951},"65":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"68":{"tf":1.0},"71":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"14":{"tf":1.0},"20":{"tf":1.4142135623730951},"42":{"tf":1.0}}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}},"w":{"a":{"df":0,"docs":{},"y":{"df":19,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.7320508075688772},"15":{"tf":1.7320508075688772},"22":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"52":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"61":{"tf":1.7320508075688772},"76":{"tf":1.0},"78":{"tf":1.0}}}},"df":0,"docs":{}}},"m":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":1,"docs":{"3":{"tf":1.0}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"29":{"tf":2.6457513110645907},"42":{"tf":1.7320508075688772},"44":{"tf":1.7320508075688772},"72":{"tf":1.0},"74":{"tf":1.4142135623730951}}}}}},"t":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"83":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"51":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"65":{"tf":1.0}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"51":{"tf":1.0}}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":25,"docs":{"15":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"38":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"53":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.4142135623730951},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.4142135623730951},"65":{"tf":1.7320508075688772},"67":{"tf":1.0},"73":{"tf":1.4142135623730951}}}}},"s":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"20":{"tf":1.7320508075688772},"42":{"tf":1.0},"43":{"tf":1.0},"54":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"24":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"24":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"28":{"tf":1.0},"65":{"tf":1.7320508075688772}}}},"t":{"df":0,"docs":{},"h":{"df":8,"docs":{"10":{"tf":1.0},"20":{"tf":1.0},"44":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0}}},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"62":{"tf":1.0}}}}},"w":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"61":{"tf":1.0}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"19":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"i":{"df":8,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"19":{"tf":1.4142135623730951},"2":{"tf":1.7320508075688772},"29":{"tf":1.0},"33":{"tf":1.7320508075688772},"58":{"tf":1.0},"59":{"tf":1.0}}},"p":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"(":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"x":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"c":{"df":0,"docs":{},"o":{"d":{"df":8,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.7320508075688772},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.7320508075688772},"26":{"tf":2.6457513110645907},"29":{"tf":3.605551275463989}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"29":{"tf":2.0}}}},"df":0,"docs":{}}}},":":{":":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":8,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.7320508075688772},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.7320508075688772},"26":{"tf":2.6457513110645907},"29":{"tf":3.4641016151377544}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"df":0,"docs":{},"|":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"29":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":10,"docs":{"12":{"tf":1.0},"19":{"tf":2.23606797749979},"20":{"tf":2.449489742783178},"21":{"tf":3.3166247903554},"22":{"tf":2.8284271247461903},"23":{"tf":2.8284271247461903},"24":{"tf":3.3166247903554},"26":{"tf":5.0},"29":{"tf":6.708203932499369},"78":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"c":{"df":4,"docs":{"10":{"tf":1.4142135623730951},"30":{"tf":1.0},"41":{"tf":1.0},"62":{"tf":1.4142135623730951}}},"df":3,"docs":{"42":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":2.0}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"a":{"c":{"df":0,"docs":{},"h":{"df":6,"docs":{"17":{"tf":1.0},"18":{"tf":1.0},"23":{"tf":1.0},"38":{"tf":1.4142135623730951},"43":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"r":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":6,"docs":{"14":{"tf":1.0},"22":{"tf":1.0},"28":{"tf":1.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.0},"67":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"36":{"tf":1.0},"55":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":2,"docs":{"33":{"tf":1.0},"77":{"tf":1.0}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":10,"docs":{"10":{"tf":2.23606797749979},"11":{"tf":1.7320508075688772},"14":{"tf":2.0},"15":{"tf":1.4142135623730951},"18":{"tf":1.7320508075688772},"20":{"tf":2.0},"29":{"tf":1.4142135623730951},"58":{"tf":1.7320508075688772},"59":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951}}}}}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"35":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"17":{"tf":1.0},"19":{"tf":1.0},"34":{"tf":1.0},"46":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"y":{"df":2,"docs":{"53":{"tf":1.0},"70":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"18":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"18":{"tf":1.0}}}}}},"df":0,"docs":{},"k":{"df":7,"docs":{"20":{"tf":1.0},"43":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"74":{"tf":1.0},"78":{"tf":1.0}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"!":{"(":{"!":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"73":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"!":{"(":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"a":{"d":{"d":{"df":0,"docs":{},"e":{"d":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"26":{"tf":1.0},"29":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":6,"docs":{"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"73":{"tf":1.0}}}},"w":{"df":0,"docs":{},"o":{"df":1,"docs":{"73":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":10,"docs":{"17":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.7320508075688772},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":2.0},"26":{"tf":3.0},"29":{"tf":4.69041575982343}}}}},"df":2,"docs":{"17":{"tf":1.0},"29":{"tf":1.0}}}},"t":{"df":1,"docs":{"28":{"tf":2.0}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":6,"docs":{"15":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"41":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0}}}}},"o":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"52":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"m":{"df":12,"docs":{"1":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"29":{"tf":1.0},"4":{"tf":1.0},"44":{"tf":1.0},"50":{"tf":1.0},"62":{"tf":1.0},"66":{"tf":1.0},"71":{"tf":1.0}},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}}}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"56":{"tf":1.0},"59":{"tf":1.0}}}},"t":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":2,"docs":{"26":{"tf":1.7320508075688772},"29":{"tf":3.0}}}}}},"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":16,"docs":{"10":{"tf":1.0},"16":{"tf":1.4142135623730951},"19":{"tf":1.0},"23":{"tf":1.4142135623730951},"25":{"tf":1.7320508075688772},"26":{"tf":2.8284271247461903},"27":{"tf":1.0},"29":{"tf":2.0},"32":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":2.0},"50":{"tf":1.0},"51":{"tf":1.4142135623730951},"54":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":3.1622776601683795}}}}},"df":0,"docs":{}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":2,"docs":{"3":{"tf":1.0},"56":{"tf":1.0}},"m":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"14":{"tf":1.0},"23":{"tf":1.0}}}},"df":0,"docs":{}}}}},"v":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"13":{"tf":1.0},"43":{"tf":1.4142135623730951},"6":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":8,"docs":{"15":{"tf":1.0},"35":{"tf":1.0},"46":{"tf":1.0},"56":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0}}},"df":0,"docs":{}}}}},"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":11,"docs":{"17":{"tf":1.0},"24":{"tf":1.0},"33":{"tf":1.0},"38":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"48":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"4":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"76":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":4,"docs":{"29":{"tf":1.0},"39":{"tf":1.0},"44":{"tf":1.4142135623730951},"48":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"k":{"df":2,"docs":{"29":{"tf":1.7320508075688772},"48":{"tf":1.0}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{",":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"74":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":2,"docs":{"29":{"tf":1.4142135623730951},"60":{"tf":1.0}}}}}}},"r":{"df":1,"docs":{"51":{"tf":1.0}}},"s":{"df":0,"docs":{},"e":{"6":{"4":{"df":1,"docs":{"67":{"tf":1.0}}},"df":0,"docs":{}},"df":6,"docs":{"14":{"tf":1.4142135623730951},"20":{"tf":1.0},"26":{"tf":1.0},"42":{"tf":1.4142135623730951},"59":{"tf":1.0},"60":{"tf":1.0}}},"i":{"c":{"df":33,"docs":{"1":{"tf":1.0},"10":{"tf":1.7320508075688772},"11":{"tf":1.0},"12":{"tf":1.0},"13":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.4142135623730951},"31":{"tf":1.4142135623730951},"32":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.4142135623730951},"54":{"tf":1.0},"56":{"tf":1.0},"63":{"tf":1.0},"66":{"tf":1.0},"8":{"tf":2.0},"9":{"tf":1.0}},"s":{"/":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"c":{"'":{"df":1,"docs":{"48":{"tf":1.0}}},"df":1,"docs":{"48":{"tf":1.0}}},"df":1,"docs":{"50":{"tf":1.0}},"e":{"c":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"77":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":6,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.0},"65":{"tf":1.0},"68":{"tf":1.0},"74":{"tf":1.7320508075688772}}}}},"df":17,"docs":{"19":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"28":{"tf":1.0},"39":{"tf":1.4142135623730951},"40":{"tf":1.0},"42":{"tf":1.4142135623730951},"48":{"tf":1.0},"49":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"58":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"71":{"tf":1.0}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":15,"docs":{"20":{"tf":1.0},"24":{"tf":1.0},"29":{"tf":1.0},"34":{"tf":1.4142135623730951},"36":{"tf":1.0},"39":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"47":{"tf":1.0},"54":{"tf":1.4142135623730951},"56":{"tf":1.7320508075688772},"61":{"tf":1.7320508075688772},"70":{"tf":1.0},"74":{"tf":1.0},"78":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"56":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"19":{"tf":1.0},"59":{"tf":1.0},"70":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"v":{"df":1,"docs":{"67":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"15":{"tf":1.0},"20":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"37":{"tf":1.4142135623730951},"8":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"17":{"tf":1.0},"27":{"tf":1.0},"64":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":2,"docs":{"23":{"tf":1.0},"7":{"tf":1.0}}}},"t":{"a":{"8":{"df":6,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":9,"docs":{"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"18":{"tf":1.4142135623730951},"20":{"tf":1.0},"22":{"tf":1.0},"27":{"tf":1.0},"44":{"tf":1.0},"58":{"tf":1.0},"71":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":9,"docs":{"15":{"tf":1.0},"19":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.7320508075688772},"42":{"tf":1.0},"44":{"tf":1.0},"64":{"tf":1.0},"71":{"tf":1.0},"76":{"tf":1.4142135623730951}}}}}}}},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"7":{"tf":1.0}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"16":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.0},"58":{"tf":1.0},"64":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"35":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"39":{"tf":1.0}}}},"n":{"/":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"33":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":27,"docs":{"10":{"tf":1.0},"11":{"tf":2.0},"12":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":2.0},"20":{"tf":2.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"33":{"tf":2.449489742783178},"34":{"tf":1.0},"4":{"tf":1.4142135623730951},"47":{"tf":1.0},"48":{"tf":1.4142135623730951},"49":{"tf":1.4142135623730951},"5":{"tf":1.0},"50":{"tf":1.4142135623730951},"58":{"tf":2.0},"6":{"tf":1.0},"9":{"tf":1.0}}},"y":{"(":{"7":{"b":{"7":{"d":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"d":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":15,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"29":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.7320508075688772},"59":{"tf":1.0},"60":{"tf":1.0},"65":{"tf":1.4142135623730951},"74":{"tf":1.0}}}},"l":{"a":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"18":{"tf":2.0},"60":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"48":{"tf":1.0}}},"c":{"df":0,"docs":{},"k":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":1,"docs":{"78":{"tf":1.0}}}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":32,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":2.23606797749979},"20":{"tf":2.23606797749979},"25":{"tf":1.0},"28":{"tf":2.23606797749979},"29":{"tf":1.0},"35":{"tf":1.4142135623730951},"4":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951},"46":{"tf":1.0},"47":{"tf":2.0},"48":{"tf":3.3166247903554},"49":{"tf":1.0},"5":{"tf":1.0},"50":{"tf":2.0},"51":{"tf":1.0},"52":{"tf":1.7320508075688772},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.7320508075688772},"57":{"tf":1.0},"58":{"tf":2.449489742783178},"60":{"tf":2.0},"62":{"tf":1.0},"63":{"tf":2.449489742783178},"76":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":6,"docs":{"43":{"tf":1.0},"50":{"tf":1.0},"56":{"tf":1.4142135623730951},"76":{"tf":3.0},"77":{"tf":1.0},"78":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":2,"docs":{"76":{"tf":1.0},"78":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"o":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":4,"docs":{"15":{"tf":1.0},"26":{"tf":1.0},"33":{"tf":1.0},"58":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"k":{"df":6,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":1.4142135623730951},"3":{"tf":1.7320508075688772},"4":{"tf":1.4142135623730951},"70":{"tf":1.0},"74":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":6,"docs":{"17":{"tf":1.4142135623730951},"22":{"tf":1.0},"40":{"tf":1.0},"53":{"tf":1.0},"59":{"tf":1.0},"73":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"58":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"73":{"tf":1.0}}},"df":0,"docs":{}}},"x":{"df":1,"docs":{"18":{"tf":2.0}}}},"r":{"a":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"15":{"tf":1.0}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"k":{"df":1,"docs":{"77":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":4,"docs":{"15":{"tf":1.0},"20":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":2,"docs":{"20":{"tf":1.0},"44":{"tf":1.0}}}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"64":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"39":{"tf":1.0}}}}},"df":0,"docs":{}}},"u":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"48":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{},"g":{"df":3,"docs":{"3":{"tf":1.0},"30":{"tf":1.7320508075688772},"77":{"tf":1.0}}},"i":{"df":0,"docs":{},"l":{"d":{"df":18,"docs":{"10":{"tf":1.0},"11":{"tf":3.1622776601683795},"12":{"tf":3.3166247903554},"13":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":2.23606797749979},"4":{"tf":1.0},"43":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.7320508075688772},"64":{"tf":1.0},"65":{"tf":1.4142135623730951},"71":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":8,"docs":{"13":{"tf":1.0},"26":{"tf":1.0},"30":{"tf":1.0},"45":{"tf":1.0},"50":{"tf":1.0},"71":{"tf":1.4142135623730951},"74":{"tf":1.0},"76":{"tf":1.0}}}}},"n":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"21":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"60":{"tf":1.0}}}},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"38":{"tf":1.0}}}}}},"c":{"/":{"df":0,"docs":{},"o":{"df":1,"docs":{"85":{"tf":1.0}}}},"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"14":{"tf":1.4142135623730951}},"e":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"71":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":4,"docs":{"14":{"tf":1.0},"29":{"tf":1.0},"43":{"tf":1.0},"56":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"df":32,"docs":{"10":{"tf":2.449489742783178},"13":{"tf":1.0},"18":{"tf":2.449489742783178},"19":{"tf":1.7320508075688772},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":2.0},"25":{"tf":1.0},"26":{"tf":1.7320508075688772},"28":{"tf":1.0},"29":{"tf":1.4142135623730951},"33":{"tf":1.0},"35":{"tf":1.0},"38":{"tf":2.449489742783178},"39":{"tf":1.0},"41":{"tf":1.7320508075688772},"42":{"tf":1.4142135623730951},"43":{"tf":1.0},"44":{"tf":2.0},"45":{"tf":3.605551275463989},"50":{"tf":1.0},"51":{"tf":1.7320508075688772},"52":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":3.605551275463989},"6":{"tf":1.0},"61":{"tf":2.6457513110645907},"62":{"tf":1.0},"67":{"tf":1.4142135623730951},"74":{"tf":1.7320508075688772},"78":{"tf":2.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"25":{"tf":1.0},"74":{"tf":1.0}}}}},"m":{"df":1,"docs":{"20":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"32":{"tf":1.0},"57":{"tf":1.0}}}}},"n":{"'":{"df":0,"docs":{},"t":{"df":1,"docs":{"29":{"tf":1.0}}}},"d":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"65":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"p":{"a":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"13":{"tf":1.0},"40":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"61":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"df":6,"docs":{"11":{"tf":1.0},"19":{"tf":1.0},"35":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"64":{"tf":1.0}},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"20":{"tf":1.0}}}}}}}},"g":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"71":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":9,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.7320508075688772},"9":{"tf":1.0}}}}}}},"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":2,"docs":{"12":{"tf":1.0},"33":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":11,"docs":{"11":{"tf":2.23606797749979},"12":{"tf":1.4142135623730951},"13":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"33":{"tf":2.0},"5":{"tf":1.4142135623730951},"6":{"tf":1.7320508075688772},"71":{"tf":1.4142135623730951},"9":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":32,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"18":{"tf":2.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"30":{"tf":1.0},"32":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"39":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.7320508075688772},"43":{"tf":1.0},"44":{"tf":2.0},"45":{"tf":2.6457513110645907},"50":{"tf":1.4142135623730951},"51":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951},"57":{"tf":2.0},"58":{"tf":2.23606797749979},"59":{"tf":1.0},"61":{"tf":2.0},"62":{"tf":2.0},"72":{"tf":1.0},"74":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951}}},"h":{"df":1,"docs":{"44":{"tf":1.0}}}},"u":{"df":0,"docs":{},"s":{"df":5,"docs":{"20":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.0},"59":{"tf":1.0},"73":{"tf":1.0}}}}},"d":{"df":3,"docs":{"4":{"tf":1.0},"49":{"tf":1.0},"6":{"tf":1.4142135623730951}},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"b":{"df":8,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"g":{"(":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":10,"docs":{"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}},"_":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"(":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"34":{"tf":1.7320508075688772},"58":{"tf":2.0},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":1,"docs":{"34":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":1,"docs":{"34":{"tf":1.0}}}},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"76":{"tf":1.0}}},"df":0,"docs":{}}},"df":4,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.0},"14":{"tf":1.0},"7":{"tf":1.0}}}},"n":{"df":0,"docs":{},"g":{"df":17,"docs":{"14":{"tf":1.7320508075688772},"18":{"tf":1.0},"29":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.4142135623730951},"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":2.0},"51":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.4142135623730951},"62":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":1.4142135623730951}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"4":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"30":{"tf":1.0}}},"df":12,"docs":{"20":{"tf":1.0},"24":{"tf":1.0},"28":{"tf":1.0},"36":{"tf":1.0},"55":{"tf":1.0},"60":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"g":{"df":2,"docs":{"39":{"tf":1.4142135623730951},"40":{"tf":1.4142135623730951}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"83":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"56":{"tf":1.0},"74":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"k":{"df":23,"docs":{"13":{"tf":2.0},"14":{"tf":1.0},"17":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"35":{"tf":1.0},"39":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.0},"47":{"tf":1.0},"5":{"tf":2.6457513110645907},"52":{"tf":1.0},"54":{"tf":2.0},"56":{"tf":1.0},"6":{"tf":2.0},"72":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":1.4142135623730951}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"43":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"f":{"'":{"df":1,"docs":{"39":{"tf":1.0}}},"df":5,"docs":{"39":{"tf":2.449489742783178},"40":{"tf":1.0},"41":{"tf":2.6457513110645907},"42":{"tf":1.0},"43":{"tf":1.0}}}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"22":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"27":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"s":{"df":2,"docs":{"45":{"tf":1.0},"61":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"37":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":1,"docs":{"58":{"tf":1.7320508075688772}}}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":3,"docs":{"24":{"tf":1.0},"35":{"tf":1.0},"45":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"26":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"43":{"tf":1.0},"71":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"50":{"tf":2.0}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"n":{"df":2,"docs":{"0":{"tf":1.0},"69":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"57":{"tf":1.0}}}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"68":{"tf":1.0}}}}},"r":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":3,"docs":{"36":{"tf":1.0},"65":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"40":{"tf":1.4142135623730951},"41":{"tf":1.0},"44":{"tf":1.0},"52":{"tf":1.0}}}}}},"o":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"56":{"tf":1.0},"76":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":11,"docs":{"17":{"tf":2.0},"20":{"tf":1.7320508075688772},"21":{"tf":2.0},"22":{"tf":2.23606797749979},"29":{"tf":2.23606797749979},"32":{"tf":2.23606797749979},"33":{"tf":2.23606797749979},"4":{"tf":1.4142135623730951},"49":{"tf":1.7320508075688772},"6":{"tf":1.0},"75":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":1,"docs":{"28":{"tf":1.0}},"r":{"df":4,"docs":{"10":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"40":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"e":{"df":1,"docs":{"58":{"tf":1.0}}},"n":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":2,"docs":{"26":{"tf":1.0},"33":{"tf":1.0}}}}}}},"o":{"d":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"50":{"tf":1.0}}}}},"df":0,"docs":{}}},"_":{"df":0,"docs":{},"i":{"d":{"df":11,"docs":{"19":{"tf":1.4142135623730951},"20":{"tf":2.23606797749979},"21":{"tf":2.6457513110645907},"22":{"tf":2.23606797749979},"23":{"tf":2.23606797749979},"24":{"tf":2.6457513110645907},"26":{"tf":4.0},"29":{"tf":5.385164807134504},"50":{"tf":1.4142135623730951},"51":{"tf":1.0},"54":{"tf":1.0}}},"df":0,"docs":{}}},"df":20,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"19":{"tf":2.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.7320508075688772},"22":{"tf":2.0},"23":{"tf":1.4142135623730951},"24":{"tf":1.7320508075688772},"26":{"tf":2.6457513110645907},"29":{"tf":3.7416573867739413},"47":{"tf":1.0},"48":{"tf":1.4142135623730951},"49":{"tf":1.0},"50":{"tf":2.6457513110645907},"51":{"tf":1.4142135623730951},"52":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"62":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}},"s":{"(":{"5":{"df":1,"docs":{"29":{"tf":1.4142135623730951}}},"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":1,"docs":{"65":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"t":{"df":10,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"26":{"tf":2.8284271247461903},"29":{"tf":3.4641016151377544},"39":{"tf":1.0},"58":{"tf":1.0},"74":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"15":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"e":{"df":4,"docs":{"14":{"tf":1.0},"43":{"tf":1.0},"57":{"tf":1.0},"70":{"tf":1.0}}},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":2.23606797749979},"5":{"tf":1.0},"6":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"83":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"o":{"df":0,"docs":{},"n":{"df":10,"docs":{"12":{"tf":1.0},"32":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"51":{"tf":1.0},"58":{"tf":1.0},"62":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"n":{"df":30,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"19":{"tf":1.0},"25":{"tf":1.4142135623730951},"27":{"tf":1.7320508075688772},"36":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"40":{"tf":1.0},"47":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"64":{"tf":2.23606797749979},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"9":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":3,"docs":{"17":{"tf":1.0},"24":{"tf":1.0},"48":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"43":{"tf":1.0}}}}}}},"t":{"df":1,"docs":{"71":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":9,"docs":{"11":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.0},"4":{"tf":1.0},"49":{"tf":2.0},"58":{"tf":1.0},"6":{"tf":1.0},"77":{"tf":1.4142135623730951}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"19":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":4,"docs":{"39":{"tf":1.4142135623730951},"41":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"72":{"tf":1.0}}},"x":{"df":7,"docs":{"10":{"tf":1.0},"20":{"tf":1.0},"4":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.0},"64":{"tf":1.0},"74":{"tf":1.7320508075688772}}}},"i":{"c":{"df":8,"docs":{"14":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.0},"29":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"65":{"tf":1.0}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"42":{"tf":1.0}}}}}},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"76":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"46":{"tf":1.4142135623730951}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"59":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"34":{"tf":1.4142135623730951},"58":{"tf":1.0},"63":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}}},"u":{"df":0,"docs":{},"s":{"df":3,"docs":{"20":{"tf":1.0},"44":{"tf":1.0},"54":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"18":{"tf":1.0},"28":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":1,"docs":{"28":{"tf":1.0}}}}},"q":{"df":0,"docs":{},"u":{"df":6,"docs":{"14":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":1.0},"45":{"tf":1.0}}}}},"i":{"d":{"df":7,"docs":{"20":{"tf":1.0},"26":{"tf":1.0},"35":{"tf":1.0},"39":{"tf":1.0},"42":{"tf":1.7320508075688772},"56":{"tf":1.0},"58":{"tf":1.4142135623730951}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.0},"15":{"tf":1.7320508075688772},"17":{"tf":1.0},"38":{"tf":1.0}}}}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"20":{"tf":2.23606797749979},"56":{"tf":1.7320508075688772},"59":{"tf":1.0},"74":{"tf":1.0}}}}},"df":7,"docs":{"20":{"tf":1.0},"29":{"tf":1.4142135623730951},"72":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.4142135623730951},"77":{"tf":1.4142135623730951}},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"18":{"tf":1.0},"58":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"10":{"tf":1.0},"29":{"tf":1.0},"51":{"tf":1.0},"59":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"m":{"df":2,"docs":{"72":{"tf":1.0},"74":{"tf":1.0}}}}},"t":{"a":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"58":{"tf":1.0},"82":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":20,"docs":{"10":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"26":{"tf":1.7320508075688772},"29":{"tf":1.0},"35":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":2.23606797749979},"61":{"tf":1.7320508075688772},"72":{"tf":1.0},"73":{"tf":1.0},"76":{"tf":1.4142135623730951},"78":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"12":{"tf":1.0},"85":{"tf":1.4142135623730951}}}},"x":{"df":0,"docs":{},"t":{"df":5,"docs":{"24":{"tf":1.0},"41":{"tf":1.0},"58":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0}}}}},"r":{"a":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"62":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"61":{"tf":1.0}}}}}}}},"t":{"'":{"df":2,"docs":{"14":{"tf":1.0},"43":{"tf":1.0}}},".":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.0}}}},":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":4,"docs":{"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":6,"docs":{"16":{"tf":1.0},"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"20":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"{":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"33":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"16":{"tf":1.0},"69":{"tf":1.0}}},"y":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":6,"docs":{"16":{"tf":1.0},"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"17":{"tf":1.0},"20":{"tf":2.0}}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":74,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":1.0},"10":{"tf":3.605551275463989},"11":{"tf":2.449489742783178},"12":{"tf":1.7320508075688772},"13":{"tf":2.23606797749979},"14":{"tf":2.23606797749979},"15":{"tf":1.0},"16":{"tf":2.6457513110645907},"18":{"tf":3.1622776601683795},"19":{"tf":3.872983346207417},"20":{"tf":4.58257569495584},"21":{"tf":3.0},"22":{"tf":2.449489742783178},"23":{"tf":2.8284271247461903},"24":{"tf":2.449489742783178},"25":{"tf":2.449489742783178},"26":{"tf":3.605551275463989},"27":{"tf":2.449489742783178},"28":{"tf":2.0},"29":{"tf":4.69041575982343},"30":{"tf":1.7320508075688772},"33":{"tf":2.0},"34":{"tf":2.449489742783178},"35":{"tf":2.8284271247461903},"36":{"tf":1.4142135623730951},"37":{"tf":1.0},"38":{"tf":3.0},"39":{"tf":1.4142135623730951},"4":{"tf":2.449489742783178},"40":{"tf":1.4142135623730951},"41":{"tf":1.4142135623730951},"42":{"tf":3.7416573867739413},"43":{"tf":2.449489742783178},"44":{"tf":2.23606797749979},"45":{"tf":3.0},"46":{"tf":1.4142135623730951},"47":{"tf":1.0},"48":{"tf":3.1622776601683795},"49":{"tf":2.23606797749979},"5":{"tf":1.7320508075688772},"50":{"tf":2.8284271247461903},"51":{"tf":3.1622776601683795},"52":{"tf":2.8284271247461903},"53":{"tf":3.0},"54":{"tf":4.69041575982343},"55":{"tf":2.449489742783178},"56":{"tf":3.4641016151377544},"57":{"tf":2.23606797749979},"58":{"tf":5.0},"59":{"tf":1.7320508075688772},"6":{"tf":3.0},"60":{"tf":3.1622776601683795},"61":{"tf":1.7320508075688772},"62":{"tf":3.7416573867739413},"63":{"tf":1.7320508075688772},"64":{"tf":2.6457513110645907},"65":{"tf":2.23606797749979},"66":{"tf":3.0},"67":{"tf":3.3166247903554},"68":{"tf":2.449489742783178},"69":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951},"70":{"tf":2.23606797749979},"71":{"tf":3.3166247903554},"72":{"tf":2.0},"73":{"tf":1.4142135623730951},"74":{"tf":2.8284271247461903},"75":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"8":{"tf":1.4142135623730951},"9":{"tf":2.8284271247461903}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":10,"docs":{"23":{"tf":2.0},"24":{"tf":2.23606797749979},"26":{"tf":2.0},"29":{"tf":3.1622776601683795},"33":{"tf":1.0},"34":{"tf":1.0},"58":{"tf":1.4142135623730951},"61":{"tf":1.0},"63":{"tf":1.0},"74":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"61":{"tf":1.0}}}}}}}},"s":{"/":{"c":{"df":0,"docs":{},"w":{"1":{"df":1,"docs":{"6":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":8,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":8,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.7320508075688772},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.7320508075688772},"26":{"tf":2.6457513110645907},"29":{"tf":3.605551275463989}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"d":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"48":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"25":{"tf":1.0},"27":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"3":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":2,"docs":{"18":{"tf":1.0},"26":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":3,"docs":{"33":{"tf":1.0},"43":{"tf":1.0},"58":{"tf":1.0}}},"t":{"df":1,"docs":{"57":{"tf":1.0}}}},"r":{"df":0,"docs":{},"t":{"df":4,"docs":{"29":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"65":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"i":{"df":6,"docs":{"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"71":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":5,"docs":{"19":{"tf":1.4142135623730951},"28":{"tf":1.0},"42":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":1.0}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"29":{"tf":1.0},"56":{"tf":1.0},"62":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"df":0,"docs":{},"l":{"df":1,"docs":{"33":{"tf":1.0}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"10":{"tf":1.0},"18":{"tf":1.0},"21":{"tf":1.0},"57":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{":":{":":{"b":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":1,"docs":{"60":{"tf":1.0}}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"63":{"tf":1.0}}}}}}}},"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"60":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":2,"docs":{"59":{"tf":1.4142135623730951},"60":{"tf":2.0}}}}}}},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"/":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":1,"docs":{"49":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"_":{"1":{"_":{"1":{"df":2,"docs":{"13":{"tf":1.0},"6":{"tf":1.0}}},"2":{"df":2,"docs":{"13":{"tf":1.0},"6":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{":":{":":{"c":{"df":0,"docs":{},"w":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"33":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"33":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"{":{"c":{"df":0,"docs":{},"w":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"d":{"df":2,"docs":{"33":{"tf":1.0},"69":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"t":{"d":{":":{":":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":12,"docs":{"19":{"tf":1.0},"20":{"tf":2.0},"21":{"tf":2.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.23606797749979},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"69":{"tf":1.0},"72":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"_":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"73":{"tf":1.0}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"61":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"58":{"tf":1.0},"61":{"tf":1.0}}}}}}}}},"s":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"22":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"{":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"{":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":5,"docs":{"23":{"tf":1.0},"29":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"74":{"tf":1.0}},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"74":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"o":{"_":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":3,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":14,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.7320508075688772},"21":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"77":{"tf":1.0}}},"df":0,"docs":{}}}},"df":39,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":1.0},"10":{"tf":1.0},"11":{"tf":1.0},"13":{"tf":1.7320508075688772},"14":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.7320508075688772},"20":{"tf":1.7320508075688772},"23":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.7320508075688772},"33":{"tf":1.7320508075688772},"35":{"tf":2.0},"36":{"tf":1.4142135623730951},"37":{"tf":1.0},"4":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.7320508075688772},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"5":{"tf":2.23606797749979},"50":{"tf":1.0},"52":{"tf":1.7320508075688772},"58":{"tf":1.0},"6":{"tf":1.7320508075688772},"60":{"tf":1.7320508075688772},"61":{"tf":1.0},"63":{"tf":1.4142135623730951},"7":{"tf":1.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.0},"74":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"t":{"df":6,"docs":{"11":{"tf":1.0},"48":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951},"75":{"tf":1.0}}}},"u":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"n":{"'":{"df":0,"docs":{},"t":{"df":1,"docs":{"71":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"56":{"tf":1.0},"65":{"tf":1.0}}}},"p":{"df":0,"docs":{},"l":{"df":9,"docs":{"10":{"tf":1.7320508075688772},"15":{"tf":1.0},"18":{"tf":1.0},"22":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"71":{"tf":1.0},"9":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":9,"docs":{"18":{"tf":1.0},"19":{"tf":1.0},"24":{"tf":1.0},"27":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.0},"43":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0}}}}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{":":{":":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":5,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"74":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{":":{":":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":6,"docs":{"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"74":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"{":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":6,"docs":{"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":5,"docs":{"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.4142135623730951}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{":":{":":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":7,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"{":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"29":{"tf":1.7320508075688772},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"77":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":16,"docs":{"14":{"tf":1.7320508075688772},"16":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":2.0},"24":{"tf":1.0},"29":{"tf":1.4142135623730951},"33":{"tf":3.1622776601683795},"34":{"tf":1.4142135623730951},"35":{"tf":2.0},"57":{"tf":1.0},"58":{"tf":1.0},"63":{"tf":1.0},"70":{"tf":2.23606797749979},"74":{"tf":1.0},"9":{"tf":2.23606797749979}}}},"z":{"df":0,"docs":{},"i":{"df":1,"docs":{"74":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":46,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":1.0},"14":{"tf":2.449489742783178},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.7320508075688772},"19":{"tf":1.7320508075688772},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"29":{"tf":1.0},"3":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":2.23606797749979},"34":{"tf":1.0},"35":{"tf":1.4142135623730951},"36":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.7320508075688772},"40":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.7320508075688772},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"48":{"tf":1.4142135623730951},"50":{"tf":1.0},"51":{"tf":1.7320508075688772},"56":{"tf":1.0},"58":{"tf":1.4142135623730951},"59":{"tf":1.0},"60":{"tf":1.0},"64":{"tf":1.4142135623730951},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"71":{"tf":2.449489742783178},"73":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":2.449489742783178}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"29":{"tf":1.0},"55":{"tf":1.0},"65":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"48":{"tf":1.0}}},"df":4,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"45":{"tf":1.0},"6":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":3,"docs":{"29":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":17,"docs":{"11":{"tf":1.0},"58":{"tf":1.0},"64":{"tf":1.7320508075688772},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0}}}}},"u":{"c":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"11":{"tf":1.0},"48":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"28":{"tf":1.0}}}}}},"df":1,"docs":{"28":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"15":{"tf":1.0}}}},"r":{"_":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178}},"s":{".":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"(":{"&":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"(":{"&":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":4,"docs":{"42":{"tf":2.23606797749979},"44":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951},"48":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":2,"docs":{"10":{"tf":1.0},"18":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":3,"docs":{"24":{"tf":1.7320508075688772},"35":{"tf":1.0},"60":{"tf":1.0}}}}}}},"w":{"2":{"0":{"df":3,"docs":{"42":{"tf":1.0},"44":{"tf":1.0},"48":{"tf":1.0}}},"df":0,"docs":{}},"4":{"df":6,"docs":{"49":{"tf":1.4142135623730951},"50":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.4142135623730951},"58":{"tf":1.0}}},"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"{":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":8,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"d":{"df":3,"docs":{"33":{"tf":3.3166247903554},"69":{"tf":2.0},"78":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":4,"docs":{"20":{"tf":1.0},"29":{"tf":1.0},"72":{"tf":1.0},"77":{"tf":1.0}}}}}},"m":{"a":{"df":0,"docs":{},"p":{"df":4,"docs":{"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"y":{"(":{"&":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"p":{"a":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.4142135623730951}}}}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":15,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.7320508075688772},"20":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"33":{"tf":1.4142135623730951},"35":{"tf":1.0},"49":{"tf":2.0},"53":{"tf":1.0},"56":{"tf":1.0},"6":{"tf":2.6457513110645907},"70":{"tf":1.7320508075688772},"74":{"tf":1.0}}}},"d":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"n":{"df":1,"docs":{"20":{"tf":1.0}}}},"t":{"a":{"b":{"a":{"df":0,"docs":{},"s":{"df":6,"docs":{"10":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":3.605551275463989},"56":{"tf":1.7320508075688772},"62":{"tf":1.0}}}},"df":0,"docs":{}},"df":18,"docs":{"14":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"21":{"tf":1.0},"25":{"tf":2.23606797749979},"26":{"tf":1.0},"27":{"tf":2.449489742783178},"41":{"tf":1.7320508075688772},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.7320508075688772},"56":{"tf":2.23606797749979},"57":{"tf":1.0},"58":{"tf":2.449489742783178},"61":{"tf":2.8284271247461903},"73":{"tf":1.0},"77":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"b":{"df":1,"docs":{"48":{"tf":1.0}}},"df":0,"docs":{},"e":{")":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"62":{"tf":1.0}}}}}}},"3":{"3":{"9":{"8":{"0":{"2":{"2":{"7":{"9":{"df":1,"docs":{"84":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"l":{"df":4,"docs":{"10":{"tf":1.0},"28":{"tf":1.7320508075688772},"29":{"tf":1.4142135623730951},"30":{"tf":1.0}}}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":11,"docs":{"11":{"tf":1.0},"12":{"tf":1.7320508075688772},"17":{"tf":2.23606797749979},"20":{"tf":1.7320508075688772},"21":{"tf":2.0},"22":{"tf":2.23606797749979},"23":{"tf":1.0},"29":{"tf":2.449489742783178},"32":{"tf":2.23606797749979},"33":{"tf":2.449489742783178},"71":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":1,"docs":{"33":{"tf":1.0}}}}}}}}},"c":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"45":{"tf":1.4142135623730951},"58":{"tf":1.0},"61":{"tf":1.4142135623730951}}},"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"l":{"2":{"5":{"6":{"df":1,"docs":{"35":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"35":{"tf":1.4142135623730951}}},"s":{"df":1,"docs":{"15":{"tf":1.0}}}},"l":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"54":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":3,"docs":{"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.0}}}},"df":0,"docs":{}}}},"d":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"41":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"u":{"c":{"df":1,"docs":{"24":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":10,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"33":{"tf":1.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":18,"docs":{"10":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"29":{"tf":1.0},"33":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.4142135623730951},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"74":{"tf":1.0},"75":{"tf":1.0},"78":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"16":{"tf":1.7320508075688772},"23":{"tf":1.0},"58":{"tf":1.0},"74":{"tf":1.4142135623730951}}}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":4,"docs":{"10":{"tf":1.0},"33":{"tf":1.0},"39":{"tf":1.0},"58":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"39":{"tf":1.0}}}}}}}},"m":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"48":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{")":{"?":{".":{"df":0,"docs":{},"u":{"1":{"2":{"8":{"df":2,"docs":{"29":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"29":{"tf":2.23606797749979},"74":{"tf":1.4142135623730951}}},"t":{"df":2,"docs":{"43":{"tf":1.0},"44":{"tf":1.0}}}}},"p":{"df":21,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":2.23606797749979},"15":{"tf":2.23606797749979},"16":{"tf":2.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.8284271247461903},"19":{"tf":1.4142135623730951},"20":{"tf":3.605551275463989},"21":{"tf":2.8284271247461903},"22":{"tf":3.0},"23":{"tf":3.605551275463989},"24":{"tf":2.449489742783178},"26":{"tf":3.4641016151377544},"29":{"tf":4.242640687119285},"33":{"tf":2.0},"34":{"tf":2.0},"58":{"tf":2.449489742783178},"69":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"77":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"d":{"df":13,"docs":{"14":{"tf":1.7320508075688772},"18":{"tf":1.0},"19":{"tf":2.23606797749979},"20":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"26":{"tf":1.0},"29":{"tf":1.4142135623730951},"33":{"tf":2.23606797749979},"34":{"tf":2.449489742783178},"58":{"tf":1.0},"70":{"tf":2.23606797749979},"71":{"tf":1.0},"9":{"tf":2.23606797749979}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"y":{"df":1,"docs":{"3":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"14":{"tf":1.0}}}}},"s":{".":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{".":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"&":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":10,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"k":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"18":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":23,"docs":{"10":{"tf":1.7320508075688772},"14":{"tf":1.4142135623730951},"15":{"tf":2.0},"16":{"tf":2.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.23606797749979},"19":{"tf":1.7320508075688772},"20":{"tf":3.1622776601683795},"21":{"tf":2.449489742783178},"22":{"tf":2.8284271247461903},"23":{"tf":3.3166247903554},"24":{"tf":2.23606797749979},"26":{"tf":3.1622776601683795},"29":{"tf":4.123105625617661},"33":{"tf":1.7320508075688772},"34":{"tf":1.7320508075688772},"58":{"tf":2.23606797749979},"61":{"tf":1.4142135623730951},"62":{"tf":1.0},"63":{"tf":1.0},"74":{"tf":2.0},"75":{"tf":1.7320508075688772},"77":{"tf":1.4142135623730951}}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":8,"docs":{"14":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":2.0},"70":{"tf":1.0}},"e":{"(":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"23":{"tf":1.0},"29":{"tf":1.0}}}}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"33":{"tf":1.0},"69":{"tf":1.0}}}}}}}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":11,"docs":{"14":{"tf":1.0},"15":{"tf":2.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"21":{"tf":2.0},"22":{"tf":2.23606797749979},"29":{"tf":2.23606797749979},"32":{"tf":2.23606797749979},"33":{"tf":2.23606797749979},"57":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":10,"docs":{"22":{"tf":1.0},"29":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"39":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":3,"docs":{"40":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"10":{"tf":1.0}}}}}},"df":15,"docs":{"14":{"tf":1.7320508075688772},"15":{"tf":2.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":2.23606797749979},"21":{"tf":2.0},"22":{"tf":2.23606797749979},"29":{"tf":2.23606797749979},"32":{"tf":2.449489742783178},"33":{"tf":2.23606797749979},"35":{"tf":2.0},"57":{"tf":1.4142135623730951},"72":{"tf":1.0},"73":{"tf":1.4142135623730951}}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":8,"docs":{"24":{"tf":1.0},"25":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"38":{"tf":1.0},"65":{"tf":2.23606797749979},"66":{"tf":1.0},"67":{"tf":1.0}}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":5,"docs":{"29":{"tf":1.0},"45":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"67":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"30":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"20":{"tf":1.0},"36":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"61":{"tf":1.0}}}}}}}}}}},"v":{"df":7,"docs":{"14":{"tf":1.0},"19":{"tf":1.4142135623730951},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.4142135623730951},"70":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":5,"docs":{"19":{"tf":1.0},"21":{"tf":1.0},"41":{"tf":1.0},"48":{"tf":1.0},"56":{"tf":1.0}}}}}}}},"i":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"66":{"tf":1.0},"67":{"tf":1.0}}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"73":{"tf":1.0},"74":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"d":{"df":0,"docs":{},"n":{"'":{"df":0,"docs":{},"t":{"df":4,"docs":{"19":{"tf":1.0},"45":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":20,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":2.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.7320508075688772},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"21":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.4142135623730951},"51":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"62":{"tf":1.0},"63":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0}}}},"i":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":3,"docs":{"15":{"tf":1.0},"26":{"tf":1.0},"62":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":7,"docs":{"14":{"tf":1.0},"26":{"tf":1.0},"43":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"54":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"81":{"tf":1.4142135623730951}},"i":{"df":5,"docs":{"12":{"tf":1.0},"33":{"tf":1.0},"50":{"tf":1.0},"6":{"tf":2.0},"71":{"tf":2.8284271247461903}}}}}}},"df":0,"docs":{}}},"s":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"34":{"tf":2.0}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"12":{"tf":1.0}}}}}}}}},"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":5,"docs":{"10":{"tf":1.0},"27":{"tf":1.0},"35":{"tf":1.0},"65":{"tf":1.0},"78":{"tf":1.0}}}}}},"df":0,"docs":{},"h":{"df":1,"docs":{"51":{"tf":1.0}}},"p":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":4,"docs":{"15":{"tf":1.0},"16":{"tf":1.4142135623730951},"39":{"tf":1.0},"69":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"y":{"df":3,"docs":{"17":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"65":{"tf":1.0},"74":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"16":{"tf":1.0},"59":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":5,"docs":{"29":{"tf":1.0},"30":{"tf":1.0},"48":{"tf":1.0},"74":{"tf":1.7320508075688772},"76":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"47":{"tf":1.0}}},"i":{"d":{"df":3,"docs":{"16":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"4":{"tf":1.0},"49":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"2":{"tf":2.0},"29":{"tf":1.0},"36":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0}}}}}}}},"df":3,"docs":{"10":{"tf":1.0},"21":{"tf":1.0},"44":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"n":{"'":{"df":0,"docs":{},"t":{"df":10,"docs":{"15":{"tf":1.0},"17":{"tf":1.4142135623730951},"20":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"40":{"tf":1.0},"43":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0}}}},"df":0,"docs":{}}}},"n":{"'":{"df":0,"docs":{},"t":{"df":17,"docs":{"11":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"29":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"36":{"tf":1.0},"4":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"65":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0}}}},"a":{"df":0,"docs":{},"t":{"df":9,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":4.0},"30":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"64":{"tf":1.0},"65":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":2.0}},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":4,"docs":{"29":{"tf":1.7320508075688772},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":8,"docs":{"29":{"tf":4.123105625617661},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"69":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.4142135623730951},"77":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":8,"docs":{"22":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"39":{"tf":1.4142135623730951},"43":{"tf":1.0},"50":{"tf":1.0},"58":{"tf":1.0}}}},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"78":{"tf":1.0}}}},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"24":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"df":1,"docs":{"29":{"tf":1.0}},"s":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"74":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}}}},"r":{"a":{"df":0,"docs":{},"w":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"32":{"tf":1.0},"70":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"e":{"df":2,"docs":{"32":{"tf":1.0},"38":{"tf":1.0}}},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"74":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"29":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"70":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"g":{"df":1,"docs":{"15":{"tf":1.0}}}},"a":{"c":{"df":0,"docs":{},"h":{"df":6,"docs":{"18":{"tf":1.0},"21":{"tf":1.0},"36":{"tf":1.4142135623730951},"54":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"59":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"62":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"i":{"df":8,"docs":{"12":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"61":{"tf":1.0},"70":{"tf":1.0},"73":{"tf":1.0},"76":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"15":{"tf":1.0},"58":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"0":{"tf":1.0},"50":{"tf":1.0},"53":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"59":{"tf":1.0},"61":{"tf":1.0}}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.0}}}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":8,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0},"9":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"22":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"32":{"tf":1.0}}}}}}}}}}},"g":{"df":1,"docs":{"69":{"tf":1.0}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"55":{"tf":1.0},"56":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":3.3166247903554},"74":{"tf":1.7320508075688772}}}}}}},"i":{"df":0,"docs":{},"g":{"df":5,"docs":{"20":{"tf":1.0},"22":{"tf":1.0},"28":{"tf":1.0},"30":{"tf":1.0},"41":{"tf":1.0}}},"s":{"df":2,"docs":{"19":{"tf":1.0},"24":{"tf":1.0}}}}},"m":{"b":{"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"61":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":6,"docs":{"26":{"tf":2.6457513110645907},"41":{"tf":1.0},"50":{"tf":1.0},"58":{"tf":2.23606797749979},"61":{"tf":1.0},"70":{"tf":1.0}}}},"p":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"df":2,"docs":{"20":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"y":{"df":0,"docs":{},"e":{"df":1,"docs":{"41":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"i":{"df":18,"docs":{"10":{"tf":2.23606797749979},"14":{"tf":2.449489742783178},"15":{"tf":2.6457513110645907},"16":{"tf":2.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.449489742783178},"19":{"tf":2.23606797749979},"20":{"tf":3.1622776601683795},"21":{"tf":2.0},"22":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951},"74":{"tf":2.23606797749979},"75":{"tf":2.0},"77":{"tf":2.0},"9":{"tf":1.0}}}}}},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"19":{"tf":1.0},"34":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":2,"docs":{"15":{"tf":1.0},"29":{"tf":1.0}}}}},"o":{"d":{"df":4,"docs":{"14":{"tf":1.0},"57":{"tf":1.0},"67":{"tf":1.0},"76":{"tf":1.0}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":7,"docs":{"0":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"57":{"tf":1.0}}}},"df":0,"docs":{}}}}},"d":{"df":5,"docs":{"29":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.0},"60":{"tf":1.0}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"14":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"18":{"tf":1.0},"38":{"tf":1.0},"44":{"tf":1.4142135623730951},"62":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":5,"docs":{"24":{"tf":1.0},"33":{"tf":1.0},"42":{"tf":1.0},"49":{"tf":1.0},"65":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"13":{"tf":1.0},"21":{"tf":1.0},"23":{"tf":1.0},"30":{"tf":1.0},"77":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"76":{"tf":1.0},"77":{"tf":1.0}}},"t":{"df":0,"docs":{},"i":{"df":12,"docs":{"16":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":1.0},"22":{"tf":1.0},"27":{"tf":1.0},"38":{"tf":1.4142135623730951},"39":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.0},"52":{"tf":1.0},"64":{"tf":1.4142135623730951}}}}},"r":{"df":0,"docs":{},"i":{"df":17,"docs":{"10":{"tf":4.242640687119285},"14":{"tf":2.0},"16":{"tf":2.449489742783178},"19":{"tf":1.4142135623730951},"20":{"tf":2.23606797749979},"22":{"tf":1.7320508075688772},"23":{"tf":1.0},"29":{"tf":1.0},"34":{"tf":2.23606797749979},"35":{"tf":1.0},"58":{"tf":3.7416573867739413},"61":{"tf":1.0},"62":{"tf":1.4142135623730951},"63":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0}}},"y":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":13,"docs":{"10":{"tf":2.0},"14":{"tf":1.7320508075688772},"15":{"tf":2.449489742783178},"16":{"tf":2.0},"20":{"tf":2.23606797749979},"22":{"tf":1.7320508075688772},"23":{"tf":2.449489742783178},"33":{"tf":1.7320508075688772},"34":{"tf":2.23606797749979},"58":{"tf":2.449489742783178},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"m":{"df":14,"docs":{"10":{"tf":1.0},"15":{"tf":2.6457513110645907},"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"32":{"tf":1.4142135623730951},"33":{"tf":2.449489742783178},"35":{"tf":1.4142135623730951},"57":{"tf":2.0},"69":{"tf":1.7320508075688772}}}},"v":{".":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"77":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"18":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":25,"docs":{"10":{"tf":2.0},"14":{"tf":1.7320508075688772},"15":{"tf":2.6457513110645907},"16":{"tf":3.1622776601683795},"17":{"tf":1.7320508075688772},"18":{"tf":3.1622776601683795},"19":{"tf":2.0},"20":{"tf":4.69041575982343},"21":{"tf":2.8284271247461903},"22":{"tf":3.7416573867739413},"23":{"tf":4.898979485566356},"24":{"tf":2.0},"26":{"tf":2.8284271247461903},"29":{"tf":3.4641016151377544},"33":{"tf":3.1622776601683795},"34":{"tf":3.1622776601683795},"58":{"tf":2.449489742783178},"61":{"tf":1.7320508075688772},"62":{"tf":1.4142135623730951},"63":{"tf":1.4142135623730951},"69":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.4142135623730951},"76":{"tf":1.4142135623730951},"77":{"tf":2.0}},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":10,"docs":{"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"27":{"tf":1.0},"39":{"tf":1.4142135623730951},"4":{"tf":2.0},"5":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":1.0}}}}}}}},"q":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"17":{"tf":1.4142135623730951},"28":{"tf":1.0},"30":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"df":6,"docs":{"18":{"tf":1.0},"48":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.0}}}},"df":0,"docs":{}}}}},"r":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"24":{"tf":1.0}}}},"df":0,"docs":{},"r":{"(":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"c":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"(":{"\"":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"22":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},".":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":3,"docs":{"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":4,"docs":{"20":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}},"o":{"df":0,"docs":{},"r":{"(":{"\"":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}},"{":{"0":{"df":2,"docs":{"23":{"tf":1.0},"29":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"23":{"tf":1.0},"29":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},".":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.0}}}},":":{":":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"23":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":16,"docs":{"10":{"tf":1.0},"15":{"tf":1.0},"20":{"tf":2.23606797749979},"22":{"tf":1.7320508075688772},"23":{"tf":3.4641016151377544},"24":{"tf":3.7416573867739413},"29":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.0},"44":{"tf":1.4142135623730951},"46":{"tf":1.0},"58":{"tf":2.0},"61":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":3,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"9":{"tf":1.0}}}}}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"0":{"tf":1.0},"47":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"h":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"29":{"tf":3.3166247903554}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":1,"docs":{"29":{"tf":2.449489742783178}}}},"v":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":2.449489742783178}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":20,"docs":{"11":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"38":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"59":{"tf":1.0},"62":{"tf":1.4142135623730951},"65":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.7320508075688772},"78":{"tf":1.0}},"t":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"\"":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"_":{"a":{"d":{"d":{"df":0,"docs":{},"e":{"d":{"\"":{")":{".":{"a":{"d":{"d":{"_":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"\"":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":10,"docs":{"25":{"tf":2.23606797749979},"26":{"tf":4.898979485566356},"27":{"tf":1.7320508075688772},"29":{"tf":3.0},"41":{"tf":1.0},"50":{"tf":1.4142135623730951},"51":{"tf":2.0},"54":{"tf":1.0},"58":{"tf":3.0},"61":{"tf":1.4142135623730951}},"u":{"df":1,"docs":{"58":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"43":{"tf":1.0},"58":{"tf":1.0},"65":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":13,"docs":{"19":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.4142135623730951},"48":{"tf":1.7320508075688772},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":1.0},"71":{"tf":1.0},"78":{"tf":1.0}}}}}}}},"x":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"40":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":3,"docs":{"40":{"tf":1.4142135623730951},"56":{"tf":1.0},"58":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":21,"docs":{"10":{"tf":1.0},"14":{"tf":1.4142135623730951},"19":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"33":{"tf":1.4142135623730951},"39":{"tf":1.0},"40":{"tf":1.4142135623730951},"42":{"tf":1.7320508075688772},"43":{"tf":1.0},"48":{"tf":1.0},"51":{"tf":1.4142135623730951},"53":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.7320508075688772},"62":{"tf":1.4142135623730951},"67":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"78":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"4":{"tf":1.0}},"e":{"d":{"df":1,"docs":{"74":{"tf":1.0}}},"df":0,"docs":{}},"l":{"df":3,"docs":{"15":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0}}},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"58":{"tf":1.7320508075688772},"61":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"40":{"tf":1.0}}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"u":{"d":{"df":1,"docs":{"71":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"c":{":":{":":{"a":{"d":{"d":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"29":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}},"u":{"df":0,"docs":{},"t":{"df":31,"docs":{"10":{"tf":2.449489742783178},"12":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"19":{"tf":1.7320508075688772},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":2.449489742783178},"23":{"tf":2.23606797749979},"24":{"tf":2.23606797749979},"25":{"tf":1.0},"26":{"tf":2.23606797749979},"27":{"tf":1.0},"29":{"tf":2.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"38":{"tf":1.4142135623730951},"42":{"tf":1.0},"44":{"tf":1.0},"5":{"tf":1.0},"54":{"tf":2.0},"56":{"tf":1.0},"58":{"tf":3.3166247903554},"59":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951},"61":{"tf":1.7320508075688772},"62":{"tf":1.0},"67":{"tf":1.7320508075688772},"74":{"tf":2.0},"76":{"tf":2.0},"78":{"tf":1.0}},"e":{"(":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":2,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":2,"docs":{"22":{"tf":1.0},"23":{"tf":1.0}}}}},"df":0,"docs":{}},"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"24":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"29":{"tf":2.449489742783178}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"w":{"4":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"57":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"57":{"tf":1.0}}}}}}}}}}},":":{":":{"a":{"d":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":3,"docs":{"24":{"tf":1.0},"26":{"tf":1.7320508075688772},"29":{"tf":2.449489742783178}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"29":{"tf":1.0}}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"57":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":11,"docs":{"22":{"tf":2.23606797749979},"23":{"tf":2.23606797749979},"24":{"tf":1.7320508075688772},"26":{"tf":2.449489742783178},"29":{"tf":3.3166247903554},"32":{"tf":1.0},"33":{"tf":2.23606797749979},"34":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"69":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"r":{"df":8,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}},"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":5,"docs":{"22":{"tf":1.0},"24":{"tf":1.0},"29":{"tf":1.4142135623730951},"30":{"tf":1.0},"78":{"tf":1.0}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":9,"docs":{"20":{"tf":1.0},"22":{"tf":1.0},"27":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"48":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.4142135623730951},"78":{"tf":1.4142135623730951}}}},"t":{"df":2,"docs":{"20":{"tf":1.0},"73":{"tf":1.0}}}},"p":{"a":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"34":{"tf":2.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":9,"docs":{"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":2.0},"29":{"tf":1.0},"36":{"tf":1.0},"45":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":3,"docs":{"56":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"24":{"tf":1.0}}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":6,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"20":{"tf":1.0},"38":{"tf":1.0},"58":{"tf":1.4142135623730951},"8":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"30":{"tf":1.0}}}},"r":{"df":1,"docs":{"1":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"33":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"78":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"n":{"df":4,"docs":{"44":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"67":{"tf":2.23606797749979}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"16":{"tf":1.0},"18":{"tf":1.0},"24":{"tf":1.0},"51":{"tf":1.0}}}},"df":1,"docs":{"73":{"tf":1.0}}},"df":0,"docs":{}}}}},"f":{"3":{"2":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"35":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"a":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"10":{"tf":1.0},"78":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":12,"docs":{"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"20":{"tf":2.0},"24":{"tf":1.4142135623730951},"33":{"tf":1.0},"35":{"tf":1.0},"45":{"tf":2.449489742783178},"58":{"tf":1.4142135623730951},"59":{"tf":1.0},"62":{"tf":1.0},"73":{"tf":1.0},"78":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":8,"docs":{"15":{"tf":1.0},"20":{"tf":1.4142135623730951},"24":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.23606797749979},"58":{"tf":1.0},"59":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"s":{"df":7,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"61":{"tf":1.0}}}},"df":0,"docs":{}}}}},"n":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"11":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":5,"docs":{"22":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":13,"docs":{"14":{"tf":1.7320508075688772},"19":{"tf":1.7320508075688772},"20":{"tf":1.7320508075688772},"23":{"tf":2.0},"29":{"tf":2.0},"33":{"tf":1.7320508075688772},"34":{"tf":2.449489742783178},"55":{"tf":1.0},"58":{"tf":1.4142135623730951},"60":{"tf":1.0},"62":{"tf":1.0},"70":{"tf":2.0},"9":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":1,"docs":{"28":{"tf":1.0}},"l":{"df":3,"docs":{"38":{"tf":1.0},"65":{"tf":1.0},"78":{"tf":1.0}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"56":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":18,"docs":{"15":{"tf":1.7320508075688772},"16":{"tf":1.0},"20":{"tf":1.7320508075688772},"22":{"tf":1.0},"29":{"tf":1.4142135623730951},"32":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":2.0},"53":{"tf":1.7320508075688772},"54":{"tf":1.4142135623730951},"58":{"tf":2.23606797749979},"59":{"tf":2.449489742783178},"61":{"tf":1.4142135623730951},"62":{"tf":1.0},"71":{"tf":1.7320508075688772},"76":{"tf":2.23606797749979},"78":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"20":{"tf":1.0},"29":{"tf":1.0},"56":{"tf":1.0},"59":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"e":{"df":9,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":2.0},"20":{"tf":1.0},"33":{"tf":2.23606797749979},"57":{"tf":1.0},"71":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"|":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":2,"docs":{"26":{"tf":1.0},"29":{"tf":1.7320508075688772}}}}}},"df":3,"docs":{"17":{"tf":1.0},"20":{"tf":1.0},"73":{"tf":1.0}}}}}},"n":{"a":{"df":0,"docs":{},"l":{"df":15,"docs":{"19":{"tf":1.0},"22":{"tf":1.0},"34":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":1.0},"49":{"tf":1.0},"58":{"tf":1.0},"61":{"tf":1.4142135623730951},"69":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0}}},"n":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"48":{"tf":1.0}}}},"df":0,"docs":{}}},"d":{"(":{"df":0,"docs":{},"|":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"26":{"tf":1.7320508075688772},"29":{"tf":3.0}}}}}},"df":0,"docs":{}}},"df":6,"docs":{"1":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0},"6":{"tf":1.4142135623730951},"72":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":1,"docs":{"68":{"tf":1.0}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":11,"docs":{"17":{"tf":1.0},"20":{"tf":1.0},"33":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.0},"41":{"tf":2.0},"42":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.0},"58":{"tf":1.4142135623730951},"61":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":33,"docs":{"1":{"tf":1.0},"10":{"tf":1.0},"14":{"tf":1.7320508075688772},"15":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":2.0},"22":{"tf":1.4142135623730951},"26":{"tf":1.0},"29":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"39":{"tf":1.4142135623730951},"4":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"50":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.4142135623730951},"59":{"tf":1.0},"6":{"tf":1.0},"61":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.7320508075688772},"74":{"tf":1.4142135623730951},"9":{"tf":1.0}}}}},"t":{"df":1,"docs":{"10":{"tf":1.0}}},"x":{"df":12,"docs":{"20":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"58":{"tf":1.4142135623730951},"59":{"tf":1.0},"65":{"tf":1.0},"68":{"tf":1.7320508075688772},"69":{"tf":1.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.0},"74":{"tf":2.0},"75":{"tf":1.0}}}},"l":{"a":{"df":0,"docs":{},"g":{"df":5,"docs":{"33":{"tf":1.0},"34":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.7320508075688772},"62":{"tf":1.4142135623730951}}},"w":{"df":1,"docs":{"74":{"tf":1.0}}}},"df":0,"docs":{},"o":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"35":{"tf":3.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}}},"w":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"66":{"tf":1.0},"67":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":4,"docs":{"14":{"tf":1.0},"44":{"tf":2.0},"45":{"tf":1.0},"74":{"tf":1.4142135623730951}}}}},"n":{"df":24,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"15":{"tf":2.23606797749979},"16":{"tf":2.23606797749979},"17":{"tf":2.0},"18":{"tf":2.8284271247461903},"19":{"tf":2.23606797749979},"20":{"tf":3.872983346207417},"21":{"tf":3.605551275463989},"22":{"tf":3.4641016151377544},"23":{"tf":3.872983346207417},"24":{"tf":3.1622776601683795},"26":{"tf":4.58257569495584},"29":{"tf":6.0},"33":{"tf":2.0},"34":{"tf":1.7320508075688772},"58":{"tf":1.7320508075688772},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":2.0},"75":{"tf":1.4142135623730951},"77":{"tf":1.0}}},"o":{"c":{"df":0,"docs":{},"u":{"df":1,"docs":{"4":{"tf":1.0}},"s":{"df":1,"docs":{"64":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"49":{"tf":1.0},"56":{"tf":1.0},"6":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":7,"docs":{"12":{"tf":1.0},"18":{"tf":1.0},"2":{"tf":1.0},"29":{"tf":1.0},"4":{"tf":1.0},"6":{"tf":1.0},"74":{"tf":1.0}}}}}},"n":{"d":{"df":1,"docs":{"15":{"tf":1.0}}},"df":0,"docs":{}},"o":{"d":{"df":2,"docs":{"39":{"tf":1.0},"41":{"tf":1.0}}},"df":0,"docs":{}},"r":{"c":{"df":4,"docs":{"22":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"75":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"29":{"tf":1.0}}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"34":{"tf":1.0}}}},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"73":{"tf":1.0}}}}},"k":{"df":1,"docs":{"35":{"tf":1.0}}},"m":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"57":{"tf":1.0},"58":{"tf":1.0}}}},"df":2,"docs":{"10":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951}}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"17":{"tf":1.0}}},"u":{"df":0,"docs":{},"n":{"df":6,"docs":{"12":{"tf":1.0},"18":{"tf":1.0},"24":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":6,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"50":{"tf":1.0},"58":{"tf":1.0},"61":{"tf":1.4142135623730951},"67":{"tf":1.7320508075688772}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"10":{"tf":1.0}}}}},"p":{"df":1,"docs":{"35":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":3,"docs":{"19":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":2,"docs":{"39":{"tf":1.0},"78":{"tf":1.0}}},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"i":{"df":3,"docs":{"39":{"tf":1.0},"40":{"tf":1.4142135623730951},"41":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"66":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"18":{"tf":1.0}}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"m":{"_":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"(":{"&":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"18":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}},"l":{"df":1,"docs":{"33":{"tf":1.0}}}},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"'":{"df":1,"docs":{"19":{"tf":1.0}}},"df":22,"docs":{"10":{"tf":2.0},"14":{"tf":1.0},"15":{"tf":2.23606797749979},"16":{"tf":2.449489742783178},"17":{"tf":1.0},"18":{"tf":2.23606797749979},"19":{"tf":2.449489742783178},"20":{"tf":2.0},"22":{"tf":2.0},"24":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":2.449489742783178},"38":{"tf":1.4142135623730951},"58":{"tf":2.6457513110645907},"59":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951},"73":{"tf":1.7320508075688772},"74":{"tf":1.7320508075688772},"77":{"tf":1.4142135623730951},"78":{"tf":1.7320508075688772},"9":{"tf":1.0}}}}}}},"d":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"36":{"tf":1.0}}}}}}},"df":10,"docs":{"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"28":{"tf":2.23606797749979},"29":{"tf":2.6457513110645907},"30":{"tf":1.0},"42":{"tf":1.0},"48":{"tf":1.0},"58":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.0},"44":{"tf":1.0},"53":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":8,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"20":{"tf":1.0},"36":{"tf":1.0},"51":{"tf":1.0},"77":{"tf":1.4142135623730951}}}}}}},"g":{"a":{"df":8,"docs":{"11":{"tf":1.0},"28":{"tf":1.0},"48":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":2.0},"59":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":2.0}},"m":{"df":0,"docs":{},"e":{"df":2,"docs":{"42":{"tf":1.0},"44":{"tf":1.4142135623730951}}}},"s":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"59":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"58":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":19,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"29":{"tf":1.0},"33":{"tf":2.6457513110645907},"34":{"tf":1.4142135623730951},"35":{"tf":1.0},"51":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.7320508075688772},"59":{"tf":1.0},"60":{"tf":1.0},"65":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":2.0},"74":{"tf":1.4142135623730951},"9":{"tf":1.0}}}}},"t":{"df":3,"docs":{"19":{"tf":1.0},"24":{"tf":1.0},"6":{"tf":1.0}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"t":{"@":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"b":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{":":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"/":{"c":{"df":0,"docs":{},"w":{"df":2,"docs":{"49":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"d":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"4":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":3,"docs":{"4":{"tf":1.0},"49":{"tf":1.0},"6":{"tf":1.0}},"h":{"df":0,"docs":{},"u":{"b":{"df":1,"docs":{"3":{"tf":1.0}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"e":{"df":8,"docs":{"10":{"tf":1.0},"29":{"tf":1.0},"36":{"tf":1.4142135623730951},"42":{"tf":1.0},"56":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0}},"n":{"df":6,"docs":{"11":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"34":{"tf":1.0},"56":{"tf":1.0},"74":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"o":{"b":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"18":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"m":{"b":{"df":0,"docs":{},"h":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"65":{"tf":1.0},"66":{"tf":1.0}}}},"df":24,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"20":{"tf":1.7320508075688772},"22":{"tf":1.0},"33":{"tf":1.7320508075688772},"36":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.4142135623730951},"51":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"74":{"tf":1.4142135623730951},"76":{"tf":1.0},"8":{"tf":1.0}},"e":{"df":2,"docs":{"42":{"tf":1.0},"43":{"tf":1.0}}},"l":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"4":{"tf":1.0}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"69":{"tf":1.0}}}},"o":{"d":{"df":18,"docs":{"15":{"tf":1.0},"17":{"tf":1.4142135623730951},"20":{"tf":1.0},"21":{"tf":1.0},"29":{"tf":1.0},"31":{"tf":2.0},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"34":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"56":{"tf":1.7320508075688772},"57":{"tf":1.0},"6":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"78":{"tf":1.0}}},"df":0,"docs":{}},"t":{"c":{"df":0,"docs":{},"h":{"a":{"df":1,"docs":{"35":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":2,"docs":{"1":{"tf":1.0},"36":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":3,"docs":{"1":{"tf":1.0},"29":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":10,"docs":{"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}}},"df":15,"docs":{"15":{"tf":3.3166247903554},"16":{"tf":1.7320508075688772},"17":{"tf":1.7320508075688772},"18":{"tf":2.0},"19":{"tf":1.4142135623730951},"20":{"tf":2.23606797749979},"21":{"tf":2.23606797749979},"22":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.6457513110645907},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"69":{"tf":1.0}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":14,"docs":{"15":{"tf":2.0},"16":{"tf":1.7320508075688772},"17":{"tf":1.7320508075688772},"18":{"tf":2.449489742783178},"19":{"tf":1.7320508075688772},"20":{"tf":2.6457513110645907},"21":{"tf":3.0},"22":{"tf":2.23606797749979},"23":{"tf":2.0},"24":{"tf":2.0},"26":{"tf":2.8284271247461903},"29":{"tf":3.605551275463989},"32":{"tf":1.0},"33":{"tf":1.7320508075688772}}}}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"50":{"tf":1.0}}}}},"df":0,"docs":{}}},"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}}}},"df":10,"docs":{"38":{"tf":1.0},"49":{"tf":1.7320508075688772},"51":{"tf":2.23606797749979},"53":{"tf":1.0},"54":{"tf":2.449489742783178},"56":{"tf":2.449489742783178},"58":{"tf":1.4142135623730951},"64":{"tf":1.0},"65":{"tf":1.0},"77":{"tf":1.0}}}}}},"u":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":4,"docs":{"42":{"tf":1.0},"46":{"tf":1.0},"6":{"tf":1.0},"76":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"d":{"df":4,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"2":{"tf":1.0},"55":{"tf":1.0}}},"df":0,"docs":{}}}},"h":{"a":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"65":{"tf":1.0}}}},"n":{"d":{"df":4,"docs":{"27":{"tf":1.0},"33":{"tf":1.0},"42":{"tf":1.0},"73":{"tf":1.0}},"l":{"df":22,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"30":{"tf":1.0},"41":{"tf":1.4142135623730951},"43":{"tf":1.0},"45":{"tf":2.23606797749979},"46":{"tf":1.0},"48":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"58":{"tf":2.0},"59":{"tf":1.0},"60":{"tf":1.7320508075688772},"61":{"tf":1.7320508075688772},"62":{"tf":1.0},"63":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":8,"docs":{"15":{"tf":1.7320508075688772},"16":{"tf":1.4142135623730951},"19":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":1.0}}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":13,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"19":{"tf":1.0},"22":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.4142135623730951},"51":{"tf":1.0},"56":{"tf":1.7320508075688772},"59":{"tf":1.0},"61":{"tf":1.0},"73":{"tf":1.0}}}}}},"r":{"d":{"c":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"59":{"tf":1.0}}},"df":0,"docs":{}}},"df":1,"docs":{"28":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"18":{"tf":1.0}},"m":{"a":{"df":0,"docs":{},"p":{"df":2,"docs":{"73":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"e":{"df":3,"docs":{"20":{"tf":1.0},"48":{"tf":1.0},"52":{"tf":1.0}},"n":{"'":{"df":0,"docs":{},"t":{"df":1,"docs":{"43":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"28":{"tf":1.4142135623730951}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"26":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.0},"56":{"tf":1.4142135623730951},"58":{"tf":1.0},"76":{"tf":2.0}}}}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"@":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"h":{"df":1,"docs":{"82":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":13,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.4142135623730951},"20":{"tf":2.0},"21":{"tf":2.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178}}}},"p":{"df":11,"docs":{"14":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"27":{"tf":1.4142135623730951},"33":{"tf":1.0},"42":{"tf":1.0},"46":{"tf":1.0},"5":{"tf":1.0},"57":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"10":{"tf":1.0},"59":{"tf":1.0},"63":{"tf":1.0},"9":{"tf":1.0}},"s":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"e":{"df":24,"docs":{"10":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.7320508075688772},"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"24":{"tf":1.0},"36":{"tf":1.0},"39":{"tf":1.0},"44":{"tf":1.7320508075688772},"48":{"tf":1.0},"51":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.4142135623730951},"60":{"tf":1.0},"66":{"tf":1.4142135623730951},"67":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":2.0},"76":{"tf":1.0}}}}},"i":{"d":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"42":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"h":{"df":2,"docs":{"10":{"tf":1.0},"20":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"18":{"tf":1.0},"73":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"30":{"tf":1.0},"40":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"66":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"56":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"d":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"/":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"/":{"0":{"3":{"df":1,"docs":{"33":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"56":{"tf":2.0}}}}},"r":{"b":{"df":1,"docs":{"83":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":2,"docs":{"26":{"tf":1.0},"75":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"53":{"tf":1.0}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"41":{"tf":1.0}}}}}}}},"i":{"'":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"78":{"tf":1.0}}}},"m":{"df":1,"docs":{"15":{"tf":1.0}}}},"d":{"df":8,"docs":{"10":{"tf":1.0},"19":{"tf":1.4142135623730951},"41":{"tf":2.0},"48":{"tf":1.0},"50":{"tf":1.0},"59":{"tf":2.449489742783178},"61":{"tf":1.0},"76":{"tf":1.0}},"e":{"a":{"df":18,"docs":{"0":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"22":{"tf":1.0},"37":{"tf":1.7320508075688772},"38":{"tf":1.0},"39":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"46":{"tf":1.0},"57":{"tf":1.0},"65":{"tf":1.0},"78":{"tf":1.0},"8":{"tf":1.0}},"l":{"df":2,"docs":{"44":{"tf":1.0},"72":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":3,"docs":{"52":{"tf":1.0},"61":{"tf":1.0},"76":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"17":{"tf":1.0},"20":{"tf":1.0},"50":{"tf":1.0}}}}}},"m":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":7,"docs":{"38":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.0},"48":{"tf":1.4142135623730951},"56":{"tf":1.0},"74":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":5,"docs":{"42":{"tf":1.0},"43":{"tf":1.0},"51":{"tf":1.0},"65":{"tf":1.0},"72":{"tf":1.0}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":18,"docs":{"10":{"tf":1.0},"14":{"tf":1.7320508075688772},"19":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"29":{"tf":2.0},"35":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"55":{"tf":1.0},"58":{"tf":1.0},"65":{"tf":1.4142135623730951},"66":{"tf":1.0},"67":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0}}}}}}},"i":{"c":{"df":1,"docs":{"35":{"tf":1.4142135623730951}}},"df":1,"docs":{"26":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":21,"docs":{"10":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":1.0},"35":{"tf":1.0},"39":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.7320508075688772},"59":{"tf":1.4142135623730951},"61":{"tf":1.0},"63":{"tf":1.0},"71":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"14":{"tf":1.0},"33":{"tf":1.0},"59":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":7,"docs":{"15":{"tf":2.23606797749979},"22":{"tf":1.0},"29":{"tf":1.0},"58":{"tf":1.0},"64":{"tf":1.0},"72":{"tf":1.0},"75":{"tf":1.0}}}}}}},"n":{"a":{"c":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"18":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"d":{"df":2,"docs":{"12":{"tf":1.0},"39":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"29":{"tf":1.4142135623730951}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"58":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":2,"docs":{"42":{"tf":1.0},"76":{"tf":1.0}}}},"df":0,"docs":{}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":2,"docs":{"75":{"tf":1.0},"76":{"tf":1.7320508075688772}},"e":{"d":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"56":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"42":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{")":{".":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":4,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":6,"docs":{"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178},"75":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"74":{"tf":1.0},"75":{"tf":1.0}}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"74":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":18,"docs":{"10":{"tf":1.0},"14":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"18":{"tf":1.7320508075688772},"20":{"tf":2.0},"22":{"tf":3.0},"23":{"tf":3.4641016151377544},"24":{"tf":2.0},"26":{"tf":2.8284271247461903},"29":{"tf":4.0},"33":{"tf":2.0},"34":{"tf":2.0},"44":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.0}},"m":{"df":1,"docs":{"79":{"tf":1.0}}},"r":{"df":0,"docs":{},"m":{"df":18,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":1.0},"17":{"tf":1.0},"33":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"58":{"tf":2.449489742783178},"79":{"tf":1.7320508075688772},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"t":{"_":{"b":{"a":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":11,"docs":{"10":{"tf":1.0},"20":{"tf":1.7320508075688772},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"29":{"tf":1.4142135623730951},"51":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.7320508075688772},"78":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"23":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"71":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"18":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"4":{"tf":3.0},"5":{"tf":1.7320508075688772},"6":{"tf":1.4142135623730951}}},"n":{"c":{"df":5,"docs":{"18":{"tf":1.0},"50":{"tf":1.4142135623730951},"51":{"tf":1.4142135623730951},"65":{"tf":1.0},"67":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":2,"docs":{"16":{"tf":1.0},"20":{"tf":1.0}}}}},"df":0,"docs":{}},"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":8,"docs":{"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":2.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":2.0},"26":{"tf":3.0},"29":{"tf":4.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":16,"docs":{"20":{"tf":2.6457513110645907},"21":{"tf":3.0},"22":{"tf":2.8284271247461903},"23":{"tf":3.0},"24":{"tf":2.449489742783178},"26":{"tf":3.605551275463989},"29":{"tf":4.795831523312719},"32":{"tf":1.0},"33":{"tf":2.6457513110645907},"34":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}}}}}},"df":30,"docs":{"10":{"tf":2.449489742783178},"14":{"tf":2.449489742783178},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":2.8284271247461903},"19":{"tf":2.449489742783178},"20":{"tf":3.3166247903554},"21":{"tf":3.0},"22":{"tf":2.6457513110645907},"23":{"tf":2.449489742783178},"24":{"tf":2.23606797749979},"26":{"tf":3.3166247903554},"29":{"tf":4.795831523312719},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"39":{"tf":1.0},"45":{"tf":1.4142135623730951},"51":{"tf":2.8284271247461903},"54":{"tf":1.7320508075688772},"57":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.4142135623730951},"65":{"tf":1.0},"66":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"77":{"tf":1.7320508075688772},"78":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{},"e":{"a":{"d":{"df":19,"docs":{"11":{"tf":1.0},"12":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"18":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"39":{"tf":1.4142135623730951},"41":{"tf":1.0},"47":{"tf":1.0},"57":{"tf":1.0},"59":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"35":{"tf":1.4142135623730951},"4":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"19":{"tf":1.0},"50":{"tf":1.0},"54":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"58":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":9,"docs":{"19":{"tf":1.0},"2":{"tf":1.0},"29":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"51":{"tf":1.0},"60":{"tf":1.4142135623730951},"72":{"tf":1.0},"73":{"tf":1.4142135623730951}}}}},"n":{"df":8,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"38":{"tf":1.0}}}}}}}},"o":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":7,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"26":{"tf":2.23606797749979},"29":{"tf":3.0}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"61":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":5,"docs":{"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"19":{"tf":2.0},"20":{"tf":1.0},"22":{"tf":1.0}},"t":{"df":5,"docs":{"0":{"tf":1.7320508075688772},"1":{"tf":1.0},"2":{"tf":1.0},"3":{"tf":1.0},"7":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"69":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"54":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"42":{"tf":1.0}}}},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"25":{"tf":1.0}}},"l":{"df":0,"docs":{},"v":{"df":2,"docs":{"19":{"tf":1.0},"62":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":2,"docs":{"69":{"tf":1.0},"74":{"tf":1.0}}}}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"35":{"tf":1.0}}}},"n":{"'":{"df":0,"docs":{},"t":{"df":1,"docs":{"48":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":2,"docs":{"64":{"tf":1.0},"65":{"tf":1.0}}}},"s":{"df":0,"docs":{},"u":{"df":6,"docs":{"29":{"tf":1.0},"3":{"tf":1.0},"58":{"tf":1.0},"62":{"tf":1.0},"65":{"tf":1.0},"74":{"tf":1.0}}}}},"t":{"'":{"df":3,"docs":{"19":{"tf":1.0},"29":{"tf":1.0},"64":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"\"":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"20":{"tf":1.0},"29":{"tf":1.0},"72":{"tf":1.0}}}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":4,"docs":{"29":{"tf":1.0},"72":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"<":{"_":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":4,"docs":{"29":{"tf":1.0},"72":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}}},"t":{"df":1,"docs":{"56":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"c":{"<":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":4,"docs":{"20":{"tf":1.4142135623730951},"29":{"tf":1.0},"72":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":5,"docs":{"20":{"tf":1.7320508075688772},"22":{"tf":1.7320508075688772},"56":{"tf":1.4142135623730951},"73":{"tf":2.8284271247461903},"74":{"tf":1.7320508075688772}}},"r":{"df":7,"docs":{"13":{"tf":1.0},"26":{"tf":2.449489742783178},"29":{"tf":3.872983346207417},"6":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":2.6457513110645907},"74":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":18,"docs":{"1":{"tf":1.0},"10":{"tf":1.0},"15":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"39":{"tf":1.0},"40":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"58":{"tf":2.0},"6":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.7320508075688772}}}}}}}},"j":{"df":0,"docs":{},"o":{"b":{"df":6,"docs":{"19":{"tf":1.0},"21":{"tf":1.0},"39":{"tf":1.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"44":{"tf":1.0}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"77":{"tf":2.449489742783178},"78":{"tf":2.449489742783178}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"78":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":1,"docs":{"78":{"tf":1.0}}}}}}}}}}}}},"q":{"df":1,"docs":{"53":{"tf":1.0}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":10,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":2.0},"20":{"tf":1.0},"32":{"tf":1.7320508075688772},"33":{"tf":2.449489742783178},"50":{"tf":1.0},"53":{"tf":1.7320508075688772},"57":{"tf":1.7320508075688772},"58":{"tf":1.0}},"s":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":1,"docs":{"33":{"tf":2.23606797749979}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"u":{"d":{"df":0,"docs":{},"g":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"k":{"df":1,"docs":{"73":{"tf":1.0}},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":14,"docs":{"16":{"tf":1.0},"20":{"tf":1.7320508075688772},"29":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772},"58":{"tf":1.4142135623730951},"72":{"tf":1.0},"74":{"tf":1.0},"77":{"tf":1.0}}}},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"24":{"tf":1.0},"42":{"tf":1.0}}}},"y":{"df":11,"docs":{"20":{"tf":2.23606797749979},"26":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.4142135623730951},"52":{"tf":1.7320508075688772},"54":{"tf":1.7320508075688772},"56":{"tf":1.4142135623730951},"58":{"tf":1.0},"73":{"tf":2.6457513110645907},"74":{"tf":2.0},"75":{"tf":2.23606797749979}},"s":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"74":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"f":{"c":{"df":7,"docs":{"39":{"tf":1.4142135623730951},"40":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"51":{"tf":1.0},"59":{"tf":1.0}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"n":{"d":{"df":13,"docs":{"30":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.4142135623730951},"44":{"tf":1.0},"48":{"tf":1.4142135623730951},"54":{"tf":1.0},"56":{"tf":1.0},"62":{"tf":1.4142135623730951},"77":{"tf":1.0}}},"df":0,"docs":{}},"t":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"39":{"tf":1.0}}}}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":18,"docs":{"11":{"tf":1.0},"24":{"tf":1.4142135623730951},"25":{"tf":1.0},"27":{"tf":1.0},"36":{"tf":1.0},"41":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.4142135623730951},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"68":{"tf":1.0},"71":{"tf":1.7320508075688772},"74":{"tf":1.0}},"l":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"g":{"df":4,"docs":{"1":{"tf":1.0},"17":{"tf":1.0},"22":{"tf":1.0},"64":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"l":{"a":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":4,"docs":{"19":{"tf":1.0},"20":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"14":{"tf":1.0},"26":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"g":{"df":4,"docs":{"1":{"tf":1.0},"47":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"df":13,"docs":{"13":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.4142135623730951},"22":{"tf":1.0},"29":{"tf":1.0},"39":{"tf":1.0},"58":{"tf":1.4142135623730951},"61":{"tf":1.0},"63":{"tf":1.0},"71":{"tf":1.4142135623730951},"73":{"tf":1.0},"78":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":9,"docs":{"17":{"tf":1.0},"18":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"48":{"tf":1.0},"58":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.7320508075688772},"9":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"26":{"tf":1.0}}}}},"z":{"df":0,"docs":{},"i":{"df":1,"docs":{"56":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"d":{"df":2,"docs":{"0":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":5,"docs":{"1":{"tf":1.4142135623730951},"11":{"tf":1.0},"48":{"tf":1.0},"54":{"tf":1.4142135623730951},"65":{"tf":1.0}}}},"v":{"df":14,"docs":{"15":{"tf":1.0},"18":{"tf":1.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.23606797749979},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"39":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":1.7320508075688772},"75":{"tf":1.4142135623730951},"78":{"tf":1.0}},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":7,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"74":{"tf":1.0},"75":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":4,"docs":{"29":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0}},"o":{"df":0,"docs":{},"v":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"g":{"a":{"df":0,"docs":{},"l":{"df":7,"docs":{"79":{"tf":1.7320508075688772},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"74":{"tf":1.0}}}},"t":{"'":{"df":30,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.4142135623730951},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":1.0},"42":{"tf":1.7320508075688772},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"50":{"tf":1.0},"53":{"tf":1.7320508075688772},"54":{"tf":1.7320508075688772},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.4142135623730951},"65":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":2.0},"77":{"tf":1.7320508075688772}}},"df":0,"docs":{},"’":{"df":1,"docs":{"46":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":10,"docs":{"10":{"tf":1.0},"16":{"tf":1.7320508075688772},"18":{"tf":1.0},"20":{"tf":1.0},"30":{"tf":1.0},"38":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.4142135623730951},"61":{"tf":1.0},"71":{"tf":2.23606797749979}}}}}},"i":{"b":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.0}}}},"df":8,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":2.0},"70":{"tf":1.0},"9":{"tf":1.4142135623730951}},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":11,"docs":{"16":{"tf":1.0},"19":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":2.8284271247461903},"58":{"tf":2.23606797749979},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"70":{"tf":2.23606797749979},"9":{"tf":2.23606797749979}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":1,"docs":{"15":{"tf":1.0}}},"f":{"df":0,"docs":{},"e":{"df":4,"docs":{"19":{"tf":1.0},"20":{"tf":1.0},"25":{"tf":1.0},"42":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"10":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":5,"docs":{"14":{"tf":1.0},"35":{"tf":1.4142135623730951},"4":{"tf":1.0},"53":{"tf":1.0},"74":{"tf":2.0}}}}},"n":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"74":{"tf":1.7320508075688772}}}},"df":5,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"29":{"tf":1.0},"5":{"tf":1.0},"58":{"tf":1.0}}}},"s":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":1,"docs":{"43":{"tf":1.0}}}}},"t":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":2,"docs":{"53":{"tf":2.0},"54":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"df":16,"docs":{"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":1.0},"30":{"tf":1.4142135623730951},"39":{"tf":1.0},"44":{"tf":3.3166247903554},"45":{"tf":1.7320508075688772},"51":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.0},"65":{"tf":1.4142135623730951},"66":{"tf":1.0},"72":{"tf":1.4142135623730951},"74":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"39":{"tf":1.0}}}}}}},"o":{"a":{"d":{"df":4,"docs":{"22":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"78":{"tf":1.0}}},"df":0,"docs":{}},"c":{"a":{"df":0,"docs":{},"l":{"df":6,"docs":{"11":{"tf":1.0},"17":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"52":{"tf":1.4142135623730951},"74":{"tf":1.0}}},"t":{"df":1,"docs":{"49":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":5,"docs":{"26":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.0}},"i":{"c":{"df":4,"docs":{"16":{"tf":1.0},"26":{"tf":1.4142135623730951},"27":{"tf":1.0},"74":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"s":{"[":{"]":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"51":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"44":{"tf":1.4142135623730951},"7":{"tf":1.0},"74":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"k":{"df":33,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.4142135623730951},"2":{"tf":1.0},"22":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.4142135623730951},"37":{"tf":1.0},"38":{"tf":1.0},"40":{"tf":1.0},"43":{"tf":2.23606797749979},"44":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951},"47":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.4142135623730951},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":1.7320508075688772},"59":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.4142135623730951},"62":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"71":{"tf":1.0},"76":{"tf":1.4142135623730951},"78":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"65":{"tf":1.0}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"18":{"tf":1.0}}}}},"w":{"df":1,"docs":{"27":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"56":{"tf":1.0},"73":{"tf":1.0}}}}}}},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"35":{"tf":1.0},"4":{"tf":1.0},"58":{"tf":1.7320508075688772}}}}},"r":{"df":0,"docs":{},"o":{"df":3,"docs":{"10":{"tf":1.0},"33":{"tf":1.0},"58":{"tf":1.4142135623730951}}}}},"d":{"df":0,"docs":{},"e":{"df":4,"docs":{"16":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.0},"62":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"c":{"df":3,"docs":{"10":{"tf":1.0},"24":{"tf":1.0},"48":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"10":{"tf":1.4142135623730951},"26":{"tf":1.0},"33":{"tf":1.0},"58":{"tf":1.4142135623730951}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"0":{"tf":1.0},"24":{"tf":1.0},"3":{"tf":1.0},"6":{"tf":1.0}}}}},"df":0,"docs":{}}}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"15":{"tf":1.0}}}}},"k":{"df":0,"docs":{},"e":{"df":25,"docs":{"12":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"26":{"tf":1.4142135623730951},"27":{"tf":1.0},"33":{"tf":1.4142135623730951},"4":{"tf":1.0},"41":{"tf":1.4142135623730951},"44":{"tf":1.7320508075688772},"48":{"tf":1.7320508075688772},"54":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.7320508075688772},"6":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"74":{"tf":1.4142135623730951},"78":{"tf":1.7320508075688772}}}},"l":{"a":{"df":0,"docs":{},"g":{"a":{"df":2,"docs":{"47":{"tf":1.0},"7":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"g":{"df":10,"docs":{"20":{"tf":1.0},"28":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"81":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"i":{"df":12,"docs":{"16":{"tf":1.0},"30":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.0},"65":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.4142135623730951},"76":{"tf":1.0}},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"48":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"48":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"43":{"tf":1.0}}}}}},"p":{"(":{"df":0,"docs":{},"|":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":7,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"(":{"\"":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"<":{"&":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":2,"docs":{"75":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"74":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"k":{"df":1,"docs":{"56":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"73":{"tf":1.0}}}}}},"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":12,"docs":{"38":{"tf":1.0},"42":{"tf":1.0},"48":{"tf":1.4142135623730951},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":2.0},"62":{"tf":1.4142135623730951},"72":{"tf":2.0},"73":{"tf":3.4641016151377544},"74":{"tf":3.872983346207417},"75":{"tf":2.23606797749979},"77":{"tf":2.0}}},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"42":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"56":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":2,"docs":{"15":{"tf":1.0},"20":{"tf":1.0}}}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":15,"docs":{"15":{"tf":1.7320508075688772},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.7320508075688772},"26":{"tf":2.0},"29":{"tf":2.449489742783178},"48":{"tf":1.0},"69":{"tf":1.0},"77":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"74":{"tf":1.0}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"15":{"tf":1.0},"20":{"tf":1.0},"40":{"tf":1.0},"48":{"tf":1.0},"53":{"tf":1.0}}}}}},"y":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":2,"docs":{"22":{"tf":1.0},"73":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"b":{"df":6,"docs":{"16":{"tf":1.0},"36":{"tf":1.0},"42":{"tf":1.4142135623730951},"54":{"tf":1.0},"58":{"tf":1.0},"73":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"df":4,"docs":{"39":{"tf":1.7320508075688772},"40":{"tf":1.0},"41":{"tf":1.7320508075688772},"42":{"tf":1.0}}},"n":{"df":8,"docs":{"14":{"tf":1.0},"28":{"tf":1.0},"35":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.4142135623730951},"48":{"tf":1.0},"67":{"tf":1.0},"76":{"tf":1.7320508075688772}},"t":{"df":1,"docs":{"48":{"tf":1.0}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"17":{"tf":1.0},"20":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":2,"docs":{"38":{"tf":1.0},"48":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"54":{"tf":1.0}}},"df":7,"docs":{"22":{"tf":1.0},"51":{"tf":2.0},"53":{"tf":1.4142135623730951},"54":{"tf":3.1622776601683795},"56":{"tf":1.7320508075688772},"71":{"tf":1.4142135623730951},"77":{"tf":1.0}},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":1,"docs":{"38":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":10,"docs":{"33":{"tf":1.0},"34":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"52":{"tf":1.0},"61":{"tf":1.4142135623730951},"62":{"tf":1.0},"76":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":39,"docs":{"10":{"tf":3.0},"14":{"tf":3.0},"15":{"tf":4.0},"16":{"tf":2.23606797749979},"17":{"tf":2.6457513110645907},"18":{"tf":2.8284271247461903},"19":{"tf":2.23606797749979},"20":{"tf":3.7416573867739413},"21":{"tf":2.8284271247461903},"22":{"tf":3.605551275463989},"23":{"tf":2.0},"24":{"tf":1.7320508075688772},"26":{"tf":2.0},"28":{"tf":1.4142135623730951},"29":{"tf":4.0},"32":{"tf":2.0},"33":{"tf":2.6457513110645907},"35":{"tf":1.4142135623730951},"39":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.449489742783178},"48":{"tf":1.7320508075688772},"51":{"tf":2.0},"52":{"tf":1.7320508075688772},"53":{"tf":1.0},"54":{"tf":1.7320508075688772},"56":{"tf":1.0},"57":{"tf":3.0},"58":{"tf":3.7416573867739413},"59":{"tf":2.8284271247461903},"60":{"tf":2.6457513110645907},"61":{"tf":3.1622776601683795},"62":{"tf":1.0},"63":{"tf":1.7320508075688772},"67":{"tf":2.23606797749979},"70":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0}},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":20,"docs":{"10":{"tf":1.7320508075688772},"14":{"tf":1.4142135623730951},"15":{"tf":2.0},"16":{"tf":2.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.7320508075688772},"20":{"tf":3.1622776601683795},"21":{"tf":2.449489742783178},"22":{"tf":3.0},"23":{"tf":3.3166247903554},"24":{"tf":2.23606797749979},"26":{"tf":3.1622776601683795},"29":{"tf":4.242640687119285},"33":{"tf":1.7320508075688772},"34":{"tf":1.7320508075688772},"58":{"tf":1.7320508075688772},"74":{"tf":2.449489742783178},"75":{"tf":1.7320508075688772},"77":{"tf":1.4142135623730951}}}}}}}}},"df":1,"docs":{"18":{"tf":1.0}}}},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":4,"docs":{"14":{"tf":1.4142135623730951},"25":{"tf":1.0},"41":{"tf":1.0},"54":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":2,"docs":{"10":{"tf":1.0},"20":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"d":{"df":3,"docs":{"50":{"tf":1.0},"58":{"tf":1.0},"73":{"tf":1.0}}},"df":0,"docs":{}}}}},"i":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"38":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":7,"docs":{"10":{"tf":1.0},"19":{"tf":1.0},"48":{"tf":1.7320508075688772},"54":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"62":{"tf":4.0},"73":{"tf":1.0}},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"62":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"62":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{}}},"n":{"d":{"df":3,"docs":{"42":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"11":{"tf":1.0},"4":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}},"t":{"df":1,"docs":{"44":{"tf":1.0}}}},"r":{"a":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"24":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"40":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"m":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"s":{"df":4,"docs":{"20":{"tf":1.4142135623730951},"29":{"tf":1.0},"73":{"tf":1.0},"78":{"tf":1.0}}},"t":{"a":{"df":0,"docs":{},"k":{"df":1,"docs":{"3":{"tf":1.0}}}},"df":0,"docs":{}}}},"m":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":3,"docs":{"42":{"tf":1.4142135623730951},"44":{"tf":2.23606797749979},"45":{"tf":1.0}}}}}},"df":1,"docs":{"44":{"tf":2.0}},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"g":{"df":1,"docs":{"42":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"52":{"tf":1.4142135623730951}}}}}}},"o":{"c":{"df":0,"docs":{},"k":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"18":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"(":{")":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"18":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"v":{"df":1,"docs":{"18":{"tf":2.23606797749979}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"(":{"\"":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"18":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":1,"docs":{"18":{"tf":1.4142135623730951}}}}}}},"df":1,"docs":{"18":{"tf":1.4142135623730951}}}},"d":{"df":14,"docs":{"15":{"tf":1.0},"16":{"tf":1.7320508075688772},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.4142135623730951},"20":{"tf":3.1622776601683795},"21":{"tf":2.0},"22":{"tf":2.449489742783178},"23":{"tf":3.3166247903554},"24":{"tf":1.7320508075688772},"26":{"tf":2.449489742783178},"29":{"tf":3.0},"33":{"tf":2.0},"34":{"tf":2.0}},"e":{"df":0,"docs":{},"l":{"df":32,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"29":{"tf":1.4142135623730951},"36":{"tf":1.7320508075688772},"37":{"tf":2.0},"38":{"tf":1.7320508075688772},"39":{"tf":1.7320508075688772},"40":{"tf":1.4142135623730951},"41":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"43":{"tf":1.4142135623730951},"44":{"tf":1.7320508075688772},"45":{"tf":1.0},"46":{"tf":1.4142135623730951},"47":{"tf":1.0},"48":{"tf":1.7320508075688772},"49":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.4142135623730951},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":2.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":5,"docs":{"10":{"tf":1.0},"20":{"tf":1.0},"29":{"tf":1.0},"48":{"tf":1.7320508075688772},"54":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"df":8,"docs":{"15":{"tf":1.0},"16":{"tf":1.7320508075688772},"17":{"tf":1.4142135623730951},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.4142135623730951},"69":{"tf":1.0}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"56":{"tf":1.0},"58":{"tf":1.0},"62":{"tf":1.0},"78":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":2,"docs":{"42":{"tf":1.0},"48":{"tf":1.0}}}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"76":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":25,"docs":{"10":{"tf":1.7320508075688772},"15":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"26":{"tf":1.0},"32":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.7320508075688772},"44":{"tf":1.7320508075688772},"45":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"62":{"tf":1.0},"65":{"tf":1.4142135623730951},"71":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"41":{"tf":1.4142135623730951},"47":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"49":{"tf":1.4142135623730951}}}}},"v":{"df":0,"docs":{},"e":{"df":8,"docs":{"16":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"50":{"tf":1.0},"74":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"g":{".":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":4,"docs":{"29":{"tf":1.7320508075688772},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"r":{"df":4,"docs":{"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"62":{"tf":1.0}}}},":":{":":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"20":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":2,"docs":{"16":{"tf":1.0},"20":{"tf":1.4142135623730951}}}}}}}}}},"{":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":4,"docs":{"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":25,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":2.0},"16":{"tf":2.6457513110645907},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.4142135623730951},"20":{"tf":4.358898943540674},"21":{"tf":2.8284271247461903},"22":{"tf":3.605551275463989},"23":{"tf":4.47213595499958},"24":{"tf":2.449489742783178},"26":{"tf":3.4641016151377544},"29":{"tf":4.242640687119285},"33":{"tf":2.8284271247461903},"34":{"tf":2.6457513110645907},"58":{"tf":1.7320508075688772},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.4142135623730951},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}},"t":{"df":1,"docs":{"20":{"tf":1.0}}},"u":{"c":{"df":0,"docs":{},"h":{"df":12,"docs":{"10":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"26":{"tf":1.0},"42":{"tf":1.0},"48":{"tf":1.7320508075688772},"53":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":11,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":1.0},"24":{"tf":1.7320508075688772},"29":{"tf":1.4142135623730951},"33":{"tf":1.0},"41":{"tf":1.4142135623730951},"65":{"tf":1.0},"70":{"tf":1.0}},"p":{"df":0,"docs":{},"l":{"df":7,"docs":{"26":{"tf":1.4142135623730951},"36":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.4142135623730951},"76":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"19":{"tf":3.1622776601683795}}}}}}}}},"s":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"t":{"df":9,"docs":{"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.7320508075688772},"21":{"tf":1.7320508075688772},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":2.0},"26":{"tf":3.0},"29":{"tf":4.0}}}},"y":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"34":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"18":{"tf":1.0}}}}}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":19,"docs":{"11":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":2.0},"19":{"tf":1.4142135623730951},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.4142135623730951},"32":{"tf":1.7320508075688772},"33":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.0},"52":{"tf":1.4142135623730951},"53":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"70":{"tf":1.4142135623730951},"77":{"tf":1.0},"9":{"tf":1.0}},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":1,"docs":{"15":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":8,"docs":{"10":{"tf":1.7320508075688772},"11":{"tf":1.0},"12":{"tf":1.0},"19":{"tf":1.0},"28":{"tf":2.0},"29":{"tf":1.0},"48":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"r":{"df":4,"docs":{"28":{"tf":1.0},"42":{"tf":1.0},"48":{"tf":1.0},"54":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"26":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"d":{"df":40,"docs":{"11":{"tf":1.0},"14":{"tf":1.7320508075688772},"17":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"19":{"tf":2.0},"20":{"tf":2.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":2.6457513110645907},"33":{"tf":1.4142135623730951},"35":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":2.0},"40":{"tf":1.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.7320508075688772},"43":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.4142135623730951},"59":{"tf":1.0},"6":{"tf":1.4142135623730951},"61":{"tf":1.0},"64":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.7320508075688772},"75":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.7320508075688772},"78":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":16,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.0},"35":{"tf":1.4142135623730951},"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"51":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"73":{"tf":1.0},"76":{"tf":1.0}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"30":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"77":{"tf":1.4142135623730951}}}}}}}},"w":{"df":26,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.7320508075688772},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"26":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":2.0},"30":{"tf":1.0},"33":{"tf":1.7320508075688772},"34":{"tf":1.0},"48":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.7320508075688772},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.7320508075688772},"65":{"tf":1.4142135623730951},"77":{"tf":1.0},"78":{"tf":1.7320508075688772},"9":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"71":{"tf":1.0}}}}},"x":{"df":0,"docs":{},"t":{"df":6,"docs":{"10":{"tf":1.0},"15":{"tf":1.0},"19":{"tf":1.4142135623730951},"33":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.0}}}}},"i":{"c":{"df":0,"docs":{},"e":{"df":7,"docs":{"18":{"tf":1.0},"19":{"tf":1.4142135623730951},"23":{"tf":1.0},"24":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"d":{"df":0,"docs":{},"e":{"df":2,"docs":{"74":{"tf":1.0},"76":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"69":{"tf":1.0}}}},"n":{"df":8,"docs":{"15":{"tf":1.0},"20":{"tf":1.0},"24":{"tf":1.0},"41":{"tf":1.0},"43":{"tf":1.0},"52":{"tf":1.7320508075688772},"61":{"tf":1.0},"71":{"tf":1.0}},"e":{"df":12,"docs":{"19":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"21":{"tf":2.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":2.0},"26":{"tf":3.0},"29":{"tf":4.0},"44":{"tf":1.0},"61":{"tf":1.4142135623730951},"73":{"tf":2.23606797749979},"74":{"tf":2.0}}}},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"58":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":14,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"17":{"tf":1.0},"20":{"tf":1.4142135623730951},"29":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.4142135623730951},"59":{"tf":1.0},"67":{"tf":1.0},"70":{"tf":1.0},"72":{"tf":1.0},"77":{"tf":1.0}}},"h":{"df":10,"docs":{"14":{"tf":1.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"30":{"tf":1.0},"34":{"tf":1.0},"44":{"tf":1.0},"66":{"tf":1.0}}},"i":{"c":{"df":9,"docs":{"10":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"22":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"70":{"tf":1.0},"73":{"tf":1.0}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"51":{"tf":1.0}}}},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"20":{"tf":1.0},"28":{"tf":1.0},"44":{"tf":1.0},"76":{"tf":1.0}}}}}},"w":{"df":48,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"15":{"tf":2.23606797749979},"16":{"tf":2.449489742783178},"17":{"tf":1.7320508075688772},"18":{"tf":1.7320508075688772},"19":{"tf":1.7320508075688772},"20":{"tf":2.449489742783178},"21":{"tf":1.4142135623730951},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":2.0},"31":{"tf":1.0},"33":{"tf":2.0},"34":{"tf":1.4142135623730951},"35":{"tf":1.0},"36":{"tf":1.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.0},"44":{"tf":2.0},"45":{"tf":2.0},"46":{"tf":1.0},"48":{"tf":1.4142135623730951},"49":{"tf":1.4142135623730951},"50":{"tf":2.0},"51":{"tf":1.0},"54":{"tf":2.449489742783178},"55":{"tf":1.0},"58":{"tf":1.4142135623730951},"6":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.4142135623730951},"63":{"tf":1.0},"64":{"tf":1.4142135623730951},"65":{"tf":1.0},"68":{"tf":1.0},"7":{"tf":1.0},"71":{"tf":1.7320508075688772},"72":{"tf":1.0},"74":{"tf":2.23606797749979},"75":{"tf":1.0},"77":{"tf":1.4142135623730951},"9":{"tf":1.0}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":8,"docs":{"29":{"tf":1.4142135623730951},"35":{"tf":1.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.0},"51":{"tf":1.0},"59":{"tf":1.0},"76":{"tf":1.0},"84":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}}},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":13,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.7320508075688772},"15":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":1.0},"27":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"58":{"tf":2.449489742783178},"61":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":4,"docs":{"39":{"tf":1.4142135623730951},"41":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"77":{"tf":1.0}}}}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":3,"docs":{"15":{"tf":1.4142135623730951},"57":{"tf":1.0},"60":{"tf":1.0}},"s":{"df":3,"docs":{"48":{"tf":1.0},"51":{"tf":1.0},"73":{"tf":1.0}}}}}}}},"c":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"18":{"tf":1.0},"24":{"tf":1.0},"30":{"tf":1.0}}}}},"df":0,"docs":{}},"df":2,"docs":{"21":{"tf":1.0},"53":{"tf":1.0}},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"36":{"tf":1.0}}}},"df":0,"docs":{}}}},"k":{"(":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"22":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":14,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.7320508075688772},"21":{"tf":2.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.449489742783178},"29":{"tf":3.3166247903554},"74":{"tf":1.7320508075688772},"75":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":17,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"26":{"tf":2.0},"29":{"tf":2.449489742783178},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"df":5,"docs":{"10":{"tf":1.0},"17":{"tf":1.4142135623730951},"24":{"tf":1.0},"58":{"tf":1.4142135623730951},"61":{"tf":1.0}}},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"62":{"tf":1.0}}}}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"14":{"tf":1.0}}}}},"n":{"c":{"df":6,"docs":{"10":{"tf":1.0},"29":{"tf":1.0},"34":{"tf":1.4142135623730951},"36":{"tf":1.0},"40":{"tf":1.0},"59":{"tf":1.0}}},"df":44,"docs":{"0":{"tf":1.0},"10":{"tf":1.4142135623730951},"14":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.7320508075688772},"35":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.7320508075688772},"52":{"tf":1.0},"53":{"tf":1.7320508075688772},"54":{"tf":2.449489742783178},"56":{"tf":2.23606797749979},"57":{"tf":2.449489742783178},"58":{"tf":3.0},"59":{"tf":1.0},"60":{"tf":1.7320508075688772},"61":{"tf":1.4142135623730951},"62":{"tf":1.7320508075688772},"63":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"7":{"tf":1.4142135623730951},"71":{"tf":1.7320508075688772},"72":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"74":{"tf":1.0},"75":{"tf":1.0},"78":{"tf":1.0},"9":{"tf":1.4142135623730951}},"e":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"73":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"19":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":15,"docs":{"10":{"tf":1.0},"23":{"tf":1.0},"35":{"tf":1.7320508075688772},"39":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"7":{"tf":1.0}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"77":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":3,"docs":{"11":{"tf":1.0},"4":{"tf":1.0},"71":{"tf":1.0}},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{"0":{".":{"1":{"2":{".":{"6":{"df":1,"docs":{"49":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"o":{"df":0,"docs":{},"n":{"df":7,"docs":{"17":{"tf":1.0},"20":{"tf":1.0},"4":{"tf":1.0},"45":{"tf":2.0},"51":{"tf":1.0},"53":{"tf":1.0},"78":{"tf":1.0}}}}}}},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{":":{":":{"a":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"73":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":8,"docs":{"39":{"tf":1.7320508075688772},"40":{"tf":1.4142135623730951},"41":{"tf":2.23606797749979},"51":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":6,"docs":{"24":{"tf":1.4142135623730951},"38":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.4142135623730951},"59":{"tf":1.0},"61":{"tf":1.0}}}}}},"m":{"df":1,"docs":{"56":{"tf":1.0}}}},"s":{"df":2,"docs":{"11":{"tf":1.0},"78":{"tf":1.0}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"7":{"tf":1.4142135623730951}}}}}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"30":{"tf":1.0},"70":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"34":{"tf":1.0}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}}}}}},"t":{"df":18,"docs":{"15":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"24":{"tf":1.4142135623730951},"27":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.0},"44":{"tf":2.449489742783178},"45":{"tf":1.0},"48":{"tf":1.0},"56":{"tf":1.0},"59":{"tf":1.4142135623730951},"73":{"tf":1.0},"77":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"10":{"tf":1.0}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"50":{"tf":1.0},"6":{"tf":1.0},"70":{"tf":2.0}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":5,"docs":{"18":{"tf":1.0},"27":{"tf":1.0},"58":{"tf":1.0},"73":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"58":{"tf":1.0}},"p":{"df":0,"docs":{},"l":{"df":2,"docs":{"10":{"tf":1.0},"12":{"tf":1.0}}}}}}},"df":5,"docs":{"15":{"tf":1.0},"60":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":2.0},"74":{"tf":1.0}},"h":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"14":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"w":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"61":{"tf":1.0}}}},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}}},"w":{"df":0,"docs":{},"n":{"df":4,"docs":{"20":{"tf":1.0},"44":{"tf":1.0},"65":{"tf":1.0},"75":{"tf":1.0}},"e":{"d":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"18":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":2,"docs":{"20":{"tf":1.0},"28":{"tf":1.0}}}}}}},"p":{"9":{"df":0,"docs":{},"p":{"df":0,"docs":{},"n":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"w":{"3":{"3":{"df":0,"docs":{},"v":{"4":{"0":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"5":{"df":0,"docs":{},"l":{"4":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"df":1,"docs":{"54":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"a":{"c":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"g":{"df":8,"docs":{"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":1,"docs":{"1":{"tf":1.0}}},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"53":{"tf":1.0},"74":{"tf":1.0}}}}},"i":{"d":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}}},"df":0,"docs":{},"n":{"df":1,"docs":{"33":{"tf":1.0}}},"r":{"df":5,"docs":{"20":{"tf":1.0},"26":{"tf":1.0},"58":{"tf":1.0},"73":{"tf":1.0},"76":{"tf":1.0}}}},"n":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"24":{"tf":1.0}},"k":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"40":{"tf":1.0},"53":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"s":{"df":1,"docs":{"20":{"tf":1.4142135623730951}}},"t":{"df":16,"docs":{"16":{"tf":1.0},"29":{"tf":1.7320508075688772},"36":{"tf":1.0},"39":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.7320508075688772},"54":{"tf":1.4142135623730951},"58":{"tf":1.0},"59":{"tf":1.0},"64":{"tf":1.0},"71":{"tf":1.4142135623730951},"73":{"tf":1.0}},"i":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"42":{"tf":1.0},"56":{"tf":1.0}},"e":{"df":0,"docs":{},"q":{"df":8,"docs":{"17":{"tf":2.0},"20":{"tf":1.7320508075688772},"21":{"tf":2.0},"22":{"tf":2.23606797749979},"23":{"tf":1.0},"29":{"tf":2.449489742783178},"32":{"tf":2.23606797749979},"33":{"tf":2.23606797749979}}}}}},"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":1,"docs":{"39":{"tf":1.0}}}},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":14,"docs":{"29":{"tf":1.0},"35":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.4142135623730951},"43":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.4142135623730951},"51":{"tf":1.0},"56":{"tf":1.4142135623730951},"70":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0},"78":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"i":{"df":3,"docs":{"26":{"tf":1.0},"29":{"tf":1.0},"75":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"s":{"df":15,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.4142135623730951},"13":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.0},"20":{"tf":2.23606797749979},"41":{"tf":2.0},"53":{"tf":1.0},"54":{"tf":1.4142135623730951},"56":{"tf":1.0},"6":{"tf":2.0},"62":{"tf":1.0},"73":{"tf":1.0}},"i":{"df":0,"docs":{},"v":{"df":2,"docs":{"25":{"tf":1.0},"39":{"tf":1.0}}}}},"t":{"df":3,"docs":{"62":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"69":{"tf":1.0}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":4,"docs":{"0":{"tf":1.0},"41":{"tf":1.0},"67":{"tf":1.0},"71":{"tf":1.0}}}}}}},"y":{"df":3,"docs":{"28":{"tf":1.0},"44":{"tf":2.0},"56":{"tf":1.0}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"(":{"#":{"[":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"29":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"39":{"tf":1.0},"40":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}}}}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"44":{"tf":2.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"10":{"tf":1.0},"29":{"tf":1.0}},"f":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"48":{"tf":1.0}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":21,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"14":{"tf":1.7320508075688772},"18":{"tf":1.0},"19":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"38":{"tf":1.4142135623730951},"39":{"tf":1.4142135623730951},"40":{"tf":2.0},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"43":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.7320508075688772},"48":{"tf":1.0},"54":{"tf":1.7320508075688772},"60":{"tf":1.0},"62":{"tf":2.0},"67":{"tf":1.4142135623730951}}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"18":{"tf":1.0},"48":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"44":{"tf":1.0},"65":{"tf":1.0}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"47":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"40":{"tf":1.0},"74":{"tf":1.0}},"l":{"df":1,"docs":{"43":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"c":{"df":1,"docs":{"58":{"tf":1.0}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"11":{"tf":1.0}}}}}}}},"l":{"a":{"c":{"df":0,"docs":{},"e":{"df":4,"docs":{"20":{"tf":1.0},"26":{"tf":1.0},"6":{"tf":1.0},"75":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"14":{"tf":1.0}}}},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"46":{"tf":1.0}}}}}},"z":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}}},"y":{"df":5,"docs":{"25":{"tf":1.0},"43":{"tf":1.0},"46":{"tf":1.0},"52":{"tf":1.0},"7":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"44":{"tf":1.0}}},"df":3,"docs":{"42":{"tf":1.7320508075688772},"44":{"tf":3.4641016151377544},"45":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"3":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"30":{"tf":1.4142135623730951}}}},"u":{"df":9,"docs":{"2":{"tf":1.0},"20":{"tf":2.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"40":{"tf":1.0},"49":{"tf":1.4142135623730951},"6":{"tf":2.23606797749979},"70":{"tf":1.0}},"s":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"49":{"tf":1.0},"6":{"tf":1.0}}}}}},"/":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"49":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"/":{"c":{"df":0,"docs":{},"w":{"1":{"df":1,"docs":{"6":{"tf":1.4142135623730951}}},"4":{"df":2,"docs":{"49":{"tf":1.0},"56":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":19,"docs":{"10":{"tf":4.242640687119285},"14":{"tf":2.0},"16":{"tf":2.23606797749979},"19":{"tf":1.4142135623730951},"20":{"tf":2.23606797749979},"22":{"tf":1.7320508075688772},"23":{"tf":1.0},"34":{"tf":2.23606797749979},"35":{"tf":3.3166247903554},"39":{"tf":1.0},"42":{"tf":1.0},"48":{"tf":1.4142135623730951},"56":{"tf":1.0},"58":{"tf":3.7416573867739413},"61":{"tf":1.0},"62":{"tf":1.7320508075688772},"63":{"tf":1.0},"68":{"tf":1.0},"77":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"38":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"56":{"tf":1.0},"58":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"42":{"tf":1.0},"48":{"tf":1.0}}}}},"i":{"b":{"df":0,"docs":{},"l":{"df":14,"docs":{"22":{"tf":1.4142135623730951},"26":{"tf":1.0},"29":{"tf":1.4142135623730951},"38":{"tf":1.0},"39":{"tf":1.4142135623730951},"41":{"tf":1.4142135623730951},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"59":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.4142135623730951},"73":{"tf":1.0},"78":{"tf":1.0}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"22":{"tf":1.0},"74":{"tf":1.0}}}}}},"s":{"d":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"80":{"tf":1.0},"85":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"v":{"df":1,"docs":{"71":{"tf":1.0}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"46":{"tf":1.0}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":15,"docs":{"12":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.4142135623730951},"31":{"tf":2.0},"32":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"36":{"tf":1.0},"45":{"tf":1.0},"56":{"tf":1.0},"6":{"tf":1.0},"64":{"tf":1.0},"69":{"tf":1.0},"70":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}}},"df":0,"docs":{}}}},"d":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"20":{"tf":1.0},"61":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"15":{"tf":1.0},"48":{"tf":1.0},"59":{"tf":1.0}}}},"i":{"df":0,"docs":{},"x":{"df":2,"docs":{"20":{"tf":1.7320508075688772},"26":{"tf":1.0}}}}},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"77":{"tf":1.0}}}}}},"df":0,"docs":{}},"p":{"a":{"df":0,"docs":{},"r":{"df":6,"docs":{"19":{"tf":1.0},"29":{"tf":1.7320508075688772},"39":{"tf":1.7320508075688772},"40":{"tf":2.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"1":{"tf":1.4142135623730951}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"14":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":3,"docs":{"21":{"tf":1.0},"38":{"tf":1.0},"74":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"30":{"tf":1.4142135623730951},"65":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":7,"docs":{"40":{"tf":1.0},"41":{"tf":1.0},"48":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"62":{"tf":1.0},"71":{"tf":1.0}},"s":{"df":10,"docs":{"14":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"47":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"77":{"tf":1.4142135623730951}}}}}}}},"i":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"68":{"tf":1.0}}}}}}},"df":0,"docs":{}},"n":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":3,"docs":{"38":{"tf":1.0},"43":{"tf":1.0},"64":{"tf":1.0}}}}}},"df":0,"docs":{},"t":{"df":2,"docs":{"17":{"tf":1.0},"42":{"tf":1.0}}}}},"o":{"b":{"a":{"b":{"df":0,"docs":{},"l":{"df":10,"docs":{"1":{"tf":1.0},"16":{"tf":1.0},"19":{"tf":1.4142135623730951},"22":{"tf":1.0},"29":{"tf":1.0},"39":{"tf":1.0},"45":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":22,"docs":{"15":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"26":{"tf":1.4142135623730951},"32":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"35":{"tf":1.4142135623730951},"37":{"tf":1.0},"38":{"tf":2.0},"40":{"tf":1.0},"41":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"54":{"tf":1.0},"62":{"tf":1.7320508075688772},"64":{"tf":1.0},"65":{"tf":1.4142135623730951},"70":{"tf":1.0},"73":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":8,"docs":{"19":{"tf":1.0},"53":{"tf":1.0},"58":{"tf":1.7320508075688772},"59":{"tf":2.0},"61":{"tf":1.7320508075688772},"65":{"tf":1.4142135623730951},"66":{"tf":1.7320508075688772},"76":{"tf":1.4142135623730951}}}}}},"d":{"df":0,"docs":{},"u":{"c":{"df":3,"docs":{"18":{"tf":1.0},"25":{"tf":1.0},"27":{"tf":1.0}},"t":{"df":3,"docs":{"11":{"tf":1.0},"24":{"tf":1.0},"4":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"40":{"tf":1.0}}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":4,"docs":{"42":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"58":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"10":{"tf":1.0},"59":{"tf":1.0}}}}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":6,"docs":{"12":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":3.3166247903554},"77":{"tf":1.0},"9":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":13,"docs":{"10":{"tf":1.0},"15":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"42":{"tf":1.0},"5":{"tf":1.0},"54":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0},"9":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":8,"docs":{"26":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"46":{"tf":1.0},"47":{"tf":1.0},"57":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"65":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"40":{"tf":1.0}}}}},"df":0,"docs":{}}},"v":{"df":0,"docs":{},"i":{"d":{"df":11,"docs":{"18":{"tf":1.0},"19":{"tf":1.7320508075688772},"21":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"35":{"tf":1.0},"46":{"tf":1.0},"58":{"tf":1.0},"80":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"df":0,"docs":{}}},"x":{"df":0,"docs":{},"i":{"df":1,"docs":{"67":{"tf":1.0}}}}}},"u":{"b":{"df":29,"docs":{"10":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":2.8284271247461903},"16":{"tf":2.8284271247461903},"17":{"tf":2.449489742783178},"18":{"tf":2.449489742783178},"19":{"tf":2.0},"20":{"tf":4.358898943540674},"21":{"tf":4.123105625617661},"22":{"tf":4.242640687119285},"23":{"tf":3.7416573867739413},"24":{"tf":2.6457513110645907},"26":{"tf":3.7416573867739413},"29":{"tf":5.916079783099616},"32":{"tf":3.0},"33":{"tf":5.830951894845301},"34":{"tf":2.6457513110645907},"58":{"tf":1.7320508075688772},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"69":{"tf":2.8284271247461903},"72":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":2.23606797749979},"75":{"tf":2.0},"76":{"tf":2.449489742783178},"77":{"tf":1.7320508075688772},"78":{"tf":1.4142135623730951}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"52":{"tf":1.4142135623730951}}}}},"l":{"df":0,"docs":{},"i":{"c":{"df":4,"docs":{"16":{"tf":1.0},"33":{"tf":1.0},"42":{"tf":1.4142135623730951},"43":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"3":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"14":{"tf":1.0}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":16,"docs":{"10":{"tf":1.0},"11":{"tf":1.4142135623730951},"15":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.7320508075688772},"24":{"tf":1.0},"32":{"tf":1.0},"35":{"tf":1.0},"48":{"tf":1.0},"57":{"tf":1.4142135623730951},"61":{"tf":1.0},"62":{"tf":1.0},"65":{"tf":1.0},"69":{"tf":1.0},"74":{"tf":1.4142135623730951},"77":{"tf":1.0}}}}}},"t":{"df":2,"docs":{"51":{"tf":1.4142135623730951},"66":{"tf":1.0}}}},"w":{"d":{")":{"\"":{")":{"_":{"c":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"\"":{",":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"=":{"/":{"c":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"49":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},":":{"/":{"c":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"49":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":25,"docs":{"10":{"tf":2.23606797749979},"14":{"tf":3.7416573867739413},"15":{"tf":4.123105625617661},"16":{"tf":2.449489742783178},"17":{"tf":2.23606797749979},"18":{"tf":3.1622776601683795},"19":{"tf":2.8284271247461903},"20":{"tf":2.23606797749979},"21":{"tf":3.1622776601683795},"22":{"tf":2.0},"23":{"tf":1.7320508075688772},"24":{"tf":2.0},"25":{"tf":1.0},"26":{"tf":3.0},"29":{"tf":4.0},"33":{"tf":2.0},"43":{"tf":3.1622776601683795},"48":{"tf":1.4142135623730951},"50":{"tf":1.4142135623730951},"53":{"tf":3.1622776601683795},"54":{"tf":2.449489742783178},"58":{"tf":2.23606797749979},"69":{"tf":2.449489742783178},"74":{"tf":2.23606797749979},"78":{"tf":2.23606797749979}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"14":{"tf":1.0}}}}},"y":{"(":{"_":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":7,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.0}}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":12,"docs":{"16":{"tf":1.0},"20":{"tf":1.7320508075688772},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.0},"58":{"tf":1.0},"69":{"tf":1.0}},"s":{".":{"a":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"18":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"(":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"_":{"b":{"a":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"(":{"\"":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"1":{"df":1,"docs":{"29":{"tf":1.0}}},"2":{"df":1,"docs":{"29":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"29":{"tf":1.0}}}}},"&":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"(":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":8,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":2.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"26":{"tf":2.449489742783178},"29":{"tf":3.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"19":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{":":{":":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":6,"docs":{"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":9,"docs":{"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}}},"df":0,"docs":{}},"df":18,"docs":{"15":{"tf":2.449489742783178},"16":{"tf":2.0},"17":{"tf":2.23606797749979},"18":{"tf":2.449489742783178},"19":{"tf":1.7320508075688772},"20":{"tf":2.6457513110645907},"21":{"tf":2.6457513110645907},"22":{"tf":2.449489742783178},"23":{"tf":2.6457513110645907},"24":{"tf":1.7320508075688772},"26":{"tf":2.449489742783178},"29":{"tf":3.1622776601683795},"32":{"tf":1.0},"33":{"tf":2.6457513110645907},"34":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.0},"69":{"tf":1.7320508075688772}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":2,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"33":{"tf":1.7320508075688772},"69":{"tf":1.0}}}}}}}}}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":2.23606797749979},"45":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":6,"docs":{"15":{"tf":1.0},"20":{"tf":1.0},"42":{"tf":1.4142135623730951},"48":{"tf":1.0},"56":{"tf":1.0},"78":{"tf":1.0}}}}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"47":{"tf":1.0},"7":{"tf":1.7320508075688772}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"71":{"tf":1.0}},"g":{"df":1,"docs":{"73":{"tf":1.7320508075688772}}}},"r":{"df":0,"docs":{},"e":{"df":5,"docs":{"12":{"tf":1.0},"25":{"tf":1.0},"27":{"tf":1.0},"45":{"tf":1.0},"73":{"tf":1.0}}}},"w":{"df":2,"docs":{"10":{"tf":1.0},"43":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"e":{"a":{"c":{"df":0,"docs":{},"h":{"df":5,"docs":{"22":{"tf":1.0},"41":{"tf":1.0},"59":{"tf":1.0},"73":{"tf":1.0},"78":{"tf":1.0}}},"t":{"df":3,"docs":{"14":{"tf":1.0},"39":{"tf":1.0},"41":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"25":{"tf":1.0}}}},"v":{"df":1,"docs":{"14":{"tf":1.0}}}}}},"d":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"53":{"tf":1.0}}}},"df":0,"docs":{}},"df":8,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"20":{"tf":1.0},"22":{"tf":1.4142135623730951},"36":{"tf":1.0},"59":{"tf":1.0},"73":{"tf":2.0},"77":{"tf":1.0}},"i":{"df":9,"docs":{"16":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"24":{"tf":1.0},"35":{"tf":1.0},"39":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":9,"docs":{"18":{"tf":1.0},"19":{"tf":1.0},"25":{"tf":1.0},"4":{"tf":1.0},"42":{"tf":1.0},"46":{"tf":1.0},"67":{"tf":1.0},"7":{"tf":1.0},"73":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"42":{"tf":1.0},"44":{"tf":1.0}}}},"z":{"df":2,"docs":{"42":{"tf":1.0},"56":{"tf":1.0}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"58":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":17,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"24":{"tf":1.4142135623730951},"35":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.0},"41":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"48":{"tf":1.7320508075688772},"56":{"tf":1.0},"60":{"tf":1.0},"64":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":5,"docs":{"30":{"tf":1.0},"39":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"74":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"33":{"tf":1.0}}}},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":3,"docs":{"1":{"tf":1.0},"58":{"tf":1.0},"7":{"tf":1.0}}},"df":0,"docs":{}}}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"74":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"d":{"df":1,"docs":{"54":{"tf":1.0}}},"df":0,"docs":{}},"v":{"df":1,"docs":{"24":{"tf":1.0}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"u":{"c":{"df":2,"docs":{"11":{"tf":1.0},"33":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"46":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"f":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"15":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"52":{"tf":1.0},"69":{"tf":1.0},"75":{"tf":1.7320508075688772}}}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"18":{"tf":1.0},"71":{"tf":1.0}}}},"df":0,"docs":{}}}},"g":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"78":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"65":{"tf":1.0},"83":{"tf":1.4142135623730951}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"20":{"tf":1.0}}}}}}},"l":{"a":{"df":0,"docs":{},"t":{"df":9,"docs":{"15":{"tf":1.0},"29":{"tf":1.0},"36":{"tf":1.0},"48":{"tf":1.0},"51":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.7320508075688772},"63":{"tf":1.0},"71":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":2,"docs":{"33":{"tf":1.0},"66":{"tf":1.0}}}}}}}}}}},"df":1,"docs":{"65":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"s":{"df":4,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":1.0},"33":{"tf":1.0},"62":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"v":{"df":9,"docs":{"0":{"tf":1.0},"31":{"tf":1.0},"43":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.0},"54":{"tf":1.0},"58":{"tf":1.0},"74":{"tf":1.0}}}},"i":{"df":2,"docs":{"27":{"tf":1.0},"78":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":9,"docs":{"41":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"51":{"tf":1.0},"56":{"tf":1.0},"59":{"tf":1.0},"62":{"tf":1.0},"71":{"tf":1.0},"77":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"v":{"df":9,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":2.0},"33":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.7320508075688772},"69":{"tf":1.7320508075688772},"74":{"tf":1.4142135623730951},"77":{"tf":1.4142135623730951}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":4,"docs":{"15":{"tf":1.0},"32":{"tf":1.4142135623730951},"62":{"tf":1.0},"71":{"tf":1.0}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":5,"docs":{"41":{"tf":2.449489742783178},"45":{"tf":3.4641016151377544},"58":{"tf":1.0},"59":{"tf":1.7320508075688772},"61":{"tf":3.3166247903554}}},"y":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"61":{"tf":1.0}}}}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"59":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"o":{"df":2,"docs":{"6":{"tf":1.0},"71":{"tf":1.0}},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"23":{"tf":1.4142135623730951},"26":{"tf":1.0},"58":{"tf":1.0}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":4,"docs":{"36":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.4142135623730951},"6":{"tf":1.7320508075688772}}}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":8,"docs":{"10":{"tf":1.4142135623730951},"18":{"tf":1.0},"19":{"tf":1.0},"52":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"61":{"tf":1.0},"74":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"15":{"tf":1.4142135623730951},"19":{"tf":1.0},"56":{"tf":1.0}}}}}}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":6,"docs":{"10":{"tf":1.0},"3":{"tf":1.0},"39":{"tf":1.4142135623730951},"45":{"tf":1.0},"61":{"tf":1.0},"78":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"r":{"df":16,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.0},"14":{"tf":1.0},"17":{"tf":1.7320508075688772},"33":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.4142135623730951},"41":{"tf":1.0},"43":{"tf":1.0},"52":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.4142135623730951},"9":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":3,"docs":{"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":1,"docs":{"48":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":1,"docs":{"71":{"tf":1.7320508075688772}}}},"u":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"1":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{".":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"(":{")":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"(":{"df":0,"docs":{},"|":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":2,"docs":{"26":{"tf":1.0},"29":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":15,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.7320508075688772},"18":{"tf":2.8284271247461903},"19":{"tf":1.7320508075688772},"20":{"tf":2.6457513110645907},"21":{"tf":3.3166247903554},"22":{"tf":2.6457513110645907},"23":{"tf":2.6457513110645907},"24":{"tf":2.6457513110645907},"26":{"tf":4.242640687119285},"29":{"tf":5.656854249492381},"74":{"tf":1.7320508075688772},"75":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":34,"docs":{"10":{"tf":1.7320508075688772},"14":{"tf":1.4142135623730951},"15":{"tf":2.23606797749979},"16":{"tf":2.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":2.0},"21":{"tf":2.23606797749979},"22":{"tf":1.4142135623730951},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":2.0},"27":{"tf":1.0},"29":{"tf":2.23606797749979},"33":{"tf":1.7320508075688772},"34":{"tf":1.0},"38":{"tf":1.7320508075688772},"40":{"tf":1.0},"43":{"tf":1.0},"45":{"tf":1.7320508075688772},"53":{"tf":1.0},"58":{"tf":1.7320508075688772},"59":{"tf":1.4142135623730951},"60":{"tf":1.0},"61":{"tf":1.7320508075688772},"62":{"tf":1.0},"64":{"tf":1.4142135623730951},"66":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.4142135623730951},"85":{"tf":1.4142135623730951}},"e":{":":{":":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":4,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":2.23606797749979},"74":{"tf":1.4142135623730951},"75":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"t":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"39":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.0}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{":":{":":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"<":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":11,"docs":{"10":{"tf":1.0},"23":{"tf":1.7320508075688772},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.8284271247461903},"33":{"tf":1.0},"34":{"tf":1.0},"58":{"tf":1.4142135623730951},"61":{"tf":1.0},"63":{"tf":1.0},"74":{"tf":1.0}},"e":{"<":{"df":0,"docs":{},"t":{"df":1,"docs":{"62":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}}},"t":{"df":1,"docs":{"61":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"c":{"<":{"_":{"df":1,"docs":{"74":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":16,"docs":{"10":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"22":{"tf":1.0},"26":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.4142135623730951},"50":{"tf":1.0},"51":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951},"58":{"tf":2.449489742783178},"59":{"tf":1.0},"61":{"tf":1.0},"73":{"tf":1.4142135623730951}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"56":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":19,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":2.8284271247461903},"15":{"tf":1.4142135623730951},"21":{"tf":1.0},"22":{"tf":2.23606797749979},"23":{"tf":1.7320508075688772},"24":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.23606797749979},"33":{"tf":1.0},"38":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"45":{"tf":1.0},"58":{"tf":3.1622776601683795},"61":{"tf":2.23606797749979},"73":{"tf":1.4142135623730951},"78":{"tf":1.7320508075688772}},"s":{"(":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":2,"docs":{"33":{"tf":1.0},"69":{"tf":1.0}}}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":1,"docs":{"33":{"tf":1.0}}}}}}}}}}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":1,"docs":{"78":{"tf":1.0}}}}}}}}}}}}}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"s":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"41":{"tf":1.0}}}},"df":0,"docs":{}},"df":3,"docs":{"66":{"tf":1.0},"75":{"tf":1.0},"9":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"74":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"22":{"tf":1.0}}}}}}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":3,"docs":{"28":{"tf":1.0},"30":{"tf":1.0},"44":{"tf":2.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"i":{"d":{"df":1,"docs":{"69":{"tf":1.0}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":11,"docs":{"15":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"24":{"tf":1.0},"27":{"tf":1.0},"48":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"78":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"i":{"b":{"df":4,"docs":{"29":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"70":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"m":{"df":1,"docs":{"49":{"tf":1.0}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":3,"docs":{"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772}}}},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}}}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"55":{"tf":1.0}}}}}},"n":{"d":{"df":1,"docs":{"29":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.7320508075688772}}}}}}},"p":{"c":{"df":1,"docs":{"38":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":3,"docs":{"26":{"tf":1.0},"43":{"tf":1.0},"61":{"tf":1.0}}}},"n":{"df":10,"docs":{"11":{"tf":1.7320508075688772},"17":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.7320508075688772},"33":{"tf":1.7320508075688772},"4":{"tf":1.4142135623730951},"49":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}}}},"s":{"df":0,"docs":{},"t":{"'":{"df":1,"docs":{"71":{"tf":1.0}}},"_":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"e":{"=":{"1":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":20,"docs":{"1":{"tf":2.0},"10":{"tf":1.7320508075688772},"11":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":1.0},"19":{"tf":1.7320508075688772},"30":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"4":{"tf":2.6457513110645907},"57":{"tf":1.0},"58":{"tf":1.0},"61":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951},"77":{"tf":1.0},"9":{"tf":2.449489742783178}},"i":{"df":1,"docs":{"57":{"tf":1.0}}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"4":{"tf":1.0}}}}}}}},"s":{"a":{"d":{"df":1,"docs":{"54":{"tf":1.0}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":2,"docs":{"35":{"tf":1.0},"46":{"tf":1.0}}}},"k":{"df":0,"docs":{},"e":{"df":1,"docs":{"44":{"tf":1.0}}}},"l":{"a":{"d":{"df":1,"docs":{"40":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"e":{"df":14,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"28":{"tf":1.0},"30":{"tf":1.0},"44":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"61":{"tf":1.0},"65":{"tf":1.7320508075688772},"73":{"tf":1.0},"74":{"tf":1.4142135623730951},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.0}}}},"n":{"d":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"x":{"df":2,"docs":{"38":{"tf":1.0},"46":{"tf":1.0}}}}},"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"39":{"tf":1.0},"40":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"e":{"df":2,"docs":{"20":{"tf":1.4142135623730951},"73":{"tf":1.0}}}}},"c":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"58":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":2,"docs":{"18":{"tf":1.0},"19":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}},"h":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":7,"docs":{"39":{"tf":1.4142135623730951},"40":{"tf":2.0},"41":{"tf":2.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"58":{"tf":1.0}}}}},"df":0,"docs":{},"m":{"a":{"df":6,"docs":{"15":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":4.358898943540674},"48":{"tf":1.0},"62":{"tf":1.0},"70":{"tf":1.0}},"r":{"df":3,"docs":{"29":{"tf":1.0},"33":{"tf":1.0},"70":{"tf":1.0}},"s":{":":{":":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":1,"docs":{"33":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"30":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"42":{"tf":1.0},"51":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":5,"docs":{"18":{"tf":1.0},"20":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.0},"65":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"19":{"tf":1.0},"36":{"tf":1.0},"48":{"tf":1.0},"9":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"46":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":22,"docs":{"12":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"4":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0},"67":{"tf":1.0},"71":{"tf":1.7320508075688772},"74":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"9":{"tf":1.0}},"m":{"df":4,"docs":{"18":{"tf":1.4142135623730951},"48":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0}}},"n":{"df":1,"docs":{"46":{"tf":1.0}}}},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"39":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"42":{"tf":1.0}}},"df":5,"docs":{"39":{"tf":2.0},"40":{"tf":1.4142135623730951},"41":{"tf":2.6457513110645907},"42":{"tf":1.0},"43":{"tf":1.0}}}}}},"m":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"74":{"tf":1.0}},"i":{"c":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"36":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"n":{"d":{"df":15,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"20":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"44":{"tf":1.0},"48":{"tf":1.4142135623730951},"51":{"tf":1.0},"52":{"tf":1.7320508075688772},"53":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"59":{"tf":2.6457513110645907},"60":{"tf":1.0},"61":{"tf":2.0}},"e":{"df":0,"docs":{},"r":{"df":10,"docs":{"14":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.6457513110645907},"42":{"tf":1.4142135623730951},"52":{"tf":1.0}}}}},"df":0,"docs":{},"s":{"df":3,"docs":{"10":{"tf":1.0},"16":{"tf":1.0},"41":{"tf":1.0}}},"t":{"df":12,"docs":{"10":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"22":{"tf":1.0},"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"56":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":2.23606797749979},"59":{"tf":1.4142135623730951},"61":{"tf":1.0},"63":{"tf":1.4142135623730951}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":4,"docs":{"15":{"tf":1.4142135623730951},"29":{"tf":1.0},"59":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"76":{"tf":1.0}}},"df":0,"docs":{}}}}},"r":{"d":{"df":11,"docs":{"14":{"tf":1.7320508075688772},"15":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"32":{"tf":1.7320508075688772},"33":{"tf":1.0},"35":{"tf":2.0},"57":{"tf":1.7320508075688772},"70":{"tf":1.0}},"e":{"(":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"32":{"tf":2.23606797749979},"33":{"tf":2.23606797749979}},"l":{"=":{"\"":{"df":0,"docs":{},"s":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"_":{"c":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},":":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"58":{"tf":1.0}}}}}},"{":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":10,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"29":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":14,"docs":{"14":{"tf":1.7320508075688772},"15":{"tf":2.0},"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"22":{"tf":1.0},"29":{"tf":1.0},"32":{"tf":1.7320508075688772},"33":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"61":{"tf":1.0},"73":{"tf":1.0}},"i":{"df":0,"docs":{},"z":{"df":3,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"20":{"tf":1.0}}}}}},"df":1,"docs":{"55":{"tf":1.0}},"o":{"df":0,"docs":{},"u":{"df":2,"docs":{"30":{"tf":1.0},"72":{"tf":1.0}}}}},"v":{"df":2,"docs":{"41":{"tf":1.7320508075688772},"51":{"tf":1.4142135623730951}},"i":{"c":{"df":1,"docs":{"38":{"tf":1.0}}},"df":0,"docs":{}}}},"t":{"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"27":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":18,"docs":{"10":{"tf":1.0},"27":{"tf":1.0},"4":{"tf":1.7320508075688772},"45":{"tf":1.0},"47":{"tf":1.0},"5":{"tf":1.0},"54":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"6":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"67":{"tf":1.0},"70":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":3.1622776601683795},"77":{"tf":1.4142135623730951}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"39":{"tf":1.0},"40":{"tf":1.0},"70":{"tf":1.0}}}}}},"h":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"33":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"38":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"35":{"tf":1.0}}}},"w":{"df":8,"docs":{"0":{"tf":1.4142135623730951},"14":{"tf":1.0},"16":{"tf":1.0},"42":{"tf":1.0},"52":{"tf":1.0},"54":{"tf":1.0},"74":{"tf":1.0},"9":{"tf":1.0}}}}},"i":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"24":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"58":{"tf":1.7320508075688772},"63":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"10":{"tf":1.0}}}}}}},"df":2,"docs":{"14":{"tf":1.0},"22":{"tf":1.0}}},"df":0,"docs":{}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":12,"docs":{"14":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"34":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.4142135623730951},"73":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"58":{"tf":1.0}}}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"81":{"tf":1.0},"85":{"tf":1.0}}}},"p":{"df":0,"docs":{},"l":{"df":20,"docs":{"10":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"14":{"tf":1.0},"17":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"35":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"49":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"65":{"tf":1.0},"67":{"tf":1.0},"9":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"20":{"tf":1.0},"58":{"tf":1.0}}}}},"i":{"c":{"df":2,"docs":{"14":{"tf":1.0},"44":{"tf":1.0}}},"df":1,"docs":{"33":{"tf":1.0}},"f":{"df":0,"docs":{},"i":{"df":5,"docs":{"29":{"tf":1.0},"39":{"tf":1.0},"43":{"tf":1.0},"60":{"tf":1.0},"74":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"l":{"df":2,"docs":{"19":{"tf":1.0},"78":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":22,"docs":{"10":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"18":{"tf":1.7320508075688772},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.4142135623730951},"39":{"tf":1.0},"48":{"tf":1.0},"53":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":2.0},"61":{"tf":1.0},"64":{"tf":1.7320508075688772},"66":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.7320508075688772},"74":{"tf":2.449489742783178},"76":{"tf":1.0}}}}},"t":{"df":1,"docs":{"29":{"tf":1.0}},"u":{"a":{"df":0,"docs":{},"t":{"df":4,"docs":{"23":{"tf":1.4142135623730951},"41":{"tf":1.4142135623730951},"65":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}}},"z":{"df":0,"docs":{},"e":{"df":2,"docs":{"11":{"tf":1.0},"4":{"tf":1.4142135623730951}}}}},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":2,"docs":{"33":{"tf":1.0},"73":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"18":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":2,"docs":{"24":{"tf":1.0},"34":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":4,"docs":{"33":{"tf":1.0},"58":{"tf":1.0},"61":{"tf":1.0},"71":{"tf":1.0}}}}}}}}},"m":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":2,"docs":{"26":{"tf":1.0},"64":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"11":{"tf":1.0},"20":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"62":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":33,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":1.0},"10":{"tf":2.0},"14":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"27":{"tf":1.0},"28":{"tf":2.0},"30":{"tf":1.0},"33":{"tf":1.0},"35":{"tf":1.7320508075688772},"36":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.4142135623730951},"4":{"tf":1.0},"42":{"tf":2.0},"43":{"tf":1.0},"48":{"tf":1.0},"5":{"tf":1.4142135623730951},"52":{"tf":1.0},"53":{"tf":1.4142135623730951},"54":{"tf":2.0},"55":{"tf":1.4142135623730951},"56":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":1.4142135623730951},"64":{"tf":1.7320508075688772},"65":{"tf":1.0},"66":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":2.23606797749979}}}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"_":{"c":{"a":{"df":0,"docs":{},"s":{"df":2,"docs":{"32":{"tf":2.23606797749979},"33":{"tf":2.23606797749979}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"32":{"tf":1.0},"57":{"tf":1.0}}}},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":1,"docs":{"20":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"df":2,"docs":{"18":{"tf":1.0},"62":{"tf":1.0}}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"64":{"tf":1.0}}},"i":{"d":{"df":5,"docs":{"15":{"tf":1.0},"38":{"tf":1.0},"43":{"tf":1.0},"46":{"tf":1.0},"64":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"37":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"48":{"tf":1.0}}}},"v":{"df":3,"docs":{"38":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"73":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"33":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":15,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"25":{"tf":1.0},"30":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.7320508075688772},"49":{"tf":1.0},"51":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951},"58":{"tf":1.0},"71":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0}}},"i":{"df":0,"docs":{},"m":{"df":3,"docs":{"43":{"tf":1.0},"57":{"tf":1.0},"76":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"10":{"tf":1.0},"11":{"tf":1.0}}}},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"59":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"38":{"tf":1.0},"73":{"tf":1.0}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"74":{"tf":1.0}}},"df":0,"docs":{}},"r":{"c":{"df":1,"docs":{"22":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"74":{"tf":1.0}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":7,"docs":{"28":{"tf":1.0},"41":{"tf":1.7320508075688772},"45":{"tf":1.0},"48":{"tf":2.449489742783178},"56":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"f":{"df":7,"docs":{"10":{"tf":1.0},"44":{"tf":1.0},"47":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.7320508075688772},"67":{"tf":1.0},"73":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"32":{"tf":1.0}}}},"n":{"d":{"df":1,"docs":{"27":{"tf":1.0}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"16":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951}}}}}},"r":{"c":{"/":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"33":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"r":{"df":4,"docs":{"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0}},"s":{":":{"8":{"0":{":":{"1":{"4":{"df":1,"docs":{"20":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"23":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"l":{"df":0,"docs":{},"i":{"b":{".":{"df":0,"docs":{},"r":{"df":8,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"r":{"df":5,"docs":{"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"33":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"4":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":1,"docs":{"41":{"tf":1.4142135623730951}}}},"k":{"df":0,"docs":{},"e":{"df":11,"docs":{"13":{"tf":1.0},"14":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"6":{"tf":1.0},"70":{"tf":1.0},"9":{"tf":1.0}}}},"n":{"d":{"a":{"df":0,"docs":{},"r":{"d":{"df":4,"docs":{"26":{"tf":1.0},"32":{"tf":1.0},"74":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"13":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{}},"t":{"_":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":1,"docs":{"53":{"tf":1.0}}}}},"df":0,"docs":{}},"df":22,"docs":{"1":{"tf":1.0},"10":{"tf":2.23606797749979},"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"34":{"tf":1.0},"46":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.7320508075688772},"49":{"tf":1.7320508075688772},"56":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"65":{"tf":1.4142135623730951},"68":{"tf":1.0},"7":{"tf":2.0},"73":{"tf":1.0},"74":{"tf":1.4142135623730951},"77":{"tf":1.0},"9":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"69":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}}},"df":26,"docs":{"10":{"tf":2.23606797749979},"14":{"tf":2.0},"15":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":4.58257569495584},"21":{"tf":2.449489742783178},"22":{"tf":1.0},"23":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"38":{"tf":1.0},"42":{"tf":4.0},"43":{"tf":3.1622776601683795},"44":{"tf":2.23606797749979},"45":{"tf":2.449489742783178},"48":{"tf":2.23606797749979},"53":{"tf":1.0},"54":{"tf":2.449489742783178},"56":{"tf":2.8284271247461903},"58":{"tf":2.0},"62":{"tf":2.0},"72":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.4142135623730951}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}}}}},"i":{"c":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":1,"docs":{"61":{"tf":1.0}}}}},"d":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"23":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":11,"docs":{"14":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"35":{"tf":1.0},"70":{"tf":1.0},"9":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"(":{"#":{"[":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"23":{"tf":1.0},"29":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},":":{":":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"c":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"(":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":3,"docs":{"10":{"tf":1.0},"23":{"tf":1.7320508075688772},"29":{"tf":1.4142135623730951}}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"<":{"_":{"df":5,"docs":{"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}},"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":8,"docs":{"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"74":{"tf":1.0}}}}}}}}}}}}}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":17,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":2.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.0},"58":{"tf":1.0},"69":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":12,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"<":{"df":0,"docs":{},"t":{"df":1,"docs":{"22":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":19,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"20":{"tf":2.449489742783178},"21":{"tf":2.0},"22":{"tf":2.449489742783178},"23":{"tf":2.23606797749979},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178},"33":{"tf":1.0},"34":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.4142135623730951},"77":{"tf":1.0}}}}}}}}},"v":{"df":0,"docs":{},"e":{"c":{"<":{"_":{"df":7,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":19,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.7320508075688772},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":2.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.0},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"77":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":10,"docs":{"0":{"tf":1.4142135623730951},"13":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"33":{"tf":1.0},"36":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"41":{"tf":1.0},"55":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":11,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"43":{"tf":1.4142135623730951},"45":{"tf":1.7320508075688772},"48":{"tf":1.0},"57":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"57":{"tf":1.0}}}},"p":{"df":1,"docs":{"73":{"tf":1.4142135623730951}}},"r":{"a":{"df":0,"docs":{},"g":{"df":14,"docs":{"2":{"tf":1.0},"20":{"tf":3.1622776601683795},"22":{"tf":1.4142135623730951},"23":{"tf":1.0},"29":{"tf":1.4142135623730951},"33":{"tf":1.0},"44":{"tf":1.0},"56":{"tf":1.0},"70":{"tf":1.0},"72":{"tf":2.0},"73":{"tf":2.6457513110645907},"74":{"tf":1.0},"75":{"tf":1.0},"78":{"tf":1.0}}}},"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"o":{"d":{"df":2,"docs":{"19":{"tf":1.0},"50":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":10,"docs":{"19":{"tf":1.0},"20":{"tf":2.449489742783178},"22":{"tf":1.0},"42":{"tf":1.0},"48":{"tf":1.0},"50":{"tf":1.7320508075688772},"54":{"tf":1.0},"73":{"tf":1.4142135623730951},"74":{"tf":1.0},"77":{"tf":2.0}}},"i":{"df":3,"docs":{"18":{"tf":1.0},"35":{"tf":1.0},"61":{"tf":1.0}}}}},"r":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"m":{"a":{"df":0,"docs":{},"y":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"s":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"73":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":1,"docs":{"73":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":2,"docs":{"16":{"tf":1.0},"58":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"18":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":18,"docs":{"14":{"tf":1.0},"15":{"tf":1.7320508075688772},"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":2.6457513110645907},"21":{"tf":1.0},"22":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"32":{"tf":1.4142135623730951},"33":{"tf":2.449489742783178},"53":{"tf":1.0},"58":{"tf":2.0},"61":{"tf":1.7320508075688772},"69":{"tf":1.0},"70":{"tf":1.0},"76":{"tf":1.0},"78":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"1":{"tf":1.0},"58":{"tf":1.0}}}}}}},"u":{"c":{"df":0,"docs":{},"t":{"df":13,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.7320508075688772},"22":{"tf":1.7320508075688772},"29":{"tf":1.7320508075688772},"32":{"tf":1.7320508075688772},"33":{"tf":3.0},"69":{"tf":1.4142135623730951},"76":{"tf":1.4142135623730951},"78":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":19,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.0},"16":{"tf":1.7320508075688772},"20":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"38":{"tf":1.0},"43":{"tf":1.4142135623730951},"51":{"tf":1.0},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"71":{"tf":2.0},"77":{"tf":1.0},"78":{"tf":1.0},"8":{"tf":1.0}}}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"50":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":3,"docs":{"15":{"tf":1.0},"32":{"tf":1.0},"57":{"tf":1.4142135623730951}}}}}},"u":{"b":{"c":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"38":{"tf":1.0}}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"71":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":6,"docs":{"40":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":3.1622776601683795},"58":{"tf":2.23606797749979},"59":{"tf":2.0},"61":{"tf":3.0}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"59":{"tf":1.7320508075688772},"61":{"tf":1.0}}}},"df":0,"docs":{}}}},"o":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"16":{"tf":1.0}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"g":{":":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"_":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"59":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"59":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"u":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"59":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":2,"docs":{"58":{"tf":1.0},"59":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"61":{"tf":1.0}}}}}}}}}}}}}}},"df":0,"docs":{}}}}}}},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"56":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"43":{"tf":1.0},"53":{"tf":1.0},"61":{"tf":1.0}}}}}}}},"t":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"df":1,"docs":{"39":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"df":2,"docs":{"16":{"tf":1.0},"62":{"tf":1.0}},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"75":{"tf":1.0}}}}}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":5,"docs":{"10":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"5":{"tf":1.0}},"e":{"d":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"s":{"df":4,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"45":{"tf":1.7320508075688772},"59":{"tf":1.0}}}}}},"df":0,"docs":{},"h":{"df":21,"docs":{"10":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":1.0},"35":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.0},"50":{"tf":1.4142135623730951},"51":{"tf":1.0},"56":{"tf":1.0},"62":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"67":{"tf":1.0},"74":{"tf":2.0},"78":{"tf":1.7320508075688772},"9":{"tf":1.0}}}},"d":{"df":0,"docs":{},"o":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"63":{"tf":1.0}}}}},"df":0,"docs":{}},"df":2,"docs":{"10":{"tf":1.0},"63":{"tf":2.23606797749979}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"63":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"26":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"36":{"tf":1.0},"7":{"tf":1.0},"78":{"tf":1.0}}}}}}},"m":{"df":1,"docs":{"56":{"tf":1.0}},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"39":{"tf":1.0},"51":{"tf":1.0}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":12,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.4142135623730951},"20":{"tf":2.0},"21":{"tf":2.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"26":{"tf":2.449489742783178},"29":{"tf":3.0}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":5,"docs":{"10":{"tf":1.0},"29":{"tf":1.0},"42":{"tf":1.0},"53":{"tf":1.0},"65":{"tf":1.4142135623730951}}}},"s":{"df":4,"docs":{"14":{"tf":1.0},"45":{"tf":1.0},"61":{"tf":1.0},"73":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"df":8,"docs":{"20":{"tf":1.0},"41":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.0},"69":{"tf":1.0},"78":{"tf":1.0}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":2,"docs":{"17":{"tf":1.0},"60":{"tf":1.0}}}}}}}},"w":{"df":1,"docs":{"38":{"tf":1.0}}},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"a":{"df":1,"docs":{"2":{"tf":1.0}}},"df":0,"docs":{}}}},"n":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"62":{"tf":1.0},"76":{"tf":1.0}}}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":11,"docs":{"10":{"tf":1.0},"39":{"tf":1.7320508075688772},"40":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.0},"52":{"tf":1.4142135623730951},"64":{"tf":1.0},"65":{"tf":1.4142135623730951},"76":{"tf":1.0},"77":{"tf":1.0}}}}}}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"42":{"tf":1.0},"48":{"tf":2.6457513110645907},"56":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":19,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"26":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.4142135623730951},"36":{"tf":1.0},"37":{"tf":1.0},"40":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"59":{"tf":1.7320508075688772},"64":{"tf":1.4142135623730951}},"n":{"df":1,"docs":{"39":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"k":{"df":10,"docs":{"18":{"tf":1.0},"29":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"51":{"tf":1.0},"55":{"tf":1.0},"61":{"tf":1.0},"64":{"tf":1.0}}}},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"(":{"df":1,"docs":{"33":{"tf":1.0}}},"/":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":1,"docs":{"33":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"3":{"2":{"df":2,"docs":{"13":{"tf":1.4142135623730951},"6":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":7,"docs":{"11":{"tf":2.0},"12":{"tf":1.4142135623730951},"33":{"tf":2.23606797749979},"34":{"tf":1.0},"4":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.4142135623730951}}}}}},"s":{"df":0,"docs":{},"k":{"df":4,"docs":{"38":{"tf":1.0},"39":{"tf":2.0},"41":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951}}}}},"df":2,"docs":{"56":{"tf":1.0},"60":{"tf":1.0}},"e":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"36":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"20":{"tf":1.0},"71":{"tf":1.0}}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"43":{"tf":1.0}}}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":7,"docs":{"0":{"tf":1.0},"11":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"51":{"tf":1.0},"60":{"tf":1.0},"64":{"tf":1.0}}}},"n":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"73":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"d":{"df":3,"docs":{"57":{"tf":1.0},"65":{"tf":1.0},"74":{"tf":1.4142135623730951}}},"df":1,"docs":{"73":{"tf":1.0}}},"r":{"df":0,"docs":{},"m":{"df":3,"docs":{"44":{"tf":1.0},"47":{"tf":1.0},"57":{"tf":1.0}}},"r":{"a":{"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"15":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"17":{"tf":1.0},"58":{"tf":1.0}}}},"df":0,"docs":{}},"df":25,"docs":{"11":{"tf":1.7320508075688772},"14":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":4.358898943540674},"18":{"tf":4.242640687119285},"19":{"tf":3.7416573867739413},"2":{"tf":1.0},"20":{"tf":4.123105625617661},"21":{"tf":3.4641016151377544},"22":{"tf":1.7320508075688772},"23":{"tf":2.0},"24":{"tf":3.1622776601683795},"26":{"tf":3.872983346207417},"29":{"tf":4.47213595499958},"30":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"4":{"tf":1.4142135623730951},"52":{"tf":1.0},"6":{"tf":1.7320508075688772},"69":{"tf":1.0},"7":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"78":{"tf":2.23606797749979}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":3,"docs":{"4":{"tf":1.0},"47":{"tf":1.0},"7":{"tf":1.7320508075688772}}}}}}},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"53":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"t":{"'":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":3,"docs":{"25":{"tf":1.0},"38":{"tf":1.0},"41":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"41":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"16":{"tf":1.0}},"g":{"df":39,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"22":{"tf":1.7320508075688772},"23":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.4142135623730951},"35":{"tf":1.0},"36":{"tf":1.0},"39":{"tf":1.7320508075688772},"40":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"44":{"tf":2.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.7320508075688772},"50":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":1.0},"59":{"tf":1.4142135623730951},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.7320508075688772},"74":{"tf":1.0},"75":{"tf":1.0},"76":{"tf":1.0},"78":{"tf":1.4142135623730951},"9":{"tf":1.0}}},"k":{"df":10,"docs":{"10":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"39":{"tf":1.0},"42":{"tf":1.0},"50":{"tf":1.4142135623730951},"58":{"tf":1.0},"60":{"tf":1.0},"65":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"23":{"tf":1.0},"29":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":6,"docs":{"23":{"tf":2.0},"24":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"58":{"tf":1.4142135623730951},"70":{"tf":1.0}}}}}}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":14,"docs":{"10":{"tf":1.0},"18":{"tf":1.4142135623730951},"32":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":1.4142135623730951},"56":{"tf":1.7320508075688772},"57":{"tf":1.7320508075688772},"58":{"tf":2.23606797749979},"59":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.0},"73":{"tf":1.7320508075688772},"74":{"tf":1.0}}}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":2,"docs":{"38":{"tf":1.0},"76":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"73":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":6,"docs":{"10":{"tf":1.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"29":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.4142135623730951}}},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"59":{"tf":1.0}}},"df":0,"docs":{}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":10,"docs":{"22":{"tf":1.0},"36":{"tf":1.4142135623730951},"44":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"65":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"8":{"tf":1.0}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"4":{"tf":1.0},"76":{"tf":1.0}}}}}}}}}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"74":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":22,"docs":{"11":{"tf":1.0},"14":{"tf":1.0},"17":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"35":{"tf":1.0},"41":{"tf":1.0},"54":{"tf":2.0},"55":{"tf":1.0},"56":{"tf":1.4142135623730951},"61":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":2.0},"73":{"tf":1.0},"74":{"tf":1.4142135623730951},"76":{"tf":3.3166247903554},"77":{"tf":2.8284271247461903},"78":{"tf":2.449489742783178}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":5,"docs":{"10":{"tf":1.0},"58":{"tf":1.0},"76":{"tf":1.4142135623730951},"77":{"tf":1.4142135623730951},"78":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"m":{"df":0,"docs":{},"g":{"df":1,"docs":{"79":{"tf":1.0}}}},"o":{"_":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"29":{"tf":1.4142135623730951},"74":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":11,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"58":{"tf":1.0}}},"y":{"(":{"&":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{":":{":":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"(":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":8,"docs":{"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772},"69":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":12,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":2,"docs":{"14":{"tf":1.0},"15":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":7,"docs":{"10":{"tf":1.0},"18":{"tf":1.0},"28":{"tf":2.449489742783178},"29":{"tf":2.8284271247461903},"48":{"tf":2.6457513110645907},"60":{"tf":1.4142135623730951},"65":{"tf":1.0}}}}},"l":{"d":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"60":{"tf":1.0}}},"l":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"33":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":8,"docs":{"11":{"tf":1.4142135623730951},"18":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"21":{"tf":1.0},"33":{"tf":1.0},"35":{"tf":1.0},"5":{"tf":1.0},"71":{"tf":1.0}}}},"p":{"df":4,"docs":{"16":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"61":{"tf":1.0},"71":{"tf":1.7320508075688772}},"i":{"c":{"df":2,"docs":{"0":{"tf":1.0},"55":{"tf":1.0}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"10":{"tf":1.0}}}}},"t":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"56":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"u":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"a":{"c":{"df":0,"docs":{},"k":{"_":{"c":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"44":{"tf":1.0},"77":{"tf":1.0}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"11":{"tf":1.0},"38":{"tf":1.0},"48":{"tf":1.7320508075688772},"62":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"29":{"tf":1.0},"44":{"tf":1.0}}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":5,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"17":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951}}}},"n":{"df":0,"docs":{},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":6,"docs":{"42":{"tf":1.4142135623730951},"43":{"tf":1.0},"44":{"tf":2.23606797749979},"45":{"tf":2.6457513110645907},"48":{"tf":1.7320508075688772},"76":{"tf":2.449489742783178}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":1,"docs":{"76":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":1,"docs":{"76":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":8,"docs":{"18":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"42":{"tf":2.23606797749979},"44":{"tf":2.23606797749979},"45":{"tf":1.0},"48":{"tf":1.0},"60":{"tf":1.4142135623730951}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":2,"docs":{"14":{"tf":1.0},"20":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"73":{"tf":1.0}}}}}},"y":{"df":1,"docs":{"51":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":3,"docs":{"18":{"tf":1.0},"38":{"tf":1.0},"44":{"tf":1.0}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"df":1,"docs":{"71":{"tf":1.7320508075688772}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{"df":5,"docs":{"20":{"tf":1.0},"26":{"tf":1.4142135623730951},"35":{"tf":1.0},"45":{"tf":1.0},"76":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"0":{"tf":1.0}}}}}}},"df":10,"docs":{"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"23":{"tf":1.0},"25":{"tf":1.0},"30":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.0},"53":{"tf":1.4142135623730951},"73":{"tf":1.0},"8":{"tf":1.0}},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":7,"docs":{"10":{"tf":1.4142135623730951},"14":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"39":{"tf":1.0},"44":{"tf":1.0},"58":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"10":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"e":{"df":7,"docs":{"20":{"tf":1.0},"34":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"74":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":4,"docs":{"27":{"tf":1.0},"38":{"tf":1.0},"48":{"tf":1.0},"58":{"tf":1.0}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"1":{"tf":1.0}}}}}}},"w":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"k":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"e":{"df":5,"docs":{"21":{"tf":1.0},"30":{"tf":1.0},"34":{"tf":1.0},"44":{"tf":1.0},"65":{"tf":1.0}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"30":{"tf":1.4142135623730951}}}}},"o":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"73":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":18,"docs":{"15":{"tf":1.0},"18":{"tf":1.7320508075688772},"22":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"35":{"tf":1.0},"44":{"tf":1.4142135623730951},"51":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.4142135623730951},"57":{"tf":1.0},"61":{"tf":1.0},"66":{"tf":1.0},"73":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951},"75":{"tf":1.0},"76":{"tf":1.0}}}},"x":{"df":3,"docs":{"50":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"50":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"\"":{":":{"\"":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{".":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"p":{"2":{"5":{"6":{"df":0,"docs":{},"k":{"1":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"\"":{",":{"\"":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"\"":{":":{"\"":{"a":{"5":{"b":{"b":{"d":{"df":0,"docs":{},"h":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"/":{"4":{"df":0,"docs":{},"q":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"h":{"9":{"df":0,"docs":{},"h":{"9":{"+":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"j":{"df":0,"docs":{},"k":{"df":0,"docs":{},"v":{"df":0,"docs":{},"k":{"0":{"c":{"df":0,"docs":{},"o":{"3":{"1":{"df":0,"docs":{},"w":{"4":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"4":{"df":0,"docs":{},"p":{"5":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"52":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"5":{"df":0,"docs":{},"z":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"y":{"df":0,"docs":{},"v":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"5":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"z":{"7":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"df":0,"docs":{},"z":{"df":0,"docs":{},"u":{"0":{"c":{"df":0,"docs":{},"j":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"g":{"0":{"7":{"+":{"7":{"df":0,"docs":{},"g":{"d":{"a":{"a":{"df":0,"docs":{},"h":{"3":{"df":0,"docs":{},"u":{"df":0,"docs":{},"w":{"df":0,"docs":{},"g":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"2":{"df":0,"docs":{},"x":{"df":1,"docs":{"52":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"=":{"df":0,"docs":{},"v":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{",":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"e":{"=":{"\"":{"$":{"(":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"49":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"_":{"c":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{",":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"=":{"/":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"/":{"c":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"49":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}},"df":35,"docs":{"10":{"tf":3.605551275463989},"14":{"tf":2.449489742783178},"15":{"tf":2.23606797749979},"16":{"tf":1.0},"17":{"tf":1.7320508075688772},"18":{"tf":1.0},"19":{"tf":1.7320508075688772},"20":{"tf":2.6457513110645907},"22":{"tf":1.0},"23":{"tf":2.449489742783178},"24":{"tf":2.6457513110645907},"26":{"tf":1.7320508075688772},"29":{"tf":1.7320508075688772},"33":{"tf":1.4142135623730951},"35":{"tf":2.6457513110645907},"43":{"tf":1.0},"50":{"tf":1.7320508075688772},"51":{"tf":1.0},"52":{"tf":1.7320508075688772},"54":{"tf":1.0},"56":{"tf":2.6457513110645907},"57":{"tf":1.4142135623730951},"58":{"tf":3.1622776601683795},"59":{"tf":1.0},"60":{"tf":1.7320508075688772},"61":{"tf":1.4142135623730951},"62":{"tf":1.0},"63":{"tf":1.0},"70":{"tf":2.23606797749979},"73":{"tf":2.0},"74":{"tf":1.7320508075688772},"76":{"tf":1.4142135623730951},"77":{"tf":1.7320508075688772},"78":{"tf":1.4142135623730951},"9":{"tf":1.7320508075688772}}},"i":{"c":{"df":20,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"33":{"tf":1.0},"39":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":1.7320508075688772},"59":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}}}}},"u":{"1":{"2":{"8":{"df":2,"docs":{"29":{"tf":2.6457513110645907},"74":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"3":{"2":{"df":1,"docs":{"76":{"tf":1.0}}},"df":0,"docs":{}},"6":{"4":{"df":2,"docs":{"73":{"tf":1.0},"76":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"67":{"tf":1.0}}}}}},"n":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.0}}}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"50":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"24":{"tf":1.4142135623730951}}}},"s":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"77":{"tf":1.0}}}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"d":{"df":5,"docs":{"10":{"tf":1.0},"29":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"67":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":5,"docs":{"14":{"tf":1.0},"20":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"74":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":3,"docs":{"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951}}}}},"q":{"df":0,"docs":{},"u":{"df":4,"docs":{"18":{"tf":1.0},"20":{"tf":1.4142135623730951},"74":{"tf":1.0},"76":{"tf":2.0}}}},"t":{"df":3,"docs":{"17":{"tf":1.7320508075688772},"4":{"tf":1.0},"74":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":2,"docs":{"41":{"tf":1.0},"42":{"tf":1.0}}}}}}},"k":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"6":{"tf":1.0}},"e":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"13":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"w":{"1":{"_":{"df":0,"docs":{},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"6":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}},"df":6,"docs":{"11":{"tf":2.0},"12":{"tf":2.0},"13":{"tf":1.4142135623730951},"33":{"tf":2.0},"4":{"tf":1.4142135623730951},"6":{"tf":1.7320508075688772}}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":4,"docs":{"26":{"tf":1.0},"50":{"tf":1.0},"58":{"tf":1.4142135623730951},"61":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"k":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"62":{"tf":1.0}}}},"df":0,"docs":{}}}}},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"38":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":3,"docs":{"15":{"tf":1.0},"69":{"tf":1.0},"72":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"33":{"tf":1.0}}}}}}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"65":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"30":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"15":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"35":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":5,"docs":{"27":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"54":{"tf":1.7320508075688772},"72":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"77":{"tf":1.4142135623730951}}}},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":3,"docs":{"24":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}}}}},"df":9,"docs":{"18":{"tf":1.7320508075688772},"19":{"tf":1.4142135623730951},"20":{"tf":2.0},"21":{"tf":2.8284271247461903},"22":{"tf":2.449489742783178},"23":{"tf":2.449489742783178},"24":{"tf":3.1622776601683795},"26":{"tf":4.358898943540674},"29":{"tf":6.557438524302}}}},"df":0,"docs":{}}}},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":24,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":2.0},"22":{"tf":2.0},"23":{"tf":1.7320508075688772},"29":{"tf":1.4142135623730951},"32":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"42":{"tf":2.0},"43":{"tf":1.7320508075688772},"44":{"tf":2.23606797749979},"45":{"tf":1.0},"48":{"tf":1.0},"54":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951},"62":{"tf":1.7320508075688772},"67":{"tf":1.0},"70":{"tf":1.4142135623730951},"77":{"tf":2.23606797749979},"9":{"tf":1.0}},"e":{"_":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"57":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":2,"docs":{"54":{"tf":1.4142135623730951},"58":{"tf":1.0}}},"df":0,"docs":{}}}}},"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":8,"docs":{"29":{"tf":1.0},"4":{"tf":1.7320508075688772},"42":{"tf":1.0},"45":{"tf":1.0},"47":{"tf":1.0},"5":{"tf":1.0},"6":{"tf":1.0},"69":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":7,"docs":{"11":{"tf":1.4142135623730951},"19":{"tf":1.0},"35":{"tf":1.0},"4":{"tf":1.0},"5":{"tf":1.0},"50":{"tf":1.0},"62":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"24":{"tf":1.0}}},"df":0,"docs":{}}}},"s":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"10":{"tf":1.4142135623730951},"74":{"tf":1.0},"75":{"tf":1.4142135623730951}}}},"df":54,"docs":{"0":{"tf":1.0},"10":{"tf":2.449489742783178},"11":{"tf":1.7320508075688772},"14":{"tf":2.23606797749979},"15":{"tf":2.8284271247461903},"16":{"tf":2.449489742783178},"17":{"tf":2.6457513110645907},"18":{"tf":4.0},"19":{"tf":3.4641016151377544},"20":{"tf":5.291502622129181},"21":{"tf":4.358898943540674},"22":{"tf":4.123105625617661},"23":{"tf":4.795831523312719},"24":{"tf":4.0},"25":{"tf":1.0},"26":{"tf":4.898979485566356},"27":{"tf":1.4142135623730951},"28":{"tf":1.4142135623730951},"29":{"tf":6.855654600401044},"32":{"tf":2.0},"33":{"tf":3.872983346207417},"34":{"tf":2.449489742783178},"35":{"tf":2.449489742783178},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"47":{"tf":1.0},"48":{"tf":1.7320508075688772},"5":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.7320508075688772},"52":{"tf":1.0},"56":{"tf":2.449489742783178},"57":{"tf":1.4142135623730951},"58":{"tf":2.449489742783178},"59":{"tf":2.0},"60":{"tf":1.4142135623730951},"61":{"tf":1.0},"62":{"tf":1.4142135623730951},"63":{"tf":1.4142135623730951},"64":{"tf":1.7320508075688772},"67":{"tf":1.0},"69":{"tf":1.7320508075688772},"7":{"tf":1.4142135623730951},"70":{"tf":1.4142135623730951},"71":{"tf":1.7320508075688772},"72":{"tf":1.7320508075688772},"73":{"tf":2.0},"74":{"tf":4.0},"75":{"tf":2.0},"76":{"tf":1.4142135623730951},"77":{"tf":2.449489742783178},"78":{"tf":1.0},"9":{"tf":1.4142135623730951}},"e":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"34":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":8,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":2.23606797749979},"39":{"tf":1.0},"43":{"tf":1.0},"47":{"tf":1.0},"52":{"tf":1.0},"74":{"tf":1.0}}}},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"35":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":14,"docs":{"10":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.4142135623730951},"2":{"tf":1.0},"20":{"tf":1.0},"29":{"tf":1.7320508075688772},"33":{"tf":1.4142135623730951},"35":{"tf":1.0},"4":{"tf":1.0},"5":{"tf":2.0},"58":{"tf":1.0},"6":{"tf":1.0},"70":{"tf":1.0},"9":{"tf":1.0}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":7,"docs":{"10":{"tf":1.0},"13":{"tf":1.7320508075688772},"18":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.4142135623730951},"35":{"tf":1.0},"6":{"tf":1.0}}},"df":0,"docs":{}},"u":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"38":{"tf":1.0}}}},"df":0,"docs":{}},"df":18,"docs":{"15":{"tf":1.0},"20":{"tf":2.23606797749979},"22":{"tf":1.0},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":3.0},"35":{"tf":1.4142135623730951},"50":{"tf":1.0},"51":{"tf":1.4142135623730951},"53":{"tf":1.0},"54":{"tf":1.4142135623730951},"56":{"tf":1.4142135623730951},"58":{"tf":1.0},"59":{"tf":1.0},"73":{"tf":2.449489742783178},"74":{"tf":2.23606797749979},"77":{"tf":2.23606797749979},"78":{"tf":1.4142135623730951}}}},"r":{"df":0,"docs":{},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"18":{"tf":1.7320508075688772},"20":{"tf":1.0},"77":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":10,"docs":{"15":{"tf":3.4641016151377544},"21":{"tf":1.4142135623730951},"29":{"tf":1.0},"32":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"60":{"tf":2.23606797749979},"69":{"tf":1.0},"73":{"tf":1.0},"78":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"56":{"tf":1.0}}}}}}},"t":{"df":1,"docs":{"84":{"tf":1.4142135623730951}}}},"df":1,"docs":{"49":{"tf":1.0}},"e":{"c":{"!":{"[":{"\"":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"1":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":6,"docs":{"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":2,"docs":{"26":{"tf":1.0},"29":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":3,"docs":{"24":{"tf":1.0},"26":{"tf":1.7320508075688772},"29":{"tf":2.449489742783178}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"a":{"d":{"d":{"df":0,"docs":{},"r":{":":{":":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"d":{"(":{"\"":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"1":{"df":6,"docs":{"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"_":{"df":2,"docs":{"26":{"tf":1.0},"29":{"tf":1.7320508075688772}}},"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":7,"docs":{"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.0},"29":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"69":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":9,"docs":{"20":{"tf":1.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":2.23606797749979},"32":{"tf":1.4142135623730951},"33":{"tf":2.449489742783178},"69":{"tf":1.0}}}}}},"df":7,"docs":{"20":{"tf":1.0},"21":{"tf":2.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":2.0},"26":{"tf":2.8284271247461903},"29":{"tf":3.4641016151377544}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":5,"docs":{"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"65":{"tf":1.0},"72":{"tf":1.4142135623730951},"74":{"tf":2.23606797749979}}}}}},"df":0,"docs":{},"r":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"18":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":27,"docs":{"10":{"tf":1.4142135623730951},"11":{"tf":1.0},"14":{"tf":1.4142135623730951},"16":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"40":{"tf":1.4142135623730951},"42":{"tf":1.7320508075688772},"43":{"tf":1.0},"45":{"tf":1.0},"48":{"tf":2.0},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":1.4142135623730951},"58":{"tf":1.7320508075688772},"59":{"tf":1.4142135623730951},"60":{"tf":2.0},"61":{"tf":1.0},"62":{"tf":1.0},"70":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":1.0}},"f":{"df":1,"docs":{"26":{"tf":1.0}},"i":{"df":7,"docs":{"21":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"35":{"tf":1.0},"6":{"tf":1.7320508075688772},"78":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":12,"docs":{"14":{"tf":1.7320508075688772},"19":{"tf":1.7320508075688772},"20":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"29":{"tf":2.0},"33":{"tf":1.7320508075688772},"34":{"tf":1.0},"5":{"tf":1.0},"62":{"tf":2.449489742783178},"70":{"tf":1.7320508075688772},"71":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}}}}},"i":{"a":{"df":5,"docs":{"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"48":{"tf":1.0},"58":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"48":{"tf":1.4142135623730951}}}},"o":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"43":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"19":{"tf":1.0},"35":{"tf":1.0},"58":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":4,"docs":{"18":{"tf":1.4142135623730951},"33":{"tf":1.0},"42":{"tf":1.0},"58":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"u":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"44":{"tf":1.0},"55":{"tf":1.0}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":2,"docs":{"65":{"tf":1.7320508075688772},"66":{"tf":2.0}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"74":{"tf":1.0}}}}}}}},"w":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"61":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"39":{"tf":1.4142135623730951},"41":{"tf":1.0},"51":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"3":{"df":1,"docs":{"52":{"tf":1.4142135623730951}}},"df":4,"docs":{"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.7320508075688772},"54":{"tf":2.0}}}}}},"n":{"df":0,"docs":{},"t":{"df":32,"docs":{"12":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":2.0},"21":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.0},"36":{"tf":1.0},"4":{"tf":1.0},"40":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"45":{"tf":1.7320508075688772},"51":{"tf":1.4142135623730951},"53":{"tf":1.0},"54":{"tf":1.7320508075688772},"56":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"64":{"tf":1.4142135623730951},"65":{"tf":1.4142135623730951},"67":{"tf":1.0},"68":{"tf":1.4142135623730951},"69":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":2.0},"72":{"tf":1.0},"74":{"tf":1.0},"75":{"tf":1.0},"77":{"tf":1.0}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"44":{"tf":2.6457513110645907}},"n":{"df":0,"docs":{},"p":{"c":{"df":2,"docs":{"44":{"tf":2.449489742783178},"45":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"t":{"a":{"df":2,"docs":{"81":{"tf":1.0},"85":{"tf":1.0}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"m":{"\"":{")":{".":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":2,"docs":{"26":{"tf":1.0},"29":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},".":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":2.449489742783178}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"1":{"d":{"df":0,"docs":{},"k":{"6":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"0":{"7":{"8":{"6":{"df":0,"docs":{},"m":{"6":{"a":{"df":0,"docs":{},"y":{"df":0,"docs":{},"g":{"9":{"df":0,"docs":{},"k":{"d":{"0":{"df":0,"docs":{},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"y":{"df":0,"docs":{},"k":{"df":0,"docs":{},"x":{"df":0,"docs":{},"e":{"0":{"df":0,"docs":{},"n":{"6":{"df":0,"docs":{},"h":{"0":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"7":{"d":{"8":{"df":0,"docs":{},"t":{"df":1,"docs":{"52":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{},"n":{"5":{"df":0,"docs":{},"x":{"8":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"z":{"d":{"df":0,"docs":{},"z":{"df":0,"docs":{},"y":{"5":{"df":0,"docs":{},"j":{"df":0,"docs":{},"x":{"d":{"7":{"0":{"2":{"7":{"3":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"4":{"df":0,"docs":{},"z":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"r":{"df":0,"docs":{},"w":{"df":0,"docs":{},"x":{"0":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"v":{"7":{"df":0,"docs":{},"q":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"5":{"df":0,"docs":{},"g":{"df":0,"docs":{},"m":{"4":{"df":0,"docs":{},"v":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"q":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"2":{"4":{"df":0,"docs":{},"u":{"df":1,"docs":{"54":{"tf":2.23606797749979}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"u":{"0":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"x":{"df":0,"docs":{},"l":{"6":{"5":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"6":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"j":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"2":{"0":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"c":{"df":0,"docs":{},"p":{"df":0,"docs":{},"z":{"3":{"df":0,"docs":{},"j":{"df":0,"docs":{},"v":{"df":0,"docs":{},"j":{"df":0,"docs":{},"f":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"5":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"7":{"df":0,"docs":{},"l":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"u":{"d":{"3":{"df":0,"docs":{},"r":{"df":0,"docs":{},"h":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"n":{"df":0,"docs":{},"y":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":0,"docs":{},"q":{"df":0,"docs":{},"q":{"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"c":{"df":0,"docs":{},"x":{"6":{"df":2,"docs":{"51":{"tf":1.0},"53":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"m":{"5":{"9":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"k":{"d":{"df":0,"docs":{},"j":{"8":{"a":{"df":0,"docs":{},"y":{"df":0,"docs":{},"l":{"5":{"df":0,"docs":{},"g":{"df":0,"docs":{},"k":{"df":0,"docs":{},"n":{"df":1,"docs":{"54":{"tf":1.0}},"p":{"9":{"df":0,"docs":{},"p":{"df":0,"docs":{},"n":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"w":{"3":{"3":{"df":0,"docs":{},"v":{"4":{"0":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"5":{"df":0,"docs":{},"l":{"4":{"df":0,"docs":{},"n":{"df":0,"docs":{},"x":{"df":2,"docs":{"52":{"tf":1.0},"54":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"3":{"2":{"df":4,"docs":{"11":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"4":{"tf":1.0}}},"df":0,"docs":{}},"d":{"df":14,"docs":{"19":{"tf":1.4142135623730951},"25":{"tf":1.0},"4":{"tf":2.0},"46":{"tf":1.0},"47":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"50":{"tf":1.4142135623730951},"51":{"tf":1.0},"52":{"tf":2.0},"53":{"tf":1.0},"54":{"tf":2.8284271247461903},"60":{"tf":1.0},"63":{"tf":1.0},"7":{"tf":2.0}}},"df":21,"docs":{"10":{"tf":2.23606797749979},"11":{"tf":1.4142135623730951},"12":{"tf":2.449489742783178},"13":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"26":{"tf":2.23606797749979},"29":{"tf":2.449489742783178},"33":{"tf":2.23606797749979},"34":{"tf":1.4142135623730951},"35":{"tf":1.0},"4":{"tf":1.7320508075688772},"48":{"tf":1.0},"5":{"tf":1.0},"50":{"tf":1.7320508075688772},"51":{"tf":1.0},"53":{"tf":1.4142135623730951},"54":{"tf":2.23606797749979},"58":{"tf":1.4142135623730951},"6":{"tf":1.4142135623730951},"70":{"tf":1.0}},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":3,"docs":{"20":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0}}}}}}},"y":{"df":33,"docs":{"0":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.4142135623730951},"21":{"tf":1.4142135623730951},"24":{"tf":1.0},"25":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":2.0},"32":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"38":{"tf":1.0},"41":{"tf":1.7320508075688772},"42":{"tf":1.0},"43":{"tf":1.0},"45":{"tf":1.7320508075688772},"48":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.7320508075688772},"59":{"tf":1.4142135623730951},"65":{"tf":1.0},"67":{"tf":1.4142135623730951},"7":{"tf":1.0},"73":{"tf":1.4142135623730951},"74":{"tf":2.0}}}},"df":0,"docs":{},"e":{"'":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"21":{"tf":1.0}}}}},"b":{"df":1,"docs":{"9":{"tf":1.0}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"4":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":2,"docs":{"54":{"tf":2.0},"56":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"l":{"df":8,"docs":{"10":{"tf":1.0},"15":{"tf":1.0},"19":{"tf":1.4142135623730951},"22":{"tf":1.0},"38":{"tf":1.0},"58":{"tf":1.0},"61":{"tf":1.0},"78":{"tf":1.0}}}},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"14":{"tf":1.0},"22":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":3,"docs":{"20":{"tf":1.0},"56":{"tf":1.0},"61":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":2,"docs":{"66":{"tf":1.0},"72":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":2.0}}}}}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":22,"docs":{"10":{"tf":1.0},"15":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"36":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"43":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.0},"58":{"tf":1.4142135623730951},"59":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"71":{"tf":1.4142135623730951},"72":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.4142135623730951}}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":1,"docs":{"74":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"d":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"w":{"df":1,"docs":{"65":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":7,"docs":{"15":{"tf":1.4142135623730951},"18":{"tf":1.0},"22":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"73":{"tf":1.0}}}}},"df":0,"docs":{}},"r":{"d":{"df":1,"docs":{"74":{"tf":1.0}}},"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"35":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":25,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"20":{"tf":1.4142135623730951},"22":{"tf":1.0},"28":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"4":{"tf":1.7320508075688772},"42":{"tf":1.0},"43":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.0},"49":{"tf":1.0},"50":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"64":{"tf":1.0},"67":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.7320508075688772},"74":{"tf":1.0},"76":{"tf":1.7320508075688772},"77":{"tf":1.0},"78":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"39":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":1,"docs":{"71":{"tf":3.4641016151377544}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"l":{"d":{"\"":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":13,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"17":{"tf":1.4142135623730951},"18":{"tf":2.0},"19":{"tf":1.4142135623730951},"20":{"tf":2.0},"21":{"tf":2.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"29":{"tf":2.449489742783178}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":12,"docs":{"10":{"tf":1.0},"18":{"tf":1.0},"25":{"tf":1.0},"32":{"tf":1.0},"35":{"tf":1.0},"4":{"tf":1.0},"44":{"tf":1.4142135623730951},"48":{"tf":1.0},"51":{"tf":1.0},"58":{"tf":1.0},"67":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"i":{"df":6,"docs":{"36":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"59":{"tf":1.0},"61":{"tf":1.0},"65":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":6,"docs":{"11":{"tf":1.0},"33":{"tf":1.0},"41":{"tf":1.0},"57":{"tf":1.0},"62":{"tf":1.0},"76":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"n":{"'":{"df":0,"docs":{},"t":{"df":1,"docs":{"18":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"p":{"df":11,"docs":{"10":{"tf":1.0},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":2.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"26":{"tf":2.449489742783178},"29":{"tf":3.0},"44":{"tf":1.4142135623730951},"59":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"33":{"tf":1.0}}}}},"df":0,"docs":{}},"df":10,"docs":{"14":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"29":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":1.0},"54":{"tf":1.0},"74":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"42":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"17":{"tf":1.0}}}}}}},"y":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"17":{"tf":1.0}}}},"df":3,"docs":{"50":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.4142135623730951}},"e":{"df":1,"docs":{"48":{"tf":1.0}},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"51":{"tf":1.0}}}}}},"z":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":2,"docs":{"41":{"tf":1.0},"56":{"tf":1.0}}}}}}}},"title":{"root":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"40":{"tf":1.0},"41":{"tf":1.0},"54":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":5,"docs":{"36":{"tf":1.0},"37":{"tf":1.0},"39":{"tf":1.0},"47":{"tf":1.0},"55":{"tf":1.0}}}}}},"d":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"52":{"tf":1.0}}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"68":{"tf":1.0}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"12":{"tf":1.0}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"2":{"tf":1.0}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"25":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"8":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"37":{"tf":1.0}}},"df":0,"docs":{}}}}},"l":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"18":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"47":{"tf":1.0},"48":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"3":{"tf":1.0}}}},"x":{"df":1,"docs":{"18":{"tf":1.0}}}},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":2,"docs":{"11":{"tf":1.0},"12":{"tf":1.0}}},"df":0,"docs":{}}}}},"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.0}}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"13":{"tf":1.0},"5":{"tf":1.0}}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"69":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"50":{"tf":1.0}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"12":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"83":{"tf":1.0}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"64":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"49":{"tf":1.0}}}}}},"n":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"46":{"tf":1.0}}}}}},"df":0,"docs":{},"t":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"82":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"85":{"tf":1.0}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":12,"docs":{"11":{"tf":1.0},"13":{"tf":1.0},"16":{"tf":1.0},"18":{"tf":1.0},"20":{"tf":1.0},"49":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"64":{"tf":1.0},"68":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"3":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"s":{"df":0,"docs":{},"g":{"df":1,"docs":{"60":{"tf":1.0}}}}}}},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":3,"docs":{"2":{"tf":1.0},"5":{"tf":1.0},"52":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"14":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"64":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"24":{"tf":1.0}}}}}}}},"d":{"a":{"df":0,"docs":{},"t":{"a":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"48":{"tf":1.0}}}},"df":0,"docs":{}},"df":2,"docs":{"25":{"tf":1.0},"27":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"28":{"tf":1.0}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"65":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"81":{"tf":1.0}}}}}},"df":0,"docs":{}}},"s":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"34":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"o":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"2":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":3,"docs":{"10":{"tf":1.0},"34":{"tf":1.0},"58":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"4":{"tf":1.0}}}}}}}},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"23":{"tf":1.0},"24":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"25":{"tf":1.0},"26":{"tf":1.0}}}},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"44":{"tf":1.0}}}}}}}},"x":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"22":{"tf":1.0},"54":{"tf":1.0}}}}},"df":0,"docs":{}}}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"x":{"df":1,"docs":{"68":{"tf":1.0}}}},"l":{"df":0,"docs":{},"o":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"35":{"tf":1.0}}}},"df":0,"docs":{},"w":{"df":1,"docs":{"44":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"67":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"28":{"tf":1.0}}},"df":0,"docs":{}}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"70":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"31":{"tf":1.0}}},"df":0,"docs":{}}}},"h":{"a":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":3,"docs":{"23":{"tf":1.0},"45":{"tf":1.0},"61":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"i":{"d":{"df":0,"docs":{},"e":{"a":{"df":1,"docs":{"37":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":1,"docs":{"15":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"79":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"6":{"tf":1.0}}},"n":{"c":{"df":1,"docs":{"51":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":1,"docs":{"19":{"tf":1.0}},"t":{"df":1,"docs":{"0":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"j":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"77":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"32":{"tf":1.0},"33":{"tf":1.0}}}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"75":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"79":{"tf":1.0}}}},"df":0,"docs":{}}},"i":{"b":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"34":{"tf":1.0},"70":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"m":{"a":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"81":{"tf":1.0}}}},"df":0,"docs":{}},"p":{"df":3,"docs":{"72":{"tf":1.0},"73":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":5,"docs":{"15":{"tf":1.0},"22":{"tf":1.0},"29":{"tf":1.0},"57":{"tf":1.0},"67":{"tf":1.0}}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"62":{"tf":1.0}}}},"df":0,"docs":{}}}},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"36":{"tf":1.0},"37":{"tf":1.0}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"24":{"tf":1.0},"41":{"tf":1.0}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"19":{"tf":1.0}}}}}}}}}}},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"84":{"tf":1.0}}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"70":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"54":{"tf":1.0}}}}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"30":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.0},"58":{"tf":1.0}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"31":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"1":{"tf":1.0}}}}}}}}},"o":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"38":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"66":{"tf":1.0}}}}}},"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"71":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}}},"v":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"80":{"tf":1.0}}},"df":0,"docs":{}}}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":6,"docs":{"14":{"tf":1.0},"17":{"tf":1.0},"43":{"tf":1.0},"53":{"tf":1.0},"69":{"tf":1.0},"78":{"tf":1.0}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"75":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"83":{"tf":1.0}}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"32":{"tf":1.0}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"61":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"45":{"tf":1.0},"85":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"26":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"9":{"tf":1.0}}}}}},"s":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":1,"docs":{"33":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"59":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":2,"docs":{"4":{"tf":1.0},"74":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"55":{"tf":1.0}}}}},"df":0,"docs":{}},"t":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":1,"docs":{"41":{"tf":1.0}}}},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"7":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":4,"docs":{"20":{"tf":1.0},"21":{"tf":1.0},"42":{"tf":1.0},"56":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"72":{"tf":1.0},"73":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"16":{"tf":1.0},"71":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"u":{"b":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"59":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"d":{"df":0,"docs":{},"o":{"df":1,"docs":{"63":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"17":{"tf":1.0},"21":{"tf":1.0},"24":{"tf":1.0},"78":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":2,"docs":{"76":{"tf":1.0},"77":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"44":{"tf":1.0}}}}}}},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"30":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"35":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"p":{"df":2,"docs":{"4":{"tf":1.0},"69":{"tf":1.0}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"5":{"tf":1.0}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"13":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"df":1,"docs":{"84":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"6":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"66":{"tf":1.0}}}}}},"w":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"d":{"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}}},"y":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"76":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"lang":"English","pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5"},"results_options":{"limit_results":30,"teaser_word_count":30},"search_options":{"bool":"OR","expand":true,"fields":{"body":{"boost":1},"breadcrumbs":{"boost":1},"title":{"boost":2}}}} \ No newline at end of file diff --git a/setting-up-env.html b/setting-up-env.html new file mode 100644 index 0000000..6eb756d --- /dev/null +++ b/setting-up-env.html @@ -0,0 +1,233 @@ + + + + + + Setting up the environment - CosmWasm book + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+
+

Setting up the environment

+

To work with CosmWasm smart contract, you will need rust installed on your +machine. If you don't have one, you can find installation instructions on the +Rust website.

+

I assume you are working with a stable Rust channel in this book.

+

Additionally, you will need the Wasm rust compiler backend installed to build +Wasm binaries. To install it, run:

+
rustup target add wasm32-unknown-unknown
+
+

Optionally if you want to try out your contracts on a testnet, you will need a +wasmd binary. We would focus on testing +contracts with Rust unit testing utility throughout the book, so it is not +required to follow. However, seeing the product working in a real-world +environment may be nice.

+

To install wasmd, first install the golang. Then +clone the wasmd and install it:

+
$ git clone git@github.com:CosmWasm/wasmd.git
+$ cd ./wasmd
+$ make install
+
+

Also, to be able to upload Rust Wasm Contracts into the blockchain, you will need +to install docker. To minimize your contract sizes, +it will be required to run CosmWasm Rust Optimizer; without that, more complex +contracts might exceed a size limit.

+

cosmwasm-check utility

+

An additional helpful tool for building smart contracts is the cosmwasm-checkutility. It allows you to check if the wasm binary is a proper smart contract ready to upload into the blockchain. You can install it using cargo:

+
$ cargo install cosmwasm-check
+
+

If the installation succeeds, you should be able to execute the utility from your command line.

+
$ cosmwasm-check --version
+Contract checking 1.2.3
+
+

Verifying the installation

+

To guarantee you are ready to build your smart contracts, you need to make sure you can build examples. +Checkout the cw-plus repository and run the testing command in +its folder:

+
$ git clone git@github.com:CosmWasm/cw-plus.git
+$ cd ./cw-plus
+cw-plus $ cargo test
+
+

You should see that everything in the repository gets compiled, and all tests pass.

+

cw-plus is a great place to find example contracts - look for them in contracts directory. The +repository is maintained by CosmWasm creators, so contracts in there should follow good practices.

+

To verify the cosmwasm-check utility, first, you need to build a smart contract. Go to some contract directory, for example, contracts/cw1-whitelist, and call cargo wasm:

+
cw-plus $ cd contracts/cw1-whitelist
+cw-plus/contracts/cw1-whitelist $ cargo wasm
+
+

You should be able to find your output binary in the target/wasm32-unknown-unknown/release/ +of the root repo directory - not in the contract directory itself! Now you can check if contract +validation passes:

+
cw-plus/contracts/cw1-whitelist $ cosmwasm-check ../../target/wasm32-unknown-unknown/release/cw1_whitelist.wasm
+Available capabilities: {"iterator", "cosmwasm_1_1", "cosmwasm_1_2", "stargate", "staking"}
+
+../../target/wasm32-unknown-unknown/release/cw1_whitelist.wasm: pass
+
+All contracts (1) passed checks!
+
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + diff --git a/tomorrow-night.css b/tomorrow-night.css new file mode 100644 index 0000000..f719792 --- /dev/null +++ b/tomorrow-night.css @@ -0,0 +1,104 @@ +/* Tomorrow Night Theme */ +/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ +/* Original theme - https://github.com/chriskempson/tomorrow-theme */ +/* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ + +/* Tomorrow Comment */ +.hljs-comment { + color: #969896; +} + +/* Tomorrow Red */ +.hljs-variable, +.hljs-attribute, +.hljs-tag, +.hljs-regexp, +.ruby .hljs-constant, +.xml .hljs-tag .hljs-title, +.xml .hljs-pi, +.xml .hljs-doctype, +.html .hljs-doctype, +.css .hljs-id, +.css .hljs-class, +.css .hljs-pseudo { + color: #cc6666; +} + +/* Tomorrow Orange */ +.hljs-number, +.hljs-preprocessor, +.hljs-pragma, +.hljs-built_in, +.hljs-literal, +.hljs-params, +.hljs-constant { + color: #de935f; +} + +/* Tomorrow Yellow */ +.ruby .hljs-class .hljs-title, +.css .hljs-rule .hljs-attribute { + color: #f0c674; +} + +/* Tomorrow Green */ +.hljs-string, +.hljs-value, +.hljs-inheritance, +.hljs-header, +.hljs-name, +.ruby .hljs-symbol, +.xml .hljs-cdata { + color: #b5bd68; +} + +/* Tomorrow Aqua */ +.hljs-title, +.css .hljs-hexcolor { + color: #8abeb7; +} + +/* Tomorrow Blue */ +.hljs-function, +.python .hljs-decorator, +.python .hljs-title, +.ruby .hljs-function .hljs-title, +.ruby .hljs-title .hljs-keyword, +.perl .hljs-sub, +.javascript .hljs-title, +.coffeescript .hljs-title { + color: #81a2be; +} + +/* Tomorrow Purple */ +.hljs-keyword, +.javascript .hljs-function { + color: #b294bb; +} + +.hljs { + display: block; + overflow-x: auto; + background: #1d1f21; + color: #c5c8c6; + padding: 0.5em; + -webkit-text-size-adjust: none; +} + +.coffeescript .javascript, +.javascript .xml, +.tex .hljs-formula, +.xml .javascript, +.xml .vbscript, +.xml .css, +.xml .hljs-cdata { + opacity: 0.5; +} + +.hljs-addition { + color: #718c00; +} + +.hljs-deletion { + color: #c82829; +} diff --git a/wasmd-quick-start.html b/wasmd-quick-start.html new file mode 100644 index 0000000..916a4f7 --- /dev/null +++ b/wasmd-quick-start.html @@ -0,0 +1,183 @@ + + + + + + Quick start with wasmd - CosmWasm book + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+
+

Quick start with wasmd

+

In the past, we suggested playing with contracts on the malaga testnet using wasmd. +Now malaga is no longer operative, and the best way to test the contract in the +real environment is to use one of the big CosmWasm chains testnets - Osmosis, Juno, +Terra, or other ones. +Here is the +recommended introduction on how to start with the Osmosis testnet.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + +