From 2da9c05adae6ea9e8f227e7a7c39753982b71fec Mon Sep 17 00:00:00 2001 From: Elliot Date: Wed, 22 Jul 2026 09:37:21 -0400 Subject: [PATCH 1/5] Rails 8 (#1132) * Regression tests * Incorporate rails 7.2 defaults * Rails 8.0.5 upgrade * Bump rails to ~> 8.1.0 (resolves to 8.1.3) * Gem updates for Rails 8 compatability * Adjustment for Arel NamedFunction API change in rails 8, test coverage * Restore log file size limits * Update comment on Regexp.timeout with source * Make note of decisions; remove minitest gem that isn't used --- Gemfile | 5 +- Gemfile.lock | 236 +++++++++--------- app/controllers/concerns/arel_helper.rb | 7 +- config/application.rb | 50 +--- .../new_framework_defaults_7_2.rb | 76 ------ public/400.html | 114 +++++++++ spec/helpers/application_helper_spec.rb | 74 ++++++ spec/models/concerns/arel_helper_spec.rb | 46 ++++ .../models/free_text_regex_regression_spec.rb | 83 ++++++ spec/requests/account_passwords_spec.rb | 53 ++++ .../notifications/subscriber_auth_spec.rb | 42 ++++ spec/requests/users/invitations_spec.rb | 55 ++++ spec/requests/users/sessions_spec.rb | 87 +++++++ 13 files changed, 688 insertions(+), 240 deletions(-) delete mode 100644 config/initializers/new_framework_defaults_7_2.rb create mode 100644 public/400.html create mode 100644 spec/helpers/application_helper_spec.rb create mode 100644 spec/models/concerns/arel_helper_spec.rb create mode 100644 spec/models/free_text_regex_regression_spec.rb create mode 100644 spec/requests/account_passwords_spec.rb create mode 100644 spec/requests/notifications/subscriber_auth_spec.rb create mode 100644 spec/requests/users/invitations_spec.rb create mode 100644 spec/requests/users/sessions_spec.rb diff --git a/Gemfile b/Gemfile index eb92d048e..eca38e73c 100644 --- a/Gemfile +++ b/Gemfile @@ -4,7 +4,7 @@ source 'https://rubygems.org' gem 'activerecord-import' gem 'rack', '< 3.2' # pinning to the same max version as is required by rails 7.2 gem 'pg', '~> 1.1' -gem 'rails', '7.2.3.1' +gem 'rails', '~> 8.1.0' gem 'sprockets-rails' gem 'jsbundling-rails' gem 'rails-html-sanitizer' @@ -128,7 +128,7 @@ gem 'auto-session-timeout' gem 'ruby_parser', require: false gem 'caxlsx' -gem 'caxlsx_rails' +gem 'caxlsx_rails', '>= 0.7.1' # 0.7.1+ restores `render xlsx: 'template'` resolution under Rails 8 (0.6.x relied on Rails defaulting options[:template] to the action name) gem 'xlsxtream', require: false # NOTE: maybe https://github.com/weshatheleopard/rubyXL gem 'roo' @@ -187,7 +187,6 @@ group :test do gem 'rspec-rails' gem 'factory_bot_rails' gem 'capybara' - gem 'minitest-reporters' gem 'rails-controller-testing' gem 'rspec-mocks' gem 'shoulda-matchers' diff --git a/Gemfile.lock b/Gemfile.lock index 5f0e35d40..88c839d9a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -19,49 +19,49 @@ GEM remote: https://rubygems.org/ specs: StreetAddress (2.0.0) - actioncable (7.2.3.1) - actionpack (= 7.2.3.1) - activesupport (= 7.2.3.1) + action_text-trix (2.1.19) + railties + actioncable (8.1.3) + actionpack (= 8.1.3) + activesupport (= 8.1.3) nio4r (~> 2.0) websocket-driver (>= 0.6.1) zeitwerk (~> 2.6) - actionmailbox (7.2.3.1) - actionpack (= 7.2.3.1) - activejob (= 7.2.3.1) - activerecord (= 7.2.3.1) - activestorage (= 7.2.3.1) - activesupport (= 7.2.3.1) + actionmailbox (8.1.3) + actionpack (= 8.1.3) + activejob (= 8.1.3) + activerecord (= 8.1.3) + activestorage (= 8.1.3) + activesupport (= 8.1.3) mail (>= 2.8.0) - actionmailer (7.2.3.1) - actionpack (= 7.2.3.1) - actionview (= 7.2.3.1) - activejob (= 7.2.3.1) - activesupport (= 7.2.3.1) + actionmailer (8.1.3) + actionpack (= 8.1.3) + actionview (= 8.1.3) + activejob (= 8.1.3) + activesupport (= 8.1.3) mail (>= 2.8.0) rails-dom-testing (~> 2.2) - actionpack (7.2.3.1) - actionview (= 7.2.3.1) - activesupport (= 7.2.3.1) - cgi + actionpack (8.1.3) + actionview (= 8.1.3) + activesupport (= 8.1.3) nokogiri (>= 1.8.5) - racc - rack (>= 2.2.4, < 3.3) + rack (>= 2.2.4) rack-session (>= 1.0.1) rack-test (>= 0.6.3) rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) useragent (~> 0.16) - actiontext (7.2.3.1) - actionpack (= 7.2.3.1) - activerecord (= 7.2.3.1) - activestorage (= 7.2.3.1) - activesupport (= 7.2.3.1) + actiontext (8.1.3) + action_text-trix (~> 2.1.15) + actionpack (= 8.1.3) + activerecord (= 8.1.3) + activestorage (= 8.1.3) + activesupport (= 8.1.3) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (7.2.3.1) - activesupport (= 7.2.3.1) + actionview (8.1.3) + activesupport (= 8.1.3) builder (~> 3.1) - cgi erubi (~> 1.11) rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) @@ -69,14 +69,14 @@ GEM activerecord (>= 6.1) active_record_query_trace (1.9) activerecord (>= 6.0.0) - activejob (7.2.3.1) - activesupport (= 7.2.3.1) + activejob (8.1.3) + activesupport (= 8.1.3) globalid (>= 0.3.6) - activemodel (7.2.3.1) - activesupport (= 7.2.3.1) - activerecord (7.2.3.1) - activemodel (= 7.2.3.1) - activesupport (= 7.2.3.1) + activemodel (8.1.3) + activesupport (= 8.1.3) + activerecord (8.1.3) + activemodel (= 8.1.3) + activesupport (= 8.1.3) timeout (>= 0.4.0) activerecord-import (2.2.0) activerecord (>= 4.2) @@ -86,24 +86,25 @@ GEM cgi (>= 0.3.6) rack (>= 2.0.8, < 4) railties (>= 7.0) - activestorage (7.2.3.1) - actionpack (= 7.2.3.1) - activejob (= 7.2.3.1) - activerecord (= 7.2.3.1) - activesupport (= 7.2.3.1) + activestorage (8.1.3) + actionpack (= 8.1.3) + activejob (= 8.1.3) + activerecord (= 8.1.3) + activesupport (= 8.1.3) marcel (~> 1.0) - activesupport (7.2.3.1) + activesupport (8.1.3) base64 - benchmark (>= 0.3) bigdecimal concurrent-ruby (~> 1.0, >= 1.3.1) connection_pool (>= 2.2.5) drb i18n (>= 1.6, < 2) + json logger (>= 1.4.2) - minitest (>= 5.1, < 6) + minitest (>= 5.1) securerandom (>= 0.3) tzinfo (~> 2.0, >= 2.0.5) + uri (>= 0.13.1) addressable (2.9.0) public_suffix (>= 2.0.2, < 8.0) airbrussh (1.6.1) @@ -111,7 +112,6 @@ GEM ajax_modal_rails (1.0.12) rails (>= 4) amazing_print (2.0.0) - ansi (1.5.0) anyway_config (2.8.0) ruby-next-core (~> 1.0) ast (2.4.3) @@ -238,15 +238,15 @@ GEM rack-test (>= 0.6.3) regexp_parser (>= 1.5, < 3.0) xpath (~> 3.2) - caxlsx (4.4.2) + caxlsx (4.5.0) htmlentities (~> 4.3, >= 4.3.4) marcel (~> 1.0) nokogiri (~> 1.10, >= 1.10.4) rubyzip (>= 2.4, < 4) - caxlsx_rails (0.6.4) - actionpack (>= 3.1) - caxlsx (>= 3.0) - cgi (0.5.1) + caxlsx_rails (0.7.2) + actionpack (>= 6.1) + caxlsx (>= 4.0) + cgi (0.5.2) childprocess (5.1.0) logger (~> 1.5) chronic (0.10.2) @@ -343,7 +343,7 @@ GEM geocoder (1.8.6) base64 (>= 0.1.0) csv (>= 3.0.0) - globalid (1.3.0) + globalid (1.4.0) activesupport (>= 6.1) haml (7.2.0) temple (>= 0.8.2) @@ -365,12 +365,12 @@ GEM nokogiri (>= 1.6.0) ruby_parser (~> 3.5) htmlentities (4.4.2) - i18n (1.14.8) + i18n (1.15.2) concurrent-ruby (~> 1.0) ice_nine (0.11.2) iniparse (1.5.0) io-console (0.8.2) - irb (1.17.0) + irb (1.18.0) pp (>= 0.6.0) prism (>= 1.3.0) rdoc (>= 4.0.0) @@ -382,7 +382,7 @@ GEM thor (>= 0.14, < 2.0) jsbundling-rails (1.3.1) railties (>= 6.0.0) - json (2.20.0) + json (2.21.1) jsonpath (1.1.5) multi_json kaminari (1.2.2) @@ -410,25 +410,22 @@ GEM loofah (2.25.1) crass (~> 1.0.2) nokogiri (>= 1.12.0) - mail (2.9.0) + mail (2.9.1) logger mini_mime (>= 0.1.1) net-imap net-pop net-smtp - marcel (1.1.0) + marcel (1.2.1) matrix (0.4.3) maxminddb (0.1.22) memery (1.8.0) method_source (1.1.0) mini_mime (1.1.5) mini_portile2 (2.8.9) - minitest (5.27.0) - minitest-reporters (1.7.1) - ansi - builder - minitest (>= 5.0) - ruby-progressbar + minitest (6.0.6) + drb (~> 2.0) + prism (~> 1.5) msgpack (1.8.3) multi_json (1.21.1) mutex_m (0.3.0) @@ -475,7 +472,7 @@ GEM racc pg (1.6.3) pg (1.6.3-arm64-darwin) - pp (0.6.3) + pp (0.6.4) prettyprint pretender (0.6.0) actionpack (>= 7.1) @@ -492,9 +489,6 @@ GEM pry (>= 0.13, < 0.17) pry-rails (0.3.11) pry (>= 0.13.0) - psych (5.3.1) - date - stringio public_suffix (7.0.5) puma (8.0.2) nio4r (~> 2.0) @@ -512,20 +506,20 @@ GEM rack (>= 1.3) rackup (2.3.1) rack (>= 3) - rails (7.2.3.1) - actioncable (= 7.2.3.1) - actionmailbox (= 7.2.3.1) - actionmailer (= 7.2.3.1) - actionpack (= 7.2.3.1) - actiontext (= 7.2.3.1) - actionview (= 7.2.3.1) - activejob (= 7.2.3.1) - activemodel (= 7.2.3.1) - activerecord (= 7.2.3.1) - activestorage (= 7.2.3.1) - activesupport (= 7.2.3.1) + rails (8.1.3) + actioncable (= 8.1.3) + actionmailbox (= 8.1.3) + actionmailer (= 8.1.3) + actionpack (= 8.1.3) + actiontext (= 8.1.3) + actionview (= 8.1.3) + activejob (= 8.1.3) + activemodel (= 8.1.3) + activerecord (= 8.1.3) + activestorage (= 8.1.3) + activesupport (= 8.1.3) bundler (>= 1.15.0) - railties (= 7.2.3.1) + railties (= 8.1.3) rails-controller-testing (1.0.5) actionpack (>= 5.0.1.rc1) actionview (>= 5.0.1.rc1) @@ -537,10 +531,9 @@ GEM rails-html-sanitizer (1.7.0) loofah (~> 2.25) nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0) - railties (7.2.3.1) - actionpack (= 7.2.3.1) - activesupport (= 7.2.3.1) - cgi + railties (8.1.3) + actionpack (= 8.1.3) + activesupport (= 8.1.3) irb (~> 1.13) rackup (>= 1.0.0) rake (>= 12.2) @@ -548,10 +541,15 @@ GEM tsort (>= 0.2) zeitwerk (~> 2.6) rainbow (3.1.1) - rake (13.3.1) - rdoc (7.2.0) + rake (13.4.2) + rbs (4.0.3) + logger + prism (>= 1.6.0) + tsort + rdoc (8.0.0) erb - psych (>= 4.0.0) + prism (>= 1.6.0) + rbs (>= 4.0.0) tsort recursive-open-struct (1.3.1) ostruct @@ -629,7 +627,7 @@ GEM ruby_parser (3.22.0) racc (~> 1.5) sexp_processor (~> 4.16) - rubyzip (3.2.2) + rubyzip (3.4.1) sassc (2.4.0) ffi (~> 1.9) securerandom (0.4.1) @@ -662,7 +660,6 @@ GEM net-sftp (>= 2.1.2) net-ssh (>= 2.8.0) ostruct - stringio (3.2.0) temple (0.10.4) terser (1.2.7) execjs (>= 0.3.0, < 3) @@ -779,7 +776,7 @@ DEPENDENCIES capistrano-rvm capybara caxlsx - caxlsx_rails + caxlsx_rails (>= 0.7.1) coffee-rails connection_pool (~> 2.4) csv @@ -814,7 +811,6 @@ DEPENDENCIES maxminddb memery mini_portile2 - minitest-reporters mutex_m net-http nokogiri @@ -832,7 +828,7 @@ DEPENDENCIES rack (< 3.2) rack-attack rack-mini-profiler - rails (= 7.2.3.1) + rails (~> 8.1.0) rails-controller-testing rails-html-sanitizer rdoc @@ -873,26 +869,26 @@ DEPENDENCIES CHECKSUMS StreetAddress (2.0.0) sha256=742c2f57238634000ef09ae19b586ec107cd8755fdb9835c1e764fe27cdcb64b - actioncable (7.2.3.1) sha256=d3bf40a3f4fc79a09709878f0e5c43a5e2d8e6607089f6b38f9472b8715eb33c - actionmailbox (7.2.3.1) sha256=a4e73480c97ab2fff5a416f92c54b065b1a6564ea4a807d42e0b83a94d4ec541 - actionmailer (7.2.3.1) sha256=f578b6d5c5f81a20b6f6a796187698890c8348c041daa5e2e7cf7814ac520467 - actionpack (7.2.3.1) sha256=b66afe7f937273270cb63f03bde7af7ba850017867766e8848d06d3e12e1e4ca - actiontext (7.2.3.1) sha256=5b1418f407ea347b98084a62b9b6caa1d3b1eb482d18dbbb69fad43f242843e3 - actionview (7.2.3.1) sha256=de19b86843391762ac24a6287c30fbba11cd475fa4d4b664924d5fb7a2f1ff7c + action_text-trix (2.1.19) sha256=7012f59421009cf284aa651294896414d653a61a2417c9b8714c8476d2f74009 + actioncable (8.1.3) sha256=e5bc7f75e44e6a22de29c4f43176927c3a9ce4824464b74ed18d8226e75a80f0 + actionmailbox (8.1.3) sha256=df7da474eaa0e70df4ed5a6fef66eb3b3b0f2dbf7f14518deee8d77f1b4aae59 + actionmailer (8.1.3) sha256=831f724891bb70d0aaa4d76581a6321124b6a752cb655c9346aae5479318448d + actionpack (8.1.3) sha256=af998cae4d47c5d581a2cc363b5c77eb718b7c4b45748d81b1887b25621c29a3 + actiontext (8.1.3) sha256=d291019c00e1ea9e6463011fa214f6081a56d7b9a1d224e7d3f6384c1dafc7d2 + actionview (8.1.3) sha256=1347c88c7f3edb38100c5ce0e9fb5e62d7755f3edc1b61cce2eb0b2c6ea2fd5d active_record_distinct_on (1.10.0) sha256=a4b2f0f6a014d992ac5df233ab7152d0abc12c7795744f7b35102e0c529ab76d active_record_query_trace (1.9) sha256=7bfc2801babb3b4c075bc2d640681f71880bddb903074a634d8bd42c3c5fd7eb - activejob (7.2.3.1) sha256=0bc4227ce371b82da119cd27ed91e0deb9b744bbfa266b86e4bd8d1e2a8f6ed8 - activemodel (7.2.3.1) sha256=39e1869b85e7a0b64a8ccddf19f3fb0c44261b329785384bb88f878eab51c0d0 - activerecord (7.2.3.1) sha256=b89513e275da5b34183c5f2a497c154b02dcc7c811d399ab557e67e36170a05d + activejob (8.1.3) sha256=a149b1766aa8204c3c3da7309e4becd40fcd5529c348cffbf6c9b16b565fe8d3 + activemodel (8.1.3) sha256=90c05cbe4cef3649b8f79f13016191ea94c4525ce4a5c0fb7ef909c4b91c8219 + activerecord (8.1.3) sha256=8003be7b2466ba0a2a670e603eeb0a61dd66058fccecfc49901e775260ac70ab activerecord-import (2.2.0) sha256=f8ca99b196e50775723d1f1d192c379f656378dc9f5628240992a0d78807fa4b activerecord-session_store (2.2.0) sha256=65918054573683bf4f87af89e765e1fece14c9d71cfac1f11abe4687c96e2743 - activestorage (7.2.3.1) sha256=0b224ea42e6256d3e33768bdccad8e3c9110a5140fc9faf98bde8873dd5dffab - activesupport (7.2.3.1) sha256=11ebed516a43a0bb47346227a35ebae4d9427465a7c9eb197a03d5c8d283cb34 + activestorage (8.1.3) sha256=0564ce9309143951a67615e1bb4e090ee54b8befed417133cae614479b46384d + activesupport (8.1.3) sha256=21a5e0dfbd4c3ddd9e1317ec6a4d782fa226e7867dc70b0743acda81a1dca20e addressable (2.9.0) sha256=7fdf6ac3660f7f4e867a0838be3f6cf722ace541dd97767fa42bc6cfa980c7af airbrussh (1.6.1) sha256=9a5fc95583cefe722054a016d26ff0338cf00072b031b829086dde2039d5836a ajax_modal_rails (1.0.12) sha256=d386142f420d83d6d2fc2253ff98e3e80233caf0613a5235e989af679afb436d amazing_print (2.0.0) sha256=2e36aba46ac78d37ed27ca0e2056afe3583183bb5c64f157c246b267355e5d6a - ansi (1.5.0) sha256=5408253274e33d9d27d4a98c46d2998266fd51cba58a7eb9d08f50e57ed23592 anyway_config (2.8.0) sha256=f6797a7231f81202dcd3d0c07284e836e45713e761d320180348b13a5c7c9306 ast (2.4.3) sha256=954615157c1d6a382bc27d690d973195e79db7f55e9765ac7c481c60bdb4d383 attribute_normalizer (1.2.0) sha256=580df3f316d7f0a2cc068fd655377f4769848643328d0c6c6c685ea98ac181c4 @@ -941,9 +937,9 @@ CHECKSUMS capistrano-rails (1.7.0) sha256=aca57455e8c5435785e0f938e16aa5b79c263694a755e1dca1c5d1743b40aae7 capistrano-rvm (0.1.2) sha256=4adb7ffd98d2c1335b597b063e1e6cafd9dd2d6ecc9d358bf78100aad8475e97 capybara (3.40.0) sha256=42dba720578ea1ca65fd7a41d163dd368502c191804558f6e0f71b391054aeef - caxlsx (4.4.2) sha256=41bb1141eb083f2f72e0a34db85684a2ec48d38fed4c1ff20c1525c47cdc93eb - caxlsx_rails (0.6.4) sha256=27e1ebb4617473f49a7956214e352b485beb080d590769ef5a826c410c7d2276 - cgi (0.5.1) sha256=e93fcafc69b8a934fe1e6146121fa35430efa8b4a4047c4893764067036f18e9 + caxlsx (4.5.0) sha256=e3d98d859f148df05d5462086b5079b523f29c1766b569535f1d68629ce743ff + caxlsx_rails (0.7.2) sha256=c7169c96a878a4548568f04742734c59826e3e473894867781796c2e13d1f52a + cgi (0.5.2) sha256=61ca30298171190fd4fa0d8018e57ada456eae9b7a2b78526debf7f0a0e6f8bb childprocess (5.1.0) sha256=9a8d484be2fd4096a0e90a0cd3e449a05bc3aa33f8ac9e4d6dcef6ac1455b6ec chronic (0.10.2) sha256=766f2fcce6ac3cc152249ed0f2b827770d3e517e2e87c5fba7ed74f4889d2dc3 coderay (1.1.3) sha256=dc530018a4684512f8f38143cd2a096c9f02a1fc2459edcfe534787a7fc77d4b @@ -989,22 +985,22 @@ CHECKSUMS font-awesome-sass (6.7.2) sha256=31cf171c593cda4118bf5efbf9e4eb6abc8b15fd4d6acd5f000026356ee0005d fuzzy_match (2.1.0) sha256=e97e25d0eaee48a5f77ed970d007c7b6ff3c6a6858303fead2d1986859204dfc geocoder (1.8.6) sha256=e0ca1554b499f466de9b003f7dff70f89a5888761c2ca68ed9f86b6e5e24e74c - globalid (1.3.0) sha256=05c639ad6eb4594522a0b07983022f04aa7254626ab69445a0e493aa3786ff11 + globalid (1.4.0) sha256=037f12fbf1d9d7a014d501c2d5c77356fd4ddd96d7a7991d6700bba96706f427 haml (7.2.0) sha256=87fd2b71f7feab1724337b090a7d767f5ab2d42f08c974f3ead673f18cfcd55a haml-rails (3.0.0) sha256=091fe496a85ca521d9cac87fb50f1ecf77a57974a99aa7e267130add81a5585f handlebars_assets (0.23.9) sha256=d6bb35289e6166c01839a4d866cdf90ec33d901a16a86b97be1189c4de38c062 hashdiff (1.2.1) sha256=9c079dbc513dfc8833ab59c0c2d8f230fa28499cc5efb4b8dd276cf931457cd1 html2haml (2.3.0) sha256=b587eaf532609642fc3b5c2b35861e8c9e15e72e0355b93bbcfee1e3ae088127 htmlentities (4.4.2) sha256=bbafbdf69f2eca9262be4efef7e43e6a1de54c95eb600f26984f71d2fe96c5c3 - i18n (1.14.8) sha256=285778639134865c5e0f6269e0b818256017e8cde89993fdfcbfb64d088824a5 + i18n (1.15.2) sha256=00f9eb62412fe593b2a65a97daa75300d37abb8f7202ec748e94b6d46a9dd1b5 ice_nine (0.11.2) sha256=5d506a7d2723d5592dc121b9928e4931742730131f22a1a37649df1c1e2e63db iniparse (1.5.0) sha256=36a165e98d8a250b7631c4a7f9afba32af78f089970cd6446a39771189c761f1 io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc - irb (1.17.0) sha256=168c4ddb93d8a361a045c41d92b2952c7a118fa73f23fe14e55609eb7a863aae + irb (1.18.0) sha256=de9454a0703a54704b9811a5ef31a60c86949fbf4013fcf244fabc7c775248e3 jmespath (1.6.2) sha256=238d774a58723d6c090494c8879b5e9918c19485f7e840f2c1c7532cf84ebcb1 jquery-rails (4.6.1) sha256=619f3496cdcdeaae1fd6dafa52dbac3fc45b745d4e09712da4184a16b3a8d9c0 jsbundling-rails (1.3.1) sha256=0fa03f6d051c694cbf55a022d8be53399879f2c4cf38b2968f86379c62b1c2ca - json (2.20.0) sha256=9362bc6e55a952b056abf9167cf053358181c904cb70cd6eee0808ea830fc32b + json (2.21.1) sha256=13a43df75d95641443f5702dff350f237164a9d811ff0f2c2800d4d980220583 jsonpath (1.1.5) sha256=29f70467193a2dc93ab864ec3d3326d54267961acc623f487340eb9c34931dbe k8s-ruby (0.17.2) kaminari (1.2.2) sha256=c4076ff9adccc6109408333f87b5c4abbda5e39dc464bd4c66d06d9f73442a3e @@ -1017,16 +1013,15 @@ CHECKSUMS lograge (0.14.0) sha256=42371a75823775f166f727639f5ddce73dd149452a55fc94b90c303213dc9ae1 logstop (0.4.1) sha256=39c9a5e56acc54bd7afe591d4a40ace4c383ba51421d98de7fa03b34fec9e485 loofah (2.25.1) sha256=d436c73dbd0c1147b16c4a41db097942d217303e1f7728704b37e4df9f6d2e04 - mail (2.9.0) sha256=6fa6673ecd71c60c2d996260f9ee3dd387d4673b8169b502134659ece6d34941 - marcel (1.1.0) sha256=fdcfcfa33cc52e93c4308d40e4090a5d4ea279e160a7f6af988260fa970e0bee + mail (2.9.1) sha256=06574eca475253d6c18145dd70af80d0eb970182d55053497c5f4d797ea160e8 + marcel (1.2.1) sha256=1678e9360e32f9eafa917c80029e2f6d10b2715c66a4b87b6d0da9b9cd1f859f matrix (0.4.3) sha256=a0d5ab7ddcc1973ff690ab361b67f359acbb16958d1dc072b8b956a286564c5b maxminddb (0.1.22) sha256=50933be438fbed9dceabef4163eab41884bd8830d171fdb8f739bee769c4907e memery (1.8.0) sha256=5165e8b1128a717059a2fa2364e064156162cab3a36a425ff89491211929b636 method_source (1.1.0) sha256=181301c9c45b731b4769bc81e8860e72f9161ad7d66dd99103c9ab84f560f5c5 mini_mime (1.1.5) sha256=8681b7e2e4215f2a159f9400b5816d85e9d8c6c6b491e96a12797e798f8bccef mini_portile2 (2.8.9) sha256=0cd7c7f824e010c072e33f68bc02d85a00aeb6fce05bb4819c03dfd3c140c289 - minitest (5.27.0) sha256=2d3b17f8a36fe7801c1adcffdbc38233b938eb0b4966e97a6739055a45fa77d5 - minitest-reporters (1.7.1) sha256=5060413a0c95b8c32fe73e0606f3631c173a884d7900e50013e15094eb50562c + minitest (6.0.6) sha256=153ea36d1d987a62942382b61075745042a2b3123b1cd48f4c3675af9cc7d6f1 msgpack (1.8.3) sha256=8bda4a6428d3244e50d6bd55854d354edbada88a4e1f4f5731a39a0f86bee6a1 multi_json (1.21.1) sha256=e6126a31808e3b4d19f483c775ceac34df190dffa62adfb63a165ee14ba68080 mutex_m (0.3.0) sha256=cfcb04ac16b69c4813777022fdceda24e9f798e48092a2b817eb4c0a782b0751 @@ -1053,7 +1048,7 @@ CHECKSUMS parser (3.3.11.1) sha256=d17ace7aabe3e72c3cc94043714be27cc6f852f104d81aa284c2281aecc65d54 pg (1.6.3) sha256=1388d0563e13d2758c1089e35e973a3249e955c659592d10e5b77c468f628a99 pg (1.6.3-arm64-darwin) sha256=7240330b572e6355d7c75a7de535edb5dfcbd6295d9c7777df4d9dddfb8c0e5f - pp (0.6.3) sha256=2951d514450b93ccfeb1df7d021cae0da16e0a7f95ee1e2273719669d0ab9df6 + pp (0.6.4) sha256=dfcb0fce700c41456265922884f9fe195d7fbb0674a3578e6c0f69588e82b570 pretender (0.6.0) sha256=d4528df42dd0dc5424b5d077a23435341d31ddee09bc54c8301691f55afda63d prettyprint (0.2.0) sha256=2bc9e15581a94742064a3cc8b0fb9d45aae3d03a1baa6ef80922627a0766f193 prism (1.9.0) sha256=7b530c6a9f92c24300014919c9dcbc055bf4cdf51ec30aed099b06cd6674ef85 @@ -1061,7 +1056,6 @@ CHECKSUMS pry (0.16.0) sha256=d76c69065698ed1f85e717bd33d7942c38a50868f6b0673c636192b3d1b6054e pry-byebug (3.12.0) sha256=594e094ae8a8390a7ad4c7b36ae36e13304ed02664c67417d108dc5f7213d1b7 pry-rails (0.3.11) sha256=a69e28e24a34d75d1f60bcf241192a54253f8f7ef8a62cba1e75750a9653593d - psych (5.3.1) sha256=eb7a57cef10c9d70173ff74e739d843ac3b2c019a003de48447b2963d81b1974 public_suffix (7.0.5) sha256=1a8bb08f1bbea19228d3bed6e5ed908d1cb4f7c2726d18bd9cadf60bc676f623 puma (8.0.2) sha256=c8ed871dfbbe66448ea9ffd46692342d9804d4071522b52b5331b7b6e7b686fb pwned (2.4.1) sha256=e375b45e1cd78aded2c923737f75e09e64bc66582142c144bd85f4ce1fa0955d @@ -1072,14 +1066,15 @@ CHECKSUMS rack-session (2.1.2) sha256=595434f8c0c3473ae7d7ac56ecda6cc6dfd9d37c0b2b5255330aa1576967ffe8 rack-test (2.2.0) sha256=005a36692c306ac0b4a9350355ee080fd09ddef1148a5f8b2ac636c720f5c463 rackup (2.3.1) sha256=6c79c26753778e90983761d677a48937ee3192b3ffef6bc963c0950f94688868 - rails (7.2.3.1) sha256=96c0a0160081ef3f1e407438880f6194c6ec94cdf40c8f83fc7bb22c279eba94 + rails (8.1.3) sha256=6d017ba5348c98fc909753a8169b21d44de14d2a0b92d140d1a966834c3c9cd3 rails-controller-testing (1.0.5) sha256=741448db59366073e86fc965ba403f881c636b79a2c39a48d0486f2607182e94 rails-dom-testing (2.3.0) sha256=8acc7953a7b911ca44588bf08737bc16719f431a1cc3091a292bca7317925c1d rails-html-sanitizer (1.7.0) sha256=28b145cceaf9cc214a9874feaa183c3acba036c9592b19886e0e45efc62b1e89 - railties (7.2.3.1) sha256=aea3393ee10243ceedcbeccb45458a0d58b524b6d21bf32eff8b93853baae15a + railties (8.1.3) sha256=913eb0e0cb520aac687ffd74916bd726d48fa21f47833c6292576ef6a286de22 rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a - rake (13.3.1) sha256=8c9e89d09f66a26a01264e7e3480ec0607f0c497a861ef16063604b1b08eb19c - rdoc (7.2.0) sha256=8650f76cd4009c3b54955eb5d7e3a075c60a57276766ebf36f9085e8c9f23192 + rake (13.4.2) sha256=cb825b2bd5f1f8e91ca37bddb4b9aaf345551b4731da62949be002fa89283701 + rbs (4.0.3) sha256=5a7bf70e2628549d9a1f44eae447b2cfe55968a9c60cfff52693a4bdcc020e14 + rdoc (8.0.0) sha256=03bf8c08a9639658855a0cfd77c0abca8325c227693f7f33f82957811348c469 recursive-open-struct (1.3.1) sha256=141b4a9c8817bb30f4275c5adb1b5bebaba41bf9b7dd6d6a75ad394390ad8720 redcarpet (3.6.1) sha256=d444910e6aa55480c6bcdc0cdb057626e8a32c054c29e793fa642ba2f155f445 redis (5.4.1) sha256=b5e675b57ad22b15c9bcc765d5ac26f60b675408af916d31527af9bd5a81faae @@ -1105,7 +1100,7 @@ CHECKSUMS ruby-prof (2.0.4) sha256=42190ff6870e055a9d58b39df63e83442113ef7169c0e27b599942c3f15d1435 ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33 ruby_parser (3.22.0) sha256=1eb4937cd9eb220aa2d194e352a24dba90aef00751e24c8dfffdb14000f15d23 - rubyzip (3.2.2) sha256=c0ed99385f0625415c8f05bcae33fe649ed2952894a95ff8b08f26ca57ea5b3c + rubyzip (3.4.1) sha256=0a79e745b5c25872ebd148457df5665da8530ed8626c993b01457128f173ca02 sassc (2.4.0) sha256=4c60a2b0a3b36685c83b80d5789401c2f678c1652e3288315a1551d811d9f83e securerandom (0.4.1) sha256=cc5193d414a4341b6e225f0cb4446aceca8e50d5e1888743fac16987638ea0b1 sentry-rails (5.28.1) sha256=43a5f884622c60fa459ba05dc8bd22fbd5f28daaced1d00dbcfc4669eaf93807 @@ -1118,7 +1113,6 @@ CHECKSUMS sprockets (4.2.2) sha256=761e5a49f1c288704763f73139763564c845a8f856d52fba013458f8af1b59b1 sprockets-rails (3.5.2) sha256=a9e88e6ce9f8c912d349aa5401509165ec42326baf9e942a85de4b76dbc4119e sshkit (1.25.0) sha256=c8c6543cdb60f91f1d277306d585dd11b6a064cb44eab0972827e4311ff96744 - stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1 temple (0.10.4) sha256=b7a1e94b6f09038ab0b6e4fe0126996055da2c38bec53a8a336f075748fff72c terser (1.2.7) sha256=1b12eb49769dadac44caac3485b38928ff4ab435f1bbbacfe8048cff84c6aa1b thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73 diff --git a/app/controllers/concerns/arel_helper.rb b/app/controllers/concerns/arel_helper.rb index a2af0f157..793bdc235 100644 --- a/app/controllers/concerns/arel_helper.rb +++ b/app/controllers/concerns/arel_helper.rb @@ -4,6 +4,8 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + # provides less verbose versions of stuff that's useful for working with arel # these are all two letters both for maximum brevity and because this makes them more includable -- they are unlikely to be stomped on by other methods or functions module ArelHelper @@ -41,7 +43,10 @@ def qt(value) def nf(name, args = [], aka = nil) raise 'args must be an Array' unless args.is_a?(Array) - Arel::Nodes::NamedFunction.new name, args.map { |v| qt v }, aka + # Rails 8 (Arel) dropped the alias argument from Function/NamedFunction + # constructors; apply the alias via #as instead. + function = Arel::Nodes::NamedFunction.new(name, args.map { |v| qt v }) + aka ? function.as(aka) : function end def cl(*args) diff --git a/config/application.rb b/config/application.rb index 2f9fc68e9..59df543ac 100644 --- a/config/application.rb +++ b/config/application.rb @@ -20,48 +20,17 @@ module BostonCa class Application < Rails::Application - # Initialize configuration defaults for originally generated Rails version. - config.load_defaults 7.1 + # Load framework defaults for the current Rails version. Overrides below are + # intentional deviations from these defaults. + config.load_defaults 8.1 - # Add autoload paths to load path (Rails 7.1 default) - config.add_autoload_paths_to_load_path = false - - # Enable raising on invalid cache expiration times - config.active_support.raise_on_invalid_cache_expiration_time = true - - # Use SQLCommenter format for query log tags - config.active_record.query_log_tags_format = :sqlcommenter - - # Enable precompilation of filter parameters for better performance - config.precompile_filter_parameters = true - - # Enable raising on assignment to attr_readonly attributes - config.active_record.raise_on_assign_to_attr_readonly = true - - # Enable validating only parent-related columns for presence - config.active_record.belongs_to_required_validates_foreign_key = false - - ### - # Enable before_committed! callbacks on all enrolled records in a transaction. - # The previous behavior was to only run the callbacks on the first copy of a record - # if there were multiple copies of the same record enrolled in the transaction. - #++ - config.active_record.before_committed_on_all_records = true - - # Keep YAML as default column serializer (you have this set in your 7.1 file) + # Keep YAML as the default column serializer. The framework default is `nil` + # (Rails 7.1+); this is an intentional override to preserve existing + # serialized-column behavior. config.active_record.default_column_serializer = YAML - # Run after_commit callbacks in order defined - config.active_record.run_after_transaction_callbacks_in_order_defined = true - - # Generate secure tokens on initialize - config.active_record.generate_secure_token_on = :initialize - - # Use HTML5 sanitizers when supported - config.action_view.sanitizer_vendor = Rails::HTML::Sanitizer.best_supported_vendor - config.action_text.sanitizer_vendor = Rails::HTML::Sanitizer.best_supported_vendor - - # Use HTML5 parser for DOM testing + # Force the HTML5 parser for DOM testing. The framework default falls back to + # :html4 when Nokogiri::HTML5 is unavailable; we always want :html5. config.dom_testing_default_html_version = :html5 # Set log file size for local environments @@ -125,6 +94,9 @@ def secrets # config.time_zone = "Central Time (US & Canada)" # config.eager_load_paths << Rails.root.join("extras") + # NOTE: on load_defaults 8.1, active_record.postgresql_adapter_decode_dates is + # `true` — raw-SQL `date` columns return Date, not String. Accepted intentionally after review + # Disable Active Storage routes config.active_storage.draw_routes = false end diff --git a/config/initializers/new_framework_defaults_7_2.rb b/config/initializers/new_framework_defaults_7_2.rb deleted file mode 100644 index a572ba824..000000000 --- a/config/initializers/new_framework_defaults_7_2.rb +++ /dev/null @@ -1,76 +0,0 @@ -### -# Copyright Green River Data Group, Inc. -# -# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md -### - -# Be sure to restart your server when you modify this file. -# -# This file eases your Rails 7.2 framework defaults upgrade. -# -# Uncomment each configuration one by one to switch to the new default. -# Once your application is ready to run with all new defaults, you can remove -# this file and set the `config.load_defaults` to `7.2`. -# -# Read the Guide for Upgrading Ruby on Rails for more info on each option. -# https://guides.rubyonrails.org/upgrading_ruby_on_rails.html - -### -# Controls whether Active Job's `#perform_later` and similar methods automatically defer -# the job queuing to after the current Active Record transaction is committed. -# -# Example: -# Topic.transaction do -# topic = Topic.create(...) -# NewTopicNotificationJob.perform_later(topic) -# end -# -# In this example, if the configuration is set to `:never`, the job will -# be enqueued immediately, even though the `Topic` hasn't been committed yet. -# Because of this, if the job is picked up almost immediately, or if the -# transaction doesn't succeed for some reason, the job will fail to find this -# topic in the database. -# -# If `enqueue_after_transaction_commit` is set to `:default`, the queue adapter -# will define the behaviour. -# -# Note: Active Job backends can disable this feature. This is generally done by -# backends that use the same database as Active Record as a queue, hence they -# don't need this feature. -#++ -# Rails.application.config.active_job.enqueue_after_transaction_commit = :default - -### -# Adds image/webp to the list of content types Active Storage considers as an image -# Prevents automatic conversion to a fallback PNG, and assumes clients support WebP, as they support gif, jpeg, and png. -# This is possible due to broad browser support for WebP, but older browsers and email clients may still not support -# WebP. Requires imagemagick/libvips built with WebP support. -#++ -# Rails.application.config.active_storage.web_image_content_types = %w[image/png image/jpeg image/gif image/webp] - -### -# Enable validation of migration timestamps. When set, an ActiveRecord::InvalidMigrationTimestampError -# will be raised if the timestamp prefix for a migration is more than a day ahead of the timestamp -# associated with the current time. This is done to prevent forward-dating of migration files, which can -# impact migration generation and other migration commands. -# -# Applications with existing timestamped migrations that do not adhere to the -# expected format can disable validation by setting this config to `false`. -#++ -# Rails.application.config.active_record.validate_migration_timestamps = true - -### -# Controls whether the PostgresqlAdapter should decode dates automatically with manual queries. -# -# Example: -# ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.select_value("select '2024-01-01'::date") #=> Date -# -# This query used to return a `String`. -#++ -# Rails.application.config.active_record.postgresql_adapter_decode_dates = true - -### -# Enables YJIT as of Ruby 3.3, to bring sizeable performance improvements. If you are -# deploying to a memory constrained environment you may want to set this to `false`. -#++ -# Rails.application.config.yjit = true diff --git a/public/400.html b/public/400.html new file mode 100644 index 000000000..282dbc8cc --- /dev/null +++ b/public/400.html @@ -0,0 +1,114 @@ + + + + + + + The server cannot process the request due to a client error (400 Bad Request) + + + + + + + + + + + + + +
+
+ +
+
+

The server cannot process the request due to a client error. Please check the request and try again. If you’re the application owner check the logs for more information.

+
+
+ + + + diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb new file mode 100644 index 000000000..f7ff3fe9c --- /dev/null +++ b/spec/helpers/application_helper_spec.rb @@ -0,0 +1,74 @@ +### +# Copyright Green River Data Group, Inc. +# +# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md +### + +# frozen_string_literal: true + +require 'rails_helper' + +# Regression net for the Rails 7.2 -> 8.1 upgrade (audit hotspot). +# +# `menu_request_matches_generated_path?` is the app's only URL query-string +# parser (`Rack::Utils.parse_query`, application_helper.rb). Rails 8.1 removes +# legacy Action Pack semicolon/bracket query parsing, and Rack changed its +# separator handling; these specs cover the current 7.2 behavior any regressions +# in path/query comparison would surface here. +RSpec.describe ApplicationHelper, type: :helper do + describe '#menu_request_matches_generated_path?' do + # Drive the private helper with a stubbed request path and params, mirroring + # how a filtered menu link is compared against the current request. + def menu_active?(generated_path, request_path:, params: {}) + allow(helper).to receive(:request).and_return(double(path: request_path)) + allow(helper).to receive(:params).and_return(ActionController::Parameters.new(params)) + helper.send(:menu_request_matches_generated_path?, generated_path) + end + + it 'is false when the path does not match' do + expect(menu_active?('/clients', request_path: '/opportunities')).to be false + end + + it 'is true when the path matches and there is no query string' do + expect(menu_active?('/clients', request_path: '/clients')).to be true + end + + it 'is true when every generated query key matches the current params' do + expect( + menu_active?('/clients?sort=name', request_path: '/clients', params: { 'sort' => 'name' }), + ).to be true + end + + it 'is false when a generated query value differs from the current params' do + expect( + menu_active?('/clients?sort=name', request_path: '/clients', params: { 'sort' => 'agency' }), + ).to be false + end + + it 'requires all generated keys to be present in params (extra request params are allowed)' do + expect( + menu_active?('/clients?sort=name', request_path: '/clients', params: { 'sort' => 'name', 'step' => '2' }), + ).to be true + expect( + menu_active?('/clients?sort=name&step=2', request_path: '/clients', params: { 'sort' => 'name' }), + ).to be false + end + + it 'splits multiple query params on "&" (Rack 3 does not treat ";" as a separator)' do + # `&` => two independent keys. + expect( + menu_active?('/clients?sort=name&step=2', request_path: '/clients', params: { 'sort' => 'name', 'step' => '2' }), + ).to be true + + # `;` is NOT a separator on the pinned Rack 3.x: the whole "1;step=2" is the + # value of key "a". This characterizes current behavior so a Rack/Rails bump + # that reintroduces semicolon splitting is caught. + expect( + menu_active?('/clients?a=1;step=2', request_path: '/clients', params: { 'a' => '1;step=2' }), + ).to be true + expect( + menu_active?('/clients?a=1;step=2', request_path: '/clients', params: { 'a' => '1', 'step' => '2' }), + ).to be false + end + end +end diff --git a/spec/models/concerns/arel_helper_spec.rb b/spec/models/concerns/arel_helper_spec.rb new file mode 100644 index 000000000..8391f0119 --- /dev/null +++ b/spec/models/concerns/arel_helper_spec.rb @@ -0,0 +1,46 @@ +### +# Copyright Green River Data Group, Inc. +# +# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md +### + +# frozen_string_literal: true + +require 'rails_helper' + +# Regression coverage for ArelHelper. Rails 8's Arel dropped the alias argument +# from Function/NamedFunction constructors; these examples exercise nf/cl/cast so a +# future Arel API change surfaces in CI instead of only at runtime (the helper had +# no spec coverage, which let a NamedFunction.new arity break reach a live report). +RSpec.describe ArelHelper do + # ApplicationRecord includes ArelHelper, so any model exposes the class methods. + let(:model) { Client } + let(:table) { Client.arel_table } + + describe '.nf' do + it 'builds a named function without an alias' do + expect(model.nf('COUNT', [table[:id]]).to_sql).to eq('COUNT("clients"."id")') + end + + it 'applies an alias via AS' do + expect(model.nf('COUNT', [table[:id]], 'cnt').to_sql).to eq('COUNT("clients"."id") AS cnt') + end + + it 'raises when args is not an Array' do + expect { model.nf('COUNT', table[:id]) }.to raise_error(RuntimeError, 'args must be an Array') + end + end + + describe '.cl' do + it 'builds a COALESCE function over its arguments' do + expect(model.cl(table[:first_name], table[:last_name]).to_sql). + to eq('COALESCE("clients"."first_name", "clients"."last_name")') + end + end + + describe '.cast' do + it 'builds a CAST expression with the target type' do + expect(model.cast(table[:id], 'text').to_sql).to eq('CAST("clients"."id" AS text)') + end + end +end diff --git a/spec/models/free_text_regex_regression_spec.rb b/spec/models/free_text_regex_regression_spec.rb new file mode 100644 index 000000000..eb9589c41 --- /dev/null +++ b/spec/models/free_text_regex_regression_spec.rb @@ -0,0 +1,83 @@ +### +# Copyright Green River Data Group, Inc. +# +# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md +### + +# frozen_string_literal: true + +require 'rails_helper' + +# Regression net for the Rails 7.2 -> 8.1 upgrade (audit hotspot). +# +# Rails 8 sets a global `Regexp.timeout` (1 second by default). +# https://guides.rubyonrails.org/configuring.html#default-values-for-target-version-8-0 +# These are the only free-text regexes in the app that run against user-supplied strings: +# - NonHmisClientsHelper::PHONE_NUMBER_REGEX (validated in +# PathwaysVersionFourCalculations) +# - the "^Email:/^Phone:/^Address:" matches in +# Client#structured_rrh_assessment_contact_info +# +# These specs characterize current 7.2 behavior (correct parse) and assert the +# matches complete well under the 1s timeout even on adversarial-length input, +# so a regression under the new default surfaces here rather than in production. +RSpec.describe 'Free-text regex regression', type: :model do + describe 'NonHmisClientsHelper::PHONE_NUMBER_REGEX' do + subject(:regex) { NonHmisClientsHelper::PHONE_NUMBER_REGEX } + + it 'matches representative phone formats' do + expect('555-123-4567').to match(regex) + expect('(555) 123-4567').to match(regex) + expect('5551234567').to match(regex) + end + + it 'does not match non-phone text' do + expect('not a phone number').not_to match(regex) + expect('12345').not_to match(regex) + end + + it 'completes quickly on adversarial-length input (no catastrophic backtracking)' do + adversarial = '9' * 100_000 + elapsed = Benchmark.realtime { adversarial.match?(regex) } + expect(elapsed).to be < 1.0 + end + end + + describe 'Client#structured_rrh_assessment_contact_info' do + let(:contact_info) do + <<~TEXT.strip + Jane Smith + Phone: 555-123-4567 + Email: jane@example.com + Address: 123 Main St, Apt 4 + TEXT + end + + subject(:parsed) { Client.new(rrh_assessment_contact_info: contact_info).structured_rrh_assessment_contact_info } + + it 'parses the free-text contact block into structured fields' do + expect(parsed.first_name).to eq('Jane') + expect(parsed.last_name).to eq('Smith') + expect(parsed.phone).to eq('555-123-4567') + expect(parsed.email).to eq('jane@example.com') + expect(parsed.address).to eq('123 Main St, Apt 4') + end + + it 'returns nil when the field is blank' do + expect(Client.new(rrh_assessment_contact_info: nil).structured_rrh_assessment_contact_info).to be_nil + end + + it 'treats a block with no Email: line as a bare name' do + result = Client.new(rrh_assessment_contact_info: 'Just A Name').structured_rrh_assessment_contact_info + expect(result.first_name).to eq('Just A Name') + end + + it 'completes quickly on adversarial-length input (no catastrophic backtracking)' do + adversarial = "Jane Smith\nEmail: " + ('a' * 100_000) + elapsed = Benchmark.realtime do + Client.new(rrh_assessment_contact_info: adversarial).structured_rrh_assessment_contact_info + end + expect(elapsed).to be < 1.0 + end + end +end diff --git a/spec/requests/account_passwords_spec.rb b/spec/requests/account_passwords_spec.rb new file mode 100644 index 000000000..dace1a79a --- /dev/null +++ b/spec/requests/account_passwords_spec.rb @@ -0,0 +1,53 @@ +### +# Copyright Green River Data Group, Inc. +# +# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md +### + +# frozen_string_literal: true + +require 'rails_helper' + +# Regression net for the Rails 7.2 -> 8.1 upgrade. +# +# The signed-in "change my password" flow (AccountPasswordsController#update via +# `update_with_password`) exercises Devise :recoverable/:validatable/:password_archivable. +# These specs characterize current 7.2 behavior so a regression surfaces in CI. +RSpec.describe 'AccountPasswords', type: :request do + let(:password) { Digest::SHA256.hexdigest('abcd1234abcd') } + let(:user) { create(:user, password: password, password_confirmation: password) } + let(:new_password) { 'N3w-Str0ng-Passphrase-2026' } + + before { sign_in user } + + describe 'PATCH /account_password' do + it 'changes the password when the current password is correct' do + patch account_password_path, + params: { + user: { + current_password: password, + password: new_password, + password_confirmation: new_password, + }, + } + + expect(response).to redirect_to(edit_account_password_path) + expect(user.reload.valid_password?(new_password)).to be true + end + + it 'does not change the password when the current password is wrong' do + patch account_password_path, + params: { + user: { + current_password: 'not-the-current-password', + password: new_password, + password_confirmation: new_password, + }, + } + + user.reload + expect(user.valid_password?(new_password)).to be false + expect(user.valid_password?(password)).to be true + end + end +end diff --git a/spec/requests/notifications/subscriber_auth_spec.rb b/spec/requests/notifications/subscriber_auth_spec.rb new file mode 100644 index 000000000..aff69e4a9 --- /dev/null +++ b/spec/requests/notifications/subscriber_auth_spec.rb @@ -0,0 +1,42 @@ +### +# Copyright Green River Data Group, Inc. +# +# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md +### + +# frozen_string_literal: true + +require 'rails_helper' + +# Regression net for the Rails 7.2 -> 8.1 upgrade. +# +# The notification-subscriber auth routes (notification_sessions, +# notification_registrations) live under the SECOND `devise_scope :user` +# block, nested inside `resources :notifications` (config/routes.rb). This is +# precisely the shape most exposed to Rails 8 deferred route loading. These +# specs confirm those routes resolve to their controllers and render, on 7.2. +RSpec.describe 'Notification subscriber auth', type: :request do + let(:match) { create(:client_opportunity_match) } + # Recipient contact intentionally has no associated user so the registration + # form is allowed to render. + let(:recipient) { create(:contact) } + let(:notification) do + Notifications::ProviderOnly::HsaAcceptsClient.create!(match: match, recipient: recipient) + end + + describe 'GET /notifications/:notification_id/sessions/new' do + it 'resolves the second devise_scope route and renders the sign-in form' do + get new_notification_session_path(notification.code) + + expect(response).to have_http_status(:ok) + end + end + + describe 'GET /notifications/:notification_id/registrations/new' do + it 'resolves the nested registration route and renders the registration form' do + get new_notification_registration_path(notification.code) + + expect(response).to have_http_status(:ok) + end + end +end diff --git a/spec/requests/users/invitations_spec.rb b/spec/requests/users/invitations_spec.rb new file mode 100644 index 000000000..897dbca63 --- /dev/null +++ b/spec/requests/users/invitations_spec.rb @@ -0,0 +1,55 @@ +### +# Copyright Green River Data Group, Inc. +# +# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md +### + +# frozen_string_literal: true + +require 'rails_helper' + +# Regression net for the Rails 7.2 -> 8.1 upgrade. +# +# Devise invitable routes/controllers are part of the deferred-route-loading +# risk. These specs characterize the current 7.2 behavior of the invitation +# accept flow (GET accept form + PUT accept) so a regression surfaces in CI. +RSpec.describe 'Users::Invitations', type: :request do + let(:agency) { create(:agency) } + let(:admin_role) { create(:admin_role) } + let(:admin) { create(:user).tap { |u| u.roles << admin_role } } + + let!(:invited_user) do + User.invite!( + { email: 'invitee@example.com', first_name: 'Ann', last_name: 'Vited', agency: agency, contact: build(:contact) }, + admin, + ) + end + let(:raw_token) { invited_user.raw_invitation_token } + + describe 'GET /users/invitation/accept' do + it 'renders the accept-invitation form for a valid token' do + get accept_user_invitation_path(invitation_token: raw_token) + + expect(response).to have_http_status(:ok) + end + end + + describe 'PUT /users/invitation (accept)' do + let(:new_password) { 'N3w-Str0ng-Passphrase-2026' } + + it 'accepts the invitation and sets the password' do + put user_invitation_path, + params: { + user: { + invitation_token: raw_token, + password: new_password, + password_confirmation: new_password, + }, + } + + invited_user.reload + expect(invited_user.invitation_accepted_at).to be_present + expect(invited_user.valid_password?(new_password)).to be true + end + end +end diff --git a/spec/requests/users/sessions_spec.rb b/spec/requests/users/sessions_spec.rb new file mode 100644 index 000000000..53537e2bd --- /dev/null +++ b/spec/requests/users/sessions_spec.rb @@ -0,0 +1,87 @@ +### +# Copyright Green River Data Group, Inc. +# +# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md +### + +# frozen_string_literal: true + +require 'rails_helper' + +# Regression net for the Rails 7.2 -> 8.1 upgrade. +# +# Devise + Rails 8 deferred route loading is the headline risk. These request +# specs characterize the current 7.2 behavior of the custom sessions routes, +# including the `active`/`timeout` endpoints declared inside `devise_scope :user` +# (config/routes.rb), so a routing/auth regression fails in CI rather than on +# staging. +# +# NOTE: exhaustive lockout timing and password-expiry scenarios are already +# covered by spec/features/accounts_spec.rb; here we cover the request-level +# sign in/out contract plus the custom endpoints. +RSpec.describe 'Users::Sessions', type: :request do + let(:password) { Digest::SHA256.hexdigest('abcd1234abcd') } + let(:user) { create(:user, password: password, password_confirmation: password) } + + describe 'POST /users/sign_in' do + it 'signs in with valid credentials and reaches an authenticated page' do + post user_session_path, params: { user: { email: user.email, password: password } } + + expect(response).to have_http_status(:redirect) + follow_redirect! + expect(response.body).to include('Sign Out') + end + + it 'rejects invalid credentials' do + post user_session_path, params: { user: { email: user.email, password: 'wrong-password' } } + + expect(response.body).to include('Invalid Email or password') + end + end + + describe 'DELETE /users/sign_out' do + it 'signs the user out' do + sign_in user + + delete destroy_user_session_path + + expect(response).to have_http_status(:redirect) + end + end + + describe 'GET /active (auto-session-timeout status)' do + it 'reports the session as active for a signed-in user' do + sign_in user + + get '/active' + + expect(response).to have_http_status(:ok) + expect(response.body).to eq('true') + end + end + + describe 'GET /timeout' do + it 'flashes the expiry notice and redirects to root' do + sign_in user + + get '/timeout' + + expect(response).to redirect_to(root_path) + expect(flash[:notice]).to eq('Your session expired; you have been logged out.') + end + end + + describe 'account lockout (:lockable, maximum_attempts = 10)' do + it 'locks the account after the maximum number of failed sign-ins' do + Devise.maximum_attempts.times do + post user_session_path, params: { user: { email: user.email, password: 'wrong-password' } } + end + + # Even the correct password is now refused because the account is locked. + post user_session_path, params: { user: { email: user.email, password: password } } + + expect(response.body).to include('Your account is locked.') + expect(user.reload.access_locked?).to be true + end + end +end From c9369eec8711252713f4976e72196bfce1ee96b4 Mon Sep 17 00:00:00 2001 From: Elliot Date: Thu, 30 Jul 2026 11:20:34 -0400 Subject: [PATCH 2/5] Fix a build issue (#1139) * Pin hadolint * Don't pin --- .github/workflows/build_images.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_images.yml b/.github/workflows/build_images.yml index f948da3b7..302dd51a8 100644 --- a/.github/workflows/build_images.yml +++ b/.github/workflows/build_images.yml @@ -38,7 +38,7 @@ jobs: dockerfile: docker/app/Dockerfile keep_latest_tag: true cache_key: cas - hadolint_ignore: DL3018,DL3013,DL3008 + hadolint_ignore: DL3018,DL3013,DL3008,DL3066 trivy_skip_files: /app/config/key.pem,/app/docker/sftp/ssh_host_ed25519_key,/app/docker/sftp/ssh_host_rsa_key target: prod-build build-args: | From 69eebcc6aa729ee783af2bfba326767eab2b04f2 Mon Sep 17 00:00:00 2001 From: Elliot Date: Tue, 4 Aug 2026 07:54:26 -0400 Subject: [PATCH 3/5] [#8986] Cancel and Decline Reasons Move to the DB (#1140) * Move decline and cancel reasons into the database, add admin CRUD * Adjusting UI and workflows * Cleanup after merge, streamline seeding * Fix N+1 * Rethink how we seed match decision reasons * Adjustments * Limit config options when selecting an audience won't help; end-user docs * Review feedback * Code comments * Move strings to constants * Port recent changes for route 4 to db-backed reasons --- .../match_decision_reasons_controller.rb | 50 + .../admin/match_decision_steps_controller.rb | 46 + .../admin/match_routes_controller.rb | 11 + ...nages_match_decision_reason_assignments.rb | 78 ++ .../match_decision_reason_assignments.rb | 113 ++ .../cas_seeds/match_decision_reasons.rb | 72 +- app/models/client_opportunity_match.rb | 2 +- .../match_decisions/accepts_decline_reason.rb | 48 +- .../default_dnd_staff_decline_reasons.rb | 21 - .../default_hsa_decline_reasons.rb | 28 - .../default_set_asides_decline_reasons.rb | 37 - .../default_shelter_agency_decline_reasons.rb | 25 - .../route_eight_cancel_reasons.rb | 29 - .../route_eleven_cancel_reasons.rb | 27 - .../route_eleven_decline_reasons.rb | 32 - .../route_four_cancel_reasons.rb | 34 - ...ute_four_shelter_agency_decline_reasons.rb | 34 - .../route_nine_cancel_reasons.rb | 29 - .../route_nine_decline_reasons.rb | 21 - .../route_one_decline_reasons.rb | 17 - .../route_six_cancel_reasons.rb | 25 - .../route_six_decline_reasons.rb | 26 - .../route_ten_cancel_reasons.rb | 29 - .../route_ten_decline_reasons.rb | 24 - .../route_thirteen_cancel_reasons.rb | 44 - .../route_thirteen_decline_reasons.rb | 39 - .../route_three_decline_reasons.rb | 17 - .../route_twelve_cancel_reasons.rb | 29 - .../route_twelve_decline_reasons.rb | 24 - .../route_two_decline_reasons.rb | 17 - .../match_decision_reason_assignment.rb | 43 + app/models/match_decision_step.rb | 28 + .../approve_match_housing_subsidy_admin.rb | 39 +- app/models/match_decisions/base.rb | 72 +- .../eight/eight_assign_manager.rb | 9 +- .../eight_confirm_assign_manager_decline.rb | 3 +- .../eight/eight_confirm_lease_up_decline.rb | 16 +- .../eight/eight_confirm_match_success.rb | 4 +- .../match_decisions/eight/eight_lease_up.rb | 14 - .../eight/eight_match_recommendation.rb | 4 +- .../eight/eight_record_voucher_date.rb | 14 - ...rm_hsa_accepts_client_decline_dnd_staff.rb | 4 +- .../eleven_confirm_match_success_dnd_staff.rb | 4 +- .../eleven/eleven_hsa_accepts_client.rb | 2 - .../eleven/eleven_hsa_acknowledges_receipt.rb | 4 +- .../five/five_application_submission.rb | 3 +- .../five/five_client_agrees.rb | 3 +- .../match_decisions/five/five_lease_up.rb | 1 - .../five/five_match_recommendation.rb | 3 +- .../match_decisions/five/five_mitigation.rb | 9 +- .../match_decisions/five/five_screening.rb | 3 +- .../approve_match_housing_subsidy_admin.rb | 2 - ...housing_subsidy_admin_decline_dnd_staff.rb | 4 +- .../confirm_hsa_initial_decline_dnd_staff.rb | 4 +- .../four/confirm_match_success_dnd_staff.rb | 3 +- ...rd_client_housed_date_decline_dnd_staff.rb | 2 - ...dule_criminal_hearing_decline_dnd_staff.rb | 2 - ...onfirm_shelter_agency_decline_dnd_staff.rb | 4 +- .../four/match_recommendation_dnd_staff.rb | 4 +- .../four/match_recommendation_hsa.rb | 2 - .../match_recommendation_shelter_agency.rb | 2 - ...used_date_housing_subsidy_administrator.rb | 2 - ..._criminal_hearing_housing_subsidy_admin.rb | 2 - .../set_asides_hsa_accepts_client.rb | 2 - ...r_decline_housing_subsidy_administrator.rb | 2 - .../match_recommendation_dnd_staff.rb | 3 +- .../match_recommendation_shelter_agency.rb | 2 - .../nine/nine_assign_case_contact.rb | 22 +- .../nine/nine_assign_manager.rb | 10 +- .../nine_confirm_assign_manager_decline.rb | 4 +- .../nine/nine_confirm_lease_up_decline.rb | 17 +- .../nine/nine_confirm_voucher_decline.rb | 4 +- .../match_decisions/nine/nine_lease_up.rb | 15 - .../nine/nine_match_recommendation.rb | 15 +- .../nine/nine_record_voucher_date.rb | 19 - ...rm_hsa_accepts_client_decline_dnd_staff.rb | 10 +- .../provider_only/hsa_accepts_client.rb | 19 - .../provider_only/hsa_acknowledges_receipt.rb | 11 +- ...used_date_housing_subsidy_administrator.rb | 15 - ..._criminal_hearing_housing_subsidy_admin.rb | 15 - .../approve_match_housing_subsidy_admin.rb | 1 - .../seven/match_recommendation_dnd_staff.rb | 3 +- .../approve_match_housing_subsidy_admin.rb | 2 - .../six/match_recommendation_dnd_staff.rb | 4 +- .../match_recommendation_shelter_agency.rb | 2 - .../ten/ten_agency_confirm_match_success.rb | 2 - ...en_agency_confirm_match_success_decline.rb | 4 +- .../ten_confirm_match_success_dnd_staff.rb | 4 +- .../thirteen/thirteen_accept_referral.rb | 2 - .../thirteen_accept_referral_decline.rb | 4 +- .../thirteen/thirteen_client_match.rb | 4 +- .../thirteen/thirteen_client_review.rb | 2 - .../thirteen_client_review_decline.rb | 4 +- .../thirteen_confirm_match_success.rb | 2 - .../thirteen/thirteen_hearing_outcome.rb | 2 - .../thirteen_hearing_outcome_decline.rb | 2 - .../thirteen/thirteen_hearing_scheduled.rb | 2 - .../thirteen_hearing_scheduled_decline.rb | 4 +- .../thirteen/thirteen_hsa_review.rb | 2 - .../thirteen/thirteen_hsa_review_decline.rb | 4 +- .../thirteen_match_acknowledgement.rb | 2 - .../twelve_agency_acknowledges_receipt.rb | 4 +- ...lve_agency_acknowledges_receipt_decline.rb | 4 +- .../twelve_confirm_match_success_dnd_staff.rb | 4 +- .../twelve_hsa_confirm_match_decline.rb | 4 +- .../twelve_hsa_confirm_match_success.rb | 2 - app/models/warehouse/build_report.rb | 5 +- app/models/warehouse/referral_event.rb | 12 +- .../admin/match_decision_reasons/_form.haml | 12 + .../admin/match_decision_reasons/edit.haml | 9 + .../admin/match_decision_reasons/index.haml | 39 + .../admin/match_decision_reasons/new.haml | 8 + .../match_decision_steps/_reason_tables.haml | 37 + .../admin/match_decision_steps/edit.haml | 19 + .../_decline_and_cancel_reasons.haml | 29 + .../admin/match_routes/_route_table.haml | 33 + .../admin/match_routes/_weighting_rules.haml | 38 + app/views/admin/match_routes/edit.haml | 43 +- app/views/admin/match_routes/index.haml | 63 +- .../_cancel_match_form_fields.haml | 2 +- .../_hsa_cancel_match_form_fields.haml | 2 +- app/views/menus/_admin_tabs.haml | 3 + bin/deploy_tasks.sh | 6 + config/routes.rb | 2 + ...reate_match_decision_reason_assignments.rb | 29 + ...60729172306_create_match_decision_steps.rb | 21 + ...eason_text_snapshots_to_match_decisions.rb | 33 + ...cision_reason_assignments_decision_type.rb | 13 + ...ce_to_match_decision_reason_assignments.rb | 13 + .../match_decision_reason_assignments.csv | 1127 +++++++++++++++++ db/seeds/match_decision_reasons.csv | 55 + db/structure.sql | 321 ++++- .../images/01-reason-catalog-index.png | Bin 0 -> 213034 bytes .../images/02-route-edit-steps-table.png | Bin 0 -> 127270 bytes .../images/03-step-edit-reasons-table.png | Bin 0 -> 302618 bytes .../images/04-audience-column.png | Bin 0 -> 191232 bytes .../images/05-match-decline-form.png | Bin 0 -> 196714 bytes docs/end-user/decline-cancel-reasons/index.md | 96 ++ lib/tasks/cas.rake | 6 +- lib/tasks/cas_seeds.rake | 60 +- .../match_decision_reason_assignments.rb | 17 + .../match_decision_reasons/generic.rb | 14 + spec/factories/match_decision_steps.rb | 14 + .../match_decision_reason_assignments_spec.rb | 103 ++ .../cas_seeds/match_decision_reasons_spec.rb | 41 + .../match_decision_reason_assignment_spec.rb | 115 ++ spec/models/match_decision_step_spec.rb | 84 ++ ...pprove_match_housing_subsidy_admin_spec.rb | 50 + .../match_decisions/reason_resolution_spec.rb | 170 +++ .../reason_text_snapshot_spec.rb | 94 ++ spec/models/warehouse/build_report_spec.rb | 40 + .../admin/match_decision_reasons_spec.rb | 111 ++ .../admin/match_decision_steps_spec.rb | 173 +++ spec/requests/admin/match_routes_spec.rb | 112 ++ 154 files changed, 3683 insertions(+), 1195 deletions(-) create mode 100644 app/controllers/admin/match_decision_reasons_controller.rb create mode 100644 app/controllers/admin/match_decision_steps_controller.rb create mode 100644 app/controllers/concerns/admin/manages_match_decision_reason_assignments.rb create mode 100644 app/models/cas_seeds/match_decision_reason_assignments.rb delete mode 100644 app/models/concerns/match_decisions/default_dnd_staff_decline_reasons.rb delete mode 100644 app/models/concerns/match_decisions/default_hsa_decline_reasons.rb delete mode 100644 app/models/concerns/match_decisions/default_set_asides_decline_reasons.rb delete mode 100644 app/models/concerns/match_decisions/default_shelter_agency_decline_reasons.rb delete mode 100644 app/models/concerns/match_decisions/route_eight_cancel_reasons.rb delete mode 100644 app/models/concerns/match_decisions/route_eleven_cancel_reasons.rb delete mode 100644 app/models/concerns/match_decisions/route_eleven_decline_reasons.rb delete mode 100644 app/models/concerns/match_decisions/route_four_cancel_reasons.rb delete mode 100644 app/models/concerns/match_decisions/route_four_shelter_agency_decline_reasons.rb delete mode 100644 app/models/concerns/match_decisions/route_nine_cancel_reasons.rb delete mode 100644 app/models/concerns/match_decisions/route_nine_decline_reasons.rb delete mode 100644 app/models/concerns/match_decisions/route_one_decline_reasons.rb delete mode 100644 app/models/concerns/match_decisions/route_six_cancel_reasons.rb delete mode 100644 app/models/concerns/match_decisions/route_six_decline_reasons.rb delete mode 100644 app/models/concerns/match_decisions/route_ten_cancel_reasons.rb delete mode 100644 app/models/concerns/match_decisions/route_ten_decline_reasons.rb delete mode 100644 app/models/concerns/match_decisions/route_thirteen_cancel_reasons.rb delete mode 100644 app/models/concerns/match_decisions/route_thirteen_decline_reasons.rb delete mode 100644 app/models/concerns/match_decisions/route_three_decline_reasons.rb delete mode 100644 app/models/concerns/match_decisions/route_twelve_cancel_reasons.rb delete mode 100644 app/models/concerns/match_decisions/route_twelve_decline_reasons.rb delete mode 100644 app/models/concerns/match_decisions/route_two_decline_reasons.rb create mode 100644 app/models/match_decision_reason_assignment.rb create mode 100644 app/models/match_decision_step.rb create mode 100644 app/views/admin/match_decision_reasons/_form.haml create mode 100644 app/views/admin/match_decision_reasons/edit.haml create mode 100644 app/views/admin/match_decision_reasons/index.haml create mode 100644 app/views/admin/match_decision_reasons/new.haml create mode 100644 app/views/admin/match_decision_steps/_reason_tables.haml create mode 100644 app/views/admin/match_decision_steps/edit.haml create mode 100644 app/views/admin/match_routes/_decline_and_cancel_reasons.haml create mode 100644 app/views/admin/match_routes/_route_table.haml create mode 100644 app/views/admin/match_routes/_weighting_rules.haml create mode 100644 db/migrate/20260729172305_create_match_decision_reason_assignments.rb create mode 100644 db/migrate/20260729172306_create_match_decision_steps.rb create mode 100644 db/migrate/20260729172307_add_reason_text_snapshots_to_match_decisions.rb create mode 100644 db/migrate/20260730092443_remove_default_from_match_decision_reason_assignments_decision_type.rb create mode 100644 db/migrate/20260730161749_add_audience_to_match_decision_reason_assignments.rb create mode 100644 db/seeds/match_decision_reason_assignments.csv create mode 100644 db/seeds/match_decision_reasons.csv create mode 100644 docs/end-user/decline-cancel-reasons/images/01-reason-catalog-index.png create mode 100644 docs/end-user/decline-cancel-reasons/images/02-route-edit-steps-table.png create mode 100644 docs/end-user/decline-cancel-reasons/images/03-step-edit-reasons-table.png create mode 100644 docs/end-user/decline-cancel-reasons/images/04-audience-column.png create mode 100644 docs/end-user/decline-cancel-reasons/images/05-match-decline-form.png create mode 100644 docs/end-user/decline-cancel-reasons/index.md create mode 100644 spec/factories/match_decision_reason_assignments.rb create mode 100644 spec/factories/match_decision_reasons/generic.rb create mode 100644 spec/factories/match_decision_steps.rb create mode 100644 spec/models/cas_seeds/match_decision_reason_assignments_spec.rb create mode 100644 spec/models/cas_seeds/match_decision_reasons_spec.rb create mode 100644 spec/models/match_decision_reason_assignment_spec.rb create mode 100644 spec/models/match_decision_step_spec.rb create mode 100644 spec/models/match_decisions/approve_match_housing_subsidy_admin_spec.rb create mode 100644 spec/models/match_decisions/reason_resolution_spec.rb create mode 100644 spec/models/match_decisions/reason_text_snapshot_spec.rb create mode 100644 spec/requests/admin/match_decision_reasons_spec.rb create mode 100644 spec/requests/admin/match_decision_steps_spec.rb create mode 100644 spec/requests/admin/match_routes_spec.rb diff --git a/app/controllers/admin/match_decision_reasons_controller.rb b/app/controllers/admin/match_decision_reasons_controller.rb new file mode 100644 index 000000000..e60595d16 --- /dev/null +++ b/app/controllers/admin/match_decision_reasons_controller.rb @@ -0,0 +1,50 @@ +### +# Copyright Green River Data Group, Inc. +# +# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md +### + +# frozen_string_literal: true + +module Admin + class MatchDecisionReasonsController < ApplicationController + before_action :require_can_manage_config! + before_action :load_match_decision_reason, only: [:edit, :update] + + def index + @match_decision_reasons = MatchDecisionReasons::Base.order(:name) + end + + def new + @match_decision_reason = MatchDecisionReasons::Base.new + end + + def create + @match_decision_reason = MatchDecisionReasons::Base.new(match_decision_reason_params) + if @match_decision_reason.save + redirect_to admin_match_decision_reasons_path, notice: 'Reason created.' + else + render :new + end + end + + def edit + end + + def update + if @match_decision_reason.update(match_decision_reason_params) + redirect_to admin_match_decision_reasons_path, notice: 'Reason updated.' + else + render :edit + end + end + + private def load_match_decision_reason + @match_decision_reason = MatchDecisionReasons::Base.find(params[:id]) + end + + private def match_decision_reason_params + params.require(:match_decision_reason).permit(:name, :referral_result, :active) + end + end +end diff --git a/app/controllers/admin/match_decision_steps_controller.rb b/app/controllers/admin/match_decision_steps_controller.rb new file mode 100644 index 000000000..3304b8445 --- /dev/null +++ b/app/controllers/admin/match_decision_steps_controller.rb @@ -0,0 +1,46 @@ +### +# Copyright Green River Data Group, Inc. +# +# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md +### + +# frozen_string_literal: true + +module Admin + class MatchDecisionStepsController < ApplicationController + include Admin::ManagesMatchDecisionReasonAssignments + + before_action :require_can_manage_config! + before_action :load_route + before_action :load_step + + def edit + @rows = match_decision_reason_rows(route: @route, decision_type: @step.decision_type) + end + + def update + @step.update(default_referral_result_params) + kinds = @step.supports_declines? ? MatchDecisionReasonAssignment::KINDS : [MatchDecisionReasonAssignment::KIND_CANCEL] + sync_match_decision_reason_assignments!(route: @route, decision_type: @step.decision_type, assignments_params: assignments_params, kinds: kinds) + redirect_to edit_admin_match_route_match_decision_step_path(@route, @step), notice: 'Step reasons updated.' + end + + private def load_route + @route = MatchRoutes::Base.find(params[:match_route_id]) + end + + private def load_step + @step = MatchDecisionStep.where(route: @route).find(params[:id]) + end + + private def default_referral_result_params + params.fetch(:match_decision_step, {}).permit(:default_referral_result) + end + + private def assignments_params + return {} unless params[:assignments].present? + + params.require(:assignments).permit(decline: {}, cancel: {}).to_h + end + end +end diff --git a/app/controllers/admin/match_routes_controller.rb b/app/controllers/admin/match_routes_controller.rb index 3b0a30843..b024c814e 100644 --- a/app/controllers/admin/match_routes_controller.rb +++ b/app/controllers/admin/match_routes_controller.rb @@ -4,13 +4,17 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module Admin class MatchRoutesController < ApplicationController before_action :require_can_manage_config! before_action :load_match_route, only: [:edit, :update] + before_action :load_steps, only: [:edit] def index @routes = MatchRoutes::Base.all.order(id: :desc) + @active_routes, @inactive_routes = @routes.to_a.partition(&:active) end def edit @@ -25,6 +29,13 @@ def load_match_route @route = MatchRoutes::Base.find params[:id].to_i end + private def load_steps + @steps = MatchDecisionStep.where(route: @route).sort_by do |step| + @route.class.match_steps[step.decision_type] || @route.class.match_steps_for_reporting[step.decision_type] || Float::INFINITY + end + @reason_counts = MatchDecisionReasonAssignment.where(route: @route).with_active_reason.group(:decision_type, :kind).count + end + def update_params params.require(:match_route).permit( :active, diff --git a/app/controllers/concerns/admin/manages_match_decision_reason_assignments.rb b/app/controllers/concerns/admin/manages_match_decision_reason_assignments.rb new file mode 100644 index 000000000..688e1fa4e --- /dev/null +++ b/app/controllers/concerns/admin/manages_match_decision_reason_assignments.rb @@ -0,0 +1,78 @@ +### +# Copyright Green River Data Group, Inc. +# +# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md +### + +# frozen_string_literal: true + +### +# Shared helpers for admin screens that configure which match-decision reasons +# (decline/cancel) are available on a given route + decision step. +# +# Form submissions are treated as a full replacement of the offered set: selected +# rows are upserted; previously assigned rows that were unchecked are removed. +# Assignments for inactive reasons are left alone so historical configuration is +# not silently wiped when a reason is deactivated. +### +module Admin::ManagesMatchDecisionReasonAssignments + extend ActiveSupport::Concern + + # Pairs an active reason with its assignment for the admin checklist UI. + ReasonRow = Struct.new(:reason, :assignment) + + # Persists decline/cancel reason assignments from nested form params for a + # route + decision_type. +kinds+ defaults to both decline and cancel; pass a + # subset when a step only manages one kind. + private def sync_match_decision_reason_assignments!(route:, decision_type:, assignments_params:, kinds: MatchDecisionReasonAssignment::KINDS) + kinds.each do |kind| + sync_kind!(route: route, decision_type: decision_type, kind: kind, rows_params: assignments_params&.dig(kind)) + end + end + + # Upserts selected rows for one kind and destroys unchecked assignments whose + # reasons are still active. Skips entirely when that kind's params are absent + # so a form that omits a kind does not clear its assignments. + private def sync_kind!(route:, decision_type:, kind:, rows_params:) + return if rows_params.nil? + + existing = MatchDecisionReasonAssignment.where(route: route, decision_type: decision_type, kind: kind).index_by(&:match_decision_reason_id) + offered_reason_ids = MatchDecisionReasons::Base.active.ids + + rows_params.each do |reason_id, row| + next unless row[:selected] == '1' + + reason_id = reason_id.to_i + # Remove from the existing hash so it isn't deleted below + assignment = existing.delete(reason_id) || MatchDecisionReasonAssignment.new(route: route, decision_type: decision_type, kind: kind, match_decision_reason_id: reason_id) + assignment.position = row[:position].presence || 0 + assignment.requires_explanation = row[:requires_explanation] == '1' + assignment.referral_result = row[:referral_result].presence + assignment.audience = row[:audience].presence + assignment.save! + end + + existing.each do |reason_id, assignment| + assignment.destroy if offered_reason_ids.include?(reason_id) + end + end + + # Builds decline/cancel ReasonRow collections for the edit form: every active + # reason, with its existing assignment when one is already configured. + private def match_decision_reason_rows(route:, decision_type:) + reasons = MatchDecisionReasons::Base.active.order(:name) + existing_by_kind = MatchDecisionReasonAssignment.where(route: route, decision_type: decision_type).group_by(&:kind) + + { + MatchDecisionReasonAssignment::KIND_DECLINE.to_sym => build_rows(reasons, existing_by_kind[MatchDecisionReasonAssignment::KIND_DECLINE] || []), + MatchDecisionReasonAssignment::KIND_CANCEL.to_sym => build_rows(reasons, existing_by_kind[MatchDecisionReasonAssignment::KIND_CANCEL] || []), + } + end + + # One ReasonRow per reason; +assignment+ is nil when that reason is not yet + # selected for this kind. + private def build_rows(reasons, assignments) + by_reason_id = assignments.index_by(&:match_decision_reason_id) + reasons.map { |reason| ReasonRow.new(reason, by_reason_id[reason.id]) } + end +end diff --git a/app/models/cas_seeds/match_decision_reason_assignments.rb b/app/models/cas_seeds/match_decision_reason_assignments.rb new file mode 100644 index 000000000..5880fc75e --- /dev/null +++ b/app/models/cas_seeds/match_decision_reason_assignments.rb @@ -0,0 +1,113 @@ +### +# Copyright Green River Data Group, Inc. +# +# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md +### + +# frozen_string_literal: true + +require 'csv' + +module CasSeeds + class MatchDecisionReasonAssignments + # MatchDecisions::ApproveMatchHousingSubsidyAdmin used to have a hardcoded + # step_decline_reasons(contact) override with two contact-dependent lists. + # These are its audience-tagged equivalents, seeded once here so that + # exception no longer needs to exist in Ruby. + APPROVE_MATCH_HOUSING_SUBSIDY_ADMIN_DECISION_TYPE = 'MatchDecisions::ApproveMatchHousingSubsidyAdmin' + + APPROVE_MATCH_HOUSING_SUBSIDY_ADMIN_SHELTER_AGENCY_ONLY_REASONS = [ + 'Client has another housing option', + 'Does not agree to services', + 'Unwilling to live in that neighborhood', + 'Unwilling to live in SRO', + 'Does not want housing at this time', + 'Unsafe environment for this person', + 'Client refused unit (non-SRO)', + 'Client refused voucher', + ].freeze + + APPROVE_MATCH_HOUSING_SUBSIDY_ADMIN_HSA_ONLY_REASONS = [ + 'CORI', + 'SORI', + 'Client needs higher level of care', + 'Unable to reach client after multiple attempts', + 'Household did not respond after initial acceptance of match', + 'Ineligible for Housing Program', + 'Client refused offer', + 'Self-resolved', + 'Falsification of documents', + 'Additional screening criteria imposed by third parties', + 'Health and Safety', + ].freeze + + def run! + MatchRoutes::Base.ensure_all + ensure_all_match_decision_steps_exist! + seed_from_csv! + seed_approve_match_housing_subsidy_admin_reasons! + end + + # route/step topology (which steps exist per route) stays permanent Ruby (MatchRoutes::*#match_steps), + # so the step registry is derived live rather than from a dump. + private def ensure_all_match_decision_steps_exist! + MatchRoutes::Base.all_routes.each do |route_class| + route = route_class.first + next unless route + + route_class.match_steps.each_key do |decision_type| + MatchDecisionStep.find_or_create_by!(route: route, decision_type: decision_type) + end + end + end + + private def seed_from_csv! + reasons_by_name = ::MatchDecisionReasons::Base.all.index_by(&:name) + routes_by_type = MatchRoutes::Base.all_routes.each_with_object({}) { |route_class, hash| hash[route_class.name] = route_class.first }.compact + + csv_text = File.read(Rails.root.join('db', 'seeds', 'match_decision_reason_assignments.csv')) + CSV.parse(csv_text, headers: true).each do |row| + route = routes_by_type[row['route_type']] + reason = reasons_by_name[row['reason_name']] + next unless route && reason + + MatchDecisionReasonAssignment.find_or_create_by!(route: route, decision_type: row['decision_type'], match_decision_reason: reason, kind: row['kind']) do |assignment| + assignment.position = row['position'].to_i + assignment.requires_explanation = row['requires_explanation'] == 'true' + assignment.audience = row['audience'].presence + end + end + end + + private def seed_approve_match_housing_subsidy_admin_reasons! + route = MatchRoutes::Default.first + decision_type = APPROVE_MATCH_HOUSING_SUBSIDY_ADMIN_DECISION_TYPE + MatchDecisionStep.find_or_create_by!(route: route, decision_type: decision_type) + + position = 0 + APPROVE_MATCH_HOUSING_SUBSIDY_ADMIN_SHELTER_AGENCY_ONLY_REASONS.each do |name| + create_assignment!(route, decision_type, name, 'shelter_agency_contacts', position) + position += 1 + end + create_assignment!(route, decision_type, 'Other', nil, position) + position += 1 + APPROVE_MATCH_HOUSING_SUBSIDY_ADMIN_HSA_ONLY_REASONS.each do |name| + create_assignment!(route, decision_type, name, 'housing_subsidy_admin_contacts', position) + position += 1 + end + end + + private def create_assignment!(route, decision_type, reason_name, audience, position) + reason = ::MatchDecisionReasons::Base.find_by(name: reason_name) + unless reason + warn "CasSeeds::MatchDecisionReasonAssignments: skipping #{reason_name.inspect}, no matching MatchDecisionReasons::Base row" + return + end + + MatchDecisionReasonAssignment.find_or_create_by!(route: route, decision_type: decision_type, match_decision_reason: reason, kind: MatchDecisionReasonAssignment::KIND_DECLINE) do |assignment| + assignment.audience = audience + assignment.position = position + end + end + end +end diff --git a/app/models/cas_seeds/match_decision_reasons.rb b/app/models/cas_seeds/match_decision_reasons.rb index 6717c4c11..702c93a3a 100644 --- a/app/models/cas_seeds/match_decision_reasons.rb +++ b/app/models/cas_seeds/match_decision_reasons.rb @@ -4,73 +4,17 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### -module CasSeeds - class MatchDecisionReasons - CLIENT_REJECTED = 2 - PROVIDER_REJECTED = 3 +# frozen_string_literal: true - # When adding new decline or cancel reasons to CAS, add them here, and indicate the rejection type for CE APR reporting. - # Then in the appropriate route or step, add to step_cancel_reasons or step_decline_reasons - ALL_REASONS = [ - ['Additional screening criteria imposed by third parties', PROVIDER_REJECTED], - ['Barred from working with agency', PROVIDER_REJECTED], - ['Client deceased', CLIENT_REJECTED], - ['Client has another housing option', CLIENT_REJECTED], - ['Client has declined match', CLIENT_REJECTED], - ['Client has disappeared', CLIENT_REJECTED], - ['Client has disengaged', CLIENT_REJECTED], - ['Client needs higher level of care', PROVIDER_REJECTED], - ['Client no longer eligible for match', PROVIDER_REJECTED], - ['Client received another housing opportunity', CLIENT_REJECTED], - ['Client receiving navigation services', nil], - ['Client refused offer', CLIENT_REJECTED], - ['Client refused unit (non-SRO)', CLIENT_REJECTED], - ['Client refused voucher', CLIENT_REJECTED], - ['Client is already receiving navigation services', CLIENT_REJECTED], - ["Client won't be eligible based on funding source", PROVIDER_REJECTED], - ["Client won't be eligible for housing type", PROVIDER_REJECTED], - ["Client won't be eligible for services", PROVIDER_REJECTED], - ['CORI', PROVIDER_REJECTED], - ['Does not agree to services', CLIENT_REJECTED], - ['Does not want housing at this time', CLIENT_REJECTED], - ['Don’t know / disappeared', nil], - ['Falsification of documents', PROVIDER_REJECTED], - ['Health and Safety', PROVIDER_REJECTED], - ['Hospitalized', nil], - ['Household became disengaged', nil], - ['Household could not be located', PROVIDER_REJECTED], - ['Household did not respond after initial acceptance of match', PROVIDER_REJECTED], - ['Housing Case Manager has disengaged', PROVIDER_REJECTED], - ['HSP CORI', PROVIDER_REJECTED], - ['Immigration status', PROVIDER_REJECTED], - ['In Treatment/Recovery Center', CLIENT_REJECTED], - ['Incarcerated', CLIENT_REJECTED], - ['Institutionalized', CLIENT_REJECTED], - ['Ineligible for Housing Program', PROVIDER_REJECTED], - ['Match expired – Agency interaction', nil], - ['Match expired – No agency interaction', PROVIDER_REJECTED], - ['Match expired – No Housing Case Manager interaction', PROVIDER_REJECTED], - ['Match expired – No Shelter Agency interaction', PROVIDER_REJECTED], - ['Match expired', nil], - ['Match stalled - Agency has disengaged', PROVIDER_REJECTED], - ['Match stalled – Housing Case Manager has disengaged', PROVIDER_REJECTED], - ['Mitigation failed', nil], - ['Self-resolved', CLIENT_REJECTED], - ['Shelter Agency has disengaged', PROVIDER_REJECTED], - ['SORI', PROVIDER_REJECTED], - ['SSP CORI', PROVIDER_REJECTED], - ['Unable to reach client after multiple attempts', PROVIDER_REJECTED], - ['Unsafe environment for this person', CLIENT_REJECTED], - ['Unwilling to live in SRO', CLIENT_REJECTED], - ['Unwilling to live in that neighborhood', CLIENT_REJECTED], - ['Vacancy filled by other client', PROVIDER_REJECTED], - ['Vacancy should not have been entered', nil], - ['Other', nil], - ].freeze +require 'csv' +module CasSeeds + class MatchDecisionReasons def run! - ALL_REASONS.each do |reason_name, referral_result| - reason = ::MatchDecisionReasons::Base.where(name: reason_name).first_or_create! + csv_text = File.read(Rails.root.join('db', 'seeds', 'match_decision_reasons.csv')) + CSV.parse(csv_text, headers: true).each do |row| + referral_result = row['referral_result'].presence&.to_i + reason = ::MatchDecisionReasons::Base.where(name: row['name']).first_or_create! reason.update(referral_result: referral_result) end end diff --git a/app/models/client_opportunity_match.rb b/app/models/client_opportunity_match.rb index 64c5743f1..2df44534c 100644 --- a/app/models/client_opportunity_match.rb +++ b/app/models/client_opportunity_match.rb @@ -988,7 +988,7 @@ def status_update_details 'Not Engaging' end # We can't currently tell if this was positive or negative when someone chose other - still_active = 'Other' if response_text.downcase == 'other' + still_active = 'Other' if response_text&.downcase == 'other' { still_active: still_active, response_date: m.created_at.to_date, diff --git a/app/models/concerns/match_decisions/accepts_decline_reason.rb b/app/models/concerns/match_decisions/accepts_decline_reason.rb index 1faae61cb..171aab02b 100644 --- a/app/models/concerns/match_decisions/accepts_decline_reason.rb +++ b/app/models/concerns/match_decisions/accepts_decline_reason.rb @@ -12,24 +12,31 @@ module AcceptsDeclineReason included do validate :validate_decline_reason + before_save :snapshot_decline_reason_text + end + + def decline_reason_assignments(contact = nil) + assignments = MatchDecisionReasonAssignment.resolve_for(route: match_route, decision_type: self.class.name, kind: MatchDecisionReasonAssignment::KIND_DECLINE) + filter_reason_assignments_by_audience(assignments, contact) + end + + def step_decline_reasons(contact = nil) + decline_reason_assignments(contact).map { |assignment| assignment.match_decision_reason.name } end def decline_reasons(contact:) - @decline_reasons ||= [].tap do |result| - MatchDecisionReasons::Base.active.where(name: step_decline_reasons(contact)).find_each do |reason| - result << reason - end - # Move other to the end of the list - result.sort_by! { |m| [m.name.downcase == 'other' ? 1 : 0, m.name.downcase] } - result.map! do |reason| - # Only include the asterisks if more than 'Other' requires additional explanation && if not ALL decline reasons require additional explanation - not_other = decline_reasons_not_other_requiring_explanation(contact) - more_than_other_requires_explanation = not_other.present? - this_reason_requires_explanation = not_other.include?(reason.name) + @decline_reasons ||= begin + assignments = decline_reason_assignments(contact) + non_other = assignments.reject { |assignment| assignment.match_decision_reason.other? } + more_than_other_requires_explanation = non_other.any?(&:requires_explanation) + all_require_explanation = all_declines_require_explanation(contact) - include_asterisk = if all_declines_require_explanation(contact) + assignments.map do |assignment| + reason = assignment.match_decision_reason + # Only include the asterisks if more than 'Other' requires additional explanation && if not ALL decline reasons require additional explanation + include_asterisk = if all_require_explanation false - elsif more_than_other_requires_explanation && (reason.other? || this_reason_requires_explanation) + elsif more_than_other_requires_explanation && (reason.other? || assignment.requires_explanation) true end @@ -41,9 +48,12 @@ def decline_reasons(contact:) end def all_declines_require_explanation(contact) - not_other = decline_reasons_not_other_requiring_explanation(contact) - step_reasons_except_other = step_decline_reasons(contact).reject { |r| r == 'Other' } - not_other.sort == step_reasons_except_other.sort + non_other = decline_reason_assignments(contact).reject { |assignment| assignment.match_decision_reason.other? } + non_other.present? && non_other.all?(&:requires_explanation) + end + + def decline_reasons_not_other_requiring_explanation(contact = nil) + decline_reason_assignments(contact).select(&:requires_explanation).map { |assignment| assignment.match_decision_reason.name } end def whitelist_params_for_update params @@ -82,10 +92,14 @@ def decline_reason_name elsif decline_reason.other? "Other (#{decline_reason_other_explanation})" else - reason = decline_reason.name.to_s + reason = decline_reason_text.presence || decline_reason.name.to_s reason += ". Note: #{decline_reason_other_explanation}" if decline_reason_other_explanation.present? reason end end + + private def snapshot_decline_reason_text + self.decline_reason_text = decline_reason.name if decline_reason_id_changed? && decline_reason.present? + end end end diff --git a/app/models/concerns/match_decisions/default_dnd_staff_decline_reasons.rb b/app/models/concerns/match_decisions/default_dnd_staff_decline_reasons.rb deleted file mode 100644 index d28c5d985..000000000 --- a/app/models/concerns/match_decisions/default_dnd_staff_decline_reasons.rb +++ /dev/null @@ -1,21 +0,0 @@ -### -# Copyright Green River Data Group, Inc. -# -# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md -### - -module MatchDecisions - module DefaultDndStaffDeclineReasons - extend ActiveSupport::Concern - - def step_decline_reasons(_contact) - [ - "Client won't be eligible for services", - "Client won't be eligible for housing type", - "Client won't be eligible based on funding source", - 'Client has another housing option', - 'Other', - ] - end - end -end diff --git a/app/models/concerns/match_decisions/default_hsa_decline_reasons.rb b/app/models/concerns/match_decisions/default_hsa_decline_reasons.rb deleted file mode 100644 index 89fc1f16c..000000000 --- a/app/models/concerns/match_decisions/default_hsa_decline_reasons.rb +++ /dev/null @@ -1,28 +0,0 @@ -### -# Copyright Green River Data Group, Inc. -# -# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md -### - -# frozen_string_literal: true - -module MatchDecisions - module DefaultHsaDeclineReasons - extend ActiveSupport::Concern - - def step_decline_reasons(_contact) - [ - 'Ineligible for Housing Program', - 'Self-resolved', - 'Falsification of documents', - 'Health and Safety', - 'CORI', - 'SORI', - 'Household did not respond after initial acceptance of match', - 'Client refused offer', - 'Additional screening criteria imposed by third parties', - 'Other', - ] - end - end -end diff --git a/app/models/concerns/match_decisions/default_set_asides_decline_reasons.rb b/app/models/concerns/match_decisions/default_set_asides_decline_reasons.rb deleted file mode 100644 index e9cead82f..000000000 --- a/app/models/concerns/match_decisions/default_set_asides_decline_reasons.rb +++ /dev/null @@ -1,37 +0,0 @@ -### -# Copyright Green River Data Group, Inc. -# -# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md -### - -module MatchDecisions - module DefaultSetAsidesDeclineReasons - extend ActiveSupport::Concern - - def step_decline_reasons(_contact) - [ - 'Client received another housing opportunity', - 'Client no longer eligible for match', - 'Client deceased', - 'Incarcerated', - 'Vacancy filled by other client', - 'Client has declined match', - 'Client has disengaged', - 'Household could not be located', - 'CORI', - 'Unwilling to live in that neighborhood', - 'Unwilling to live in SRO', - 'Health and Safety', - 'Other', - ] - end - - def step_cancel_reasons - [ - 'Match expired', - 'Vacancy should not have been entered', - 'Other', - ] - end - end -end diff --git a/app/models/concerns/match_decisions/default_shelter_agency_decline_reasons.rb b/app/models/concerns/match_decisions/default_shelter_agency_decline_reasons.rb deleted file mode 100644 index e632cb479..000000000 --- a/app/models/concerns/match_decisions/default_shelter_agency_decline_reasons.rb +++ /dev/null @@ -1,25 +0,0 @@ -### -# Copyright Green River Data Group, Inc. -# -# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md -### - -module MatchDecisions - module DefaultShelterAgencyDeclineReasons - extend ActiveSupport::Concern - - def step_decline_reasons(_contact) - [ - 'Client has another housing option', - 'Does not agree to services', - 'Unwilling to live in that neighborhood', - 'Unwilling to live in SRO', - 'Does not want housing at this time', - 'Unsafe environment for this person', - 'Client refused unit (non-SRO)', - 'Client refused voucher', - 'Other', - ] - end - end -end diff --git a/app/models/concerns/match_decisions/route_eight_cancel_reasons.rb b/app/models/concerns/match_decisions/route_eight_cancel_reasons.rb deleted file mode 100644 index d1088b6d3..000000000 --- a/app/models/concerns/match_decisions/route_eight_cancel_reasons.rb +++ /dev/null @@ -1,29 +0,0 @@ -### -# Copyright Green River Data Group, Inc. -# -# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md -### - -module MatchDecisions - module RouteEightCancelReasons - extend ActiveSupport::Concern - - def step_cancel_reasons - [ - 'Match expired', - 'Vacancy should not have been entered', - 'Client received another housing opportunity', - 'Client no longer eligible for match', - 'Client deceased', - 'Incarcerated', - 'Vacancy filled by other client', - 'Client has declined match', - 'Client has disengaged', - 'Client has disappeared', - 'Client needs higher level of care', - 'Unable to reach client after multiple attempts', - 'Other', - ] - end - end -end diff --git a/app/models/concerns/match_decisions/route_eleven_cancel_reasons.rb b/app/models/concerns/match_decisions/route_eleven_cancel_reasons.rb deleted file mode 100644 index 53d44e078..000000000 --- a/app/models/concerns/match_decisions/route_eleven_cancel_reasons.rb +++ /dev/null @@ -1,27 +0,0 @@ -### -# Copyright Green River Data Group, Inc. -# -# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md -### - -module MatchDecisions - module RouteElevenCancelReasons - extend ActiveSupport::Concern - - def step_cancel_reasons - [ - 'Incarcerated', - 'Match expired', - 'Client has declined match', - 'Client has disengaged', - 'Client has disappeared', - 'Vacancy should not have been entered', - 'Client received another housing opportunity', - 'Client is already receiving navigation services', - 'Client no longer eligible for match', - 'Client deceased', - 'Other', - ] - end - end -end diff --git a/app/models/concerns/match_decisions/route_eleven_decline_reasons.rb b/app/models/concerns/match_decisions/route_eleven_decline_reasons.rb deleted file mode 100644 index 306769682..000000000 --- a/app/models/concerns/match_decisions/route_eleven_decline_reasons.rb +++ /dev/null @@ -1,32 +0,0 @@ -### -# Copyright Green River Data Group, Inc. -# -# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md -### - -# frozen_string_literal: true - -module MatchDecisions - module RouteElevenDeclineReasons - extend ActiveSupport::Concern - - def step_decline_reasons(_contact) - [ - 'Client has another housing option', - 'Client is already receiving navigation services', - 'Health and Safety', - 'Does not agree to services', - 'Does not want housing at this time', - 'Incarcerated', - 'Client has disengaged', - 'Client has disappeared', - 'Client deceased', - 'Other', - ] - end - - def decline_reasons_not_other_requiring_explanation(contact = nil) - step_decline_reasons(contact).reject { |reason| reason == 'Other' } - end - end -end diff --git a/app/models/concerns/match_decisions/route_four_cancel_reasons.rb b/app/models/concerns/match_decisions/route_four_cancel_reasons.rb deleted file mode 100644 index 6dccd3599..000000000 --- a/app/models/concerns/match_decisions/route_four_cancel_reasons.rb +++ /dev/null @@ -1,34 +0,0 @@ -### -# Copyright Green River Data Group, Inc. -# -# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md -### - -module MatchDecisions - module RouteFourCancelReasons - extend ActiveSupport::Concern - - def step_cancel_reasons - [ - 'Vacancy should not have been entered', - 'Client received another housing opportunity', - 'Client no longer eligible for match', - 'Client deceased', - 'Incarcerated', - 'Vacancy filled by other client', - 'Client has declined match', - 'Client has disengaged', - 'Client has disappeared', - 'Match expired – No agency interaction', - 'Match expired – Agency interaction', - 'Match stalled - Agency has disengaged', - 'Match expired – No Housing Case Manager interaction', - 'Match expired – No Shelter Agency interaction', - 'Shelter Agency has disengaged', - 'Housing Case Manager has disengaged', - 'Match stalled – Housing Case Manager has disengaged', - 'Other', - ] - end - end -end diff --git a/app/models/concerns/match_decisions/route_four_shelter_agency_decline_reasons.rb b/app/models/concerns/match_decisions/route_four_shelter_agency_decline_reasons.rb deleted file mode 100644 index 60cd332d2..000000000 --- a/app/models/concerns/match_decisions/route_four_shelter_agency_decline_reasons.rb +++ /dev/null @@ -1,34 +0,0 @@ -### -# Copyright Green River Data Group, Inc. -# -# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md -### - -module MatchDecisions - module RouteFourShelterAgencyDeclineReasons - extend ActiveSupport::Concern - - def step_decline_reasons(_contact) - [ - 'Vacancy should not have been entered', - 'Client received another housing opportunity', - 'Client no longer eligible for match', - 'Client deceased', - 'Incarcerated', - 'Vacancy filled by other client', - 'Client has declined match', - 'Client has disengaged', - 'Client has disappeared', - 'Match expired – No agency interaction', - 'Match expired – Agency interaction', - 'Match stalled - Agency has disengaged', - 'Match expired – No Housing Case Manager interaction', - 'Match expired – No Shelter Agency interaction', - 'Shelter Agency has disengaged', - 'Housing Case Manager has disengaged', - 'Match stalled – Housing Case Manager has disengaged', - 'Other', - ] - end - end -end diff --git a/app/models/concerns/match_decisions/route_nine_cancel_reasons.rb b/app/models/concerns/match_decisions/route_nine_cancel_reasons.rb deleted file mode 100644 index 44f922c62..000000000 --- a/app/models/concerns/match_decisions/route_nine_cancel_reasons.rb +++ /dev/null @@ -1,29 +0,0 @@ -### -# Copyright Green River Data Group, Inc. -# -# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md -### - -module MatchDecisions - module RouteNineCancelReasons - extend ActiveSupport::Concern - - def step_cancel_reasons - [ - 'Match expired', - 'Vacancy should not have been entered', - 'Client received another housing opportunity', - 'Client no longer eligible for match', - 'Client deceased', - 'Incarcerated', - 'Vacancy filled by other client', - 'Client has declined match', - 'Client has disengaged', - 'Client has disappeared', - 'Client needs higher level of care', - 'Unable to reach client after multiple attempts', - 'Other', - ] - end - end -end diff --git a/app/models/concerns/match_decisions/route_nine_decline_reasons.rb b/app/models/concerns/match_decisions/route_nine_decline_reasons.rb deleted file mode 100644 index f749203d1..000000000 --- a/app/models/concerns/match_decisions/route_nine_decline_reasons.rb +++ /dev/null @@ -1,21 +0,0 @@ -### -# Copyright Green River Data Group, Inc. -# -# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md -### - -module MatchDecisions - module RouteNineDeclineReasons - extend ActiveSupport::Concern - - def step_decline_reasons - [ - "Client won't be eligible for services", - "Client won't be eligible for housing type", - "Client won't be eligible based on funding source", - 'Client has another housing option', - 'Other', - ] - end - end -end diff --git a/app/models/concerns/match_decisions/route_one_decline_reasons.rb b/app/models/concerns/match_decisions/route_one_decline_reasons.rb deleted file mode 100644 index de119a839..000000000 --- a/app/models/concerns/match_decisions/route_one_decline_reasons.rb +++ /dev/null @@ -1,17 +0,0 @@ -### -# Copyright Green River Data Group, Inc. -# -# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md -### - -# frozen_string_literal: true - -module MatchDecisions - module RouteOneDeclineReasons - extend ActiveSupport::Concern - - def decline_reasons_not_other_requiring_explanation(contact = nil) - step_decline_reasons(contact).reject { |reason| reason == 'Other' } - end - end -end diff --git a/app/models/concerns/match_decisions/route_six_cancel_reasons.rb b/app/models/concerns/match_decisions/route_six_cancel_reasons.rb deleted file mode 100644 index 1d09d7ed3..000000000 --- a/app/models/concerns/match_decisions/route_six_cancel_reasons.rb +++ /dev/null @@ -1,25 +0,0 @@ -### -# Copyright Green River Data Group, Inc. -# -# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md -### - -module MatchDecisions - module RouteSixCancelReasons - extend ActiveSupport::Concern - - def step_cancel_reasons - [ - 'Incarcerated', - 'Match expired', - 'Client has declined match', - 'Client has disengaged', - 'Client has disappeared', - 'Vacancy should not have been entered', - 'Client received another housing opportunity', - 'Client no longer eligible for match', - 'Client deceased', - ] - end - end -end diff --git a/app/models/concerns/match_decisions/route_six_decline_reasons.rb b/app/models/concerns/match_decisions/route_six_decline_reasons.rb deleted file mode 100644 index 51e139219..000000000 --- a/app/models/concerns/match_decisions/route_six_decline_reasons.rb +++ /dev/null @@ -1,26 +0,0 @@ -### -# Copyright Green River Data Group, Inc. -# -# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md -### - -module MatchDecisions - module RouteSixDeclineReasons - extend ActiveSupport::Concern - - def step_decline_reasons(_contact) - [ - 'Does not agree to services', - 'Does not want housing at this time', - 'Incarcerated', - 'Client has disengaged', - 'Client has disappeared', - 'Client has another housing option', - 'Client deceased', - 'Other', - 'Health and Safety', - 'Client receiving navigation services', - ] - end - end -end diff --git a/app/models/concerns/match_decisions/route_ten_cancel_reasons.rb b/app/models/concerns/match_decisions/route_ten_cancel_reasons.rb deleted file mode 100644 index 55b42f22d..000000000 --- a/app/models/concerns/match_decisions/route_ten_cancel_reasons.rb +++ /dev/null @@ -1,29 +0,0 @@ -### -# Copyright Green River Data Group, Inc. -# -# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md -### - -module MatchDecisions - module RouteTenCancelReasons - extend ActiveSupport::Concern - - def step_cancel_reasons - [ - 'Client needs higher level of care', - 'Unable to reach client after multiple attempts', - 'Incarcerated', - 'Match expired', - 'Client has declined match', - 'Client has disengaged', - 'Client has disappeared', - 'Vacancy should not have been entered', - 'Client received another housing opportunity', - 'Client no longer eligible for match', - 'Client deceased', - 'Vacancy filled by other client', - 'Other', - ] - end - end -end diff --git a/app/models/concerns/match_decisions/route_ten_decline_reasons.rb b/app/models/concerns/match_decisions/route_ten_decline_reasons.rb deleted file mode 100644 index 954803ea0..000000000 --- a/app/models/concerns/match_decisions/route_ten_decline_reasons.rb +++ /dev/null @@ -1,24 +0,0 @@ -### -# Copyright Green River Data Group, Inc. -# -# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md -### - -module MatchDecisions - module RouteTenDeclineReasons - extend ActiveSupport::Concern - - def step_decline_reasons(_contact) - [ - 'Immigration status', - 'Household did not respond after initial acceptance of match', - 'Ineligible for Housing Program', - 'Client refused offer', - 'Self-resolved', - 'Client needs higher level of care', - 'Unable to reach client after multiple attempts', - 'Other', - ] - end - end -end diff --git a/app/models/concerns/match_decisions/route_thirteen_cancel_reasons.rb b/app/models/concerns/match_decisions/route_thirteen_cancel_reasons.rb deleted file mode 100644 index d0259c461..000000000 --- a/app/models/concerns/match_decisions/route_thirteen_cancel_reasons.rb +++ /dev/null @@ -1,44 +0,0 @@ -### -# Copyright Green River Data Group, Inc. -# -# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md -### - -module MatchDecisions - module RouteThirteenCancelReasons - extend ActiveSupport::Concern - - def pre_hsa_decision? - [ - 'MatchDecisions::Thirteen::ThirteenClientMatch', - 'MatchDecisions::Thirteen::ThirteenMatchAcknowledgement', - 'MatchDecisions::Thirteen::ThirteenClientReview', - ].include?(type) - end - - def match_success_decision? - type == 'MatchDecisions::Thirteen::ThirteenConfirmMatchSuccess' - end - - def step_cancel_reasons - [].tap do |reasons| - reasons << 'Incarcerated' - reasons << 'Institutionalized' - reasons << 'In Treatment/Recovery Center' - reasons << 'Match expired' if pre_hsa_decision? - reasons << 'Client has declined match' unless pre_hsa_decision? - reasons << 'Client has disengaged' unless pre_hsa_decision? - reasons << 'Client has disappeared' unless pre_hsa_decision? - reasons << 'CORI' unless pre_hsa_decision? - reasons << 'SORI' unless pre_hsa_decision? - reasons << 'Vacancy should not have been entered' - reasons << 'Client received another housing opportunity' - reasons << 'Client no longer eligible for match' unless match_success_decision? - reasons << 'Client deceased' - reasons << 'Vacancy filled by other client' unless pre_hsa_decision? || match_success_decision? - reasons << 'Health and Safety' unless match_success_decision? - reasons << 'Other' - end - end - end -end diff --git a/app/models/concerns/match_decisions/route_thirteen_decline_reasons.rb b/app/models/concerns/match_decisions/route_thirteen_decline_reasons.rb deleted file mode 100644 index 603f222b8..000000000 --- a/app/models/concerns/match_decisions/route_thirteen_decline_reasons.rb +++ /dev/null @@ -1,39 +0,0 @@ -### -# Copyright Green River Data Group, Inc. -# -# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md -### - -# frozen_string_literal: true - -module MatchDecisions - module RouteThirteenDeclineReasons - extend ActiveSupport::Concern - - def step_decline_reasons(_contact) - [ - 'SORI', - 'CORI', - 'Does not agree to services', - 'Unsafe environment for this person', - 'Unwilling to live in that neighborhood', - 'Unwilling to live in SRO', - 'Does not want housing at this time', - 'Falsification of documents', - 'Client has another housing option', - 'Household did not respond after initial acceptance of match', - 'Ineligible for Housing Program', # Additional Text Required - 'Client refused offer', - 'Client refused unit (non-SRO)', - 'Additional screening criteria imposed by third parties', # Additional Text Required - 'Health and Safety', - 'Client refused voucher', - 'Other', - ] - end - - def decline_reasons_not_other_requiring_explanation(contact = nil) - step_decline_reasons(contact).reject { |reason| reason == 'Other' } - end - end -end diff --git a/app/models/concerns/match_decisions/route_three_decline_reasons.rb b/app/models/concerns/match_decisions/route_three_decline_reasons.rb deleted file mode 100644 index 712c00bca..000000000 --- a/app/models/concerns/match_decisions/route_three_decline_reasons.rb +++ /dev/null @@ -1,17 +0,0 @@ -### -# Copyright Green River Data Group, Inc. -# -# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md -### - -# frozen_string_literal: true - -module MatchDecisions - module RouteThreeDeclineReasons - extend ActiveSupport::Concern - - def decline_reasons_not_other_requiring_explanation(contact = nil) - step_decline_reasons(contact).reject { |reason| reason == 'Other' } - end - end -end diff --git a/app/models/concerns/match_decisions/route_twelve_cancel_reasons.rb b/app/models/concerns/match_decisions/route_twelve_cancel_reasons.rb deleted file mode 100644 index f28545b60..000000000 --- a/app/models/concerns/match_decisions/route_twelve_cancel_reasons.rb +++ /dev/null @@ -1,29 +0,0 @@ -### -# Copyright Green River Data Group, Inc. -# -# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md -### - -module MatchDecisions - module RouteTwelveCancelReasons - extend ActiveSupport::Concern - - def step_cancel_reasons - [ - 'Client needs higher level of care', - 'Unable to reach client after multiple attempts', - 'Incarcerated', - 'Match expired', - 'Client has declined match', - 'Client has disengaged', - 'Client has disappeared', - 'Vacancy should not have been entered', - 'Client received another housing opportunity', - 'Client no longer eligible for match', - 'Client deceased', - 'Vacancy filled by other client', - 'Other', - ] - end - end -end diff --git a/app/models/concerns/match_decisions/route_twelve_decline_reasons.rb b/app/models/concerns/match_decisions/route_twelve_decline_reasons.rb deleted file mode 100644 index 4a67455f4..000000000 --- a/app/models/concerns/match_decisions/route_twelve_decline_reasons.rb +++ /dev/null @@ -1,24 +0,0 @@ -### -# Copyright Green River Data Group, Inc. -# -# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md -### - -module MatchDecisions - module RouteTwelveDeclineReasons - extend ActiveSupport::Concern - - def step_decline_reasons(_contact) - [ - 'Immigration status', - 'Household did not respond after initial acceptance of match', - 'Ineligible for Housing Program', - 'Client refused offer', - 'Self-resolved', - 'Client needs higher level of care', - 'Unable to reach client after multiple attempts', - 'Other', - ] - end - end -end diff --git a/app/models/concerns/match_decisions/route_two_decline_reasons.rb b/app/models/concerns/match_decisions/route_two_decline_reasons.rb deleted file mode 100644 index 37765ac55..000000000 --- a/app/models/concerns/match_decisions/route_two_decline_reasons.rb +++ /dev/null @@ -1,17 +0,0 @@ -### -# Copyright Green River Data Group, Inc. -# -# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md -### - -# frozen_string_literal: true - -module MatchDecisions - module RouteTwoDeclineReasons - extend ActiveSupport::Concern - - def decline_reasons_not_other_requiring_explanation(contact = nil) - step_decline_reasons(contact).reject { |reason| reason == 'Other' } - end - end -end diff --git a/app/models/match_decision_reason_assignment.rb b/app/models/match_decision_reason_assignment.rb new file mode 100644 index 000000000..aa6360e4f --- /dev/null +++ b/app/models/match_decision_reason_assignment.rb @@ -0,0 +1,43 @@ +### +# Copyright Green River Data Group, Inc. +# +# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md +### + +# frozen_string_literal: true + +class MatchDecisionReasonAssignment < ApplicationRecord + acts_as_paranoid + has_paper_trail + + KIND_DECLINE = 'decline' + KIND_CANCEL = 'cancel' + KINDS = [KIND_DECLINE, KIND_CANCEL].freeze + + belongs_to :route, class_name: 'MatchRoutes::Base' + belongs_to :match_decision_reason, class_name: 'MatchDecisionReasons::Base' + + validates :kind, inclusion: { in: KINDS } + validates :decision_type, presence: true + validates :audience, inclusion: { in: ->(assignment) { assignment.route&.visible_contact_types&.map(&:to_s) || [] }, allow_blank: true } + validate :audience_only_on_steps_supporting_multiple_actors + + scope :ordered, -> { order(:position, :id) } + scope :with_active_reason, -> { joins(:match_decision_reason).merge(MatchDecisionReasons::Base.active) } + + def self.resolve_for(route:, decision_type:, kind:) + where(route: route, decision_type: decision_type, kind: kind).with_active_reason.ordered.to_a + end + + private def audience_only_on_steps_supporting_multiple_actors + return if audience.blank? + + if kind != KIND_DECLINE + errors.add(:audience, 'is only applicable to decline reasons') + return + end + + decision_class = decision_type&.safe_constantize + errors.add(:audience, 'is not applicable to this step') unless decision_class&.new&.supports_multiple_actors? + end +end diff --git a/app/models/match_decision_step.rb b/app/models/match_decision_step.rb new file mode 100644 index 000000000..bbc34be1f --- /dev/null +++ b/app/models/match_decision_step.rb @@ -0,0 +1,28 @@ +### +# Copyright Green River Data Group, Inc. +# +# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md +### + +# frozen_string_literal: true + +class MatchDecisionStep < ApplicationRecord + belongs_to :route, class_name: 'MatchRoutes::Base' + + validates :decision_type, presence: true, uniqueness: { scope: :route_id } + + def supports_declines? + decision_class = decision_type.safe_constantize + decision_class.present? && decision_class.include?(MatchDecisions::AcceptsDeclineReason) + end + + def supports_multiple_actors? + decision_class = decision_type.safe_constantize + decision_class.present? && decision_class.new.supports_multiple_actors? + end + + # Matches how the match page labels the "Current Step" (@match.current_decision.step_name). + def display_name + decision_type.safe_constantize&.new&.step_name || decision_type.demodulize.titleize + end +end diff --git a/app/models/match_decisions/approve_match_housing_subsidy_admin.rb b/app/models/match_decisions/approve_match_housing_subsidy_admin.rb index 811d313cd..760bb393d 100644 --- a/app/models/match_decisions/approve_match_housing_subsidy_admin.rb +++ b/app/models/match_decisions/approve_match_housing_subsidy_admin.rb @@ -9,7 +9,6 @@ module MatchDecisions class ApproveMatchHousingSubsidyAdmin < Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteOneDeclineReasons # validate :note_present_if_status_declined @@ -112,42 +111,8 @@ def declineable_by?(contact) contact.in?(match.shelter_agency_contacts) end - def step_decline_reasons(contact) - shelter_agency_contact_reasons = [ - 'Client has another housing option', - 'Does not agree to services', - 'Unwilling to live in that neighborhood', - 'Unwilling to live in SRO', - 'Does not want housing at this time', - 'Unsafe environment for this person', - 'Client refused unit (non-SRO)', - 'Client refused voucher', - 'Other', - ] - - hsa_contact_reasons = [ - 'CORI', - 'SORI', - 'Client needs higher level of care', - 'Unable to reach client after multiple attempts', - 'Household did not respond after initial acceptance of match', - 'Ineligible for Housing Program', - 'Client refused offer', - 'Self-resolved', - 'Falsification of documents', - 'Additional screening criteria imposed by third parties', - 'Health and Safety', - 'Other', - ] - combined_reasons ||= (shelter_agency_contact_reasons + hsa_contact_reasons).uniq - - if contact&.user&.can_act_on_behalf_of_match_contacts? - combined_reasons - elsif contact.in?(match.shelter_agency_contacts) - shelter_agency_contact_reasons - else - hsa_contact_reasons - end + def supports_multiple_actors? + true end class StatusCallbacks < StatusCallbacks diff --git a/app/models/match_decisions/base.rb b/app/models/match_decisions/base.rb index 861403ce5..ed30ee344 100644 --- a/app/models/match_decisions/base.rb +++ b/app/models/match_decisions/base.rb @@ -64,6 +64,7 @@ class Base < ApplicationRecord validate :ensure_status_allowed, if: :status validate :cancellations + before_save :snapshot_administrative_cancel_reason_text #################### # Attributes @@ -207,6 +208,13 @@ def declineable_by?(_contact) false end + # Override to return true for a step where more than one contact type can + # independently act on it (e.g. both a shelter agency contact and an HSA + # contact can decline it), each seeing a different, audience-scoped set of reasons. + def supports_multiple_actors? + false + end + ###################### # Decision Lifecycle ###################### @@ -482,10 +490,11 @@ def self.stalled_match_filter_options end def canceled_status_label + reason_text = administrative_cancel_reason_text.presence || administrative_cancel_reason&.name if administrative_cancel_reason_other_explanation.present? - "Match #{Translation.translate('canceled administratively')}: #{administrative_cancel_reason&.name} (#{administrative_cancel_reason_other_explanation})" + "Match #{Translation.translate('canceled administratively')}: #{reason_text} (#{administrative_cancel_reason_other_explanation})" elsif administrative_cancel_reason.present? - "Match #{Translation.translate('canceled administratively')}: #{administrative_cancel_reason.name}" + "Match #{Translation.translate('canceled administratively')}: #{reason_text}" else "Match #{Translation.translate('canceled administratively')}" end @@ -514,45 +523,50 @@ def incomplete_active_done? self.class.const_get :StatusCallbacks end + def cancel_reason_assignments(contact = nil) + assignments = MatchDecisionReasonAssignment.resolve_for(route: match_route, decision_type: self.class.name, kind: MatchDecisionReasonAssignment::KIND_CANCEL) + filter_reason_assignments_by_audience(assignments, contact) + end + def step_cancel_reasons - [ - 'Match expired', - 'Client has declined match', - 'Client has disengaged', - 'Client has disappeared', - 'SSP CORI', - 'HSP CORI', - 'Incarcerated', - 'Vacancy should not have been entered', - 'Client received another housing opportunity', - 'Client no longer eligible for match', - 'Client deceased', - 'Vacancy filled by other client', - 'Other', - ] + cancel_reason_assignments.map { |assignment| assignment.match_decision_reason.name } end - def cancel_reasons - result = [] - MatchDecisionReasons::All.where(name: step_cancel_reasons).each do |reason| - result << reason - end - result.sort_by! { |m| [m.name.downcase == 'other' ? 1 : 0, m.name.downcase] } - result.map! do |reason| + def cancel_reasons(contact: nil) + not_other_requiring_explanation = cancel_reasons_not_other_requiring_explanation(contact) + cancel_reason_assignments(contact).map do |assignment| + reason = assignment.match_decision_reason # Only include the asterisks if more than 'Other' requires additional explanation - include_asterisk = cancel_reasons_not_other_requiring_explanation.present? && (reason.other? || cancel_reasons_not_other_requiring_explanation.include?(reason.name)) + include_asterisk = not_other_requiring_explanation.present? && (reason.other? || not_other_requiring_explanation.include?(reason.name)) name = reason.name name += '*' if include_asterisk [name, reason.id] end end + # A reason assignment with a blank audience is visible to everyone. A contact who + # can act on behalf of match contacts (e.g. an admin) sees every audience. + private def filter_reason_assignments_by_audience(assignments, contact) + return assignments if contact.nil? || contact.user_can_act_on_behalf_of_match_contacts? + + assignments.select { |assignment| assignment.audience.blank? || contact.in?(match.public_send(assignment.audience)) } + end + + def effective_referral_result + reason = decline_reason || administrative_cancel_reason + return nil unless reason + + kind = decline_reason ? MatchDecisionReasonAssignment::KIND_DECLINE : MatchDecisionReasonAssignment::KIND_CANCEL + assignment = MatchDecisionReasonAssignment.find_by(route: match_route, decision_type: self.class.name, match_decision_reason: reason, kind: kind) + assignment&.referral_result || reason.referral_result || MatchDecisionStep.find_by(route: match_route, decision_type: self.class.name)&.default_referral_result + end + def decline_reasons_not_other_requiring_explanation(_contact = nil) [] end - def cancel_reasons_not_other_requiring_explanation - [] + def cancel_reasons_not_other_requiring_explanation(contact = nil) + cancel_reason_assignments(contact).select(&:requires_explanation).map { |assignment| assignment.match_decision_reason.name } end private def ensure_status_allowed @@ -566,6 +580,10 @@ def cancel_reasons_not_other_requiring_explanation errors.add :administrative_cancel_reason_other_explanation, "must be filled in if choosing '#{administrative_cancel_reason&.name}'" if explanation_field_required && administrative_cancel_reason_other_explanation&.blank? end + private def snapshot_administrative_cancel_reason_text + self.administrative_cancel_reason_text = administrative_cancel_reason.name if administrative_cancel_reason_id_changed? && administrative_cancel_reason.present? + end + private def notification_class "Notifications::#{self.class.to_s.demodulize}".constantize end diff --git a/app/models/match_decisions/eight/eight_assign_manager.rb b/app/models/match_decisions/eight/eight_assign_manager.rb index 0cd2f68ea..a9022df80 100644 --- a/app/models/match_decisions/eight/eight_assign_manager.rb +++ b/app/models/match_decisions/eight/eight_assign_manager.rb @@ -4,10 +4,11 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Eight class EightAssignManager < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteEightCancelReasons validate :ensure_required_contacts_present_on_complete @@ -101,12 +102,6 @@ def accessible_by? contact contact.in?(match.send(contact_actor_type)) end - def step_decline_reasons(_contact) - [ - 'Other', - ] - end - def whitelist_params_for_update params super.merge params.require(:decision).permit( :manager, diff --git a/app/models/match_decisions/eight/eight_confirm_assign_manager_decline.rb b/app/models/match_decisions/eight/eight_confirm_assign_manager_decline.rb index b1fa1f6d3..60c81a4af 100644 --- a/app/models/match_decisions/eight/eight_confirm_assign_manager_decline.rb +++ b/app/models/match_decisions/eight/eight_confirm_assign_manager_decline.rb @@ -4,10 +4,11 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Eight class EightConfirmAssignManagerDecline < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteEightCancelReasons def step_name "#{Translation.translate('DND')} confirms case manager assignment decline" diff --git a/app/models/match_decisions/eight/eight_confirm_lease_up_decline.rb b/app/models/match_decisions/eight/eight_confirm_lease_up_decline.rb index ec21a9866..67768ef55 100644 --- a/app/models/match_decisions/eight/eight_confirm_lease_up_decline.rb +++ b/app/models/match_decisions/eight/eight_confirm_lease_up_decline.rb @@ -4,10 +4,11 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Eight class EightConfirmLeaseUpDecline < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteEightCancelReasons def step_name "#{Translation.translate('DND')} confirms #{Translation.translate('Move In')} failure" @@ -79,18 +80,5 @@ def canceled end end private_constant :StatusCallbacks - - def step_decline_reasons(_contact) - [ - 'Immigration status', - 'Ineligible for Housing Program', - 'Self-resolved', - 'Household did not respond after initial acceptance of match', - 'Client refused offer', - 'Client needs higher level of care', - 'Unable to reach client after multiple attempts', - 'Other', - ] - end end end diff --git a/app/models/match_decisions/eight/eight_confirm_match_success.rb b/app/models/match_decisions/eight/eight_confirm_match_success.rb index 0296478d2..ea419dcfb 100644 --- a/app/models/match_decisions/eight/eight_confirm_match_success.rb +++ b/app/models/match_decisions/eight/eight_confirm_match_success.rb @@ -4,10 +4,10 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Eight class EightConfirmMatchSuccess < ::MatchDecisions::Base - include MatchDecisions::RouteEightCancelReasons - def statuses { pending: 'Pending', diff --git a/app/models/match_decisions/eight/eight_lease_up.rb b/app/models/match_decisions/eight/eight_lease_up.rb index e827c60cc..e95a0f5d6 100644 --- a/app/models/match_decisions/eight/eight_lease_up.rb +++ b/app/models/match_decisions/eight/eight_lease_up.rb @@ -9,7 +9,6 @@ module MatchDecisions::Eight class EightLeaseUp < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteEightCancelReasons validate :client_move_in_date_present_if_status_complete @@ -104,19 +103,6 @@ def accessible_by? contact contact.in?(match.send(contact_actor_type)) end - def step_decline_reasons(_contact) - [ - 'Immigration status', - 'Ineligible for Housing Program', - 'Self-resolved', - 'Household did not respond after initial acceptance of match', - 'Client refused offer', - 'Client needs higher level of care', - 'Unable to reach client after multiple attempts', - 'Other', - ] - end - def whitelist_params_for_update params super.merge params.require(:decision).permit( :client_move_in_date, diff --git a/app/models/match_decisions/eight/eight_match_recommendation.rb b/app/models/match_decisions/eight/eight_match_recommendation.rb index 845931f2e..6a0c36f73 100644 --- a/app/models/match_decisions/eight/eight_match_recommendation.rb +++ b/app/models/match_decisions/eight/eight_match_recommendation.rb @@ -4,11 +4,11 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Eight class EightMatchRecommendation < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::DefaultDndStaffDeclineReasons - include MatchDecisions::RouteEightCancelReasons validate :cant_accept_if_match_closed validate :cant_accept_if_related_active_match diff --git a/app/models/match_decisions/eight/eight_record_voucher_date.rb b/app/models/match_decisions/eight/eight_record_voucher_date.rb index eba726d81..f4da591d6 100644 --- a/app/models/match_decisions/eight/eight_record_voucher_date.rb +++ b/app/models/match_decisions/eight/eight_record_voucher_date.rb @@ -9,7 +9,6 @@ module MatchDecisions::Eight class EightRecordVoucherDate < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteEightCancelReasons validate :date_voucher_issued_present_if_status_complete @@ -90,19 +89,6 @@ def accessible_by? contact contact.in?(match.send(contact_actor_type)) end - def step_decline_reasons(_contact) - [ - 'Immigration status', - 'Ineligible for Housing Program', - 'Self-resolved', - 'Household did not respond after initial acceptance of match', - 'Client refused offer', - 'Client needs higher level of care', - 'Unable to reach client after multiple attempts', - 'Other', - ] - end - class StatusCallbacks < StatusCallbacks def pending end diff --git a/app/models/match_decisions/eleven/eleven_confirm_hsa_accepts_client_decline_dnd_staff.rb b/app/models/match_decisions/eleven/eleven_confirm_hsa_accepts_client_decline_dnd_staff.rb index 6e4cd9794..e17c63cbe 100644 --- a/app/models/match_decisions/eleven/eleven_confirm_hsa_accepts_client_decline_dnd_staff.rb +++ b/app/models/match_decisions/eleven/eleven_confirm_hsa_accepts_client_decline_dnd_staff.rb @@ -4,11 +4,11 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Eleven class ElevenConfirmHsaAcceptsClientDeclineDndStaff < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteElevenDeclineReasons - include MatchDecisions::RouteElevenCancelReasons def to_partial_path 'match_decisions/eleven/confirm_hsa_accepts_client_decline_dnd_staff' diff --git a/app/models/match_decisions/eleven/eleven_confirm_match_success_dnd_staff.rb b/app/models/match_decisions/eleven/eleven_confirm_match_success_dnd_staff.rb index dfe36a07f..8ef753a75 100644 --- a/app/models/match_decisions/eleven/eleven_confirm_match_success_dnd_staff.rb +++ b/app/models/match_decisions/eleven/eleven_confirm_match_success_dnd_staff.rb @@ -4,11 +4,11 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Eleven class ElevenConfirmMatchSuccessDndStaff < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteElevenDeclineReasons - include MatchDecisions::RouteElevenCancelReasons def to_partial_path 'match_decisions/eleven/confirm_match_success_dnd_staff' diff --git a/app/models/match_decisions/eleven/eleven_hsa_accepts_client.rb b/app/models/match_decisions/eleven/eleven_hsa_accepts_client.rb index 3f2054bb2..140551d22 100644 --- a/app/models/match_decisions/eleven/eleven_hsa_accepts_client.rb +++ b/app/models/match_decisions/eleven/eleven_hsa_accepts_client.rb @@ -9,8 +9,6 @@ module MatchDecisions::Eleven class ElevenHsaAcceptsClient < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteElevenDeclineReasons - include MatchDecisions::RouteElevenCancelReasons def to_partial_path 'match_decisions/eleven/hsa_accepts_client' diff --git a/app/models/match_decisions/eleven/eleven_hsa_acknowledges_receipt.rb b/app/models/match_decisions/eleven/eleven_hsa_acknowledges_receipt.rb index ccacc62cf..edcf86751 100644 --- a/app/models/match_decisions/eleven/eleven_hsa_acknowledges_receipt.rb +++ b/app/models/match_decisions/eleven/eleven_hsa_acknowledges_receipt.rb @@ -4,11 +4,11 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Eleven class ElevenHsaAcknowledgesReceipt < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteElevenDeclineReasons - include MatchDecisions::RouteElevenCancelReasons def to_partial_path 'match_decisions/eleven/hsa_acknowledges_receipt' diff --git a/app/models/match_decisions/five/five_application_submission.rb b/app/models/match_decisions/five/five_application_submission.rb index 39f6699ff..c26a4e37b 100644 --- a/app/models/match_decisions/five/five_application_submission.rb +++ b/app/models/match_decisions/five/five_application_submission.rb @@ -4,10 +4,11 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Five class FiveApplicationSubmission < Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::DefaultShelterAgencyDeclineReasons validate :application_date_present_if_status_complete diff --git a/app/models/match_decisions/five/five_client_agrees.rb b/app/models/match_decisions/five/five_client_agrees.rb index a74fa56e9..288676bca 100644 --- a/app/models/match_decisions/five/five_client_agrees.rb +++ b/app/models/match_decisions/five/five_client_agrees.rb @@ -4,10 +4,11 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Five class FiveClientAgrees < Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::DefaultShelterAgencyDeclineReasons def step_name Translation.translate('Client Agrees To Match') diff --git a/app/models/match_decisions/five/five_lease_up.rb b/app/models/match_decisions/five/five_lease_up.rb index 63f8e2027..da57d40e6 100644 --- a/app/models/match_decisions/five/five_lease_up.rb +++ b/app/models/match_decisions/five/five_lease_up.rb @@ -9,7 +9,6 @@ module MatchDecisions::Five class FiveLeaseUp < Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::DefaultShelterAgencyDeclineReasons validate :client_move_in_date_present_if_status_complete diff --git a/app/models/match_decisions/five/five_match_recommendation.rb b/app/models/match_decisions/five/five_match_recommendation.rb index 34f9c91a7..f234e2ccf 100644 --- a/app/models/match_decisions/five/five_match_recommendation.rb +++ b/app/models/match_decisions/five/five_match_recommendation.rb @@ -4,10 +4,11 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Five class FiveMatchRecommendation < Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::DefaultHsaDeclineReasons validate :cant_accept_if_match_closed validate :cant_accept_if_related_active_match diff --git a/app/models/match_decisions/five/five_mitigation.rb b/app/models/match_decisions/five/five_mitigation.rb index 8cc91c431..eb7eac4ca 100644 --- a/app/models/match_decisions/five/five_mitigation.rb +++ b/app/models/match_decisions/five/five_mitigation.rb @@ -4,6 +4,8 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Five class FiveMitigation < Base include MatchDecisions::AcceptsDeclineReason @@ -95,12 +97,5 @@ def record_mitigations def accessible_by? contact contact.user_can_reject_matches? || contact.user_can_approve_matches? end - - def step_decline_reasons(_contact) - [ - 'Mitigation failed', - 'Other', - ] - end end end diff --git a/app/models/match_decisions/five/five_screening.rb b/app/models/match_decisions/five/five_screening.rb index 08bcff2dc..8ef68a47f 100644 --- a/app/models/match_decisions/five/five_screening.rb +++ b/app/models/match_decisions/five/five_screening.rb @@ -4,10 +4,11 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Five class FiveScreening < Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::DefaultShelterAgencyDeclineReasons attr_accessor :required_mitigations diff --git a/app/models/match_decisions/four/approve_match_housing_subsidy_admin.rb b/app/models/match_decisions/four/approve_match_housing_subsidy_admin.rb index bf3a8a47a..9f5411e11 100644 --- a/app/models/match_decisions/four/approve_match_housing_subsidy_admin.rb +++ b/app/models/match_decisions/four/approve_match_housing_subsidy_admin.rb @@ -9,8 +9,6 @@ module MatchDecisions::Four class ApproveMatchHousingSubsidyAdmin < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::DefaultHsaDeclineReasons - include MatchDecisions::RouteFourCancelReasons # validate :note_present_if_status_declined diff --git a/app/models/match_decisions/four/confirm_housing_subsidy_admin_decline_dnd_staff.rb b/app/models/match_decisions/four/confirm_housing_subsidy_admin_decline_dnd_staff.rb index b433273a1..b37f0beb8 100644 --- a/app/models/match_decisions/four/confirm_housing_subsidy_admin_decline_dnd_staff.rb +++ b/app/models/match_decisions/four/confirm_housing_subsidy_admin_decline_dnd_staff.rb @@ -4,10 +4,10 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Four class ConfirmHousingSubsidyAdminDeclineDndStaff < ::MatchDecisions::Base - include MatchDecisions::RouteFourCancelReasons - def statuses { pending: 'Pending', diff --git a/app/models/match_decisions/four/confirm_hsa_initial_decline_dnd_staff.rb b/app/models/match_decisions/four/confirm_hsa_initial_decline_dnd_staff.rb index c872550ef..2790ba68c 100644 --- a/app/models/match_decisions/four/confirm_hsa_initial_decline_dnd_staff.rb +++ b/app/models/match_decisions/four/confirm_hsa_initial_decline_dnd_staff.rb @@ -4,10 +4,10 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Four class ConfirmHsaInitialDeclineDndStaff < ::MatchDecisions::Base - include MatchDecisions::RouteFourCancelReasons - def statuses { pending: 'Pending', diff --git a/app/models/match_decisions/four/confirm_match_success_dnd_staff.rb b/app/models/match_decisions/four/confirm_match_success_dnd_staff.rb index b7bf20f0b..1d59e5c8a 100644 --- a/app/models/match_decisions/four/confirm_match_success_dnd_staff.rb +++ b/app/models/match_decisions/four/confirm_match_success_dnd_staff.rb @@ -4,9 +4,10 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Four class ConfirmMatchSuccessDndStaff < ::MatchDecisions::Base - include MatchDecisions::RouteFourCancelReasons # validate :note_present_if_status_rejected def statuses diff --git a/app/models/match_decisions/four/confirm_record_client_housed_date_decline_dnd_staff.rb b/app/models/match_decisions/four/confirm_record_client_housed_date_decline_dnd_staff.rb index 106c2c6ec..ef76cee3e 100644 --- a/app/models/match_decisions/four/confirm_record_client_housed_date_decline_dnd_staff.rb +++ b/app/models/match_decisions/four/confirm_record_client_housed_date_decline_dnd_staff.rb @@ -8,8 +8,6 @@ module MatchDecisions::Four class ConfirmRecordClientHousedDateDeclineDndStaff < ::MatchDecisions::Base - include MatchDecisions::RouteFourCancelReasons - def statuses { pending: 'Pending', diff --git a/app/models/match_decisions/four/confirm_schedule_criminal_hearing_decline_dnd_staff.rb b/app/models/match_decisions/four/confirm_schedule_criminal_hearing_decline_dnd_staff.rb index 6b7f99db4..4b52b1005 100644 --- a/app/models/match_decisions/four/confirm_schedule_criminal_hearing_decline_dnd_staff.rb +++ b/app/models/match_decisions/four/confirm_schedule_criminal_hearing_decline_dnd_staff.rb @@ -8,8 +8,6 @@ module MatchDecisions::Four class ConfirmScheduleCriminalHearingDeclineDndStaff < ::MatchDecisions::Base - include MatchDecisions::RouteFourCancelReasons - def statuses { pending: 'Pending', diff --git a/app/models/match_decisions/four/confirm_shelter_agency_decline_dnd_staff.rb b/app/models/match_decisions/four/confirm_shelter_agency_decline_dnd_staff.rb index 856387047..6aa3a3c29 100644 --- a/app/models/match_decisions/four/confirm_shelter_agency_decline_dnd_staff.rb +++ b/app/models/match_decisions/four/confirm_shelter_agency_decline_dnd_staff.rb @@ -4,10 +4,10 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Four class ConfirmShelterAgencyDeclineDndStaff < ::MatchDecisions::Base - include MatchDecisions::RouteFourCancelReasons - def statuses { pending: 'Pending', diff --git a/app/models/match_decisions/four/match_recommendation_dnd_staff.rb b/app/models/match_decisions/four/match_recommendation_dnd_staff.rb index 373798be8..bdce85e15 100644 --- a/app/models/match_decisions/four/match_recommendation_dnd_staff.rb +++ b/app/models/match_decisions/four/match_recommendation_dnd_staff.rb @@ -4,11 +4,11 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Four class MatchRecommendationDndStaff < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::DefaultDndStaffDeclineReasons - include MatchDecisions::RouteFourCancelReasons validate :cant_accept_if_match_closed validate :cant_accept_if_related_active_match diff --git a/app/models/match_decisions/four/match_recommendation_hsa.rb b/app/models/match_decisions/four/match_recommendation_hsa.rb index a44372ccb..2bbf052e6 100644 --- a/app/models/match_decisions/four/match_recommendation_hsa.rb +++ b/app/models/match_decisions/four/match_recommendation_hsa.rb @@ -10,8 +10,6 @@ module MatchDecisions::Four class MatchRecommendationHsa < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason include MatchDecisions::AcceptsNotWorkingWithClientReason - include MatchDecisions::DefaultShelterAgencyDeclineReasons - include MatchDecisions::RouteFourCancelReasons # proxy for client.release_of_information attr_accessor :release_of_information diff --git a/app/models/match_decisions/four/match_recommendation_shelter_agency.rb b/app/models/match_decisions/four/match_recommendation_shelter_agency.rb index 7a4376e1b..e9956fc98 100644 --- a/app/models/match_decisions/four/match_recommendation_shelter_agency.rb +++ b/app/models/match_decisions/four/match_recommendation_shelter_agency.rb @@ -10,8 +10,6 @@ module MatchDecisions::Four class MatchRecommendationShelterAgency < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason include MatchDecisions::AcceptsNotWorkingWithClientReason - include MatchDecisions::DefaultShelterAgencyDeclineReasons - include MatchDecisions::RouteFourCancelReasons # proxy for client.release_of_information attr_accessor :release_of_information diff --git a/app/models/match_decisions/four/record_client_housed_date_housing_subsidy_administrator.rb b/app/models/match_decisions/four/record_client_housed_date_housing_subsidy_administrator.rb index 15f1cc97b..7a793efed 100644 --- a/app/models/match_decisions/four/record_client_housed_date_housing_subsidy_administrator.rb +++ b/app/models/match_decisions/four/record_client_housed_date_housing_subsidy_administrator.rb @@ -9,8 +9,6 @@ module MatchDecisions::Four class RecordClientHousedDateHousingSubsidyAdministrator < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::DefaultHsaDeclineReasons - include MatchDecisions::RouteFourCancelReasons attr_accessor :building_id attr_accessor :unit_id diff --git a/app/models/match_decisions/four/schedule_criminal_hearing_housing_subsidy_admin.rb b/app/models/match_decisions/four/schedule_criminal_hearing_housing_subsidy_admin.rb index 715cb3a09..befaa84f1 100644 --- a/app/models/match_decisions/four/schedule_criminal_hearing_housing_subsidy_admin.rb +++ b/app/models/match_decisions/four/schedule_criminal_hearing_housing_subsidy_admin.rb @@ -9,8 +9,6 @@ module MatchDecisions::Four class ScheduleCriminalHearingHousingSubsidyAdmin < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::DefaultHsaDeclineReasons - include MatchDecisions::RouteFourCancelReasons validate :criminal_hearing_date_present_if_scheduled validate :criminal_hearing_date_absent_if_no_hearing diff --git a/app/models/match_decisions/homeless_set_aside/set_asides_hsa_accepts_client.rb b/app/models/match_decisions/homeless_set_aside/set_asides_hsa_accepts_client.rb index 60abb7b2a..b2ee812cd 100644 --- a/app/models/match_decisions/homeless_set_aside/set_asides_hsa_accepts_client.rb +++ b/app/models/match_decisions/homeless_set_aside/set_asides_hsa_accepts_client.rb @@ -9,8 +9,6 @@ module MatchDecisions::HomelessSetAside class SetAsidesHsaAcceptsClient < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::DefaultSetAsidesDeclineReasons - include MatchDecisions::RouteThreeDeclineReasons # validate :note_present_if_status_declined validate :ensure_required_contacts_present_on_accept diff --git a/app/models/match_decisions/homeless_set_aside/set_asides_record_client_housed_date_or_decline_housing_subsidy_administrator.rb b/app/models/match_decisions/homeless_set_aside/set_asides_record_client_housed_date_or_decline_housing_subsidy_administrator.rb index 00ff682ff..1506aa5fc 100644 --- a/app/models/match_decisions/homeless_set_aside/set_asides_record_client_housed_date_or_decline_housing_subsidy_administrator.rb +++ b/app/models/match_decisions/homeless_set_aside/set_asides_record_client_housed_date_or_decline_housing_subsidy_administrator.rb @@ -9,8 +9,6 @@ module MatchDecisions::HomelessSetAside class SetAsidesRecordClientHousedDateOrDeclineHousingSubsidyAdministrator < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::DefaultSetAsidesDeclineReasons - include MatchDecisions::RouteThreeDeclineReasons attr_accessor :building_id attr_accessor :unit_id diff --git a/app/models/match_decisions/match_recommendation_dnd_staff.rb b/app/models/match_decisions/match_recommendation_dnd_staff.rb index 3b4742682..c65d85340 100644 --- a/app/models/match_decisions/match_recommendation_dnd_staff.rb +++ b/app/models/match_decisions/match_recommendation_dnd_staff.rb @@ -4,10 +4,11 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions class MatchRecommendationDndStaff < Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::DefaultDndStaffDeclineReasons validate :cant_accept_if_match_closed validate :cant_accept_if_related_active_match diff --git a/app/models/match_decisions/match_recommendation_shelter_agency.rb b/app/models/match_decisions/match_recommendation_shelter_agency.rb index daf06d7db..af848f208 100644 --- a/app/models/match_decisions/match_recommendation_shelter_agency.rb +++ b/app/models/match_decisions/match_recommendation_shelter_agency.rb @@ -9,8 +9,6 @@ module MatchDecisions class MatchRecommendationShelterAgency < Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::DefaultShelterAgencyDeclineReasons - include MatchDecisions::RouteOneDeclineReasons include MatchDecisions::AcceptsNotWorkingWithClientReason # proxy for client.release_of_information diff --git a/app/models/match_decisions/nine/nine_assign_case_contact.rb b/app/models/match_decisions/nine/nine_assign_case_contact.rb index cf967412f..59329b09e 100644 --- a/app/models/match_decisions/nine/nine_assign_case_contact.rb +++ b/app/models/match_decisions/nine/nine_assign_case_contact.rb @@ -4,11 +4,11 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Nine class NineAssignCaseContact < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteNineDeclineReasons - include MatchDecisions::RouteNineCancelReasons validate :ensure_required_contacts_present_on_accept @@ -87,24 +87,6 @@ def accessible_by? contact contact.in?(match.send(contact_actor_type)) end - def step_decline_reasons(_contact) - [ - 'Other', - ] - end - - def step_cancel_reasons - [ - 'Match expired', - 'Client has disengaged', - 'Client has disappeared', - 'Incarcerated', - 'Client received another housing opportunity', - 'Client no longer eligible for match', - 'Other', - ] - end - def whitelist_params_for_update params super.merge params.require(:decision).permit( :client_move_in_date, diff --git a/app/models/match_decisions/nine/nine_assign_manager.rb b/app/models/match_decisions/nine/nine_assign_manager.rb index 9d43343c2..9efe19cef 100644 --- a/app/models/match_decisions/nine/nine_assign_manager.rb +++ b/app/models/match_decisions/nine/nine_assign_manager.rb @@ -4,11 +4,11 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Nine class NineAssignManager < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteNineDeclineReasons - include MatchDecisions::RouteNineCancelReasons validate :manager_present_if_status_complete @@ -102,12 +102,6 @@ def accessible_by? contact contact.in?(match.send(contact_actor_type)) end - def step_decline_reasons(_contact) - [ - 'Other', - ] - end - def whitelist_params_for_update params super.merge params.require(:decision).permit( :manager, diff --git a/app/models/match_decisions/nine/nine_confirm_assign_manager_decline.rb b/app/models/match_decisions/nine/nine_confirm_assign_manager_decline.rb index 138a36ac5..b675a5919 100644 --- a/app/models/match_decisions/nine/nine_confirm_assign_manager_decline.rb +++ b/app/models/match_decisions/nine/nine_confirm_assign_manager_decline.rb @@ -4,11 +4,11 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Nine class NineConfirmAssignManagerDecline < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteNineDeclineReasons - include MatchDecisions::RouteNineCancelReasons def step_name "#{Translation.translate('DND')} confirms case manager assignment decline" diff --git a/app/models/match_decisions/nine/nine_confirm_lease_up_decline.rb b/app/models/match_decisions/nine/nine_confirm_lease_up_decline.rb index 4ce7bf34b..e6e82534d 100644 --- a/app/models/match_decisions/nine/nine_confirm_lease_up_decline.rb +++ b/app/models/match_decisions/nine/nine_confirm_lease_up_decline.rb @@ -4,11 +4,11 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Nine class NineConfirmLeaseUpDecline < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteNineDeclineReasons - include MatchDecisions::RouteNineCancelReasons def step_name "#{Translation.translate('DND')} confirms #{Translation.translate('Move In')} failure" @@ -80,18 +80,5 @@ def canceled end end private_constant :StatusCallbacks - - def step_decline_reasons(_contact) - [ - 'Immigration status', - 'Ineligible for Housing Program', - 'Self-resolved', - 'Household did not respond after initial acceptance of match', - 'Client refused offer', - 'Client needs higher level of care', - 'Unable to reach client after multiple attempts', - 'Other', - ].freeze - end end end diff --git a/app/models/match_decisions/nine/nine_confirm_voucher_decline.rb b/app/models/match_decisions/nine/nine_confirm_voucher_decline.rb index be5922184..990be36a8 100644 --- a/app/models/match_decisions/nine/nine_confirm_voucher_decline.rb +++ b/app/models/match_decisions/nine/nine_confirm_voucher_decline.rb @@ -4,10 +4,10 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Nine class NineConfirmVoucherDecline < ::MatchDecisions::Base - include MatchDecisions::RouteNineCancelReasons - def statuses { pending: 'Pending', diff --git a/app/models/match_decisions/nine/nine_lease_up.rb b/app/models/match_decisions/nine/nine_lease_up.rb index 574a529c4..7cb404f9d 100644 --- a/app/models/match_decisions/nine/nine_lease_up.rb +++ b/app/models/match_decisions/nine/nine_lease_up.rb @@ -9,8 +9,6 @@ module MatchDecisions::Nine class NineLeaseUp < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteNineDeclineReasons - include MatchDecisions::RouteNineCancelReasons validate :client_move_in_date_present_if_status_complete @@ -105,19 +103,6 @@ def accessible_by? contact contact.in?(match.send(contact_actor_type)) end - def step_decline_reasons(_contact) - [ - 'Immigration status', - 'Ineligible for Housing Program', - 'Self-resolved', - 'Household did not respond after initial acceptance of match', - 'Client refused offer', - 'Client needs higher level of care', - 'Unable to reach client after multiple attempts', - 'Other', - ] - end - def whitelist_params_for_update params super.merge params.require(:decision).permit( :client_move_in_date, diff --git a/app/models/match_decisions/nine/nine_match_recommendation.rb b/app/models/match_decisions/nine/nine_match_recommendation.rb index 7f050dd13..20cd766df 100644 --- a/app/models/match_decisions/nine/nine_match_recommendation.rb +++ b/app/models/match_decisions/nine/nine_match_recommendation.rb @@ -4,11 +4,11 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Nine class NineMatchRecommendation < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteNineDeclineReasons - include MatchDecisions::DefaultDndStaffDeclineReasons validate :cant_accept_if_match_closed validate :cant_accept_if_related_active_match @@ -69,17 +69,6 @@ def notifications_for_this_step end end - def step_cancel_reasons - [ - 'Match expired', - 'Client has disengaged', - 'Client has disappeared', - 'Incarcerated', - 'Client no longer eligible for match', - 'Other', - ] - end - class StatusCallbacks < StatusCallbacks def pending end diff --git a/app/models/match_decisions/nine/nine_record_voucher_date.rb b/app/models/match_decisions/nine/nine_record_voucher_date.rb index 7b03c823b..efc68bc41 100644 --- a/app/models/match_decisions/nine/nine_record_voucher_date.rb +++ b/app/models/match_decisions/nine/nine_record_voucher_date.rb @@ -9,8 +9,6 @@ module MatchDecisions::Nine class NineRecordVoucherDate < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteNineDeclineReasons - include MatchDecisions::RouteNineCancelReasons attr_accessor :rfta_submitted @@ -105,23 +103,6 @@ def accessible_by? contact # :nine_record_voucher_date_housing_subsidy_admin # end - def step_decline_reasons(_contact) - [ - 'Client has another housing option', - 'Client needs higher level of care', - 'Client refused offer', - "Client won't be eligible based on funding source", - "Client won't be eligible for housing type", - "Client won't be eligible for services", - 'Household became disengaged', - 'Immigration status', - 'Ineligible for Housing Program', - 'Self-resolved', - 'Unable to reach client after multiple attempts', - 'Other', - ] - end - # Only record an event if we moved forward (which only happens if rfta_submitted is checked) def record_action_event! contact: return unless rfta_submitted == true || rfta_submitted.to_s == '1' diff --git a/app/models/match_decisions/provider_only/confirm_hsa_accepts_client_decline_dnd_staff.rb b/app/models/match_decisions/provider_only/confirm_hsa_accepts_client_decline_dnd_staff.rb index 90281a443..d01f40faf 100644 --- a/app/models/match_decisions/provider_only/confirm_hsa_accepts_client_decline_dnd_staff.rb +++ b/app/models/match_decisions/provider_only/confirm_hsa_accepts_client_decline_dnd_staff.rb @@ -4,6 +4,8 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::ProviderOnly class ConfirmHsaAcceptsClientDeclineDndStaff < ::MatchDecisions::Base def to_partial_path @@ -96,12 +98,4 @@ def canceled end private_constant :StatusCallbacks end - - def step_cancel_reasons - [ - 'Vacancy should not have been entered', - 'Vacancy filled by other client', - 'Other', - ] - end end diff --git a/app/models/match_decisions/provider_only/hsa_accepts_client.rb b/app/models/match_decisions/provider_only/hsa_accepts_client.rb index b7f999bfb..a2a58fb26 100644 --- a/app/models/match_decisions/provider_only/hsa_accepts_client.rb +++ b/app/models/match_decisions/provider_only/hsa_accepts_client.rb @@ -12,7 +12,6 @@ def to_partial_path 'match_decisions/hsa_accepts_client' end include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteTwoDeclineReasons attr_accessor :building_id attr_accessor :unit_id @@ -118,24 +117,6 @@ def expiration_update end private_constant :StatusCallbacks - def step_decline_reasons(_contact) - [ - 'Household could not be located', - 'Ineligible for Housing Program', - 'Client refused offer', - 'Health and Safety', - 'Other', - ] - end - - def step_cancel_reasons - [ - 'Vacancy should not have been entered', - 'Vacancy filled by other client', - 'Other', - ] - end - def whitelist_params_for_update params super.merge params.require(:decision).permit( :building_id, diff --git a/app/models/match_decisions/provider_only/hsa_acknowledges_receipt.rb b/app/models/match_decisions/provider_only/hsa_acknowledges_receipt.rb index 0eb227f63..83c14b509 100644 --- a/app/models/match_decisions/provider_only/hsa_acknowledges_receipt.rb +++ b/app/models/match_decisions/provider_only/hsa_acknowledges_receipt.rb @@ -4,6 +4,8 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::ProviderOnly class HsaAcknowledgesReceipt < ::MatchDecisions::Base def to_partial_path @@ -94,15 +96,6 @@ def expiration_update end private_constant :StatusCallbacks - def step_cancel_reasons - [ - 'Vacancy should not have been entered', - 'Vacancy filled by other client', - 'Match expired', - 'Other', - ] - end - def whitelist_params_for_update params super.merge params.require(:decision).permit( :shelter_expiration, diff --git a/app/models/match_decisions/record_client_housed_date_housing_subsidy_administrator.rb b/app/models/match_decisions/record_client_housed_date_housing_subsidy_administrator.rb index 7b4f9ffef..bd5396658 100644 --- a/app/models/match_decisions/record_client_housed_date_housing_subsidy_administrator.rb +++ b/app/models/match_decisions/record_client_housed_date_housing_subsidy_administrator.rb @@ -9,7 +9,6 @@ module MatchDecisions class RecordClientHousedDateHousingSubsidyAdministrator < Base include MatchDecisions::AcceptsDeclineReason # For shelter agency declines - include MatchDecisions::DefaultShelterAgencyDeclineReasons attr_accessor :building_id attr_accessor :unit_id @@ -76,20 +75,6 @@ def permitted_params super + [:client_move_in_date] end - def step_decline_reasons(_contact) - [ - 'Client has another housing option', - 'Does not agree to services', - 'Unwilling to live in that neighborhood', - 'Unwilling to live in SRO', - 'Does not want housing at this time', - 'Unsafe environment for this person', - 'Client refused unit (non-SRO)', - 'Client refused voucher', - 'Health and Safety', - ] - end - def initialize_decision! send_notifications: true super(send_notifications: send_notifications) update(status: 'pending') diff --git a/app/models/match_decisions/schedule_criminal_hearing_housing_subsidy_admin.rb b/app/models/match_decisions/schedule_criminal_hearing_housing_subsidy_admin.rb index b50c48f31..13b2fc38c 100644 --- a/app/models/match_decisions/schedule_criminal_hearing_housing_subsidy_admin.rb +++ b/app/models/match_decisions/schedule_criminal_hearing_housing_subsidy_admin.rb @@ -9,7 +9,6 @@ module MatchDecisions class ScheduleCriminalHearingHousingSubsidyAdmin < Base include MatchDecisions::AcceptsDeclineReason # For shelter agency declines - include MatchDecisions::RouteOneDeclineReasons validate :criminal_hearing_date_present_if_scheduled validate :criminal_hearing_date_absent_if_no_hearing @@ -75,20 +74,6 @@ def stalled_contact_types ] end - def step_decline_reasons(_contact) - [ - 'Client has another housing option', - 'Does not agree to services', - 'Unwilling to live in that neighborhood', - 'Unwilling to live in SRO', - 'Does not want housing at this time', - 'Unsafe environment for this person', - 'Client refused unit (non-SRO)', - 'Client refused voucher', - 'Health and Safety', - ] - end - def initialize_decision! send_notifications: true super(send_notifications: send_notifications) update status: 'pending' diff --git a/app/models/match_decisions/seven/approve_match_housing_subsidy_admin.rb b/app/models/match_decisions/seven/approve_match_housing_subsidy_admin.rb index c1561a979..4c2439894 100644 --- a/app/models/match_decisions/seven/approve_match_housing_subsidy_admin.rb +++ b/app/models/match_decisions/seven/approve_match_housing_subsidy_admin.rb @@ -9,7 +9,6 @@ module MatchDecisions::Seven class ApproveMatchHousingSubsidyAdmin < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::DefaultHsaDeclineReasons def label label_for_status status diff --git a/app/models/match_decisions/seven/match_recommendation_dnd_staff.rb b/app/models/match_decisions/seven/match_recommendation_dnd_staff.rb index 3d2885bae..14823b89e 100644 --- a/app/models/match_decisions/seven/match_recommendation_dnd_staff.rb +++ b/app/models/match_decisions/seven/match_recommendation_dnd_staff.rb @@ -4,10 +4,11 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Seven class MatchRecommendationDndStaff < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::DefaultDndStaffDeclineReasons validate :cant_accept_if_match_closed validate :cant_accept_if_related_active_match diff --git a/app/models/match_decisions/six/approve_match_housing_subsidy_admin.rb b/app/models/match_decisions/six/approve_match_housing_subsidy_admin.rb index 55f5a10c9..9859649cb 100644 --- a/app/models/match_decisions/six/approve_match_housing_subsidy_admin.rb +++ b/app/models/match_decisions/six/approve_match_housing_subsidy_admin.rb @@ -9,8 +9,6 @@ module MatchDecisions::Six class ApproveMatchHousingSubsidyAdmin < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteSixDeclineReasons - include MatchDecisions::RouteSixCancelReasons def to_partial_path 'match_decisions/six_approve_match_housing_subsidy_admin' diff --git a/app/models/match_decisions/six/match_recommendation_dnd_staff.rb b/app/models/match_decisions/six/match_recommendation_dnd_staff.rb index e47e03e72..574db2678 100644 --- a/app/models/match_decisions/six/match_recommendation_dnd_staff.rb +++ b/app/models/match_decisions/six/match_recommendation_dnd_staff.rb @@ -4,11 +4,11 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Six class MatchRecommendationDndStaff < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteSixDeclineReasons - include MatchDecisions::RouteSixCancelReasons validate :cant_accept_if_match_closed validate :cant_accept_if_related_active_match diff --git a/app/models/match_decisions/six/match_recommendation_shelter_agency.rb b/app/models/match_decisions/six/match_recommendation_shelter_agency.rb index df8481af4..86bdfa56d 100644 --- a/app/models/match_decisions/six/match_recommendation_shelter_agency.rb +++ b/app/models/match_decisions/six/match_recommendation_shelter_agency.rb @@ -10,8 +10,6 @@ module MatchDecisions::Six class MatchRecommendationShelterAgency < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason include MatchDecisions::AcceptsNotWorkingWithClientReason - include MatchDecisions::RouteSixDeclineReasons - include MatchDecisions::RouteSixCancelReasons # proxy for client.release_of_information attr_accessor :release_of_information diff --git a/app/models/match_decisions/ten/ten_agency_confirm_match_success.rb b/app/models/match_decisions/ten/ten_agency_confirm_match_success.rb index 15cf55608..34d707118 100644 --- a/app/models/match_decisions/ten/ten_agency_confirm_match_success.rb +++ b/app/models/match_decisions/ten/ten_agency_confirm_match_success.rb @@ -9,8 +9,6 @@ module MatchDecisions::Ten class TenAgencyConfirmMatchSuccess < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteTenDeclineReasons - include MatchDecisions::RouteTenCancelReasons def label label_for_status status diff --git a/app/models/match_decisions/ten/ten_agency_confirm_match_success_decline.rb b/app/models/match_decisions/ten/ten_agency_confirm_match_success_decline.rb index 8883e3941..a6e8d89f5 100644 --- a/app/models/match_decisions/ten/ten_agency_confirm_match_success_decline.rb +++ b/app/models/match_decisions/ten/ten_agency_confirm_match_success_decline.rb @@ -4,11 +4,11 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Ten class TenAgencyConfirmMatchSuccessDecline < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteTenDeclineReasons - include MatchDecisions::RouteTenCancelReasons def step_name "#{Translation.translate('DND')} Confirms Match Success Decline" diff --git a/app/models/match_decisions/ten/ten_confirm_match_success_dnd_staff.rb b/app/models/match_decisions/ten/ten_confirm_match_success_dnd_staff.rb index 96f47ff36..071246dbe 100644 --- a/app/models/match_decisions/ten/ten_confirm_match_success_dnd_staff.rb +++ b/app/models/match_decisions/ten/ten_confirm_match_success_dnd_staff.rb @@ -4,11 +4,11 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Ten class TenConfirmMatchSuccessDndStaff < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteTenDeclineReasons - include MatchDecisions::RouteTenCancelReasons # validate :note_present_if_status_rejected def statuses diff --git a/app/models/match_decisions/thirteen/thirteen_accept_referral.rb b/app/models/match_decisions/thirteen/thirteen_accept_referral.rb index 8338a9d84..9aa7a2c0a 100644 --- a/app/models/match_decisions/thirteen/thirteen_accept_referral.rb +++ b/app/models/match_decisions/thirteen/thirteen_accept_referral.rb @@ -9,8 +9,6 @@ module MatchDecisions::Thirteen class ThirteenAcceptReferral < Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteThirteenCancelReasons - include MatchDecisions::RouteThirteenDeclineReasons validate :ensure_required_contacts_present_on_accept validate :ensure_required_contacts_present_on_accept diff --git a/app/models/match_decisions/thirteen/thirteen_accept_referral_decline.rb b/app/models/match_decisions/thirteen/thirteen_accept_referral_decline.rb index cfaaf3cb2..77b01057a 100644 --- a/app/models/match_decisions/thirteen/thirteen_accept_referral_decline.rb +++ b/app/models/match_decisions/thirteen/thirteen_accept_referral_decline.rb @@ -4,11 +4,11 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Thirteen class ThirteenAcceptReferralDecline < Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteThirteenDeclineReasons - include MatchDecisions::RouteThirteenCancelReasons def to_partial_path 'match_decisions/thirteen/accept_referral_decline' diff --git a/app/models/match_decisions/thirteen/thirteen_client_match.rb b/app/models/match_decisions/thirteen/thirteen_client_match.rb index ac52e3725..796484f1f 100644 --- a/app/models/match_decisions/thirteen/thirteen_client_match.rb +++ b/app/models/match_decisions/thirteen/thirteen_client_match.rb @@ -4,10 +4,10 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Thirteen class ThirteenClientMatch < Base - include MatchDecisions::RouteThirteenCancelReasons - validate :ensure_required_contacts_present_on_accept def to_partial_path diff --git a/app/models/match_decisions/thirteen/thirteen_client_review.rb b/app/models/match_decisions/thirteen/thirteen_client_review.rb index 33c17b239..e6d11635f 100644 --- a/app/models/match_decisions/thirteen/thirteen_client_review.rb +++ b/app/models/match_decisions/thirteen/thirteen_client_review.rb @@ -9,8 +9,6 @@ module MatchDecisions::Thirteen class ThirteenClientReview < Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteThirteenCancelReasons - include MatchDecisions::RouteThirteenDeclineReasons # proxy for client.release_of_information attr_accessor :release_of_information diff --git a/app/models/match_decisions/thirteen/thirteen_client_review_decline.rb b/app/models/match_decisions/thirteen/thirteen_client_review_decline.rb index 8e233517d..1a3d42820 100644 --- a/app/models/match_decisions/thirteen/thirteen_client_review_decline.rb +++ b/app/models/match_decisions/thirteen/thirteen_client_review_decline.rb @@ -4,11 +4,11 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Thirteen class ThirteenClientReviewDecline < Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteThirteenDeclineReasons - include MatchDecisions::RouteThirteenCancelReasons def to_partial_path 'match_decisions/thirteen/client_review_decline' diff --git a/app/models/match_decisions/thirteen/thirteen_confirm_match_success.rb b/app/models/match_decisions/thirteen/thirteen_confirm_match_success.rb index 2bf17a510..a3ee30976 100644 --- a/app/models/match_decisions/thirteen/thirteen_confirm_match_success.rb +++ b/app/models/match_decisions/thirteen/thirteen_confirm_match_success.rb @@ -8,8 +8,6 @@ module MatchDecisions::Thirteen class ThirteenConfirmMatchSuccess < Base - include MatchDecisions::RouteEightCancelReasons - def statuses { pending: 'Pending', diff --git a/app/models/match_decisions/thirteen/thirteen_hearing_outcome.rb b/app/models/match_decisions/thirteen/thirteen_hearing_outcome.rb index 807f02ce4..aa1688142 100644 --- a/app/models/match_decisions/thirteen/thirteen_hearing_outcome.rb +++ b/app/models/match_decisions/thirteen/thirteen_hearing_outcome.rb @@ -9,8 +9,6 @@ module MatchDecisions::Thirteen class ThirteenHearingOutcome < Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteThirteenCancelReasons - include MatchDecisions::RouteThirteenDeclineReasons validate :ensure_required_contacts_present_on_accept validate :criminal_hearing_outcome_has_been_recorded diff --git a/app/models/match_decisions/thirteen/thirteen_hearing_outcome_decline.rb b/app/models/match_decisions/thirteen/thirteen_hearing_outcome_decline.rb index 7e4ce5dec..7490a8144 100644 --- a/app/models/match_decisions/thirteen/thirteen_hearing_outcome_decline.rb +++ b/app/models/match_decisions/thirteen/thirteen_hearing_outcome_decline.rb @@ -9,8 +9,6 @@ module MatchDecisions::Thirteen class ThirteenHearingOutcomeDecline < Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteThirteenDeclineReasons - include MatchDecisions::RouteThirteenCancelReasons def to_partial_path 'match_decisions/thirteen/hearing_outcome_decline' diff --git a/app/models/match_decisions/thirteen/thirteen_hearing_scheduled.rb b/app/models/match_decisions/thirteen/thirteen_hearing_scheduled.rb index ef1188e25..91892e492 100644 --- a/app/models/match_decisions/thirteen/thirteen_hearing_scheduled.rb +++ b/app/models/match_decisions/thirteen/thirteen_hearing_scheduled.rb @@ -9,8 +9,6 @@ module MatchDecisions::Thirteen class ThirteenHearingScheduled < Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteThirteenCancelReasons - include MatchDecisions::RouteThirteenDeclineReasons validate :ensure_required_contacts_present_on_accept validate :criminal_hearing_date_present diff --git a/app/models/match_decisions/thirteen/thirteen_hearing_scheduled_decline.rb b/app/models/match_decisions/thirteen/thirteen_hearing_scheduled_decline.rb index 798c98322..4bd6c70da 100644 --- a/app/models/match_decisions/thirteen/thirteen_hearing_scheduled_decline.rb +++ b/app/models/match_decisions/thirteen/thirteen_hearing_scheduled_decline.rb @@ -4,11 +4,11 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Thirteen class ThirteenHearingScheduledDecline < Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteThirteenDeclineReasons - include MatchDecisions::RouteThirteenCancelReasons def to_partial_path 'match_decisions/thirteen/hearing_scheduled_decline' diff --git a/app/models/match_decisions/thirteen/thirteen_hsa_review.rb b/app/models/match_decisions/thirteen/thirteen_hsa_review.rb index 9fb9d5e36..7a89be08d 100644 --- a/app/models/match_decisions/thirteen/thirteen_hsa_review.rb +++ b/app/models/match_decisions/thirteen/thirteen_hsa_review.rb @@ -9,8 +9,6 @@ module MatchDecisions::Thirteen class ThirteenHsaReview < Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteThirteenCancelReasons - include MatchDecisions::RouteThirteenDeclineReasons validate :ensure_required_contacts_present_on_accept diff --git a/app/models/match_decisions/thirteen/thirteen_hsa_review_decline.rb b/app/models/match_decisions/thirteen/thirteen_hsa_review_decline.rb index 7088c2d35..4b9a7fdef 100644 --- a/app/models/match_decisions/thirteen/thirteen_hsa_review_decline.rb +++ b/app/models/match_decisions/thirteen/thirteen_hsa_review_decline.rb @@ -4,11 +4,11 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Thirteen class ThirteenHsaReviewDecline < Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteThirteenDeclineReasons - include MatchDecisions::RouteThirteenCancelReasons def to_partial_path 'match_decisions/thirteen/hsa_review_decline' diff --git a/app/models/match_decisions/thirteen/thirteen_match_acknowledgement.rb b/app/models/match_decisions/thirteen/thirteen_match_acknowledgement.rb index e0b9c74c8..9cfc14f25 100644 --- a/app/models/match_decisions/thirteen/thirteen_match_acknowledgement.rb +++ b/app/models/match_decisions/thirteen/thirteen_match_acknowledgement.rb @@ -8,8 +8,6 @@ module MatchDecisions::Thirteen class ThirteenMatchAcknowledgement < Base - include MatchDecisions::RouteThirteenCancelReasons - validate :ensure_required_contacts_present_on_accept def to_partial_path diff --git a/app/models/match_decisions/twelve/twelve_agency_acknowledges_receipt.rb b/app/models/match_decisions/twelve/twelve_agency_acknowledges_receipt.rb index b6241081f..9d8f1c446 100644 --- a/app/models/match_decisions/twelve/twelve_agency_acknowledges_receipt.rb +++ b/app/models/match_decisions/twelve/twelve_agency_acknowledges_receipt.rb @@ -4,11 +4,11 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Twelve class TwelveAgencyAcknowledgesReceipt < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteTwelveDeclineReasons - include MatchDecisions::RouteTwelveCancelReasons def to_partial_path 'match_decisions/twelve/agency_acknowledges_receipt' diff --git a/app/models/match_decisions/twelve/twelve_agency_acknowledges_receipt_decline.rb b/app/models/match_decisions/twelve/twelve_agency_acknowledges_receipt_decline.rb index 1106c060f..25ec8558b 100644 --- a/app/models/match_decisions/twelve/twelve_agency_acknowledges_receipt_decline.rb +++ b/app/models/match_decisions/twelve/twelve_agency_acknowledges_receipt_decline.rb @@ -4,11 +4,11 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Twelve class TwelveAgencyAcknowledgesReceiptDecline < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteTwelveDeclineReasons - include MatchDecisions::RouteTwelveCancelReasons def to_partial_path 'match_decisions/twelve/agency_acknowledges_receipt_decline' diff --git a/app/models/match_decisions/twelve/twelve_confirm_match_success_dnd_staff.rb b/app/models/match_decisions/twelve/twelve_confirm_match_success_dnd_staff.rb index 37a6ae907..6f3e56ce6 100644 --- a/app/models/match_decisions/twelve/twelve_confirm_match_success_dnd_staff.rb +++ b/app/models/match_decisions/twelve/twelve_confirm_match_success_dnd_staff.rb @@ -4,11 +4,11 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Twelve class TwelveConfirmMatchSuccessDndStaff < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteTwelveDeclineReasons - include MatchDecisions::RouteTwelveCancelReasons # validate :note_present_if_status_rejected def to_partial_path diff --git a/app/models/match_decisions/twelve/twelve_hsa_confirm_match_decline.rb b/app/models/match_decisions/twelve/twelve_hsa_confirm_match_decline.rb index c6dc908bb..5244102d6 100644 --- a/app/models/match_decisions/twelve/twelve_hsa_confirm_match_decline.rb +++ b/app/models/match_decisions/twelve/twelve_hsa_confirm_match_decline.rb @@ -4,11 +4,11 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module MatchDecisions::Twelve class TwelveHsaConfirmMatchDecline < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteTwelveDeclineReasons - include MatchDecisions::RouteTwelveCancelReasons def to_partial_path 'match_decisions/twelve/hsa_confirm_match_decline' diff --git a/app/models/match_decisions/twelve/twelve_hsa_confirm_match_success.rb b/app/models/match_decisions/twelve/twelve_hsa_confirm_match_success.rb index a1e1ba6d2..d5386ff7a 100644 --- a/app/models/match_decisions/twelve/twelve_hsa_confirm_match_success.rb +++ b/app/models/match_decisions/twelve/twelve_hsa_confirm_match_success.rb @@ -9,8 +9,6 @@ module MatchDecisions::Twelve class TwelveHsaConfirmMatchSuccess < ::MatchDecisions::Base include MatchDecisions::AcceptsDeclineReason - include MatchDecisions::RouteTwelveDeclineReasons - include MatchDecisions::RouteTwelveCancelReasons def to_partial_path 'match_decisions/twelve/hsa_confirm_match_success' diff --git a/app/models/warehouse/build_report.rb b/app/models/warehouse/build_report.rb index f9ad63ef6..d43fc8e6c 100644 --- a/app/models/warehouse/build_report.rb +++ b/app/models/warehouse/build_report.rb @@ -268,8 +268,9 @@ def contact_details contacts def explain(decision, reason) return unless (r = decision.send(reason)) - explanation = r.name - explanation = "#{explanation}: #{decision.send "#{reason}_other_explanation"}" if r.other? + text_method = "#{reason}_text" + explanation = decision.respond_to?(text_method) ? decision.send(text_method).presence || r.name : r.name + explanation = "#{explanation}: #{decision.send "#{reason}_other_explanation"}" if explanation == 'Other' explanation end diff --git a/app/models/warehouse/referral_event.rb b/app/models/warehouse/referral_event.rb index 4d373993c..b81b6f4ec 100644 --- a/app/models/warehouse/referral_event.rb +++ b/app/models/warehouse/referral_event.rb @@ -4,6 +4,8 @@ # License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md ### +# frozen_string_literal: true + module Warehouse class ReferralEvent < Base self.table_name = :cas_referral_events @@ -23,8 +25,9 @@ def rejected reason = client_opportunity_match.unsuccessful_reason unsuccessful_decision = client_opportunity_match.unsuccessful_decision closed_timestamp = unsuccessful_decision&.updated_at || client_opportunity_match.updated_at - if reason&.referral_result.present? - update(referral_result: reason.referral_result, referral_result_date: closed_timestamp) + effective_referral_result = unsuccessful_decision&.effective_referral_result || reason&.referral_result + if effective_referral_result.present? + update(referral_result: effective_referral_result, referral_result_date: closed_timestamp) else destroy end @@ -67,13 +70,14 @@ def self.sync_match_referrals! reason = match.unsuccessful_reason unsuccessful_decision = match.unsuccessful_decision closed_timestamp = unsuccessful_decision&.updated_at || match.updated_at + effective_referral_result = unsuccessful_decision&.effective_referral_result || reason&.referral_result # If we have a reason, the match was closed, we may not know the result, # but we should still capture the event if reason.present? - if event.referral_result != reason.referral_result + if event.referral_result != effective_referral_result event.update( event: match.sub_program.event, - referral_result: reason.referral_result, + referral_result: effective_referral_result, referral_result_date: closed_timestamp, ) end diff --git a/app/views/admin/match_decision_reasons/_form.haml b/app/views/admin/match_decision_reasons/_form.haml new file mode 100644 index 000000000..637842ab3 --- /dev/null +++ b/app/views/admin/match_decision_reasons/_form.haml @@ -0,0 +1,12 @@ +.col-6 + - url = @match_decision_reason.persisted? ? admin_match_decision_reason_path(@match_decision_reason) : admin_match_decision_reasons_path + = simple_form_for @match_decision_reason, as: :match_decision_reason, url: url do |f| + = f.error_notification + .form-inputs + = f.input :name + = f.input :referral_result, as: :select, collection: { 'None' => nil, 'Client Rejected' => MatchDecisionReasons::Base::CLIENT_REJECTED, 'Provider Rejected' => MatchDecisionReasons::Base::PROVIDER_REJECTED }, include_blank: false + = f.input :active + + .form_actions.text-right + = link_to 'Cancel', admin_match_decision_reasons_path, class: 'btn btn-secondary' + = f.button :submit, class: 'btn btn-primary' diff --git a/app/views/admin/match_decision_reasons/edit.haml b/app/views/admin/match_decision_reasons/edit.haml new file mode 100644 index 000000000..d41ae6531 --- /dev/null +++ b/app/views/admin/match_decision_reasons/edit.haml @@ -0,0 +1,9 @@ +- title = "Edit #{@match_decision_reason.name}" +- content_for :title, title += content_for :crumbs do + = link_to action: :index do + « Manage #{Translation.translate('Decline & Cancel Reasons')} + +%h1= content_for :title + += render 'form' diff --git a/app/views/admin/match_decision_reasons/index.haml b/app/views/admin/match_decision_reasons/index.haml new file mode 100644 index 000000000..9855e0d14 --- /dev/null +++ b/app/views/admin/match_decision_reasons/index.haml @@ -0,0 +1,39 @@ +- title = 'Decline & Cancel Reasons' +- content_for :title, title + += render 'menus/admin_tabs' + +.o-page + .o-page__title + %h1= content_for :title + .o-page__action.o-page__action--stacked + = link_to new_admin_match_decision_reason_path, class: 'btn btn-primary pull-right margin-bottom-02' do + %span.icon-plus + Add a Reason + + %p.text-muted + This is the catalog of reasons available to routes. To choose which of these apply to a specific route (and any per-step overrides), use the + %strong Decline & Cancel Reasons + link on that + = link_to("route's admin page", admin_match_routes_path) + + .table-responsive + .c-card.c.card__flush.mb-4 + .c-card__content.p-0 + %table.table.table-striped.mb-0 + %thead + %tr + %th Name + %th Referral Result + %th Active + %th Actions + %tbody + - @match_decision_reasons.each do |reason| + %tr + %td= link_to reason.name, edit_admin_match_decision_reason_path(reason) + %td= reason.referral_result_text + %td= checkmark reason.active + %td + = link_to edit_admin_match_decision_reason_path(reason), class: ['btn', 'btn-sm', 'btn-secondary'] do + %span.icon-pencil + Edit diff --git a/app/views/admin/match_decision_reasons/new.haml b/app/views/admin/match_decision_reasons/new.haml new file mode 100644 index 000000000..a6505cf03 --- /dev/null +++ b/app/views/admin/match_decision_reasons/new.haml @@ -0,0 +1,8 @@ +- title = 'Add a Decline/Cancel Reason' +- content_for :title, title + += render 'menus/admin_tabs' + +%h1= content_for :title + += render 'form' diff --git a/app/views/admin/match_decision_steps/_reason_tables.haml b/app/views/admin/match_decision_steps/_reason_tables.haml new file mode 100644 index 000000000..16aaa0985 --- /dev/null +++ b/app/views/admin/match_decision_steps/_reason_tables.haml @@ -0,0 +1,37 @@ +- kinds = local_assigns.fetch(:kinds, MatchDecisionReasonAssignment::KINDS) +.row + - kinds.each do |kind| + - show_audience = kind == MatchDecisionReasonAssignment::KIND_DECLINE && @step.supports_multiple_actors? + .col-lg-6 + .c-card.mb-4 + .c-card__header + %h3= "#{kind.titleize} Reasons" + .c-card__content.p-0 + .table-responsive + %table.table.table-striped.mb-0 + %thead + %tr + %th Include + %th Reason + %th Position + %th Requires Explanation + %th Referral Result + - if show_audience + %th Audience + %tbody + - rows[kind.to_sym].each do |row| + %tr + %td + = hidden_field_tag "assignments[#{kind}][#{row.reason.id}][selected]", '0' + = check_box_tag "assignments[#{kind}][#{row.reason.id}][selected]", '1', row.assignment.present? + %td= row.reason.name + %td= number_field_tag "assignments[#{kind}][#{row.reason.id}][position]", row.assignment&.position || 0, style: 'width: 5em' + %td= check_box_tag "assignments[#{kind}][#{row.reason.id}][requires_explanation]", '1', row.assignment&.requires_explanation || false + %td + = select_tag "assignments[#{kind}][#{row.reason.id}][referral_result]", options_for_select({ 'Inherit default' => '', 'Client Rejected' => MatchDecisionReasons::Base::CLIENT_REJECTED, 'Provider Rejected' => MatchDecisionReasons::Base::PROVIDER_REJECTED }, row.assignment&.referral_result) + - if row.reason.referral_result.present? + %br + %em.text-muted.font-size-small= "Default: #{row.reason.referral_result_text}" + - if show_audience + %td + = select_tag "assignments[#{kind}][#{row.reason.id}][audience]", options_for_select([['Everyone', '']] + @route.visible_contact_types.map { |contact_type| [@route.contact_label_for(contact_type), contact_type] }, row.assignment&.audience) diff --git a/app/views/admin/match_decision_steps/edit.haml b/app/views/admin/match_decision_steps/edit.haml new file mode 100644 index 000000000..873d51684 --- /dev/null +++ b/app/views/admin/match_decision_steps/edit.haml @@ -0,0 +1,19 @@ +- title = "#{@route.title}: #{@step.display_name}" +- content_for :title, title += content_for :crumbs do + = link_to '« Back to Route', edit_admin_match_route_path(@route) + +%h1= content_for :title + += form_tag admin_match_route_match_decision_step_path(@route, @step), method: :patch do + .c-card.mb-4 + .c-card__header + %h3 Default Referral Result + .c-card__content + = select_tag 'match_decision_step[default_referral_result]', options_for_select({ 'None' => nil, 'Client Rejected' => MatchDecisionReasons::Base::CLIENT_REJECTED, 'Provider Rejected' => MatchDecisionReasons::Base::PROVIDER_REJECTED }, @step.default_referral_result) + + %p.text-muted + Choose which reasons apply to this step. + = render 'admin/match_decision_steps/reason_tables', rows: @rows, kinds: (@step.supports_declines? ? %w[decline cancel] : %w[cancel]) + .text-right + = submit_tag 'Save Step Reasons', class: 'btn btn-primary' diff --git a/app/views/admin/match_routes/_decline_and_cancel_reasons.haml b/app/views/admin/match_routes/_decline_and_cancel_reasons.haml new file mode 100644 index 000000000..fbdc4b916 --- /dev/null +++ b/app/views/admin/match_routes/_decline_and_cancel_reasons.haml @@ -0,0 +1,29 @@ +.c-card.mb-4 + .c-card__header + %h2 Decline & Cancel Reasons + .c-card__content.p-0 + .table-responsive + %table.table.table-striped.mb-0 + %thead + %tr + %th Step + %th Active Decline Reasons + %th Active Cancel Reasons + %th Default Referral Result + %tbody + - @steps.each do |step| + %tr + %td= link_to step.display_name, edit_admin_match_route_match_decision_step_path(@route, step) + %td + - if step.supports_declines? + = @reason_counts[[step.decision_type, MatchDecisionReasonAssignment::KIND_DECLINE]] || 0 + - else + N/A + %td= @reason_counts[[step.decision_type, MatchDecisionReasonAssignment::KIND_CANCEL]] || 0 + %td + - if step.default_referral_result == MatchDecisionReasons::Base::CLIENT_REJECTED + Client Rejected + - elsif step.default_referral_result == MatchDecisionReasons::Base::PROVIDER_REJECTED + Provider Rejected + - else + — diff --git a/app/views/admin/match_routes/_route_table.haml b/app/views/admin/match_routes/_route_table.haml new file mode 100644 index 000000000..083196538 --- /dev/null +++ b/app/views/admin/match_routes/_route_table.haml @@ -0,0 +1,33 @@ +- if routes.any? + .table-responsive + %table.table.table-striped + %thead + %tr + %th Route Name + %th Housing Type + %th Match Prioritization + %th Stall Days + %th Multiple Clients per Match + %th One Match per Client + %th + %tbody + - routes.each do |route| + %tr + %td + = route.title + - if route.title != route.untranslated_title + %br + %em.text-muted.font-size-small= "(#{route.untranslated_title})" + %td= route.housing_type + %td= route.match_prioritization.title + %td + - if route.stalled_interval > 0 + = route.stalled_interval + %td= checkmark route.allow_multiple_active_matches + %td= checkmark route.should_prevent_multiple_matches_per_client + %td + = link_to edit_admin_match_route_path(route), class: ['btn', 'btn-sm', 'btn-secondary'] do + %span.icon-pencil + Edit +- else + %p.text-muted No routes match. diff --git a/app/views/admin/match_routes/_weighting_rules.haml b/app/views/admin/match_routes/_weighting_rules.haml new file mode 100644 index 000000000..9cc4c73f0 --- /dev/null +++ b/app/views/admin/match_routes/_weighting_rules.haml @@ -0,0 +1,38 @@ +.c-card + .c-card__header + %h2 Weighting + .c-card__content + .mb-4.text-right + = link_to new_admin_match_route_weighting_rule_path(@route), class: 'btn btn-primary' do + %i.icon-plus + Add Weighting Rule + - if @route.weighting_rules.any? + .table-responsive + .c-card.c.card__flush.mb-4 + .c-card__content.p-0 + %table.table.table-striped.mb-0 + %thead + %tr + %th Rules + %th{ data: { bs_toggle: :tooltip, bs_title: 'Rules with a lower weight will be applied next.' }} Relative Weight + %th + %tbody + - @route.weighting_rules.each do |rule| + %tr + %td + - if rule.requirements.any? + - rule.requirements.each do |r| + .mb-2 + = link_to(edit_admin_match_route_weighting_rule_path(@route, rule)) do + = r.name + - if r.variable.present? + = r.display_for_variable + - else + = link_to(edit_admin_match_route_weighting_rule_path(@route, rule)) do + None + %td= rule.applied_to + %td + = link_to(admin_match_route_weighting_rule_path(@route, rule), method: :delete, class: 'btn btn-sm btn-icon-only btn-danger', data: { confirm: 'Are you sure you want to remove this rule?' }) do + %i.icon-cross + - else + %p Weighting rules allow you to attach requirements to each voucher created on this route. If you have more than one weighting rule on the route, rules will be applied to balance out the use of each rule over time. diff --git a/app/views/admin/match_routes/edit.haml b/app/views/admin/match_routes/edit.haml index e1daf5c37..4e93c8ecd 100644 --- a/app/views/admin/match_routes/edit.haml +++ b/app/views/admin/match_routes/edit.haml @@ -1,5 +1,8 @@ - title = "Edit #{@route.title}" - content_for :title, title += content_for :crumbs do + = link_to action: :index do + « Manage Routes %h1= content_for :title .row .col-md-6 @@ -31,43 +34,7 @@ = f.input :routes_parked_on_successful_match, collection: MatchRoutes::Base.all.map { |route| [route.title, route.class] }.sort , label: 'Routes to park a client after a successful match', input_html: { class: :select2, multiple: true } = f.button :submit, value: "Update #{@route.title}" .col-md-6 - .c-card - .c-card__header - %h2 Weighting - .c-card__content - .mb-4.text-right - = link_to new_admin_match_route_weighting_rule_path(@route), class: 'btn btn-primary' do - %i.icon-plus - Add Weighting Rule - - if @route.weighting_rules.any? - .table-responsive - .c-card.c.card__flush.mb-4 - .c-card__content.p-0 - %table.table.table-striped.mb-0 - %thead - %tr - %th Rules - %th{ data: { bs_toggle: :tooltip, bs_title: 'Rules with a lower weight will be applied next.' }} Relative Weight - %th - %tbody - - @route.weighting_rules.each do |rule| - %tr - %td - - if rule.requirements.any? - - rule.requirements.each do |r| - .mb-2 - = link_to(edit_admin_match_route_weighting_rule_path(@route, rule)) do - = r.name - - if r.variable.present? - = r.display_for_variable - - else - = link_to(edit_admin_match_route_weighting_rule_path(@route, rule)) do - None - %td= rule.applied_to - %td - = link_to(admin_match_route_weighting_rule_path(@route, rule), method: :delete, class: 'btn btn-sm btn-icon-only btn-danger', data: { confirm: 'Are you sure you want to remove this rule?' }) do - %i.icon-cross - - else - %p Weighting rules allow you to attach requirements to each voucher created on this route. If you have more than one weighting rule on the route, rules will be applied to balance out the use of each rule over time. + = render 'weighting_rules' + = render 'decline_and_cancel_reasons' = render 'init_select2' diff --git a/app/views/admin/match_routes/index.haml b/app/views/admin/match_routes/index.haml index 8cc07fbc5..0947ee892 100644 --- a/app/views/admin/match_routes/index.haml +++ b/app/views/admin/match_routes/index.haml @@ -6,53 +6,24 @@ %h1= content_for :title %h2 Settings -.well.p-0.mb-6 - .overflow-x-scroll{style: "height: 800px"} - %table.table.table-fixed.table-striped - %thead - %tr - %th Route Name - %th Active - %th Housing Type - %th HSA can edit HSA contacts - %th Send email to contacts - %th Activate highest priority match automatically - %th Allow multiple active matches on single opportunity - %th Cancel other matches on success - %th Allow multiple active matches per client on route - %th Attempt to add default shelter agency contacts from client record - %th Match prioritization - %th Show the default contact types on a match - %th Stall days - %th Include note content by default - %th Expects ROI - %th= Translation.translate('Tag') - %tbody - - @routes.each do |route| - %tr - %td - = link_to route.title, edit_admin_match_route_path(route) - - if route.title != route.untranslated_title - %br - %em.text-muted.font-size-small= "(#{route.untranslated_title})" - %td= checkmark route.active - %td= route.housing_type - %td= checkmark route.contacts_editable_by_hsa - %td= checkmark route.send_notifications - %td= checkmark route.should_activate_match - %td= checkmark route.allow_multiple_active_matches - %td= checkmark route.should_cancel_other_matches - %td= checkmark(! route.should_prevent_multiple_matches_per_client) - %td= checkmark(route.default_shelter_agency_contacts_from_project_client) - %td= route.match_prioritization.title - %td= checkmark(route.show_default_contact_types) - %td - - if route.stalled_interval > 0 - = route.stalled_interval - %td= checkmark(route.send_notes_by_default) - %td= checkmark(route.expects_roi) - %td= route.tag&.name +%ul.nav.nav-tabs{role: 'tablist'} + %li.nav-item{role: 'presentation'} + %a.nav-link.active{id: 'active-routes-tab', data: { bs_toggle: 'tab' }, href: '#active-routes', role: 'tab', aria: { controls: 'active-routes', selected: 'true' }} + Active Routes + %span.badge.bg-secondary.ms-1= @active_routes.size + %li.nav-item{role: 'presentation'} + %a.nav-link{id: 'inactive-routes-tab', data: { bs_toggle: 'tab' }, href: '#inactive-routes', role: 'tab', aria: { controls: 'inactive-routes', selected: 'false' }} + Inactive Routes + %span.badge.bg-secondary.ms-1= @inactive_routes.size + +.tab-content.mb-6 + .tab-pane.fade.show.active{id: 'active-routes', role: 'tabpanel', aria: { labelledby: 'active-routes-tab' }} + .p-3 + = render 'route_table', routes: @active_routes + .tab-pane.fade{id: 'inactive-routes', role: 'tabpanel', aria: { labelledby: 'inactive-routes-tab' }} + .p-3 + = render 'route_table', routes: @inactive_routes %h2 Notifications diff --git a/app/views/match_decisions/_cancel_match_form_fields.haml b/app/views/match_decisions/_cancel_match_form_fields.haml index e02f5b477..79a3387d0 100644 --- a/app/views/match_decisions/_cancel_match_form_fields.haml +++ b/app/views/match_decisions/_cancel_match_form_fields.haml @@ -3,7 +3,7 @@ %label Please indicate a reason to #{client_action} this match: .cancel-match-fields - = form.association :administrative_cancel_reason, collection: @decision.cancel_reasons, label: '', as: :check_boxes, wrapper_html: {class: 'jCancelReason jButtonStateTriggers'} + = form.association :administrative_cancel_reason, collection: @decision.cancel_reasons(contact: current_contact), label: '', as: :check_boxes, wrapper_html: {class: 'jCancelReason jButtonStateTriggers'} - if @decision.cancel_reasons_not_other_requiring_explanation.present? %p= "* indicates that additional information must be provided in order to submit #{client_action} reason" - if include_other diff --git a/app/views/match_decisions/_hsa_cancel_match_form_fields.haml b/app/views/match_decisions/_hsa_cancel_match_form_fields.haml index ab498e67c..e261c48c3 100644 --- a/app/views/match_decisions/_hsa_cancel_match_form_fields.haml +++ b/app/views/match_decisions/_hsa_cancel_match_form_fields.haml @@ -3,7 +3,7 @@ %label Please indicate a reason to #{client_action} this match: .cancel-match-fields - = form.association :administrative_cancel_reason, collection: @decision.cancel_reasons, label: '', as: :check_boxes, wrapper_html: {class: 'jCancelReason jButtonStateTriggers'} + = form.association :administrative_cancel_reason, collection: @decision.cancel_reasons(contact: current_contact), label: '', as: :check_boxes, wrapper_html: {class: 'jCancelReason jButtonStateTriggers'} - if @decision.cancel_reasons_not_other_requiring_explanation.present? %p= "* indicates that additional information must be provided in order to submit #{client_action} reason" - if include_other diff --git a/app/views/menus/_admin_tabs.haml b/app/views/menus/_admin_tabs.haml index a8d2b826a..3f885bc24 100644 --- a/app/views/menus/_admin_tabs.haml +++ b/app/views/menus/_admin_tabs.haml @@ -18,6 +18,9 @@ -if can_manage_config? %li.nav-item{role: "presentation", class: ('active' if current_page?(admin_match_routes_path))} = link_to 'Match Routes', admin_match_routes_path, class: 'nav-link' + -if can_manage_config? + %li.nav-item{role: "presentation", class: ('active' if controller_name == 'match_decision_reasons')} + = link_to 'Decline & Cancel Reasons', admin_match_decision_reasons_path, class: 'nav-link' - if can_manage_sessions? %li.nav-item{role: 'presentation', class: ('active' if controller_name == "sessions")} = link_to 'Sessions', admin_sessions_path, class: 'nav-link' diff --git a/bin/deploy_tasks.sh b/bin/deploy_tasks.sh index b757456c7..1cd1e2947 100755 --- a/bin/deploy_tasks.sh +++ b/bin/deploy_tasks.sh @@ -22,6 +22,12 @@ T1=`date +%s` T2=`date +%s` echo "...rake cas_seeds:create_match_decision_reasons took $(expr $T2 - $T1) seconds" +echo 'Seed match decision reason assignments' +T1=`date +%s` +./bin/rake cas_seeds:seed_match_decision_reason_assignments +T2=`date +%s` +echo "...rake cas_seeds:seed_match_decision_reason_assignments took $(expr $T2 - $T1) seconds" + echo 'Ensure all match routes exist' T1=`date +%s` ./bin/rake cas_seeds:ensure_all_match_routes_exist diff --git a/config/routes.rb b/config/routes.rb index fd8a33951..2025c4650 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -213,7 +213,9 @@ def manage_matches end resources :match_routes, only: [:index, :edit, :update] do resources :weighting_rules, on: :member, except: [:create] + resources :match_decision_steps, only: [:edit, :update] end + resources :match_decision_reasons, except: [:show, :destroy] resources :sessions, only: [:index, :destroy] end diff --git a/db/migrate/20260729172305_create_match_decision_reason_assignments.rb b/db/migrate/20260729172305_create_match_decision_reason_assignments.rb new file mode 100644 index 000000000..13dadb974 --- /dev/null +++ b/db/migrate/20260729172305_create_match_decision_reason_assignments.rb @@ -0,0 +1,29 @@ +### +# Copyright Green River Data Group, Inc. +# +# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md +### + +# frozen_string_literal: true + +class CreateMatchDecisionReasonAssignments < ActiveRecord::Migration[8.1] + def change + create_table :match_decision_reason_assignments do |t| + t.references :route, null: false + t.string :decision_type, null: false, default: '' + t.references :match_decision_reason, null: false + t.string :kind, null: false + t.integer :position, null: false, default: 0 + t.boolean :requires_explanation, null: false, default: false + t.integer :referral_result + + t.timestamps + t.datetime :deleted_at + end + + add_index :match_decision_reason_assignments, + [:route_id, :decision_type, :match_decision_reason_id, :kind], + unique: true, + name: 'index_reason_assignments_on_route_step_reason_kind' + end +end diff --git a/db/migrate/20260729172306_create_match_decision_steps.rb b/db/migrate/20260729172306_create_match_decision_steps.rb new file mode 100644 index 000000000..83c828bca --- /dev/null +++ b/db/migrate/20260729172306_create_match_decision_steps.rb @@ -0,0 +1,21 @@ +### +# Copyright Green River Data Group, Inc. +# +# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md +### + +# frozen_string_literal: true + +class CreateMatchDecisionSteps < ActiveRecord::Migration[8.1] + def change + create_table :match_decision_steps do |t| + t.references :route, null: false + t.string :decision_type, null: false + t.integer :default_referral_result + + t.timestamps + end + + add_index :match_decision_steps, [:route_id, :decision_type], unique: true, name: 'index_decision_steps_on_route_and_decision_type' + end +end diff --git a/db/migrate/20260729172307_add_reason_text_snapshots_to_match_decisions.rb b/db/migrate/20260729172307_add_reason_text_snapshots_to_match_decisions.rb new file mode 100644 index 000000000..b3ba91061 --- /dev/null +++ b/db/migrate/20260729172307_add_reason_text_snapshots_to_match_decisions.rb @@ -0,0 +1,33 @@ +### +# Copyright Green River Data Group, Inc. +# +# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md +### + +# frozen_string_literal: true + +class AddReasonTextSnapshotsToMatchDecisions < ActiveRecord::Migration[8.1] + def up + add_column :match_decisions, :decline_reason_text, :string + add_column :match_decisions, :administrative_cancel_reason_text, :string + + execute <<-SQL.squish + UPDATE match_decisions + SET decline_reason_text = match_decision_reasons.name + FROM match_decision_reasons + WHERE match_decisions.decline_reason_id = match_decision_reasons.id + SQL + + execute <<-SQL.squish + UPDATE match_decisions + SET administrative_cancel_reason_text = match_decision_reasons.name + FROM match_decision_reasons + WHERE match_decisions.administrative_cancel_reason_id = match_decision_reasons.id + SQL + end + + def down + remove_column :match_decisions, :decline_reason_text + remove_column :match_decisions, :administrative_cancel_reason_text + end +end diff --git a/db/migrate/20260730092443_remove_default_from_match_decision_reason_assignments_decision_type.rb b/db/migrate/20260730092443_remove_default_from_match_decision_reason_assignments_decision_type.rb new file mode 100644 index 000000000..ac54bfb8f --- /dev/null +++ b/db/migrate/20260730092443_remove_default_from_match_decision_reason_assignments_decision_type.rb @@ -0,0 +1,13 @@ +### +# Copyright Green River Data Group, Inc. +# +# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md +### + +# frozen_string_literal: true + +class RemoveDefaultFromMatchDecisionReasonAssignmentsDecisionType < ActiveRecord::Migration[8.1] + def change + change_column_default :match_decision_reason_assignments, :decision_type, from: '', to: nil + end +end diff --git a/db/migrate/20260730161749_add_audience_to_match_decision_reason_assignments.rb b/db/migrate/20260730161749_add_audience_to_match_decision_reason_assignments.rb new file mode 100644 index 000000000..5e75d1133 --- /dev/null +++ b/db/migrate/20260730161749_add_audience_to_match_decision_reason_assignments.rb @@ -0,0 +1,13 @@ +### +# Copyright Green River Data Group, Inc. +# +# License detail: https://github.com/greenriver/boston-cas/blob/stable/LICENSE.md +### + +# frozen_string_literal: true + +class AddAudienceToMatchDecisionReasonAssignments < ActiveRecord::Migration[8.1] + def change + add_column :match_decision_reason_assignments, :audience, :string + end +end diff --git a/db/seeds/match_decision_reason_assignments.csv b/db/seeds/match_decision_reason_assignments.csv new file mode 100644 index 000000000..cd86f6bfb --- /dev/null +++ b/db/seeds/match_decision_reason_assignments.csv @@ -0,0 +1,1127 @@ +route_type,decision_type,kind,reason_name,position,requires_explanation,audience +MatchRoutes::Default,MatchDecisions::MatchRecommendationDndStaff,decline,Client has another housing option,0,false, +MatchRoutes::Default,MatchDecisions::MatchRecommendationDndStaff,decline,Client won't be eligible based on funding source,1,false, +MatchRoutes::Default,MatchDecisions::MatchRecommendationDndStaff,decline,Client won't be eligible for housing type,2,false, +MatchRoutes::Default,MatchDecisions::MatchRecommendationDndStaff,decline,Client won't be eligible for services,3,false, +MatchRoutes::Default,MatchDecisions::MatchRecommendationDndStaff,decline,Other,4,false, +MatchRoutes::Default,MatchDecisions::MatchRecommendationDndStaff,cancel,Client deceased,0,false, +MatchRoutes::Default,MatchDecisions::MatchRecommendationDndStaff,cancel,Client has declined match,1,false, +MatchRoutes::Default,MatchDecisions::MatchRecommendationDndStaff,cancel,Client has disappeared,2,false, +MatchRoutes::Default,MatchDecisions::MatchRecommendationDndStaff,cancel,Client has disengaged,3,false, +MatchRoutes::Default,MatchDecisions::MatchRecommendationDndStaff,cancel,Client no longer eligible for match,4,false, +MatchRoutes::Default,MatchDecisions::MatchRecommendationDndStaff,cancel,Client received another housing opportunity,5,false, +MatchRoutes::Default,MatchDecisions::MatchRecommendationDndStaff,cancel,HSP CORI,6,false, +MatchRoutes::Default,MatchDecisions::MatchRecommendationDndStaff,cancel,Incarcerated,7,false, +MatchRoutes::Default,MatchDecisions::MatchRecommendationDndStaff,cancel,Match expired,8,false, +MatchRoutes::Default,MatchDecisions::MatchRecommendationDndStaff,cancel,SSP CORI,9,false, +MatchRoutes::Default,MatchDecisions::MatchRecommendationDndStaff,cancel,Vacancy filled by other client,10,false, +MatchRoutes::Default,MatchDecisions::MatchRecommendationDndStaff,cancel,Vacancy should not have been entered,11,false, +MatchRoutes::Default,MatchDecisions::MatchRecommendationDndStaff,cancel,Other,12,false, +MatchRoutes::Default,MatchDecisions::MatchRecommendationShelterAgency,decline,Client has another housing option,0,true, +MatchRoutes::Default,MatchDecisions::MatchRecommendationShelterAgency,decline,Client refused unit (non-SRO),1,true, +MatchRoutes::Default,MatchDecisions::MatchRecommendationShelterAgency,decline,Client refused voucher,2,true, +MatchRoutes::Default,MatchDecisions::MatchRecommendationShelterAgency,decline,Does not agree to services,3,true, +MatchRoutes::Default,MatchDecisions::MatchRecommendationShelterAgency,decline,Does not want housing at this time,4,true, +MatchRoutes::Default,MatchDecisions::MatchRecommendationShelterAgency,decline,Unsafe environment for this person,5,true, +MatchRoutes::Default,MatchDecisions::MatchRecommendationShelterAgency,decline,Unwilling to live in SRO,6,true, +MatchRoutes::Default,MatchDecisions::MatchRecommendationShelterAgency,decline,Unwilling to live in that neighborhood,7,true, +MatchRoutes::Default,MatchDecisions::MatchRecommendationShelterAgency,decline,Other,8,false, +MatchRoutes::Default,MatchDecisions::MatchRecommendationShelterAgency,cancel,Client deceased,0,false, +MatchRoutes::Default,MatchDecisions::MatchRecommendationShelterAgency,cancel,Client has declined match,1,false, +MatchRoutes::Default,MatchDecisions::MatchRecommendationShelterAgency,cancel,Client has disappeared,2,false, +MatchRoutes::Default,MatchDecisions::MatchRecommendationShelterAgency,cancel,Client has disengaged,3,false, +MatchRoutes::Default,MatchDecisions::MatchRecommendationShelterAgency,cancel,Client no longer eligible for match,4,false, +MatchRoutes::Default,MatchDecisions::MatchRecommendationShelterAgency,cancel,Client received another housing opportunity,5,false, +MatchRoutes::Default,MatchDecisions::MatchRecommendationShelterAgency,cancel,HSP CORI,6,false, +MatchRoutes::Default,MatchDecisions::MatchRecommendationShelterAgency,cancel,Incarcerated,7,false, +MatchRoutes::Default,MatchDecisions::MatchRecommendationShelterAgency,cancel,Match expired,8,false, +MatchRoutes::Default,MatchDecisions::MatchRecommendationShelterAgency,cancel,SSP CORI,9,false, +MatchRoutes::Default,MatchDecisions::MatchRecommendationShelterAgency,cancel,Vacancy filled by other client,10,false, +MatchRoutes::Default,MatchDecisions::MatchRecommendationShelterAgency,cancel,Vacancy should not have been entered,11,false, +MatchRoutes::Default,MatchDecisions::MatchRecommendationShelterAgency,cancel,Other,12,false, +MatchRoutes::Default,MatchDecisions::ScheduleCriminalHearingHousingSubsidyAdmin,decline,Client has another housing option,0,true, +MatchRoutes::Default,MatchDecisions::ScheduleCriminalHearingHousingSubsidyAdmin,decline,Client refused unit (non-SRO),1,true, +MatchRoutes::Default,MatchDecisions::ScheduleCriminalHearingHousingSubsidyAdmin,decline,Client refused voucher,2,true, +MatchRoutes::Default,MatchDecisions::ScheduleCriminalHearingHousingSubsidyAdmin,decline,Does not agree to services,3,true, +MatchRoutes::Default,MatchDecisions::ScheduleCriminalHearingHousingSubsidyAdmin,decline,Does not want housing at this time,4,true, +MatchRoutes::Default,MatchDecisions::ScheduleCriminalHearingHousingSubsidyAdmin,decline,Health and Safety,5,true, +MatchRoutes::Default,MatchDecisions::ScheduleCriminalHearingHousingSubsidyAdmin,decline,Unsafe environment for this person,6,true, +MatchRoutes::Default,MatchDecisions::ScheduleCriminalHearingHousingSubsidyAdmin,decline,Unwilling to live in SRO,7,true, +MatchRoutes::Default,MatchDecisions::ScheduleCriminalHearingHousingSubsidyAdmin,decline,Unwilling to live in that neighborhood,8,true, +MatchRoutes::Default,MatchDecisions::ScheduleCriminalHearingHousingSubsidyAdmin,cancel,Client deceased,0,false, +MatchRoutes::Default,MatchDecisions::ScheduleCriminalHearingHousingSubsidyAdmin,cancel,Client has declined match,1,false, +MatchRoutes::Default,MatchDecisions::ScheduleCriminalHearingHousingSubsidyAdmin,cancel,Client has disappeared,2,false, +MatchRoutes::Default,MatchDecisions::ScheduleCriminalHearingHousingSubsidyAdmin,cancel,Client has disengaged,3,false, +MatchRoutes::Default,MatchDecisions::ScheduleCriminalHearingHousingSubsidyAdmin,cancel,Client no longer eligible for match,4,false, +MatchRoutes::Default,MatchDecisions::ScheduleCriminalHearingHousingSubsidyAdmin,cancel,Client received another housing opportunity,5,false, +MatchRoutes::Default,MatchDecisions::ScheduleCriminalHearingHousingSubsidyAdmin,cancel,HSP CORI,6,false, +MatchRoutes::Default,MatchDecisions::ScheduleCriminalHearingHousingSubsidyAdmin,cancel,Incarcerated,7,false, +MatchRoutes::Default,MatchDecisions::ScheduleCriminalHearingHousingSubsidyAdmin,cancel,Match expired,8,false, +MatchRoutes::Default,MatchDecisions::ScheduleCriminalHearingHousingSubsidyAdmin,cancel,SSP CORI,9,false, +MatchRoutes::Default,MatchDecisions::ScheduleCriminalHearingHousingSubsidyAdmin,cancel,Vacancy filled by other client,10,false, +MatchRoutes::Default,MatchDecisions::ScheduleCriminalHearingHousingSubsidyAdmin,cancel,Vacancy should not have been entered,11,false, +MatchRoutes::Default,MatchDecisions::ScheduleCriminalHearingHousingSubsidyAdmin,cancel,Other,12,false, +MatchRoutes::Default,MatchDecisions::ApproveMatchHousingSubsidyAdmin,cancel,Client deceased,0,false, +MatchRoutes::Default,MatchDecisions::ApproveMatchHousingSubsidyAdmin,cancel,Client has declined match,1,false, +MatchRoutes::Default,MatchDecisions::ApproveMatchHousingSubsidyAdmin,cancel,Client has disappeared,2,false, +MatchRoutes::Default,MatchDecisions::ApproveMatchHousingSubsidyAdmin,cancel,Client has disengaged,3,false, +MatchRoutes::Default,MatchDecisions::ApproveMatchHousingSubsidyAdmin,cancel,Client no longer eligible for match,4,false, +MatchRoutes::Default,MatchDecisions::ApproveMatchHousingSubsidyAdmin,cancel,Client received another housing opportunity,5,false, +MatchRoutes::Default,MatchDecisions::ApproveMatchHousingSubsidyAdmin,cancel,HSP CORI,6,false, +MatchRoutes::Default,MatchDecisions::ApproveMatchHousingSubsidyAdmin,cancel,Incarcerated,7,false, +MatchRoutes::Default,MatchDecisions::ApproveMatchHousingSubsidyAdmin,cancel,Match expired,8,false, +MatchRoutes::Default,MatchDecisions::ApproveMatchHousingSubsidyAdmin,cancel,SSP CORI,9,false, +MatchRoutes::Default,MatchDecisions::ApproveMatchHousingSubsidyAdmin,cancel,Vacancy filled by other client,10,false, +MatchRoutes::Default,MatchDecisions::ApproveMatchHousingSubsidyAdmin,cancel,Vacancy should not have been entered,11,false, +MatchRoutes::Default,MatchDecisions::ApproveMatchHousingSubsidyAdmin,cancel,Other,12,false, +MatchRoutes::Default,MatchDecisions::RecordClientHousedDateHousingSubsidyAdministrator,decline,Client has another housing option,0,false, +MatchRoutes::Default,MatchDecisions::RecordClientHousedDateHousingSubsidyAdministrator,decline,Client refused unit (non-SRO),1,false, +MatchRoutes::Default,MatchDecisions::RecordClientHousedDateHousingSubsidyAdministrator,decline,Client refused voucher,2,false, +MatchRoutes::Default,MatchDecisions::RecordClientHousedDateHousingSubsidyAdministrator,decline,Does not agree to services,3,false, +MatchRoutes::Default,MatchDecisions::RecordClientHousedDateHousingSubsidyAdministrator,decline,Does not want housing at this time,4,false, +MatchRoutes::Default,MatchDecisions::RecordClientHousedDateHousingSubsidyAdministrator,decline,Health and Safety,5,false, +MatchRoutes::Default,MatchDecisions::RecordClientHousedDateHousingSubsidyAdministrator,decline,Unsafe environment for this person,6,false, +MatchRoutes::Default,MatchDecisions::RecordClientHousedDateHousingSubsidyAdministrator,decline,Unwilling to live in SRO,7,false, +MatchRoutes::Default,MatchDecisions::RecordClientHousedDateHousingSubsidyAdministrator,decline,Unwilling to live in that neighborhood,8,false, +MatchRoutes::Default,MatchDecisions::RecordClientHousedDateHousingSubsidyAdministrator,cancel,Client deceased,0,false, +MatchRoutes::Default,MatchDecisions::RecordClientHousedDateHousingSubsidyAdministrator,cancel,Client has declined match,1,false, +MatchRoutes::Default,MatchDecisions::RecordClientHousedDateHousingSubsidyAdministrator,cancel,Client has disappeared,2,false, +MatchRoutes::Default,MatchDecisions::RecordClientHousedDateHousingSubsidyAdministrator,cancel,Client has disengaged,3,false, +MatchRoutes::Default,MatchDecisions::RecordClientHousedDateHousingSubsidyAdministrator,cancel,Client no longer eligible for match,4,false, +MatchRoutes::Default,MatchDecisions::RecordClientHousedDateHousingSubsidyAdministrator,cancel,Client received another housing opportunity,5,false, +MatchRoutes::Default,MatchDecisions::RecordClientHousedDateHousingSubsidyAdministrator,cancel,HSP CORI,6,false, +MatchRoutes::Default,MatchDecisions::RecordClientHousedDateHousingSubsidyAdministrator,cancel,Incarcerated,7,false, +MatchRoutes::Default,MatchDecisions::RecordClientHousedDateHousingSubsidyAdministrator,cancel,Match expired,8,false, +MatchRoutes::Default,MatchDecisions::RecordClientHousedDateHousingSubsidyAdministrator,cancel,SSP CORI,9,false, +MatchRoutes::Default,MatchDecisions::RecordClientHousedDateHousingSubsidyAdministrator,cancel,Vacancy filled by other client,10,false, +MatchRoutes::Default,MatchDecisions::RecordClientHousedDateHousingSubsidyAdministrator,cancel,Vacancy should not have been entered,11,false, +MatchRoutes::Default,MatchDecisions::RecordClientHousedDateHousingSubsidyAdministrator,cancel,Other,12,false, +MatchRoutes::Default,MatchDecisions::ConfirmMatchSuccessDndStaff,cancel,Client deceased,0,false, +MatchRoutes::Default,MatchDecisions::ConfirmMatchSuccessDndStaff,cancel,Client has declined match,1,false, +MatchRoutes::Default,MatchDecisions::ConfirmMatchSuccessDndStaff,cancel,Client has disappeared,2,false, +MatchRoutes::Default,MatchDecisions::ConfirmMatchSuccessDndStaff,cancel,Client has disengaged,3,false, +MatchRoutes::Default,MatchDecisions::ConfirmMatchSuccessDndStaff,cancel,Client no longer eligible for match,4,false, +MatchRoutes::Default,MatchDecisions::ConfirmMatchSuccessDndStaff,cancel,Client received another housing opportunity,5,false, +MatchRoutes::Default,MatchDecisions::ConfirmMatchSuccessDndStaff,cancel,HSP CORI,6,false, +MatchRoutes::Default,MatchDecisions::ConfirmMatchSuccessDndStaff,cancel,Incarcerated,7,false, +MatchRoutes::Default,MatchDecisions::ConfirmMatchSuccessDndStaff,cancel,Match expired,8,false, +MatchRoutes::Default,MatchDecisions::ConfirmMatchSuccessDndStaff,cancel,SSP CORI,9,false, +MatchRoutes::Default,MatchDecisions::ConfirmMatchSuccessDndStaff,cancel,Vacancy filled by other client,10,false, +MatchRoutes::Default,MatchDecisions::ConfirmMatchSuccessDndStaff,cancel,Vacancy should not have been entered,11,false, +MatchRoutes::Default,MatchDecisions::ConfirmMatchSuccessDndStaff,cancel,Other,12,false, +MatchRoutes::ProviderOnly,MatchDecisions::ProviderOnly::HsaAcknowledgesReceipt,cancel,Match expired,0,false, +MatchRoutes::ProviderOnly,MatchDecisions::ProviderOnly::HsaAcknowledgesReceipt,cancel,Vacancy filled by other client,1,false, +MatchRoutes::ProviderOnly,MatchDecisions::ProviderOnly::HsaAcknowledgesReceipt,cancel,Vacancy should not have been entered,2,false, +MatchRoutes::ProviderOnly,MatchDecisions::ProviderOnly::HsaAcknowledgesReceipt,cancel,Other,3,false, +MatchRoutes::ProviderOnly,MatchDecisions::ProviderOnly::HsaAcceptsClient,decline,Client refused offer,0,true, +MatchRoutes::ProviderOnly,MatchDecisions::ProviderOnly::HsaAcceptsClient,decline,Health and Safety,1,true, +MatchRoutes::ProviderOnly,MatchDecisions::ProviderOnly::HsaAcceptsClient,decline,Household could not be located,2,true, +MatchRoutes::ProviderOnly,MatchDecisions::ProviderOnly::HsaAcceptsClient,decline,Ineligible for Housing Program,3,true, +MatchRoutes::ProviderOnly,MatchDecisions::ProviderOnly::HsaAcceptsClient,decline,Other,4,false, +MatchRoutes::ProviderOnly,MatchDecisions::ProviderOnly::HsaAcceptsClient,cancel,Vacancy filled by other client,0,false, +MatchRoutes::ProviderOnly,MatchDecisions::ProviderOnly::HsaAcceptsClient,cancel,Vacancy should not have been entered,1,false, +MatchRoutes::ProviderOnly,MatchDecisions::ProviderOnly::HsaAcceptsClient,cancel,Other,2,false, +MatchRoutes::HomelessSetAside,MatchDecisions::HomelessSetAside::SetAsidesHsaAcceptsClient,decline,Client deceased,0,true, +MatchRoutes::HomelessSetAside,MatchDecisions::HomelessSetAside::SetAsidesHsaAcceptsClient,decline,Client has declined match,1,true, +MatchRoutes::HomelessSetAside,MatchDecisions::HomelessSetAside::SetAsidesHsaAcceptsClient,decline,Client has disengaged,2,true, +MatchRoutes::HomelessSetAside,MatchDecisions::HomelessSetAside::SetAsidesHsaAcceptsClient,decline,Client no longer eligible for match,3,true, +MatchRoutes::HomelessSetAside,MatchDecisions::HomelessSetAside::SetAsidesHsaAcceptsClient,decline,Client received another housing opportunity,4,true, +MatchRoutes::HomelessSetAside,MatchDecisions::HomelessSetAside::SetAsidesHsaAcceptsClient,decline,CORI,5,true, +MatchRoutes::HomelessSetAside,MatchDecisions::HomelessSetAside::SetAsidesHsaAcceptsClient,decline,Health and Safety,6,true, +MatchRoutes::HomelessSetAside,MatchDecisions::HomelessSetAside::SetAsidesHsaAcceptsClient,decline,Household could not be located,7,true, +MatchRoutes::HomelessSetAside,MatchDecisions::HomelessSetAside::SetAsidesHsaAcceptsClient,decline,Incarcerated,8,true, +MatchRoutes::HomelessSetAside,MatchDecisions::HomelessSetAside::SetAsidesHsaAcceptsClient,decline,Unwilling to live in SRO,9,true, +MatchRoutes::HomelessSetAside,MatchDecisions::HomelessSetAside::SetAsidesHsaAcceptsClient,decline,Unwilling to live in that neighborhood,10,true, +MatchRoutes::HomelessSetAside,MatchDecisions::HomelessSetAside::SetAsidesHsaAcceptsClient,decline,Vacancy filled by other client,11,true, +MatchRoutes::HomelessSetAside,MatchDecisions::HomelessSetAside::SetAsidesHsaAcceptsClient,decline,Other,12,false, +MatchRoutes::HomelessSetAside,MatchDecisions::HomelessSetAside::SetAsidesHsaAcceptsClient,cancel,Match expired,0,false, +MatchRoutes::HomelessSetAside,MatchDecisions::HomelessSetAside::SetAsidesHsaAcceptsClient,cancel,Vacancy should not have been entered,1,false, +MatchRoutes::HomelessSetAside,MatchDecisions::HomelessSetAside::SetAsidesHsaAcceptsClient,cancel,Other,2,false, +MatchRoutes::HomelessSetAside,MatchDecisions::HomelessSetAside::SetAsidesRecordClientHousedDateOrDeclineHousingSubsidyAdministrator,decline,Client deceased,0,true, +MatchRoutes::HomelessSetAside,MatchDecisions::HomelessSetAside::SetAsidesRecordClientHousedDateOrDeclineHousingSubsidyAdministrator,decline,Client has declined match,1,true, +MatchRoutes::HomelessSetAside,MatchDecisions::HomelessSetAside::SetAsidesRecordClientHousedDateOrDeclineHousingSubsidyAdministrator,decline,Client has disengaged,2,true, +MatchRoutes::HomelessSetAside,MatchDecisions::HomelessSetAside::SetAsidesRecordClientHousedDateOrDeclineHousingSubsidyAdministrator,decline,Client no longer eligible for match,3,true, +MatchRoutes::HomelessSetAside,MatchDecisions::HomelessSetAside::SetAsidesRecordClientHousedDateOrDeclineHousingSubsidyAdministrator,decline,Client received another housing opportunity,4,true, +MatchRoutes::HomelessSetAside,MatchDecisions::HomelessSetAside::SetAsidesRecordClientHousedDateOrDeclineHousingSubsidyAdministrator,decline,CORI,5,true, +MatchRoutes::HomelessSetAside,MatchDecisions::HomelessSetAside::SetAsidesRecordClientHousedDateOrDeclineHousingSubsidyAdministrator,decline,Health and Safety,6,true, +MatchRoutes::HomelessSetAside,MatchDecisions::HomelessSetAside::SetAsidesRecordClientHousedDateOrDeclineHousingSubsidyAdministrator,decline,Household could not be located,7,true, +MatchRoutes::HomelessSetAside,MatchDecisions::HomelessSetAside::SetAsidesRecordClientHousedDateOrDeclineHousingSubsidyAdministrator,decline,Incarcerated,8,true, +MatchRoutes::HomelessSetAside,MatchDecisions::HomelessSetAside::SetAsidesRecordClientHousedDateOrDeclineHousingSubsidyAdministrator,decline,Unwilling to live in SRO,9,true, +MatchRoutes::HomelessSetAside,MatchDecisions::HomelessSetAside::SetAsidesRecordClientHousedDateOrDeclineHousingSubsidyAdministrator,decline,Unwilling to live in that neighborhood,10,true, +MatchRoutes::HomelessSetAside,MatchDecisions::HomelessSetAside::SetAsidesRecordClientHousedDateOrDeclineHousingSubsidyAdministrator,decline,Vacancy filled by other client,11,true, +MatchRoutes::HomelessSetAside,MatchDecisions::HomelessSetAside::SetAsidesRecordClientHousedDateOrDeclineHousingSubsidyAdministrator,decline,Other,12,false, +MatchRoutes::HomelessSetAside,MatchDecisions::HomelessSetAside::SetAsidesRecordClientHousedDateOrDeclineHousingSubsidyAdministrator,cancel,Match expired,0,false, +MatchRoutes::HomelessSetAside,MatchDecisions::HomelessSetAside::SetAsidesRecordClientHousedDateOrDeclineHousingSubsidyAdministrator,cancel,Vacancy should not have been entered,1,false, +MatchRoutes::HomelessSetAside,MatchDecisions::HomelessSetAside::SetAsidesRecordClientHousedDateOrDeclineHousingSubsidyAdministrator,cancel,Other,2,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationDndStaff,decline,Client has another housing option,0,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationDndStaff,decline,Client won't be eligible based on funding source,1,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationDndStaff,decline,Client won't be eligible for housing type,2,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationDndStaff,decline,Client won't be eligible for services,3,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationDndStaff,decline,Other,4,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationDndStaff,cancel,Client deceased,0,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationDndStaff,cancel,Client has declined match,1,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationDndStaff,cancel,Client has disappeared,2,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationDndStaff,cancel,Client has disengaged,3,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationDndStaff,cancel,Client no longer eligible for match,4,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationDndStaff,cancel,Client received another housing opportunity,5,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationDndStaff,cancel,Housing Case Manager has disengaged,6,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationDndStaff,cancel,Incarcerated,7,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationDndStaff,cancel,Match expired – Agency interaction,8,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationDndStaff,cancel,Match expired – No agency interaction,9,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationDndStaff,cancel,Match expired – No Housing Case Manager interaction,10,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationDndStaff,cancel,Match expired – No Shelter Agency interaction,11,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationDndStaff,cancel,Match stalled - Agency has disengaged,12,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationDndStaff,cancel,Match stalled – Housing Case Manager has disengaged,13,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationDndStaff,cancel,Shelter Agency has disengaged,14,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationDndStaff,cancel,Vacancy filled by other client,15,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationDndStaff,cancel,Vacancy should not have been entered,16,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationDndStaff,cancel,Other,17,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationShelterAgency,decline,Client has another housing option,0,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationShelterAgency,decline,Client refused unit (non-SRO),1,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationShelterAgency,decline,Client refused voucher,2,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationShelterAgency,decline,Does not agree to services,3,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationShelterAgency,decline,Does not want housing at this time,4,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationShelterAgency,decline,Unsafe environment for this person,5,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationShelterAgency,decline,Unwilling to live in SRO,6,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationShelterAgency,decline,Unwilling to live in that neighborhood,7,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationShelterAgency,decline,Other,8,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationShelterAgency,cancel,Client deceased,0,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationShelterAgency,cancel,Client has declined match,1,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationShelterAgency,cancel,Client has disappeared,2,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationShelterAgency,cancel,Client has disengaged,3,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationShelterAgency,cancel,Client no longer eligible for match,4,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationShelterAgency,cancel,Client received another housing opportunity,5,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationShelterAgency,cancel,Housing Case Manager has disengaged,6,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationShelterAgency,cancel,Incarcerated,7,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationShelterAgency,cancel,Match expired – Agency interaction,8,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationShelterAgency,cancel,Match expired – No agency interaction,9,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationShelterAgency,cancel,Match expired – No Housing Case Manager interaction,10,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationShelterAgency,cancel,Match expired – No Shelter Agency interaction,11,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationShelterAgency,cancel,Match stalled - Agency has disengaged,12,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationShelterAgency,cancel,Match stalled – Housing Case Manager has disengaged,13,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationShelterAgency,cancel,Shelter Agency has disengaged,14,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationShelterAgency,cancel,Vacancy filled by other client,15,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationShelterAgency,cancel,Vacancy should not have been entered,16,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationShelterAgency,cancel,Other,17,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationHsa,decline,Client has another housing option,0,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationHsa,decline,Client refused unit (non-SRO),1,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationHsa,decline,Client refused voucher,2,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationHsa,decline,Does not agree to services,3,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationHsa,decline,Does not want housing at this time,4,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationHsa,decline,Unsafe environment for this person,5,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationHsa,decline,Unwilling to live in SRO,6,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationHsa,decline,Unwilling to live in that neighborhood,7,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationHsa,decline,Other,8,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationHsa,cancel,Client deceased,0,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationHsa,cancel,Client has declined match,1,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationHsa,cancel,Client has disappeared,2,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationHsa,cancel,Client has disengaged,3,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationHsa,cancel,Client no longer eligible for match,4,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationHsa,cancel,Client received another housing opportunity,5,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationHsa,cancel,Housing Case Manager has disengaged,6,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationHsa,cancel,Incarcerated,7,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationHsa,cancel,Match expired – Agency interaction,8,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationHsa,cancel,Match expired – No agency interaction,9,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationHsa,cancel,Match expired – No Housing Case Manager interaction,10,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationHsa,cancel,Match expired – No Shelter Agency interaction,11,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationHsa,cancel,Match stalled - Agency has disengaged,12,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationHsa,cancel,Match stalled – Housing Case Manager has disengaged,13,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationHsa,cancel,Shelter Agency has disengaged,14,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationHsa,cancel,Vacancy filled by other client,15,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationHsa,cancel,Vacancy should not have been entered,16,false, +MatchRoutes::Four,MatchDecisions::Four::MatchRecommendationHsa,cancel,Other,17,false, +MatchRoutes::Four,MatchDecisions::Four::ScheduleCriminalHearingHousingSubsidyAdmin,decline,Ineligible for Housing Program,0,false, +MatchRoutes::Four,MatchDecisions::Four::ScheduleCriminalHearingHousingSubsidyAdmin,decline,Client has another housing option,1,false, +MatchRoutes::Four,MatchDecisions::Four::ScheduleCriminalHearingHousingSubsidyAdmin,decline,Client refused unit (non-SRO),2,false, +MatchRoutes::Four,MatchDecisions::Four::ScheduleCriminalHearingHousingSubsidyAdmin,decline,Client refused voucher,3,false, +MatchRoutes::Four,MatchDecisions::Four::ScheduleCriminalHearingHousingSubsidyAdmin,decline,Does not agree to services,4,false, +MatchRoutes::Four,MatchDecisions::Four::ScheduleCriminalHearingHousingSubsidyAdmin,decline,Does not want housing at this time,5,false, +MatchRoutes::Four,MatchDecisions::Four::ScheduleCriminalHearingHousingSubsidyAdmin,decline,Unsafe environment for this person,6,false, +MatchRoutes::Four,MatchDecisions::Four::ScheduleCriminalHearingHousingSubsidyAdmin,decline,Unwilling to live in that neighborhood,7,false, +MatchRoutes::Four,MatchDecisions::Four::ScheduleCriminalHearingHousingSubsidyAdmin,decline,Unwilling to live in SRO,8,false, +MatchRoutes::Four,MatchDecisions::Four::ScheduleCriminalHearingHousingSubsidyAdmin,decline,Client has disappeared,9,false, +MatchRoutes::Four,MatchDecisions::Four::ScheduleCriminalHearingHousingSubsidyAdmin,decline,Client has disengaged,10,false, +MatchRoutes::Four,MatchDecisions::Four::ScheduleCriminalHearingHousingSubsidyAdmin,decline,Client deceased,11,false, +MatchRoutes::Four,MatchDecisions::Four::ScheduleCriminalHearingHousingSubsidyAdmin,decline,Incarcerated,12,false, +MatchRoutes::Four,MatchDecisions::Four::ScheduleCriminalHearingHousingSubsidyAdmin,decline,Other,13,false, +MatchRoutes::Four,MatchDecisions::Four::ScheduleCriminalHearingHousingSubsidyAdmin,cancel,Client deceased,0,false, +MatchRoutes::Four,MatchDecisions::Four::ScheduleCriminalHearingHousingSubsidyAdmin,cancel,Client has declined match,1,false, +MatchRoutes::Four,MatchDecisions::Four::ScheduleCriminalHearingHousingSubsidyAdmin,cancel,Client has disappeared,2,false, +MatchRoutes::Four,MatchDecisions::Four::ScheduleCriminalHearingHousingSubsidyAdmin,cancel,Client has disengaged,3,false, +MatchRoutes::Four,MatchDecisions::Four::ScheduleCriminalHearingHousingSubsidyAdmin,cancel,Client no longer eligible for match,4,false, +MatchRoutes::Four,MatchDecisions::Four::ScheduleCriminalHearingHousingSubsidyAdmin,cancel,Client received another housing opportunity,5,false, +MatchRoutes::Four,MatchDecisions::Four::ScheduleCriminalHearingHousingSubsidyAdmin,cancel,Housing Case Manager has disengaged,6,false, +MatchRoutes::Four,MatchDecisions::Four::ScheduleCriminalHearingHousingSubsidyAdmin,cancel,Incarcerated,7,false, +MatchRoutes::Four,MatchDecisions::Four::ScheduleCriminalHearingHousingSubsidyAdmin,cancel,Match expired – Agency interaction,8,false, +MatchRoutes::Four,MatchDecisions::Four::ScheduleCriminalHearingHousingSubsidyAdmin,cancel,Match expired – No agency interaction,9,false, +MatchRoutes::Four,MatchDecisions::Four::ScheduleCriminalHearingHousingSubsidyAdmin,cancel,Match expired – No Housing Case Manager interaction,10,false, +MatchRoutes::Four,MatchDecisions::Four::ScheduleCriminalHearingHousingSubsidyAdmin,cancel,Match expired – No Shelter Agency interaction,11,false, +MatchRoutes::Four,MatchDecisions::Four::ScheduleCriminalHearingHousingSubsidyAdmin,cancel,Match stalled - Agency has disengaged,12,false, +MatchRoutes::Four,MatchDecisions::Four::ScheduleCriminalHearingHousingSubsidyAdmin,cancel,Match stalled – Housing Case Manager has disengaged,13,false, +MatchRoutes::Four,MatchDecisions::Four::ScheduleCriminalHearingHousingSubsidyAdmin,cancel,Shelter Agency has disengaged,14,false, +MatchRoutes::Four,MatchDecisions::Four::ScheduleCriminalHearingHousingSubsidyAdmin,cancel,Vacancy filled by other client,15,false, +MatchRoutes::Four,MatchDecisions::Four::ScheduleCriminalHearingHousingSubsidyAdmin,cancel,Vacancy should not have been entered,16,false, +MatchRoutes::Four,MatchDecisions::Four::ScheduleCriminalHearingHousingSubsidyAdmin,cancel,Other,17,false, +MatchRoutes::Four,MatchDecisions::Four::ApproveMatchHousingSubsidyAdmin,decline,Additional screening criteria imposed by third parties,0,false, +MatchRoutes::Four,MatchDecisions::Four::ApproveMatchHousingSubsidyAdmin,decline,Client refused offer,1,false, +MatchRoutes::Four,MatchDecisions::Four::ApproveMatchHousingSubsidyAdmin,decline,CORI,2,false, +MatchRoutes::Four,MatchDecisions::Four::ApproveMatchHousingSubsidyAdmin,decline,Falsification of documents,3,false, +MatchRoutes::Four,MatchDecisions::Four::ApproveMatchHousingSubsidyAdmin,decline,Health and Safety,4,false, +MatchRoutes::Four,MatchDecisions::Four::ApproveMatchHousingSubsidyAdmin,decline,Household did not respond after initial acceptance of match,5,false, +MatchRoutes::Four,MatchDecisions::Four::ApproveMatchHousingSubsidyAdmin,decline,Ineligible for Housing Program,6,false, +MatchRoutes::Four,MatchDecisions::Four::ApproveMatchHousingSubsidyAdmin,decline,Self-resolved,7,false, +MatchRoutes::Four,MatchDecisions::Four::ApproveMatchHousingSubsidyAdmin,decline,SORI,8,false, +MatchRoutes::Four,MatchDecisions::Four::ApproveMatchHousingSubsidyAdmin,decline,Other,9,false, +MatchRoutes::Four,MatchDecisions::Four::ApproveMatchHousingSubsidyAdmin,cancel,Client deceased,0,false, +MatchRoutes::Four,MatchDecisions::Four::ApproveMatchHousingSubsidyAdmin,cancel,Client has declined match,1,false, +MatchRoutes::Four,MatchDecisions::Four::ApproveMatchHousingSubsidyAdmin,cancel,Client has disappeared,2,false, +MatchRoutes::Four,MatchDecisions::Four::ApproveMatchHousingSubsidyAdmin,cancel,Client has disengaged,3,false, +MatchRoutes::Four,MatchDecisions::Four::ApproveMatchHousingSubsidyAdmin,cancel,Client no longer eligible for match,4,false, +MatchRoutes::Four,MatchDecisions::Four::ApproveMatchHousingSubsidyAdmin,cancel,Client received another housing opportunity,5,false, +MatchRoutes::Four,MatchDecisions::Four::ApproveMatchHousingSubsidyAdmin,cancel,Housing Case Manager has disengaged,6,false, +MatchRoutes::Four,MatchDecisions::Four::ApproveMatchHousingSubsidyAdmin,cancel,Incarcerated,7,false, +MatchRoutes::Four,MatchDecisions::Four::ApproveMatchHousingSubsidyAdmin,cancel,Match expired – Agency interaction,8,false, +MatchRoutes::Four,MatchDecisions::Four::ApproveMatchHousingSubsidyAdmin,cancel,Match expired – No agency interaction,9,false, +MatchRoutes::Four,MatchDecisions::Four::ApproveMatchHousingSubsidyAdmin,cancel,Match expired – No Housing Case Manager interaction,10,false, +MatchRoutes::Four,MatchDecisions::Four::ApproveMatchHousingSubsidyAdmin,cancel,Match expired – No Shelter Agency interaction,11,false, +MatchRoutes::Four,MatchDecisions::Four::ApproveMatchHousingSubsidyAdmin,cancel,Match stalled - Agency has disengaged,12,false, +MatchRoutes::Four,MatchDecisions::Four::ApproveMatchHousingSubsidyAdmin,cancel,Match stalled – Housing Case Manager has disengaged,13,false, +MatchRoutes::Four,MatchDecisions::Four::ApproveMatchHousingSubsidyAdmin,cancel,Shelter Agency has disengaged,14,false, +MatchRoutes::Four,MatchDecisions::Four::ApproveMatchHousingSubsidyAdmin,cancel,Vacancy filled by other client,15,false, +MatchRoutes::Four,MatchDecisions::Four::ApproveMatchHousingSubsidyAdmin,cancel,Vacancy should not have been entered,16,false, +MatchRoutes::Four,MatchDecisions::Four::ApproveMatchHousingSubsidyAdmin,cancel,Other,17,false, +MatchRoutes::Four,MatchDecisions::Four::RecordClientHousedDateHousingSubsidyAdministrator,decline,Ineligible for Housing Program,0,false, +MatchRoutes::Four,MatchDecisions::Four::RecordClientHousedDateHousingSubsidyAdministrator,decline,Client has another housing option,1,false, +MatchRoutes::Four,MatchDecisions::Four::RecordClientHousedDateHousingSubsidyAdministrator,decline,Client refused unit (non-SRO),2,false, +MatchRoutes::Four,MatchDecisions::Four::RecordClientHousedDateHousingSubsidyAdministrator,decline,Client refused voucher,3,false, +MatchRoutes::Four,MatchDecisions::Four::RecordClientHousedDateHousingSubsidyAdministrator,decline,Does not agree to services,4,false, +MatchRoutes::Four,MatchDecisions::Four::RecordClientHousedDateHousingSubsidyAdministrator,decline,Does not want housing at this time,5,false, +MatchRoutes::Four,MatchDecisions::Four::RecordClientHousedDateHousingSubsidyAdministrator,decline,Unsafe environment for this person,6,false, +MatchRoutes::Four,MatchDecisions::Four::RecordClientHousedDateHousingSubsidyAdministrator,decline,Unwilling to live in that neighborhood,7,false, +MatchRoutes::Four,MatchDecisions::Four::RecordClientHousedDateHousingSubsidyAdministrator,decline,Unwilling to live in SRO,8,false, +MatchRoutes::Four,MatchDecisions::Four::RecordClientHousedDateHousingSubsidyAdministrator,decline,Client has disappeared,9,false, +MatchRoutes::Four,MatchDecisions::Four::RecordClientHousedDateHousingSubsidyAdministrator,decline,Client has disengaged,10,false, +MatchRoutes::Four,MatchDecisions::Four::RecordClientHousedDateHousingSubsidyAdministrator,decline,Client deceased,11,false, +MatchRoutes::Four,MatchDecisions::Four::RecordClientHousedDateHousingSubsidyAdministrator,decline,Incarcerated,12,false, +MatchRoutes::Four,MatchDecisions::Four::RecordClientHousedDateHousingSubsidyAdministrator,decline,Other,13,false, +MatchRoutes::Four,MatchDecisions::Four::RecordClientHousedDateHousingSubsidyAdministrator,cancel,Client deceased,0,false, +MatchRoutes::Four,MatchDecisions::Four::RecordClientHousedDateHousingSubsidyAdministrator,cancel,Client has declined match,1,false, +MatchRoutes::Four,MatchDecisions::Four::RecordClientHousedDateHousingSubsidyAdministrator,cancel,Client has disappeared,2,false, +MatchRoutes::Four,MatchDecisions::Four::RecordClientHousedDateHousingSubsidyAdministrator,cancel,Client has disengaged,3,false, +MatchRoutes::Four,MatchDecisions::Four::RecordClientHousedDateHousingSubsidyAdministrator,cancel,Client no longer eligible for match,4,false, +MatchRoutes::Four,MatchDecisions::Four::RecordClientHousedDateHousingSubsidyAdministrator,cancel,Client received another housing opportunity,5,false, +MatchRoutes::Four,MatchDecisions::Four::RecordClientHousedDateHousingSubsidyAdministrator,cancel,Housing Case Manager has disengaged,6,false, +MatchRoutes::Four,MatchDecisions::Four::RecordClientHousedDateHousingSubsidyAdministrator,cancel,Incarcerated,7,false, +MatchRoutes::Four,MatchDecisions::Four::RecordClientHousedDateHousingSubsidyAdministrator,cancel,Match expired – Agency interaction,8,false, +MatchRoutes::Four,MatchDecisions::Four::RecordClientHousedDateHousingSubsidyAdministrator,cancel,Match expired – No agency interaction,9,false, +MatchRoutes::Four,MatchDecisions::Four::RecordClientHousedDateHousingSubsidyAdministrator,cancel,Match expired – No Housing Case Manager interaction,10,false, +MatchRoutes::Four,MatchDecisions::Four::RecordClientHousedDateHousingSubsidyAdministrator,cancel,Match expired – No Shelter Agency interaction,11,false, +MatchRoutes::Four,MatchDecisions::Four::RecordClientHousedDateHousingSubsidyAdministrator,cancel,Match stalled - Agency has disengaged,12,false, +MatchRoutes::Four,MatchDecisions::Four::RecordClientHousedDateHousingSubsidyAdministrator,cancel,Match stalled – Housing Case Manager has disengaged,13,false, +MatchRoutes::Four,MatchDecisions::Four::RecordClientHousedDateHousingSubsidyAdministrator,cancel,Shelter Agency has disengaged,14,false, +MatchRoutes::Four,MatchDecisions::Four::RecordClientHousedDateHousingSubsidyAdministrator,cancel,Vacancy filled by other client,15,false, +MatchRoutes::Four,MatchDecisions::Four::RecordClientHousedDateHousingSubsidyAdministrator,cancel,Vacancy should not have been entered,16,false, +MatchRoutes::Four,MatchDecisions::Four::RecordClientHousedDateHousingSubsidyAdministrator,cancel,Other,17,false, +MatchRoutes::Four,MatchDecisions::Four::ConfirmMatchSuccessDndStaff,cancel,Client deceased,0,false, +MatchRoutes::Four,MatchDecisions::Four::ConfirmMatchSuccessDndStaff,cancel,Client has declined match,1,false, +MatchRoutes::Four,MatchDecisions::Four::ConfirmMatchSuccessDndStaff,cancel,Client has disappeared,2,false, +MatchRoutes::Four,MatchDecisions::Four::ConfirmMatchSuccessDndStaff,cancel,Client has disengaged,3,false, +MatchRoutes::Four,MatchDecisions::Four::ConfirmMatchSuccessDndStaff,cancel,Client no longer eligible for match,4,false, +MatchRoutes::Four,MatchDecisions::Four::ConfirmMatchSuccessDndStaff,cancel,Client received another housing opportunity,5,false, +MatchRoutes::Four,MatchDecisions::Four::ConfirmMatchSuccessDndStaff,cancel,Housing Case Manager has disengaged,6,false, +MatchRoutes::Four,MatchDecisions::Four::ConfirmMatchSuccessDndStaff,cancel,Incarcerated,7,false, +MatchRoutes::Four,MatchDecisions::Four::ConfirmMatchSuccessDndStaff,cancel,Match expired – Agency interaction,8,false, +MatchRoutes::Four,MatchDecisions::Four::ConfirmMatchSuccessDndStaff,cancel,Match expired – No agency interaction,9,false, +MatchRoutes::Four,MatchDecisions::Four::ConfirmMatchSuccessDndStaff,cancel,Match expired – No Housing Case Manager interaction,10,false, +MatchRoutes::Four,MatchDecisions::Four::ConfirmMatchSuccessDndStaff,cancel,Match expired – No Shelter Agency interaction,11,false, +MatchRoutes::Four,MatchDecisions::Four::ConfirmMatchSuccessDndStaff,cancel,Match stalled - Agency has disengaged,12,false, +MatchRoutes::Four,MatchDecisions::Four::ConfirmMatchSuccessDndStaff,cancel,Match stalled – Housing Case Manager has disengaged,13,false, +MatchRoutes::Four,MatchDecisions::Four::ConfirmMatchSuccessDndStaff,cancel,Shelter Agency has disengaged,14,false, +MatchRoutes::Four,MatchDecisions::Four::ConfirmMatchSuccessDndStaff,cancel,Vacancy filled by other client,15,false, +MatchRoutes::Four,MatchDecisions::Four::ConfirmMatchSuccessDndStaff,cancel,Vacancy should not have been entered,16,false, +MatchRoutes::Four,MatchDecisions::Four::ConfirmMatchSuccessDndStaff,cancel,Other,17,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMatchRecommendation,decline,Additional screening criteria imposed by third parties,0,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMatchRecommendation,decline,Client refused offer,1,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMatchRecommendation,decline,CORI,2,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMatchRecommendation,decline,Falsification of documents,3,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMatchRecommendation,decline,Health and Safety,4,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMatchRecommendation,decline,Household did not respond after initial acceptance of match,5,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMatchRecommendation,decline,Ineligible for Housing Program,6,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMatchRecommendation,decline,Self-resolved,7,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMatchRecommendation,decline,SORI,8,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMatchRecommendation,decline,Other,9,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMatchRecommendation,cancel,Client deceased,0,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMatchRecommendation,cancel,Client has declined match,1,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMatchRecommendation,cancel,Client has disappeared,2,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMatchRecommendation,cancel,Client has disengaged,3,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMatchRecommendation,cancel,Client no longer eligible for match,4,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMatchRecommendation,cancel,Client received another housing opportunity,5,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMatchRecommendation,cancel,HSP CORI,6,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMatchRecommendation,cancel,Incarcerated,7,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMatchRecommendation,cancel,Match expired,8,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMatchRecommendation,cancel,SSP CORI,9,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMatchRecommendation,cancel,Vacancy filled by other client,10,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMatchRecommendation,cancel,Vacancy should not have been entered,11,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMatchRecommendation,cancel,Other,12,false, +MatchRoutes::Five,MatchDecisions::Five::FiveClientAgrees,decline,Client has another housing option,0,false, +MatchRoutes::Five,MatchDecisions::Five::FiveClientAgrees,decline,Client refused unit (non-SRO),1,false, +MatchRoutes::Five,MatchDecisions::Five::FiveClientAgrees,decline,Client refused voucher,2,false, +MatchRoutes::Five,MatchDecisions::Five::FiveClientAgrees,decline,Does not agree to services,3,false, +MatchRoutes::Five,MatchDecisions::Five::FiveClientAgrees,decline,Does not want housing at this time,4,false, +MatchRoutes::Five,MatchDecisions::Five::FiveClientAgrees,decline,Unsafe environment for this person,5,false, +MatchRoutes::Five,MatchDecisions::Five::FiveClientAgrees,decline,Unwilling to live in SRO,6,false, +MatchRoutes::Five,MatchDecisions::Five::FiveClientAgrees,decline,Unwilling to live in that neighborhood,7,false, +MatchRoutes::Five,MatchDecisions::Five::FiveClientAgrees,decline,Other,8,false, +MatchRoutes::Five,MatchDecisions::Five::FiveClientAgrees,cancel,Client deceased,0,false, +MatchRoutes::Five,MatchDecisions::Five::FiveClientAgrees,cancel,Client has declined match,1,false, +MatchRoutes::Five,MatchDecisions::Five::FiveClientAgrees,cancel,Client has disappeared,2,false, +MatchRoutes::Five,MatchDecisions::Five::FiveClientAgrees,cancel,Client has disengaged,3,false, +MatchRoutes::Five,MatchDecisions::Five::FiveClientAgrees,cancel,Client no longer eligible for match,4,false, +MatchRoutes::Five,MatchDecisions::Five::FiveClientAgrees,cancel,Client received another housing opportunity,5,false, +MatchRoutes::Five,MatchDecisions::Five::FiveClientAgrees,cancel,HSP CORI,6,false, +MatchRoutes::Five,MatchDecisions::Five::FiveClientAgrees,cancel,Incarcerated,7,false, +MatchRoutes::Five,MatchDecisions::Five::FiveClientAgrees,cancel,Match expired,8,false, +MatchRoutes::Five,MatchDecisions::Five::FiveClientAgrees,cancel,SSP CORI,9,false, +MatchRoutes::Five,MatchDecisions::Five::FiveClientAgrees,cancel,Vacancy filled by other client,10,false, +MatchRoutes::Five,MatchDecisions::Five::FiveClientAgrees,cancel,Vacancy should not have been entered,11,false, +MatchRoutes::Five,MatchDecisions::Five::FiveClientAgrees,cancel,Other,12,false, +MatchRoutes::Five,MatchDecisions::Five::FiveApplicationSubmission,decline,Client has another housing option,0,false, +MatchRoutes::Five,MatchDecisions::Five::FiveApplicationSubmission,decline,Client refused unit (non-SRO),1,false, +MatchRoutes::Five,MatchDecisions::Five::FiveApplicationSubmission,decline,Client refused voucher,2,false, +MatchRoutes::Five,MatchDecisions::Five::FiveApplicationSubmission,decline,Does not agree to services,3,false, +MatchRoutes::Five,MatchDecisions::Five::FiveApplicationSubmission,decline,Does not want housing at this time,4,false, +MatchRoutes::Five,MatchDecisions::Five::FiveApplicationSubmission,decline,Unsafe environment for this person,5,false, +MatchRoutes::Five,MatchDecisions::Five::FiveApplicationSubmission,decline,Unwilling to live in SRO,6,false, +MatchRoutes::Five,MatchDecisions::Five::FiveApplicationSubmission,decline,Unwilling to live in that neighborhood,7,false, +MatchRoutes::Five,MatchDecisions::Five::FiveApplicationSubmission,decline,Other,8,false, +MatchRoutes::Five,MatchDecisions::Five::FiveApplicationSubmission,cancel,Client deceased,0,false, +MatchRoutes::Five,MatchDecisions::Five::FiveApplicationSubmission,cancel,Client has declined match,1,false, +MatchRoutes::Five,MatchDecisions::Five::FiveApplicationSubmission,cancel,Client has disappeared,2,false, +MatchRoutes::Five,MatchDecisions::Five::FiveApplicationSubmission,cancel,Client has disengaged,3,false, +MatchRoutes::Five,MatchDecisions::Five::FiveApplicationSubmission,cancel,Client no longer eligible for match,4,false, +MatchRoutes::Five,MatchDecisions::Five::FiveApplicationSubmission,cancel,Client received another housing opportunity,5,false, +MatchRoutes::Five,MatchDecisions::Five::FiveApplicationSubmission,cancel,HSP CORI,6,false, +MatchRoutes::Five,MatchDecisions::Five::FiveApplicationSubmission,cancel,Incarcerated,7,false, +MatchRoutes::Five,MatchDecisions::Five::FiveApplicationSubmission,cancel,Match expired,8,false, +MatchRoutes::Five,MatchDecisions::Five::FiveApplicationSubmission,cancel,SSP CORI,9,false, +MatchRoutes::Five,MatchDecisions::Five::FiveApplicationSubmission,cancel,Vacancy filled by other client,10,false, +MatchRoutes::Five,MatchDecisions::Five::FiveApplicationSubmission,cancel,Vacancy should not have been entered,11,false, +MatchRoutes::Five,MatchDecisions::Five::FiveApplicationSubmission,cancel,Other,12,false, +MatchRoutes::Five,MatchDecisions::Five::FiveScreening,decline,Client has another housing option,0,false, +MatchRoutes::Five,MatchDecisions::Five::FiveScreening,decline,Client refused unit (non-SRO),1,false, +MatchRoutes::Five,MatchDecisions::Five::FiveScreening,decline,Client refused voucher,2,false, +MatchRoutes::Five,MatchDecisions::Five::FiveScreening,decline,Does not agree to services,3,false, +MatchRoutes::Five,MatchDecisions::Five::FiveScreening,decline,Does not want housing at this time,4,false, +MatchRoutes::Five,MatchDecisions::Five::FiveScreening,decline,Unsafe environment for this person,5,false, +MatchRoutes::Five,MatchDecisions::Five::FiveScreening,decline,Unwilling to live in SRO,6,false, +MatchRoutes::Five,MatchDecisions::Five::FiveScreening,decline,Unwilling to live in that neighborhood,7,false, +MatchRoutes::Five,MatchDecisions::Five::FiveScreening,decline,Other,8,false, +MatchRoutes::Five,MatchDecisions::Five::FiveScreening,cancel,Client deceased,0,false, +MatchRoutes::Five,MatchDecisions::Five::FiveScreening,cancel,Client has declined match,1,false, +MatchRoutes::Five,MatchDecisions::Five::FiveScreening,cancel,Client has disappeared,2,false, +MatchRoutes::Five,MatchDecisions::Five::FiveScreening,cancel,Client has disengaged,3,false, +MatchRoutes::Five,MatchDecisions::Five::FiveScreening,cancel,Client no longer eligible for match,4,false, +MatchRoutes::Five,MatchDecisions::Five::FiveScreening,cancel,Client received another housing opportunity,5,false, +MatchRoutes::Five,MatchDecisions::Five::FiveScreening,cancel,HSP CORI,6,false, +MatchRoutes::Five,MatchDecisions::Five::FiveScreening,cancel,Incarcerated,7,false, +MatchRoutes::Five,MatchDecisions::Five::FiveScreening,cancel,Match expired,8,false, +MatchRoutes::Five,MatchDecisions::Five::FiveScreening,cancel,SSP CORI,9,false, +MatchRoutes::Five,MatchDecisions::Five::FiveScreening,cancel,Vacancy filled by other client,10,false, +MatchRoutes::Five,MatchDecisions::Five::FiveScreening,cancel,Vacancy should not have been entered,11,false, +MatchRoutes::Five,MatchDecisions::Five::FiveScreening,cancel,Other,12,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMitigation,decline,Mitigation failed,0,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMitigation,decline,Other,1,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMitigation,cancel,Client deceased,0,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMitigation,cancel,Client has declined match,1,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMitigation,cancel,Client has disappeared,2,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMitigation,cancel,Client has disengaged,3,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMitigation,cancel,Client no longer eligible for match,4,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMitigation,cancel,Client received another housing opportunity,5,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMitigation,cancel,HSP CORI,6,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMitigation,cancel,Incarcerated,7,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMitigation,cancel,Match expired,8,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMitigation,cancel,SSP CORI,9,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMitigation,cancel,Vacancy filled by other client,10,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMitigation,cancel,Vacancy should not have been entered,11,false, +MatchRoutes::Five,MatchDecisions::Five::FiveMitigation,cancel,Other,12,false, +MatchRoutes::Five,MatchDecisions::Five::FiveLeaseUp,decline,Client has another housing option,0,false, +MatchRoutes::Five,MatchDecisions::Five::FiveLeaseUp,decline,Client refused unit (non-SRO),1,false, +MatchRoutes::Five,MatchDecisions::Five::FiveLeaseUp,decline,Client refused voucher,2,false, +MatchRoutes::Five,MatchDecisions::Five::FiveLeaseUp,decline,Does not agree to services,3,false, +MatchRoutes::Five,MatchDecisions::Five::FiveLeaseUp,decline,Does not want housing at this time,4,false, +MatchRoutes::Five,MatchDecisions::Five::FiveLeaseUp,decline,Unsafe environment for this person,5,false, +MatchRoutes::Five,MatchDecisions::Five::FiveLeaseUp,decline,Unwilling to live in SRO,6,false, +MatchRoutes::Five,MatchDecisions::Five::FiveLeaseUp,decline,Unwilling to live in that neighborhood,7,false, +MatchRoutes::Five,MatchDecisions::Five::FiveLeaseUp,decline,Other,8,false, +MatchRoutes::Five,MatchDecisions::Five::FiveLeaseUp,cancel,Client deceased,0,false, +MatchRoutes::Five,MatchDecisions::Five::FiveLeaseUp,cancel,Client has declined match,1,false, +MatchRoutes::Five,MatchDecisions::Five::FiveLeaseUp,cancel,Client has disappeared,2,false, +MatchRoutes::Five,MatchDecisions::Five::FiveLeaseUp,cancel,Client has disengaged,3,false, +MatchRoutes::Five,MatchDecisions::Five::FiveLeaseUp,cancel,Client no longer eligible for match,4,false, +MatchRoutes::Five,MatchDecisions::Five::FiveLeaseUp,cancel,Client received another housing opportunity,5,false, +MatchRoutes::Five,MatchDecisions::Five::FiveLeaseUp,cancel,HSP CORI,6,false, +MatchRoutes::Five,MatchDecisions::Five::FiveLeaseUp,cancel,Incarcerated,7,false, +MatchRoutes::Five,MatchDecisions::Five::FiveLeaseUp,cancel,Match expired,8,false, +MatchRoutes::Five,MatchDecisions::Five::FiveLeaseUp,cancel,SSP CORI,9,false, +MatchRoutes::Five,MatchDecisions::Five::FiveLeaseUp,cancel,Vacancy filled by other client,10,false, +MatchRoutes::Five,MatchDecisions::Five::FiveLeaseUp,cancel,Vacancy should not have been entered,11,false, +MatchRoutes::Five,MatchDecisions::Five::FiveLeaseUp,cancel,Other,12,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationDndStaff,decline,Client deceased,0,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationDndStaff,decline,Client has another housing option,1,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationDndStaff,decline,Client has disappeared,2,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationDndStaff,decline,Client has disengaged,3,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationDndStaff,decline,Client receiving navigation services,4,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationDndStaff,decline,Does not agree to services,5,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationDndStaff,decline,Does not want housing at this time,6,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationDndStaff,decline,Health and Safety,7,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationDndStaff,decline,Incarcerated,8,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationDndStaff,decline,Other,9,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationDndStaff,cancel,Client deceased,0,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationDndStaff,cancel,Client has declined match,1,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationDndStaff,cancel,Client has disappeared,2,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationDndStaff,cancel,Client has disengaged,3,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationDndStaff,cancel,Client no longer eligible for match,4,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationDndStaff,cancel,Client received another housing opportunity,5,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationDndStaff,cancel,Incarcerated,6,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationDndStaff,cancel,Match expired,7,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationDndStaff,cancel,Vacancy should not have been entered,8,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationShelterAgency,decline,Client deceased,0,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationShelterAgency,decline,Client has another housing option,1,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationShelterAgency,decline,Client has disappeared,2,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationShelterAgency,decline,Client has disengaged,3,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationShelterAgency,decline,Client receiving navigation services,4,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationShelterAgency,decline,Does not agree to services,5,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationShelterAgency,decline,Does not want housing at this time,6,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationShelterAgency,decline,Health and Safety,7,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationShelterAgency,decline,Incarcerated,8,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationShelterAgency,decline,Other,9,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationShelterAgency,cancel,Client deceased,0,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationShelterAgency,cancel,Client has declined match,1,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationShelterAgency,cancel,Client has disappeared,2,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationShelterAgency,cancel,Client has disengaged,3,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationShelterAgency,cancel,Client no longer eligible for match,4,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationShelterAgency,cancel,Client received another housing opportunity,5,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationShelterAgency,cancel,Incarcerated,6,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationShelterAgency,cancel,Match expired,7,false, +MatchRoutes::Six,MatchDecisions::Six::MatchRecommendationShelterAgency,cancel,Vacancy should not have been entered,8,false, +MatchRoutes::Six,MatchDecisions::Six::ApproveMatchHousingSubsidyAdmin,decline,Client deceased,0,false, +MatchRoutes::Six,MatchDecisions::Six::ApproveMatchHousingSubsidyAdmin,decline,Client has another housing option,1,false, +MatchRoutes::Six,MatchDecisions::Six::ApproveMatchHousingSubsidyAdmin,decline,Client has disappeared,2,false, +MatchRoutes::Six,MatchDecisions::Six::ApproveMatchHousingSubsidyAdmin,decline,Client has disengaged,3,false, +MatchRoutes::Six,MatchDecisions::Six::ApproveMatchHousingSubsidyAdmin,decline,Client receiving navigation services,4,false, +MatchRoutes::Six,MatchDecisions::Six::ApproveMatchHousingSubsidyAdmin,decline,Does not agree to services,5,false, +MatchRoutes::Six,MatchDecisions::Six::ApproveMatchHousingSubsidyAdmin,decline,Does not want housing at this time,6,false, +MatchRoutes::Six,MatchDecisions::Six::ApproveMatchHousingSubsidyAdmin,decline,Health and Safety,7,false, +MatchRoutes::Six,MatchDecisions::Six::ApproveMatchHousingSubsidyAdmin,decline,Incarcerated,8,false, +MatchRoutes::Six,MatchDecisions::Six::ApproveMatchHousingSubsidyAdmin,decline,Other,9,false, +MatchRoutes::Six,MatchDecisions::Six::ApproveMatchHousingSubsidyAdmin,cancel,Client deceased,0,false, +MatchRoutes::Six,MatchDecisions::Six::ApproveMatchHousingSubsidyAdmin,cancel,Client has declined match,1,false, +MatchRoutes::Six,MatchDecisions::Six::ApproveMatchHousingSubsidyAdmin,cancel,Client has disappeared,2,false, +MatchRoutes::Six,MatchDecisions::Six::ApproveMatchHousingSubsidyAdmin,cancel,Client has disengaged,3,false, +MatchRoutes::Six,MatchDecisions::Six::ApproveMatchHousingSubsidyAdmin,cancel,Client no longer eligible for match,4,false, +MatchRoutes::Six,MatchDecisions::Six::ApproveMatchHousingSubsidyAdmin,cancel,Client received another housing opportunity,5,false, +MatchRoutes::Six,MatchDecisions::Six::ApproveMatchHousingSubsidyAdmin,cancel,Incarcerated,6,false, +MatchRoutes::Six,MatchDecisions::Six::ApproveMatchHousingSubsidyAdmin,cancel,Match expired,7,false, +MatchRoutes::Six,MatchDecisions::Six::ApproveMatchHousingSubsidyAdmin,cancel,Vacancy should not have been entered,8,false, +MatchRoutes::Six,MatchDecisions::Six::ConfirmMatchSuccessDndStaff,cancel,Client deceased,0,false, +MatchRoutes::Six,MatchDecisions::Six::ConfirmMatchSuccessDndStaff,cancel,Client has declined match,1,false, +MatchRoutes::Six,MatchDecisions::Six::ConfirmMatchSuccessDndStaff,cancel,Client has disappeared,2,false, +MatchRoutes::Six,MatchDecisions::Six::ConfirmMatchSuccessDndStaff,cancel,Client has disengaged,3,false, +MatchRoutes::Six,MatchDecisions::Six::ConfirmMatchSuccessDndStaff,cancel,Client no longer eligible for match,4,false, +MatchRoutes::Six,MatchDecisions::Six::ConfirmMatchSuccessDndStaff,cancel,Client received another housing opportunity,5,false, +MatchRoutes::Six,MatchDecisions::Six::ConfirmMatchSuccessDndStaff,cancel,HSP CORI,6,false, +MatchRoutes::Six,MatchDecisions::Six::ConfirmMatchSuccessDndStaff,cancel,Incarcerated,7,false, +MatchRoutes::Six,MatchDecisions::Six::ConfirmMatchSuccessDndStaff,cancel,Match expired,8,false, +MatchRoutes::Six,MatchDecisions::Six::ConfirmMatchSuccessDndStaff,cancel,SSP CORI,9,false, +MatchRoutes::Six,MatchDecisions::Six::ConfirmMatchSuccessDndStaff,cancel,Vacancy filled by other client,10,false, +MatchRoutes::Six,MatchDecisions::Six::ConfirmMatchSuccessDndStaff,cancel,Vacancy should not have been entered,11,false, +MatchRoutes::Six,MatchDecisions::Six::ConfirmMatchSuccessDndStaff,cancel,Other,12,false, +MatchRoutes::Seven,MatchDecisions::Seven::MatchRecommendationDndStaff,decline,Client has another housing option,0,false, +MatchRoutes::Seven,MatchDecisions::Seven::MatchRecommendationDndStaff,decline,Client won't be eligible based on funding source,1,false, +MatchRoutes::Seven,MatchDecisions::Seven::MatchRecommendationDndStaff,decline,Client won't be eligible for housing type,2,false, +MatchRoutes::Seven,MatchDecisions::Seven::MatchRecommendationDndStaff,decline,Client won't be eligible for services,3,false, +MatchRoutes::Seven,MatchDecisions::Seven::MatchRecommendationDndStaff,decline,Other,4,false, +MatchRoutes::Seven,MatchDecisions::Seven::MatchRecommendationDndStaff,cancel,Client deceased,0,false, +MatchRoutes::Seven,MatchDecisions::Seven::MatchRecommendationDndStaff,cancel,Client has declined match,1,false, +MatchRoutes::Seven,MatchDecisions::Seven::MatchRecommendationDndStaff,cancel,Client has disappeared,2,false, +MatchRoutes::Seven,MatchDecisions::Seven::MatchRecommendationDndStaff,cancel,Client has disengaged,3,false, +MatchRoutes::Seven,MatchDecisions::Seven::MatchRecommendationDndStaff,cancel,Client no longer eligible for match,4,false, +MatchRoutes::Seven,MatchDecisions::Seven::MatchRecommendationDndStaff,cancel,Client received another housing opportunity,5,false, +MatchRoutes::Seven,MatchDecisions::Seven::MatchRecommendationDndStaff,cancel,HSP CORI,6,false, +MatchRoutes::Seven,MatchDecisions::Seven::MatchRecommendationDndStaff,cancel,Incarcerated,7,false, +MatchRoutes::Seven,MatchDecisions::Seven::MatchRecommendationDndStaff,cancel,Match expired,8,false, +MatchRoutes::Seven,MatchDecisions::Seven::MatchRecommendationDndStaff,cancel,SSP CORI,9,false, +MatchRoutes::Seven,MatchDecisions::Seven::MatchRecommendationDndStaff,cancel,Vacancy filled by other client,10,false, +MatchRoutes::Seven,MatchDecisions::Seven::MatchRecommendationDndStaff,cancel,Vacancy should not have been entered,11,false, +MatchRoutes::Seven,MatchDecisions::Seven::MatchRecommendationDndStaff,cancel,Other,12,false, +MatchRoutes::Seven,MatchDecisions::Seven::ApproveMatchHousingSubsidyAdmin,decline,Additional screening criteria imposed by third parties,0,false, +MatchRoutes::Seven,MatchDecisions::Seven::ApproveMatchHousingSubsidyAdmin,decline,Client refused offer,1,false, +MatchRoutes::Seven,MatchDecisions::Seven::ApproveMatchHousingSubsidyAdmin,decline,CORI,2,false, +MatchRoutes::Seven,MatchDecisions::Seven::ApproveMatchHousingSubsidyAdmin,decline,Falsification of documents,3,false, +MatchRoutes::Seven,MatchDecisions::Seven::ApproveMatchHousingSubsidyAdmin,decline,Health and Safety,4,false, +MatchRoutes::Seven,MatchDecisions::Seven::ApproveMatchHousingSubsidyAdmin,decline,Household did not respond after initial acceptance of match,5,false, +MatchRoutes::Seven,MatchDecisions::Seven::ApproveMatchHousingSubsidyAdmin,decline,Ineligible for Housing Program,6,false, +MatchRoutes::Seven,MatchDecisions::Seven::ApproveMatchHousingSubsidyAdmin,decline,Self-resolved,7,false, +MatchRoutes::Seven,MatchDecisions::Seven::ApproveMatchHousingSubsidyAdmin,decline,SORI,8,false, +MatchRoutes::Seven,MatchDecisions::Seven::ApproveMatchHousingSubsidyAdmin,decline,Other,9,false, +MatchRoutes::Seven,MatchDecisions::Seven::ApproveMatchHousingSubsidyAdmin,cancel,Client deceased,0,false, +MatchRoutes::Seven,MatchDecisions::Seven::ApproveMatchHousingSubsidyAdmin,cancel,Client has declined match,1,false, +MatchRoutes::Seven,MatchDecisions::Seven::ApproveMatchHousingSubsidyAdmin,cancel,Client has disappeared,2,false, +MatchRoutes::Seven,MatchDecisions::Seven::ApproveMatchHousingSubsidyAdmin,cancel,Client has disengaged,3,false, +MatchRoutes::Seven,MatchDecisions::Seven::ApproveMatchHousingSubsidyAdmin,cancel,Client no longer eligible for match,4,false, +MatchRoutes::Seven,MatchDecisions::Seven::ApproveMatchHousingSubsidyAdmin,cancel,Client received another housing opportunity,5,false, +MatchRoutes::Seven,MatchDecisions::Seven::ApproveMatchHousingSubsidyAdmin,cancel,HSP CORI,6,false, +MatchRoutes::Seven,MatchDecisions::Seven::ApproveMatchHousingSubsidyAdmin,cancel,Incarcerated,7,false, +MatchRoutes::Seven,MatchDecisions::Seven::ApproveMatchHousingSubsidyAdmin,cancel,Match expired,8,false, +MatchRoutes::Seven,MatchDecisions::Seven::ApproveMatchHousingSubsidyAdmin,cancel,SSP CORI,9,false, +MatchRoutes::Seven,MatchDecisions::Seven::ApproveMatchHousingSubsidyAdmin,cancel,Vacancy filled by other client,10,false, +MatchRoutes::Seven,MatchDecisions::Seven::ApproveMatchHousingSubsidyAdmin,cancel,Vacancy should not have been entered,11,false, +MatchRoutes::Seven,MatchDecisions::Seven::ApproveMatchHousingSubsidyAdmin,cancel,Other,12,false, +MatchRoutes::Seven,MatchDecisions::Seven::ConfirmMatchSuccessDndStaff,cancel,Client deceased,0,false, +MatchRoutes::Seven,MatchDecisions::Seven::ConfirmMatchSuccessDndStaff,cancel,Client has declined match,1,false, +MatchRoutes::Seven,MatchDecisions::Seven::ConfirmMatchSuccessDndStaff,cancel,Client has disappeared,2,false, +MatchRoutes::Seven,MatchDecisions::Seven::ConfirmMatchSuccessDndStaff,cancel,Client has disengaged,3,false, +MatchRoutes::Seven,MatchDecisions::Seven::ConfirmMatchSuccessDndStaff,cancel,Client no longer eligible for match,4,false, +MatchRoutes::Seven,MatchDecisions::Seven::ConfirmMatchSuccessDndStaff,cancel,Client received another housing opportunity,5,false, +MatchRoutes::Seven,MatchDecisions::Seven::ConfirmMatchSuccessDndStaff,cancel,HSP CORI,6,false, +MatchRoutes::Seven,MatchDecisions::Seven::ConfirmMatchSuccessDndStaff,cancel,Incarcerated,7,false, +MatchRoutes::Seven,MatchDecisions::Seven::ConfirmMatchSuccessDndStaff,cancel,Match expired,8,false, +MatchRoutes::Seven,MatchDecisions::Seven::ConfirmMatchSuccessDndStaff,cancel,SSP CORI,9,false, +MatchRoutes::Seven,MatchDecisions::Seven::ConfirmMatchSuccessDndStaff,cancel,Vacancy filled by other client,10,false, +MatchRoutes::Seven,MatchDecisions::Seven::ConfirmMatchSuccessDndStaff,cancel,Vacancy should not have been entered,11,false, +MatchRoutes::Seven,MatchDecisions::Seven::ConfirmMatchSuccessDndStaff,cancel,Other,12,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightMatchRecommendation,decline,Client has another housing option,0,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightMatchRecommendation,decline,Client won't be eligible based on funding source,1,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightMatchRecommendation,decline,Client won't be eligible for housing type,2,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightMatchRecommendation,decline,Client won't be eligible for services,3,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightMatchRecommendation,decline,Other,4,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightMatchRecommendation,cancel,Client deceased,0,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightMatchRecommendation,cancel,Client has declined match,1,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightMatchRecommendation,cancel,Client has disappeared,2,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightMatchRecommendation,cancel,Client has disengaged,3,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightMatchRecommendation,cancel,Client needs higher level of care,4,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightMatchRecommendation,cancel,Client no longer eligible for match,5,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightMatchRecommendation,cancel,Client received another housing opportunity,6,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightMatchRecommendation,cancel,Incarcerated,7,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightMatchRecommendation,cancel,Match expired,8,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightMatchRecommendation,cancel,Unable to reach client after multiple attempts,9,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightMatchRecommendation,cancel,Vacancy filled by other client,10,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightMatchRecommendation,cancel,Vacancy should not have been entered,11,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightMatchRecommendation,cancel,Other,12,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightAssignManager,decline,Other,0,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightAssignManager,cancel,Client deceased,0,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightAssignManager,cancel,Client has declined match,1,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightAssignManager,cancel,Client has disappeared,2,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightAssignManager,cancel,Client has disengaged,3,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightAssignManager,cancel,Client needs higher level of care,4,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightAssignManager,cancel,Client no longer eligible for match,5,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightAssignManager,cancel,Client received another housing opportunity,6,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightAssignManager,cancel,Incarcerated,7,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightAssignManager,cancel,Match expired,8,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightAssignManager,cancel,Unable to reach client after multiple attempts,9,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightAssignManager,cancel,Vacancy filled by other client,10,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightAssignManager,cancel,Vacancy should not have been entered,11,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightAssignManager,cancel,Other,12,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightRecordVoucherDate,decline,Client needs higher level of care,0,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightRecordVoucherDate,decline,Client refused offer,1,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightRecordVoucherDate,decline,Household did not respond after initial acceptance of match,2,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightRecordVoucherDate,decline,Immigration status,3,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightRecordVoucherDate,decline,Ineligible for Housing Program,4,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightRecordVoucherDate,decline,Self-resolved,5,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightRecordVoucherDate,decline,Unable to reach client after multiple attempts,6,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightRecordVoucherDate,decline,Other,7,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightRecordVoucherDate,cancel,Client deceased,0,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightRecordVoucherDate,cancel,Client has declined match,1,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightRecordVoucherDate,cancel,Client has disappeared,2,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightRecordVoucherDate,cancel,Client has disengaged,3,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightRecordVoucherDate,cancel,Client needs higher level of care,4,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightRecordVoucherDate,cancel,Client no longer eligible for match,5,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightRecordVoucherDate,cancel,Client received another housing opportunity,6,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightRecordVoucherDate,cancel,Incarcerated,7,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightRecordVoucherDate,cancel,Match expired,8,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightRecordVoucherDate,cancel,Unable to reach client after multiple attempts,9,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightRecordVoucherDate,cancel,Vacancy filled by other client,10,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightRecordVoucherDate,cancel,Vacancy should not have been entered,11,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightRecordVoucherDate,cancel,Other,12,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightLeaseUp,decline,Client needs higher level of care,0,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightLeaseUp,decline,Client refused offer,1,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightLeaseUp,decline,Household did not respond after initial acceptance of match,2,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightLeaseUp,decline,Immigration status,3,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightLeaseUp,decline,Ineligible for Housing Program,4,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightLeaseUp,decline,Self-resolved,5,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightLeaseUp,decline,Unable to reach client after multiple attempts,6,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightLeaseUp,decline,Other,7,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightLeaseUp,cancel,Client deceased,0,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightLeaseUp,cancel,Client has declined match,1,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightLeaseUp,cancel,Client has disappeared,2,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightLeaseUp,cancel,Client has disengaged,3,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightLeaseUp,cancel,Client needs higher level of care,4,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightLeaseUp,cancel,Client no longer eligible for match,5,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightLeaseUp,cancel,Client received another housing opportunity,6,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightLeaseUp,cancel,Incarcerated,7,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightLeaseUp,cancel,Match expired,8,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightLeaseUp,cancel,Unable to reach client after multiple attempts,9,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightLeaseUp,cancel,Vacancy filled by other client,10,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightLeaseUp,cancel,Vacancy should not have been entered,11,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightLeaseUp,cancel,Other,12,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightConfirmMatchSuccess,cancel,Client deceased,0,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightConfirmMatchSuccess,cancel,Client has declined match,1,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightConfirmMatchSuccess,cancel,Client has disappeared,2,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightConfirmMatchSuccess,cancel,Client has disengaged,3,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightConfirmMatchSuccess,cancel,Client needs higher level of care,4,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightConfirmMatchSuccess,cancel,Client no longer eligible for match,5,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightConfirmMatchSuccess,cancel,Client received another housing opportunity,6,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightConfirmMatchSuccess,cancel,Incarcerated,7,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightConfirmMatchSuccess,cancel,Match expired,8,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightConfirmMatchSuccess,cancel,Unable to reach client after multiple attempts,9,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightConfirmMatchSuccess,cancel,Vacancy filled by other client,10,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightConfirmMatchSuccess,cancel,Vacancy should not have been entered,11,false, +MatchRoutes::Eight,MatchDecisions::Eight::EightConfirmMatchSuccess,cancel,Other,12,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineMatchRecommendation,decline,Client has another housing option,0,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineMatchRecommendation,decline,Client won't be eligible based on funding source,1,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineMatchRecommendation,decline,Client won't be eligible for housing type,2,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineMatchRecommendation,decline,Client won't be eligible for services,3,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineMatchRecommendation,decline,Other,4,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineMatchRecommendation,cancel,Client has disappeared,0,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineMatchRecommendation,cancel,Client has disengaged,1,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineMatchRecommendation,cancel,Client no longer eligible for match,2,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineMatchRecommendation,cancel,Incarcerated,3,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineMatchRecommendation,cancel,Match expired,4,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineMatchRecommendation,cancel,Other,5,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineRecordVoucherDate,decline,Client has another housing option,0,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineRecordVoucherDate,decline,Client needs higher level of care,1,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineRecordVoucherDate,decline,Client refused offer,2,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineRecordVoucherDate,decline,Client won't be eligible based on funding source,3,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineRecordVoucherDate,decline,Client won't be eligible for housing type,4,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineRecordVoucherDate,decline,Client won't be eligible for services,5,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineRecordVoucherDate,decline,Household became disengaged,6,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineRecordVoucherDate,decline,Immigration status,7,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineRecordVoucherDate,decline,Ineligible for Housing Program,8,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineRecordVoucherDate,decline,Self-resolved,9,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineRecordVoucherDate,decline,Unable to reach client after multiple attempts,10,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineRecordVoucherDate,decline,Other,11,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineRecordVoucherDate,cancel,Client deceased,0,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineRecordVoucherDate,cancel,Client has declined match,1,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineRecordVoucherDate,cancel,Client has disappeared,2,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineRecordVoucherDate,cancel,Client has disengaged,3,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineRecordVoucherDate,cancel,Client needs higher level of care,4,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineRecordVoucherDate,cancel,Client no longer eligible for match,5,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineRecordVoucherDate,cancel,Client received another housing opportunity,6,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineRecordVoucherDate,cancel,Incarcerated,7,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineRecordVoucherDate,cancel,Match expired,8,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineRecordVoucherDate,cancel,Unable to reach client after multiple attempts,9,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineRecordVoucherDate,cancel,Vacancy filled by other client,10,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineRecordVoucherDate,cancel,Vacancy should not have been entered,11,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineRecordVoucherDate,cancel,Other,12,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineAssignCaseContact,decline,Other,0,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineAssignCaseContact,cancel,Client has disappeared,0,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineAssignCaseContact,cancel,Client has disengaged,1,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineAssignCaseContact,cancel,Client no longer eligible for match,2,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineAssignCaseContact,cancel,Client received another housing opportunity,3,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineAssignCaseContact,cancel,Incarcerated,4,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineAssignCaseContact,cancel,Match expired,5,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineAssignCaseContact,cancel,Other,6,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineAssignManager,decline,Other,0,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineAssignManager,cancel,Client deceased,0,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineAssignManager,cancel,Client has declined match,1,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineAssignManager,cancel,Client has disappeared,2,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineAssignManager,cancel,Client has disengaged,3,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineAssignManager,cancel,Client needs higher level of care,4,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineAssignManager,cancel,Client no longer eligible for match,5,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineAssignManager,cancel,Client received another housing opportunity,6,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineAssignManager,cancel,Incarcerated,7,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineAssignManager,cancel,Match expired,8,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineAssignManager,cancel,Unable to reach client after multiple attempts,9,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineAssignManager,cancel,Vacancy filled by other client,10,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineAssignManager,cancel,Vacancy should not have been entered,11,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineAssignManager,cancel,Other,12,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineLeaseUp,decline,Client needs higher level of care,0,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineLeaseUp,decline,Client refused offer,1,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineLeaseUp,decline,Household did not respond after initial acceptance of match,2,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineLeaseUp,decline,Immigration status,3,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineLeaseUp,decline,Ineligible for Housing Program,4,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineLeaseUp,decline,Self-resolved,5,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineLeaseUp,decline,Unable to reach client after multiple attempts,6,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineLeaseUp,decline,Other,7,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineLeaseUp,cancel,Client deceased,0,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineLeaseUp,cancel,Client has declined match,1,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineLeaseUp,cancel,Client has disappeared,2,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineLeaseUp,cancel,Client has disengaged,3,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineLeaseUp,cancel,Client needs higher level of care,4,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineLeaseUp,cancel,Client no longer eligible for match,5,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineLeaseUp,cancel,Client received another housing opportunity,6,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineLeaseUp,cancel,Incarcerated,7,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineLeaseUp,cancel,Match expired,8,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineLeaseUp,cancel,Unable to reach client after multiple attempts,9,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineLeaseUp,cancel,Vacancy filled by other client,10,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineLeaseUp,cancel,Vacancy should not have been entered,11,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineLeaseUp,cancel,Other,12,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineConfirmMatchSuccess,cancel,Client deceased,0,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineConfirmMatchSuccess,cancel,Client has declined match,1,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineConfirmMatchSuccess,cancel,Client has disappeared,2,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineConfirmMatchSuccess,cancel,Client has disengaged,3,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineConfirmMatchSuccess,cancel,Client no longer eligible for match,4,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineConfirmMatchSuccess,cancel,Client received another housing opportunity,5,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineConfirmMatchSuccess,cancel,HSP CORI,6,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineConfirmMatchSuccess,cancel,Incarcerated,7,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineConfirmMatchSuccess,cancel,Match expired,8,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineConfirmMatchSuccess,cancel,SSP CORI,9,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineConfirmMatchSuccess,cancel,Vacancy filled by other client,10,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineConfirmMatchSuccess,cancel,Vacancy should not have been entered,11,false, +MatchRoutes::Nine,MatchDecisions::Nine::NineConfirmMatchSuccess,cancel,Other,12,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenAgencyConfirmMatchSuccess,decline,Client needs higher level of care,0,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenAgencyConfirmMatchSuccess,decline,Client refused offer,1,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenAgencyConfirmMatchSuccess,decline,Household did not respond after initial acceptance of match,2,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenAgencyConfirmMatchSuccess,decline,Immigration status,3,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenAgencyConfirmMatchSuccess,decline,Ineligible for Housing Program,4,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenAgencyConfirmMatchSuccess,decline,Self-resolved,5,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenAgencyConfirmMatchSuccess,decline,Unable to reach client after multiple attempts,6,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenAgencyConfirmMatchSuccess,decline,Other,7,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenAgencyConfirmMatchSuccess,cancel,Client deceased,0,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenAgencyConfirmMatchSuccess,cancel,Client has declined match,1,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenAgencyConfirmMatchSuccess,cancel,Client has disappeared,2,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenAgencyConfirmMatchSuccess,cancel,Client has disengaged,3,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenAgencyConfirmMatchSuccess,cancel,Client needs higher level of care,4,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenAgencyConfirmMatchSuccess,cancel,Client no longer eligible for match,5,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenAgencyConfirmMatchSuccess,cancel,Client received another housing opportunity,6,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenAgencyConfirmMatchSuccess,cancel,Incarcerated,7,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenAgencyConfirmMatchSuccess,cancel,Match expired,8,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenAgencyConfirmMatchSuccess,cancel,Unable to reach client after multiple attempts,9,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenAgencyConfirmMatchSuccess,cancel,Vacancy filled by other client,10,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenAgencyConfirmMatchSuccess,cancel,Vacancy should not have been entered,11,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenAgencyConfirmMatchSuccess,cancel,Other,12,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenConfirmMatchSuccessDndStaff,decline,Client needs higher level of care,0,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenConfirmMatchSuccessDndStaff,decline,Client refused offer,1,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenConfirmMatchSuccessDndStaff,decline,Household did not respond after initial acceptance of match,2,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenConfirmMatchSuccessDndStaff,decline,Immigration status,3,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenConfirmMatchSuccessDndStaff,decline,Ineligible for Housing Program,4,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenConfirmMatchSuccessDndStaff,decline,Self-resolved,5,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenConfirmMatchSuccessDndStaff,decline,Unable to reach client after multiple attempts,6,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenConfirmMatchSuccessDndStaff,decline,Other,7,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenConfirmMatchSuccessDndStaff,cancel,Client deceased,0,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenConfirmMatchSuccessDndStaff,cancel,Client has declined match,1,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenConfirmMatchSuccessDndStaff,cancel,Client has disappeared,2,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenConfirmMatchSuccessDndStaff,cancel,Client has disengaged,3,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenConfirmMatchSuccessDndStaff,cancel,Client needs higher level of care,4,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenConfirmMatchSuccessDndStaff,cancel,Client no longer eligible for match,5,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenConfirmMatchSuccessDndStaff,cancel,Client received another housing opportunity,6,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenConfirmMatchSuccessDndStaff,cancel,Incarcerated,7,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenConfirmMatchSuccessDndStaff,cancel,Match expired,8,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenConfirmMatchSuccessDndStaff,cancel,Unable to reach client after multiple attempts,9,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenConfirmMatchSuccessDndStaff,cancel,Vacancy filled by other client,10,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenConfirmMatchSuccessDndStaff,cancel,Vacancy should not have been entered,11,false, +MatchRoutes::Ten,MatchDecisions::Ten::TenConfirmMatchSuccessDndStaff,cancel,Other,12,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcknowledgesReceipt,decline,Client deceased,0,true, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcknowledgesReceipt,decline,Client has another housing option,1,true, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcknowledgesReceipt,decline,Client has disappeared,2,true, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcknowledgesReceipt,decline,Client has disengaged,3,true, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcknowledgesReceipt,decline,Client is already receiving navigation services,4,true, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcknowledgesReceipt,decline,Does not agree to services,5,true, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcknowledgesReceipt,decline,Does not want housing at this time,6,true, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcknowledgesReceipt,decline,Health and Safety,7,true, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcknowledgesReceipt,decline,Incarcerated,8,true, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcknowledgesReceipt,decline,Other,9,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcknowledgesReceipt,cancel,Client deceased,0,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcknowledgesReceipt,cancel,Client has declined match,1,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcknowledgesReceipt,cancel,Client has disappeared,2,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcknowledgesReceipt,cancel,Client has disengaged,3,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcknowledgesReceipt,cancel,Client is already receiving navigation services,4,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcknowledgesReceipt,cancel,Client no longer eligible for match,5,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcknowledgesReceipt,cancel,Client received another housing opportunity,6,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcknowledgesReceipt,cancel,Incarcerated,7,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcknowledgesReceipt,cancel,Match expired,8,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcknowledgesReceipt,cancel,Vacancy should not have been entered,9,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcknowledgesReceipt,cancel,Other,10,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcceptsClient,decline,Client deceased,0,true, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcceptsClient,decline,Client has another housing option,1,true, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcceptsClient,decline,Client has disappeared,2,true, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcceptsClient,decline,Client has disengaged,3,true, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcceptsClient,decline,Client is already receiving navigation services,4,true, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcceptsClient,decline,Does not agree to services,5,true, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcceptsClient,decline,Does not want housing at this time,6,true, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcceptsClient,decline,Health and Safety,7,true, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcceptsClient,decline,Incarcerated,8,true, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcceptsClient,decline,Other,9,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcceptsClient,cancel,Client deceased,0,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcceptsClient,cancel,Client has declined match,1,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcceptsClient,cancel,Client has disappeared,2,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcceptsClient,cancel,Client has disengaged,3,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcceptsClient,cancel,Client is already receiving navigation services,4,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcceptsClient,cancel,Client no longer eligible for match,5,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcceptsClient,cancel,Client received another housing opportunity,6,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcceptsClient,cancel,Incarcerated,7,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcceptsClient,cancel,Match expired,8,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcceptsClient,cancel,Vacancy should not have been entered,9,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenHsaAcceptsClient,cancel,Other,10,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenConfirmMatchSuccessDndStaff,decline,Client deceased,0,true, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenConfirmMatchSuccessDndStaff,decline,Client has another housing option,1,true, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenConfirmMatchSuccessDndStaff,decline,Client has disappeared,2,true, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenConfirmMatchSuccessDndStaff,decline,Client has disengaged,3,true, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenConfirmMatchSuccessDndStaff,decline,Client is already receiving navigation services,4,true, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenConfirmMatchSuccessDndStaff,decline,Does not agree to services,5,true, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenConfirmMatchSuccessDndStaff,decline,Does not want housing at this time,6,true, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenConfirmMatchSuccessDndStaff,decline,Health and Safety,7,true, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenConfirmMatchSuccessDndStaff,decline,Incarcerated,8,true, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenConfirmMatchSuccessDndStaff,decline,Other,9,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenConfirmMatchSuccessDndStaff,cancel,Client deceased,0,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenConfirmMatchSuccessDndStaff,cancel,Client has declined match,1,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenConfirmMatchSuccessDndStaff,cancel,Client has disappeared,2,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenConfirmMatchSuccessDndStaff,cancel,Client has disengaged,3,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenConfirmMatchSuccessDndStaff,cancel,Client is already receiving navigation services,4,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenConfirmMatchSuccessDndStaff,cancel,Client no longer eligible for match,5,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenConfirmMatchSuccessDndStaff,cancel,Client received another housing opportunity,6,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenConfirmMatchSuccessDndStaff,cancel,Incarcerated,7,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenConfirmMatchSuccessDndStaff,cancel,Match expired,8,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenConfirmMatchSuccessDndStaff,cancel,Vacancy should not have been entered,9,false, +MatchRoutes::Eleven,MatchDecisions::Eleven::ElevenConfirmMatchSuccessDndStaff,cancel,Other,10,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveAgencyAcknowledgesReceipt,decline,Client needs higher level of care,0,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveAgencyAcknowledgesReceipt,decline,Client refused offer,1,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveAgencyAcknowledgesReceipt,decline,Household did not respond after initial acceptance of match,2,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveAgencyAcknowledgesReceipt,decline,Immigration status,3,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveAgencyAcknowledgesReceipt,decline,Ineligible for Housing Program,4,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveAgencyAcknowledgesReceipt,decline,Self-resolved,5,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveAgencyAcknowledgesReceipt,decline,Unable to reach client after multiple attempts,6,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveAgencyAcknowledgesReceipt,decline,Other,7,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveAgencyAcknowledgesReceipt,cancel,Client deceased,0,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveAgencyAcknowledgesReceipt,cancel,Client has declined match,1,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveAgencyAcknowledgesReceipt,cancel,Client has disappeared,2,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveAgencyAcknowledgesReceipt,cancel,Client has disengaged,3,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveAgencyAcknowledgesReceipt,cancel,Client needs higher level of care,4,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveAgencyAcknowledgesReceipt,cancel,Client no longer eligible for match,5,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveAgencyAcknowledgesReceipt,cancel,Client received another housing opportunity,6,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveAgencyAcknowledgesReceipt,cancel,Incarcerated,7,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveAgencyAcknowledgesReceipt,cancel,Match expired,8,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveAgencyAcknowledgesReceipt,cancel,Unable to reach client after multiple attempts,9,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveAgencyAcknowledgesReceipt,cancel,Vacancy filled by other client,10,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveAgencyAcknowledgesReceipt,cancel,Vacancy should not have been entered,11,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveAgencyAcknowledgesReceipt,cancel,Other,12,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveHsaConfirmMatchSuccess,decline,Client needs higher level of care,0,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveHsaConfirmMatchSuccess,decline,Client refused offer,1,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveHsaConfirmMatchSuccess,decline,Household did not respond after initial acceptance of match,2,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveHsaConfirmMatchSuccess,decline,Immigration status,3,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveHsaConfirmMatchSuccess,decline,Ineligible for Housing Program,4,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveHsaConfirmMatchSuccess,decline,Self-resolved,5,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveHsaConfirmMatchSuccess,decline,Unable to reach client after multiple attempts,6,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveHsaConfirmMatchSuccess,decline,Other,7,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveHsaConfirmMatchSuccess,cancel,Client deceased,0,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveHsaConfirmMatchSuccess,cancel,Client has declined match,1,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveHsaConfirmMatchSuccess,cancel,Client has disappeared,2,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveHsaConfirmMatchSuccess,cancel,Client has disengaged,3,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveHsaConfirmMatchSuccess,cancel,Client needs higher level of care,4,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveHsaConfirmMatchSuccess,cancel,Client no longer eligible for match,5,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveHsaConfirmMatchSuccess,cancel,Client received another housing opportunity,6,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveHsaConfirmMatchSuccess,cancel,Incarcerated,7,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveHsaConfirmMatchSuccess,cancel,Match expired,8,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveHsaConfirmMatchSuccess,cancel,Unable to reach client after multiple attempts,9,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveHsaConfirmMatchSuccess,cancel,Vacancy filled by other client,10,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveHsaConfirmMatchSuccess,cancel,Vacancy should not have been entered,11,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveHsaConfirmMatchSuccess,cancel,Other,12,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveConfirmMatchSuccessDndStaff,decline,Client needs higher level of care,0,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveConfirmMatchSuccessDndStaff,decline,Client refused offer,1,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveConfirmMatchSuccessDndStaff,decline,Household did not respond after initial acceptance of match,2,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveConfirmMatchSuccessDndStaff,decline,Immigration status,3,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveConfirmMatchSuccessDndStaff,decline,Ineligible for Housing Program,4,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveConfirmMatchSuccessDndStaff,decline,Self-resolved,5,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveConfirmMatchSuccessDndStaff,decline,Unable to reach client after multiple attempts,6,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveConfirmMatchSuccessDndStaff,decline,Other,7,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveConfirmMatchSuccessDndStaff,cancel,Client deceased,0,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveConfirmMatchSuccessDndStaff,cancel,Client has declined match,1,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveConfirmMatchSuccessDndStaff,cancel,Client has disappeared,2,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveConfirmMatchSuccessDndStaff,cancel,Client has disengaged,3,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveConfirmMatchSuccessDndStaff,cancel,Client needs higher level of care,4,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveConfirmMatchSuccessDndStaff,cancel,Client no longer eligible for match,5,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveConfirmMatchSuccessDndStaff,cancel,Client received another housing opportunity,6,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveConfirmMatchSuccessDndStaff,cancel,Incarcerated,7,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveConfirmMatchSuccessDndStaff,cancel,Match expired,8,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveConfirmMatchSuccessDndStaff,cancel,Unable to reach client after multiple attempts,9,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveConfirmMatchSuccessDndStaff,cancel,Vacancy filled by other client,10,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveConfirmMatchSuccessDndStaff,cancel,Vacancy should not have been entered,11,false, +MatchRoutes::Twelve,MatchDecisions::Twelve::TwelveConfirmMatchSuccessDndStaff,cancel,Other,12,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientMatch,cancel,Client deceased,0,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientMatch,cancel,Client no longer eligible for match,1,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientMatch,cancel,Client received another housing opportunity,2,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientMatch,cancel,Health and Safety,3,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientMatch,cancel,In Treatment/Recovery Center,4,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientMatch,cancel,Incarcerated,5,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientMatch,cancel,Institutionalized,6,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientMatch,cancel,Match expired,7,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientMatch,cancel,Vacancy should not have been entered,8,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientMatch,cancel,Other,9,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenMatchAcknowledgement,cancel,Client deceased,0,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenMatchAcknowledgement,cancel,Client no longer eligible for match,1,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenMatchAcknowledgement,cancel,Client received another housing opportunity,2,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenMatchAcknowledgement,cancel,Health and Safety,3,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenMatchAcknowledgement,cancel,In Treatment/Recovery Center,4,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenMatchAcknowledgement,cancel,Incarcerated,5,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenMatchAcknowledgement,cancel,Institutionalized,6,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenMatchAcknowledgement,cancel,Match expired,7,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenMatchAcknowledgement,cancel,Vacancy should not have been entered,8,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenMatchAcknowledgement,cancel,Other,9,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientReview,decline,Additional screening criteria imposed by third parties,0,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientReview,decline,Client has another housing option,1,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientReview,decline,Client refused offer,2,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientReview,decline,Client refused unit (non-SRO),3,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientReview,decline,Client refused voucher,4,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientReview,decline,CORI,5,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientReview,decline,Does not agree to services,6,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientReview,decline,Does not want housing at this time,7,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientReview,decline,Falsification of documents,8,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientReview,decline,Health and Safety,9,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientReview,decline,Household did not respond after initial acceptance of match,10,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientReview,decline,Ineligible for Housing Program,11,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientReview,decline,SORI,12,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientReview,decline,Unsafe environment for this person,13,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientReview,decline,Unwilling to live in SRO,14,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientReview,decline,Unwilling to live in that neighborhood,15,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientReview,decline,Other,16,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientReview,cancel,Client deceased,0,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientReview,cancel,Client no longer eligible for match,1,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientReview,cancel,Client received another housing opportunity,2,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientReview,cancel,Health and Safety,3,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientReview,cancel,In Treatment/Recovery Center,4,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientReview,cancel,Incarcerated,5,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientReview,cancel,Institutionalized,6,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientReview,cancel,Match expired,7,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientReview,cancel,Vacancy should not have been entered,8,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenClientReview,cancel,Other,9,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingScheduled,decline,Additional screening criteria imposed by third parties,0,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingScheduled,decline,Client has another housing option,1,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingScheduled,decline,Client refused offer,2,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingScheduled,decline,Client refused unit (non-SRO),3,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingScheduled,decline,Client refused voucher,4,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingScheduled,decline,CORI,5,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingScheduled,decline,Does not agree to services,6,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingScheduled,decline,Does not want housing at this time,7,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingScheduled,decline,Falsification of documents,8,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingScheduled,decline,Health and Safety,9,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingScheduled,decline,Household did not respond after initial acceptance of match,10,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingScheduled,decline,Ineligible for Housing Program,11,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingScheduled,decline,SORI,12,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingScheduled,decline,Unsafe environment for this person,13,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingScheduled,decline,Unwilling to live in SRO,14,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingScheduled,decline,Unwilling to live in that neighborhood,15,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingScheduled,decline,Other,16,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingScheduled,cancel,Client deceased,0,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingScheduled,cancel,Client has declined match,1,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingScheduled,cancel,Client has disappeared,2,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingScheduled,cancel,Client has disengaged,3,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingScheduled,cancel,Client no longer eligible for match,4,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingScheduled,cancel,Client received another housing opportunity,5,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingScheduled,cancel,CORI,6,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingScheduled,cancel,Health and Safety,7,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingScheduled,cancel,In Treatment/Recovery Center,8,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingScheduled,cancel,Incarcerated,9,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingScheduled,cancel,Institutionalized,10,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingScheduled,cancel,SORI,11,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingScheduled,cancel,Vacancy filled by other client,12,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingScheduled,cancel,Vacancy should not have been entered,13,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingScheduled,cancel,Other,14,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingOutcome,decline,Additional screening criteria imposed by third parties,0,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingOutcome,decline,Client has another housing option,1,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingOutcome,decline,Client refused offer,2,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingOutcome,decline,Client refused unit (non-SRO),3,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingOutcome,decline,Client refused voucher,4,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingOutcome,decline,CORI,5,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingOutcome,decline,Does not agree to services,6,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingOutcome,decline,Does not want housing at this time,7,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingOutcome,decline,Falsification of documents,8,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingOutcome,decline,Health and Safety,9,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingOutcome,decline,Household did not respond after initial acceptance of match,10,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingOutcome,decline,Ineligible for Housing Program,11,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingOutcome,decline,SORI,12,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingOutcome,decline,Unsafe environment for this person,13,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingOutcome,decline,Unwilling to live in SRO,14,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingOutcome,decline,Unwilling to live in that neighborhood,15,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingOutcome,decline,Other,16,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingOutcome,cancel,Client deceased,0,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingOutcome,cancel,Client has declined match,1,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingOutcome,cancel,Client has disappeared,2,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingOutcome,cancel,Client has disengaged,3,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingOutcome,cancel,Client no longer eligible for match,4,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingOutcome,cancel,Client received another housing opportunity,5,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingOutcome,cancel,CORI,6,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingOutcome,cancel,Health and Safety,7,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingOutcome,cancel,In Treatment/Recovery Center,8,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingOutcome,cancel,Incarcerated,9,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingOutcome,cancel,Institutionalized,10,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingOutcome,cancel,SORI,11,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingOutcome,cancel,Vacancy filled by other client,12,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingOutcome,cancel,Vacancy should not have been entered,13,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHearingOutcome,cancel,Other,14,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHsaReview,decline,Additional screening criteria imposed by third parties,0,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHsaReview,decline,Client has another housing option,1,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHsaReview,decline,Client refused offer,2,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHsaReview,decline,Client refused unit (non-SRO),3,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHsaReview,decline,Client refused voucher,4,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHsaReview,decline,CORI,5,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHsaReview,decline,Does not agree to services,6,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHsaReview,decline,Does not want housing at this time,7,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHsaReview,decline,Falsification of documents,8,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHsaReview,decline,Health and Safety,9,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHsaReview,decline,Household did not respond after initial acceptance of match,10,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHsaReview,decline,Ineligible for Housing Program,11,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHsaReview,decline,SORI,12,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHsaReview,decline,Unsafe environment for this person,13,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHsaReview,decline,Unwilling to live in SRO,14,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHsaReview,decline,Unwilling to live in that neighborhood,15,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHsaReview,decline,Other,16,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHsaReview,cancel,Client deceased,0,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHsaReview,cancel,Client has declined match,1,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHsaReview,cancel,Client has disappeared,2,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHsaReview,cancel,Client has disengaged,3,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHsaReview,cancel,Client no longer eligible for match,4,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHsaReview,cancel,Client received another housing opportunity,5,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHsaReview,cancel,CORI,6,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHsaReview,cancel,Health and Safety,7,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHsaReview,cancel,In Treatment/Recovery Center,8,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHsaReview,cancel,Incarcerated,9,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHsaReview,cancel,Institutionalized,10,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHsaReview,cancel,SORI,11,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHsaReview,cancel,Vacancy filled by other client,12,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHsaReview,cancel,Vacancy should not have been entered,13,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenHsaReview,cancel,Other,14,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenAcceptReferral,decline,Additional screening criteria imposed by third parties,0,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenAcceptReferral,decline,Client has another housing option,1,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenAcceptReferral,decline,Client refused offer,2,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenAcceptReferral,decline,Client refused unit (non-SRO),3,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenAcceptReferral,decline,Client refused voucher,4,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenAcceptReferral,decline,CORI,5,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenAcceptReferral,decline,Does not agree to services,6,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenAcceptReferral,decline,Does not want housing at this time,7,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenAcceptReferral,decline,Falsification of documents,8,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenAcceptReferral,decline,Health and Safety,9,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenAcceptReferral,decline,Household did not respond after initial acceptance of match,10,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenAcceptReferral,decline,Ineligible for Housing Program,11,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenAcceptReferral,decline,SORI,12,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenAcceptReferral,decline,Unsafe environment for this person,13,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenAcceptReferral,decline,Unwilling to live in SRO,14,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenAcceptReferral,decline,Unwilling to live in that neighborhood,15,true, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenAcceptReferral,decline,Other,16,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenAcceptReferral,cancel,Client deceased,0,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenAcceptReferral,cancel,Client has declined match,1,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenAcceptReferral,cancel,Client has disappeared,2,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenAcceptReferral,cancel,Client has disengaged,3,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenAcceptReferral,cancel,Client no longer eligible for match,4,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenAcceptReferral,cancel,Client received another housing opportunity,5,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenAcceptReferral,cancel,CORI,6,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenAcceptReferral,cancel,Health and Safety,7,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenAcceptReferral,cancel,In Treatment/Recovery Center,8,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenAcceptReferral,cancel,Incarcerated,9,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenAcceptReferral,cancel,Institutionalized,10,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenAcceptReferral,cancel,SORI,11,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenAcceptReferral,cancel,Vacancy filled by other client,12,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenAcceptReferral,cancel,Vacancy should not have been entered,13,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenAcceptReferral,cancel,Other,14,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenConfirmMatchSuccess,cancel,Client deceased,0,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenConfirmMatchSuccess,cancel,Client has declined match,1,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenConfirmMatchSuccess,cancel,Client has disappeared,2,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenConfirmMatchSuccess,cancel,Client has disengaged,3,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenConfirmMatchSuccess,cancel,Client needs higher level of care,4,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenConfirmMatchSuccess,cancel,Client no longer eligible for match,5,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenConfirmMatchSuccess,cancel,Client received another housing opportunity,6,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenConfirmMatchSuccess,cancel,Incarcerated,7,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenConfirmMatchSuccess,cancel,Match expired,8,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenConfirmMatchSuccess,cancel,Unable to reach client after multiple attempts,9,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenConfirmMatchSuccess,cancel,Vacancy filled by other client,10,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenConfirmMatchSuccess,cancel,Vacancy should not have been entered,11,false, +MatchRoutes::Thirteen,MatchDecisions::Thirteen::ThirteenConfirmMatchSuccess,cancel,Other,12,false, diff --git a/db/seeds/match_decision_reasons.csv b/db/seeds/match_decision_reasons.csv new file mode 100644 index 000000000..3c398245b --- /dev/null +++ b/db/seeds/match_decision_reasons.csv @@ -0,0 +1,55 @@ +name,referral_result +Additional screening criteria imposed by third parties,3 +Barred from working with agency,3 +Client deceased,2 +Client has another housing option,2 +Client has declined match,2 +Client has disappeared,2 +Client has disengaged,2 +Client needs higher level of care,3 +Client no longer eligible for match,3 +Client received another housing opportunity,2 +Client receiving navigation services, +Client refused offer,2 +Client refused unit (non-SRO),2 +Client refused voucher,2 +Client is already receiving navigation services,2 +Client won't be eligible based on funding source,3 +Client won't be eligible for housing type,3 +Client won't be eligible for services,3 +CORI,3 +Does not agree to services,2 +Does not want housing at this time,2 +Don’t know / disappeared, +Falsification of documents,3 +Health and Safety,3 +Hospitalized, +Household became disengaged, +Household could not be located,3 +Household did not respond after initial acceptance of match,3 +Housing Case Manager has disengaged,3 +HSP CORI,3 +Immigration status,3 +In Treatment/Recovery Center,2 +Incarcerated,2 +Institutionalized,2 +Ineligible for Housing Program,3 +Match expired – Agency interaction, +Match expired – No agency interaction,3 +Match expired – No Housing Case Manager interaction,3 +Match expired – No Shelter Agency interaction,3 +Match expired, +Match stalled - Agency has disengaged,3 +Match stalled – Housing Case Manager has disengaged,3 +Mitigation failed, +Self-resolved,2 +Shelter Agency has disengaged,3 +SORI,3 +SSP CORI,3 +Unable to reach client after multiple attempts,3 +Unsafe environment for this person,2 +Unwilling to live in SRO,2 +Unwilling to live in that neighborhood,2 +Vacancy filled by other client,3 +Vacancy should not have been entered, +Other, diff --git a/db/structure.sql b/db/structure.sql index bb38330f0..d759d4636 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -736,7 +736,8 @@ CREATE TABLE public.configs ( limit_client_names_on_matches boolean DEFAULT true, include_note_in_email_default boolean, notify_all_on_progress_update boolean DEFAULT false, - send_match_summary_email_on integer + send_match_summary_email_on integer, + vacancy_submission_mechanism character varying DEFAULT 'traditional'::character varying ); @@ -1399,7 +1400,8 @@ CREATE TABLE public.housing_attributes ( value character varying, deleted_at timestamp without time zone, created_at timestamp without time zone NOT NULL, - updated_at timestamp without time zone NOT NULL + updated_at timestamp without time zone NOT NULL, + include_value boolean DEFAULT true NOT NULL ); @@ -1641,6 +1643,45 @@ CREATE SEQUENCE public.match_census_id_seq ALTER SEQUENCE public.match_census_id_seq OWNED BY public.match_census.id; +-- +-- Name: match_decision_reason_assignments; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.match_decision_reason_assignments ( + id bigint NOT NULL, + route_id bigint NOT NULL, + decision_type character varying NOT NULL, + match_decision_reason_id bigint NOT NULL, + kind character varying NOT NULL, + "position" integer DEFAULT 0 NOT NULL, + requires_explanation boolean DEFAULT false NOT NULL, + referral_result integer, + created_at timestamp(6) without time zone NOT NULL, + updated_at timestamp(6) without time zone NOT NULL, + deleted_at timestamp(6) without time zone, + audience character varying +); + + +-- +-- Name: match_decision_reason_assignments_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.match_decision_reason_assignments_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: match_decision_reason_assignments_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.match_decision_reason_assignments_id_seq OWNED BY public.match_decision_reason_assignments.id; + + -- -- Name: match_decision_reasons; Type: TABLE; Schema: public; Owner: - -- @@ -1678,6 +1719,39 @@ CREATE SEQUENCE public.match_decision_reasons_id_seq ALTER SEQUENCE public.match_decision_reasons_id_seq OWNED BY public.match_decision_reasons.id; +-- +-- Name: match_decision_steps; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.match_decision_steps ( + id bigint NOT NULL, + route_id bigint NOT NULL, + decision_type character varying NOT NULL, + default_referral_result integer, + created_at timestamp(6) without time zone NOT NULL, + updated_at timestamp(6) without time zone NOT NULL +); + + +-- +-- Name: match_decision_steps_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.match_decision_steps_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: match_decision_steps_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.match_decision_steps_id_seq OWNED BY public.match_decision_steps.id; + + -- -- Name: match_decisions; Type: TABLE; Schema: public; Owner: - -- @@ -1709,7 +1783,9 @@ CREATE TABLE public.match_decisions ( include_note_in_email boolean, date_voucher_issued timestamp without time zone, manager character varying, - criminal_hearing_outcome_recorded boolean + criminal_hearing_outcome_recorded boolean, + decline_reason_text character varying, + administrative_cancel_reason_text character varying ); @@ -3370,7 +3446,8 @@ CREATE TABLE public.roles ( can_edit_voucher_rules boolean DEFAULT false, can_manage_all_deidentified_clients boolean DEFAULT false, can_manage_all_identified_clients boolean DEFAULT false, - can_activate_matches boolean DEFAULT false + can_activate_matches boolean DEFAULT false, + can_review_vacancies boolean DEFAULT false NOT NULL ); @@ -4065,7 +4142,8 @@ CREATE TABLE public.units ( data_source_id integer, data_source_id_column_name character varying, elevator_accessible boolean DEFAULT false NOT NULL, - active boolean DEFAULT true NOT NULL + active boolean DEFAULT true NOT NULL, + notes text ); @@ -4193,6 +4271,73 @@ CREATE SEQUENCE public.users_id_seq ALTER SEQUENCE public.users_id_seq OWNED BY public.users.id; +-- +-- Name: vacancy_submission_notes; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.vacancy_submission_notes ( + id bigint NOT NULL, + vacancy_submission_id bigint NOT NULL, + user_id bigint, + note_type character varying NOT NULL, + body text NOT NULL, + created_at timestamp(6) without time zone NOT NULL, + updated_at timestamp(6) without time zone NOT NULL +); + + +-- +-- Name: vacancy_submission_notes_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.vacancy_submission_notes_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: vacancy_submission_notes_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.vacancy_submission_notes_id_seq OWNED BY public.vacancy_submission_notes.id; + + +-- +-- Name: vacancy_submissions; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.vacancy_submissions ( + id bigint NOT NULL, + user_id bigint, + status character varying DEFAULT 'awaiting_approval'::character varying NOT NULL, + draft_data jsonb DEFAULT '{}'::jsonb NOT NULL, + created_at timestamp(6) without time zone NOT NULL, + updated_at timestamp(6) without time zone NOT NULL +); + + +-- +-- Name: vacancy_submissions_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.vacancy_submissions_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: vacancy_submissions_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.vacancy_submissions_id_seq OWNED BY public.vacancy_submissions.id; + + -- -- Name: versions; Type: TABLE; Schema: public; Owner: - -- @@ -4613,6 +4758,13 @@ ALTER TABLE ONLY public.login_activities ALTER COLUMN id SET DEFAULT nextval('pu ALTER TABLE ONLY public.match_census ALTER COLUMN id SET DEFAULT nextval('public.match_census_id_seq'::regclass); +-- +-- Name: match_decision_reason_assignments id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.match_decision_reason_assignments ALTER COLUMN id SET DEFAULT nextval('public.match_decision_reason_assignments_id_seq'::regclass); + + -- -- Name: match_decision_reasons id; Type: DEFAULT; Schema: public; Owner: - -- @@ -4620,6 +4772,13 @@ ALTER TABLE ONLY public.match_census ALTER COLUMN id SET DEFAULT nextval('public ALTER TABLE ONLY public.match_decision_reasons ALTER COLUMN id SET DEFAULT nextval('public.match_decision_reasons_id_seq'::regclass); +-- +-- Name: match_decision_steps id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.match_decision_steps ALTER COLUMN id SET DEFAULT nextval('public.match_decision_steps_id_seq'::regclass); + + -- -- Name: match_decisions id; Type: DEFAULT; Schema: public; Owner: - -- @@ -4984,6 +5143,20 @@ ALTER TABLE ONLY public.user_roles ALTER COLUMN id SET DEFAULT nextval('public.u ALTER TABLE ONLY public.users ALTER COLUMN id SET DEFAULT nextval('public.users_id_seq'::regclass); +-- +-- Name: vacancy_submission_notes id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.vacancy_submission_notes ALTER COLUMN id SET DEFAULT nextval('public.vacancy_submission_notes_id_seq'::regclass); + + +-- +-- Name: vacancy_submissions id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.vacancy_submissions ALTER COLUMN id SET DEFAULT nextval('public.vacancy_submissions_id_seq'::regclass); + + -- -- Name: versions id; Type: DEFAULT; Schema: public; Owner: - -- @@ -5340,6 +5513,14 @@ ALTER TABLE ONLY public.match_census ADD CONSTRAINT match_census_pkey PRIMARY KEY (id); +-- +-- Name: match_decision_reason_assignments match_decision_reason_assignments_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.match_decision_reason_assignments + ADD CONSTRAINT match_decision_reason_assignments_pkey PRIMARY KEY (id); + + -- -- Name: match_decision_reasons match_decision_reasons_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -5348,6 +5529,14 @@ ALTER TABLE ONLY public.match_decision_reasons ADD CONSTRAINT match_decision_reasons_pkey PRIMARY KEY (id); +-- +-- Name: match_decision_steps match_decision_steps_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.match_decision_steps + ADD CONSTRAINT match_decision_steps_pkey PRIMARY KEY (id); + + -- -- Name: match_decisions match_decisions_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -5772,6 +5961,22 @@ ALTER TABLE ONLY public.users ADD CONSTRAINT users_pkey PRIMARY KEY (id); +-- +-- Name: vacancy_submission_notes vacancy_submission_notes_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.vacancy_submission_notes + ADD CONSTRAINT vacancy_submission_notes_pkey PRIMARY KEY (id); + + +-- +-- Name: vacancy_submissions vacancy_submissions_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.vacancy_submissions + ADD CONSTRAINT vacancy_submissions_pkey PRIMARY KEY (id); + + -- -- Name: versions versions_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -5825,6 +6030,13 @@ CREATE INDEX created_at_idx ON public.activity_logs USING brin (created_at); CREATE INDEX delayed_jobs_priority ON public.delayed_jobs USING btree (priority, run_at); +-- +-- Name: idx_on_match_decision_reason_id_54e59b4f78; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_on_match_decision_reason_id_54e59b4f78 ON public.match_decision_reason_assignments USING btree (match_decision_reason_id); + + -- -- Name: index_active_storage_attachments_on_blob_id; Type: INDEX; Schema: public; Owner: - -- @@ -6147,6 +6359,13 @@ CREATE INDEX index_contacts_on_deleted_at ON public.contacts USING btree (delete CREATE INDEX index_contacts_on_user_id ON public.contacts USING btree (user_id); +-- +-- Name: index_decision_steps_on_route_and_decision_type; Type: INDEX; Schema: public; Owner: - +-- + +CREATE UNIQUE INDEX index_decision_steps_on_route_and_decision_type ON public.match_decision_steps USING btree (route_id, decision_type); + + -- -- Name: index_entity_view_permissions_on_agency_id; Type: INDEX; Schema: public; Owner: - -- @@ -6294,6 +6513,20 @@ CREATE INDEX index_match_census_on_match_prioritization_id ON public.match_censu CREATE INDEX index_match_census_on_opportunity_id ON public.match_census USING btree (opportunity_id); +-- +-- Name: index_match_decision_reason_assignments_on_route_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_match_decision_reason_assignments_on_route_id ON public.match_decision_reason_assignments USING btree (route_id); + + +-- +-- Name: index_match_decision_steps_on_route_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_match_decision_steps_on_route_id ON public.match_decision_steps USING btree (route_id); + + -- -- Name: index_match_decisions_on_administrative_cancel_reason_id; Type: INDEX; Schema: public; Owner: - -- @@ -6595,6 +6828,13 @@ CREATE INDEX index_project_clients_on_date_of_birth ON public.project_clients US CREATE INDEX index_project_clients_on_source_last_changed ON public.project_clients USING btree (source_last_changed); +-- +-- Name: index_reason_assignments_on_route_step_reason_kind; Type: INDEX; Schema: public; Owner: - +-- + +CREATE UNIQUE INDEX index_reason_assignments_on_route_step_reason_kind ON public.match_decision_reason_assignments USING btree (route_id, decision_type, match_decision_reason_id, kind); + + -- -- Name: index_reissue_requests_on_deleted_at; Type: INDEX; Schema: public; Owner: - -- @@ -6945,6 +7185,41 @@ CREATE UNIQUE INDEX index_users_on_reset_password_token ON public.users USING bt CREATE UNIQUE INDEX index_users_on_unlock_token ON public.users USING btree (unlock_token); +-- +-- Name: index_vacancy_submission_notes_on_user_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_vacancy_submission_notes_on_user_id ON public.vacancy_submission_notes USING btree (user_id); + + +-- +-- Name: index_vacancy_submission_notes_on_vacancy_submission_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_vacancy_submission_notes_on_vacancy_submission_id ON public.vacancy_submission_notes USING btree (vacancy_submission_id); + + +-- +-- Name: index_vacancy_submissions_on_draft_data; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_vacancy_submissions_on_draft_data ON public.vacancy_submissions USING gin (draft_data); + + +-- +-- Name: index_vacancy_submissions_on_status; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_vacancy_submissions_on_status ON public.vacancy_submissions USING btree (status); + + +-- +-- Name: index_vacancy_submissions_on_user_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_vacancy_submissions_on_user_id ON public.vacancy_submissions USING btree (user_id); + + -- -- Name: index_versions_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: - -- @@ -6994,6 +7269,30 @@ CREATE INDEX index_weighting_rules_on_route_id ON public.weighting_rules USING b CREATE UNIQUE INDEX uidx_client_search_queries ON public.client_search_queries USING btree (fingerprint); +-- +-- Name: vacancy_submissions fk_rails_14ca527d24; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.vacancy_submissions + ADD CONSTRAINT fk_rails_14ca527d24 FOREIGN KEY (user_id) REFERENCES public.users(id); + + +-- +-- Name: vacancy_submission_notes fk_rails_8379de24b6; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.vacancy_submission_notes + ADD CONSTRAINT fk_rails_8379de24b6 FOREIGN KEY (vacancy_submission_id) REFERENCES public.vacancy_submissions(id); + + +-- +-- Name: vacancy_submission_notes fk_rails_851fc7240f; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.vacancy_submission_notes + ADD CONSTRAINT fk_rails_851fc7240f FOREIGN KEY (user_id) REFERENCES public.users(id); + + -- -- Name: active_storage_variant_records fk_rails_993965df05; Type: FK CONSTRAINT; Schema: public; Owner: - -- @@ -7153,7 +7452,19 @@ ALTER TABLE ONLY public.vouchers SET search_path TO "$user", public; INSERT INTO "schema_migrations" (version) VALUES +('20260730161749'), +('20260730092443'), +('20260729172307'), +('20260729172306'), +('20260729172305'), ('20260728120000'), +('20260714153122'), +('20260701170632'), +('20260701000001'), +('20260624131950'), +('20260601000002'), +('20260601000001'), +('20260528000001'), ('20260505173350'), ('20260505170932'), ('20250917150302'), diff --git a/docs/end-user/decline-cancel-reasons/images/01-reason-catalog-index.png b/docs/end-user/decline-cancel-reasons/images/01-reason-catalog-index.png new file mode 100644 index 0000000000000000000000000000000000000000..6a0499d4b0bc35e4ed6afd809a08850f4c8f2b04 GIT binary patch literal 213034 zcmeFZcUV(hvnZ~JRB590BA|duuTrB_k*d5(2kD&vks699RhokICWxW}0R%$m3eu$4 z0D*)aAdmn70tCX1?|06*-}AfYyZ8M4d%iq-v({c^)~uPmXJ*ZsMS_WuE(0AG-GvJm z81x=$J-Kj!8gk(Rr78^-xkPZPT7jHg1U=E!xBwaA*&si>aW>a;F*Lkzhn%OmKzWht z!sS0r$hZ1M?*Gc`Tok=<>F;ui3m4+tFHrtR8zXZ1=l7O;|LOCO^io>v1#0rsRq`GD zf#N?~Q$s#n`p-P2D!J~$15-^sJ#uR5=%(VapQ)nzmtpd6D^(p=uUo86Lfp= z!dF>RGAJlWB1l#O=Yq|& z6Zc?eFAFVqZ!*ouW2j3@-IG)OyTkuc^}mPwr>^Gz)Ky7A;h($yQ`P^s>r;@kzb4R| zJm?Gc|IM)f=={%>|ItxZ^3UA=i5CAL^xvgqN~_bUO8ytu)agb-jkL&&EV zIY0jjk=m^JlKCc#3ci5FVtxD?MUOEB`oK`M3*qn??yxO1%_?s@C#0+a+|&;Fw$Yu+ z59sRCx=;B(y*_AAeoptb5!jopq=|p|KfCU0-S4Qs^Xh-rm<;p2HtjfAiq~Nu~c^kjOx>tD;2rLqX!do^Bln1<`KrMWT{f!I!_k;rk&p z)h$aZH_%Z z2r*w|`R}hNHqHAT0f~(h%8&oF5aqr|3wPG6x@x4yh% zBcQ)wM>#N)2fOm-jwa@#?2dx%B98Ve-NeX26-@!Yfoco z{wgHH{B3uMH|k%?VKSqyLaYWpP5nLP`!jz~=JwcrNcrdynO=Ik-+ccClgLDfdP@fX zHn#8|FTu6fX=LdY=hMl!sh{FhuBaUc)mBb{X_a_0{porTCKdwr=FViCPf zX7;VF@(%5P%_j{qculU*f4l@HSIAF^4<0+m-(UTsLQdsJSpKDwx}PXO9;nOO;~#JJ z`(!f8-;1YG{>|L~gUkPB?!Uj>|4zjI`^){eSpM%#^nZ)xf9u@;M)Ur^buO@vlEjHG zBAyiWL0n=t=H7tnJ^DmnVE;CRQh!AE4YlI?f32T6quo|#;Ra?v?p6T`!I4wiE9C`C z>LkZBA{?9OvT?7~%H{AG#FYCCnRlKs$tkC`&@7NXU-Xd#k`2g4imT$UFnB|TwLf^! z9QpZra#L4*@bjIthCj)VkH&O-A)R81u&I%;rF1!;z>12vx!N*YqDcGsK~DD0uJJ zUk%<*q{YH|dSH<4&mbVrSiPljZC?TWNY8W*rZ>cPJfiN{13a2=O9l84wej3Z(+gwtLtCl9EA=1f+FuB#h(*xL2bEL3%HYY2X&5^0f+V1MMl2$tYt9XO!s9kzE%s)p0mOB^!fd9L$u4bTtNYDe{hMX zd)ANN_uP$ut(v+`4RuO=<}(5*nCk}^B(WWBSHIw_G zFa>01p_Tr4xvZ2|;!;Nd`xn1F$*Ea!Puo^xoBU`HJ`aP%`AkDUT2;D^+m-J0qFLua zD5E-j{z^nmjL!Mxvf1B0?q&sL-QG?P)7|uN7}QY8@~0N}M_lB&Xpb5v;enOd>}-I$ zVk^;o+DSJ$rgDp`ax601@qT2-?DiaA>+DJYr=Ba66F}Dsrmq@MBzJrVixrY^2X8F;7Pswa?%14DTUwb`SQxBcL7bF<&1D zVCL#nKhf$w1qBr#OA04p>iTsM6y2JgtAFg%;;3^MOTT+)@ElkOL- z0zb3P6RO*Agcw@ozn|j1;=f{oETy zXUk!>`jTAY_r&`i$c<|x3Rn}=R<9C<;)>uxKY$IUJ%m=nZh1$u^vAp8ohS~JE`L|;;NU@Yg;h`1Hgyr3LSsO3ac{@}0TkcaN+U6Je z8UnN%ym2lBV1#k*lhW-5H;p+K?R<=S`UXe4Yf#X0g1+aKjVZMpXYNeo=yShGS#~ zGsFz#Z^sHLLmJ5Yrp3S0-D>!V2rhWaJ^fvVU-723alTxicOzQbXL_gUa(?h-Kq%%D zB)_n)OIUXOovTfIRFG?HtY<}Ck_!6QYa7FIcX|tYCB|R7iB*mBYP)luO4mUvB$eiE z!~0o=LMB%hPj=32@+|P{j7;F*B%!Cw z-43Ac9oEk&ix$(#EWGan`fZiN=Y?C?@3fmt5modyjkq`7^P{b0hQ92WiL;kB9RW4*3f4p3xYQuDIzV9$ zDjc@eooMdXJ$NlwI)TU52RQR<%YW^7EmBAivC-Pi8V`;-xtby+Nl=W)U00AD?lgsa z;!s9vvx2)Wjhiw76v<&vJQh#J%sl1~fXSd4wvrkOwkU@oiE-U??hv}!mLy7_aA1oH zE~aLb&!RYND|efhbqPtMf7WfBPL`gAzQoE2sO@@)Y8}g$ETj0ky>B6YxFD2U(CBC0 z5>%OF?Of_y9N+1}`nqjQxNP50W7<$uLQqo3RMp_?)5rK;9WT+Cw=COVegMQM?;%P! zomf5B%PbPw#^&V3)s^WIz2j1e!)lGjYhC)A4fGZ7laG|!WoO^tv|7$(85O*G;&+0F zO-|p;NPTr96?3m36F-}(yL)oWgX-|T_GC^!R*~zw9`x7}TJ0JyzO_g!r4^0wHEepH zQN`s$A2$n=Rs0fZH#_3zLYzx|-7jD*Dbs%?McbXj=#x;-Ihw?&*464mmEWMPX{qAA3Q-~{BF}!Q9d4Ds z%Tl6HMUPo;<09j7m?K}bc8U}*+IMO;@9zuE-|3g+Y|DV-QKZuz-jK~t*eulf?+s$` zI=~-)3t|Ot3cOt=S^qNmx48A|y7G|cs24L|Aw6RARu}9G93Fm{>yXD^!Po)D&OCE3 z5!AJ2ExH6t1#BG$R2I#DF1=WzPrV&Q^|+yI?0it6>d8r~CzJRecgn&WeHi0&x#hBm zl9#5z=p9Ic26F*b2zyS2i^js&a9QJPYl$69)3>bA`qjHA#F)lUnc~QtRTkCm7SY`& z;F)LN1KeZp&TvH@p6Hm0+|ScAGE=4BmGatn=CRl`Tq!iq4mG)*=Q}@E^#G)No=lY@ z^=^ExWY}&QGSdWmEI1TdJTBv zhJeNE<1zIUB|ZbwmOUl0ib&#gP09EIFzWW%Z+3iruF9ae zSTmcR{`&c5ocR8)hgP3t<1!u?^}uRgp(VLLBttVMwj5m$p9ARK70jbRPN-}4aYm3q`q)l8Ur@GLIK&c5@b=qxVp%@nq;0L;-ES7yma*9>-UR%2tVNE)aQlW}CXRTNoQ{N#D z2M&TpurcQ}`n;4Dsv?NRUp{GCCU_la-=>e=T+n=~QO^fL#9cW}6k z+qwfS{CNM8UXK|gRFCLAgj+m=?K^k!z!$FI=@3ZanMCJk6c&UL)m0zu4z?y@9-ixG zOJaLk%wDMX1foQic?H=6TUQrtTWLaIcP(65G?}#n6{>bkr^F3J7fvEQ39b9y(XqIh z!Pz(FA9aY=z;}!KM;3w}jZ(3GBb18tz(Sg?8^b=^o-290;kG2&O;8WGcz?FrMJ?!2 zaUX>i8rv~nGkt1IHk5=upUJws!MGEGkt!-?506tgJN9lbqZiY8Q=@l>U!?Z7O3`b$ zFLMx`W+lWB0LkvNYRPgX^^@Ioia=m(yY@w;A+`yb!^o)?2zOJF@=nw!_7hH|sn*bm zcYl|%heL#YF<0T7iQ6~@O1uRzgEGHAg&IQx;||MeI^;)brkOx2rCZsPSo!6%B7W)~ zHAqh0f_f%cAL~qC6Je?uv6=v)(8Gdt8>Xx4UiUp{Fx_myw>K}b*I zYNqwg?eF0S^Tv>>keTkwTX-YoUzPP9RdwE->?^7f=jl}jy{BDgDo(-I(!iNHt}n{> zEoFWe@cQI!9QQtUoU_73Zjz3`@!U!tFIME0F$S_tm)8o)ZGARlqdhfB+RuKvx;I-Q z_axyH2K2>e%aV~W0O>?=*5xy2bE(E%A*wbHhb>@cf5_NMpATflH9%h+`uyfz+4bzj zE)#lV(i*r31~}*3?4Fux%4rHn9${C(HZ!Y-0fi&%~y zH|FsYyY<_+t(?5=&opeS%Z0uq4Pzx>%6yeAp7J=Z5LcRuHi+Li28B26{` z8rw;n4(D-A8)ZevL6?w5bZ$6XLq2VF4vcy8OrOZtUBArbaDGN8N~kYt;*TH=ZvN&_ zY!?4v-mBp#^abq@orcbiJUL)ebeg7tx7n!Z+T@L=xb|tY_XevTPvD=>z=>NepAc{o zSg4f9l1WWWmux!#Hs-i&amDl)x3YlKh8v@`cT|q|`*9V8On#BGz`(g9T1d~p{B~1d z&|P!Lc5KI{w7zL zHSCqflcgpZOXmnl1S zl3o<31jG+HA{$+U62(Sj=fW)tv#elkd-axZ)L5=Gu=~`s_}LJt0Nn9pgHDTSsqh`x z4r>US99lYEcsIG{D2roi1!%0;{cs}?rk9PD|`MJa;@n^Qn58gZF&D|S2^IE)V zo5!`6d&YY5{sBJ}OCgW_R{1%EkAdX>s(GfvUFHWvvW~;djFonAdR}Nm*$xaJf)$}V z@=;jK%^19E5iGa0C$0=*VE=}bk23ME+>O{7-+ipf=j|1_UJI}B4E*tXTLx0Pcj?fJ z4{oq&jd!VRK2N8Ws4#sIIB{$5g)nEbqczPSK{qwMGa5oYT9*J8ROXaK+=Up zE=qaS7DFz$`Bm+gF|LI_)#`Nj?wtCzpF;Ugyj}@O(iQ?|t}ulQ12n)th1YX9Xd}U= zSQypH(?m33rMd1l#u7Q%<>I|cwLN=#k8#^oQB~5yVo`vZ0vBCBYjtnZ{nCIhigbJ? z95&}1uvFXrS=cz|?Qu7Y492U4%6vUIfAd;}Q@QFuM47w4F+^x8f(M4$_)CvkwVioXh02|;lO z52~^kUQNgRWQ8Ch)88Fm;C^GC4)h1VuW6qsDfN2m%cK)chb^!$=ngkl=uBh;Dnl?b z(B6y9Lu?l+JOpNCW_&VV6E9i)3VvBn9oN-z;|$pF-g~DxlbT05Mi;ny_$D9Lx>kW9 zo=H1n8v4El7R)!O9~}IWbE!i_7XU_vGP(@(*7_yuBp=>s&PDd?!jKbB;Q5|>vq9nJ z@bb^650UpcEPE;Lmbx=hy`@FYU~eS5p{`ttzCKEA-B#z1h7 znrye4`10T|Dc33S1}25l-rtxzkH?L0an8)?dl)uOHe)g$MOc2U@p>G$4`s&J4esBL zP8o2DM6`}7D=54q+@%ikQ$Z=+@wg;Q3l}SNIPEyQA|Pt9zMPCYxhR~AgBj%2#oSGL z$3bB3qD*WUU)L+*nH*$K54~AW7t)Ym&W4TCmaePU63F)Rpko3sx;!}Srw;HN4p$kq zISBQ>_VgF~bf+*=PSHK@v%?VWp5ISlhkRRGSzUvAuR_|qU5mqw9Elf)A-UadhEHL! z2kfZRbw;IKia3rn?-{a(@oX4?Y&QUhk?MoyGcMs0ewEiTZC$2VW#g_`Oi>GNSPwY` z*)BJNH|m3$TTNDwCg7Yey3^;w83Bq>;BMADoE>T(!1&>WhLbj<&i#iQT|hzm0K^Gq z;OqlRAuJ4=5j3Z1+_sK9Kk5$^7(5GnAO6;FyLIn7sd8eu9~iNa0wDgL@Z5WUeu^l< zZuJ8V#FZb0yBR;Tvj6%8GU!3!ktPs~l3Di)Lccc7iSwWDm^liJFFVIHH(2@2bd9V3 zZYV@QVIL2Czav<ZPJRU%yTUg=QCArb1Qp^MO^(P!Ucg2iaT3Nb zxV-180`=`XdRa!i^AZRzr*lQ43Ry)IKD(J%TsBW*^&!nEzFqA7Ml;Ijw*3sS=b(Mz zo0VZ5X{lhH2^&ec)9#NCHylnj*FwrCjIvOeE1u#CnLN#&09w zZhI?2eV`2G4Wd}Tu8wLz#nyR)D@TMMN7{4SMHGWp2Kw!QgeJ-9GZDOEvGn2Wk2P~b zjnbzup23dq`z`x_oB>I-v~UBdEr(0GEijmNafy(!?1fdeUlLcM2AEDhDsBzmRoI<^ z`{&6>_uY3-;HxZ2NC@)U=>cCkgw*Ei>%E?40CKRb)`t#IwV2JU@ODsk-*IksO^Vnu zNOQQfts7Ef*x_JcBJR#WLG09IFcwU?esSedo?L|sp7nCRBU$Z)+3$2QGi23au5!IT zzQo6o!8K9)DB=PB(Q}zhJ&G%mhqdDQ=rvj;?CDFjbl*V_eE8tq>@%s0TB0nfj;LB% z13+e$zIL?_NF-!iY868Vt;}>X)qtaeK=hq_Sg~Rd=cp1mtMo_GegQ z)6hcb(7je}7s1$J{th#${f+f0xf%(dIbWXR_3Xb27C>1+JwN_}kRhDnS%KMZoNWv)&v%ZH1*YxdCzFY`-va6n^Ns?)`9k9jf59m| zMi})Q0uk9iVvYlqu`JiZ-6H9>sqb`6@kh$5r4ipL1aRi9w0ZX!xu@?i6u6qhVMPu# zmk4%Xq^Y9bPGf@X{^dH94Z@K1;Ak-Vc)iaiU}6HAiMo*ZCe*U^boPW6AZj(p7CG`v zvAbEm1=!dh0nc}Ad)B8+j9q1I-OBJAEyfc+@vk+=gVFA1l7x!=(djp4xxU_ro8o*< zEJL@AQxi^1PFhzDTUNPRfrN)NvmEaCgNq_UFkJ{O_$3zmK7C9yhP%RUHPlI_1Uph# z{dRR{a=eppg7UeISja>1q6?4wONj7iFNID(#*I4z8}LG!OG%1Skp|p|SF*oIu$mtm z>ph#@+;Sm!OEsK5A^y~7A!!uA>`~Ojt!Nh^5dNTLz$2_6)z`2{cFaFJ9nM&jOCyxD z+E%-pgR`?R_f1K@{R(?0MiM1`>GBcg5pN`dEov0Gu-clG%xf;DX{WcnL->}YnNoY% zrgHoKJtM3l2k|HdlsA30a*LBqbqx&2S023+x`YV8S{0(&6IIS~nrd`TBUB@Pi)FW+ zW>~^|#(tadD>S=1O|&~*g`~mvTTQC9cH!dGjX$?yKl4ei4D($oWwjLk={JK zsv?P)DjcQ#QzA@|PD~3_*A~XM$~HTi$qd_J|MXem1u+=F*~7!my&Xr*qKe zW8xHR6)mU*CGDzI1EIp=x_|`a;H- zqo5A>g!HDe{eJ89C&Qqxi4lMtKC-Vr;o1E%&S7DC_hKXD%_n#lhuvI zL<1^307Rd&=FP3#=zoYi-lWsR-&qWiRz$(q^lhOrTO5SMBxj44{d0ly@e@iscZ{K5 zyf!LL3w)D7`T}IdLyL8F=gJXrO^F<}uxt$RQa=ageLS}peRsQ0Q@s_u_)=mNy|{}B z87D_~DZ_+kqCJH>EbIqL&*~KfIGKPyN;_2)MpDtr%hWYrLkxv@7HA*AwD=uzqZk)& z?j+rJYYQ(kI?w`2T2}#I$)@uL;}^W6%{jSNtDIP0UJ;g@o1khGE{$clKnxw^dP0?P zg|U3*RO=!-+Yom6+Wc8vyJur{r=Cl&cM#YHq9>fWqfQ%R%tm4Dl1@jX8pdQVr%t<0 zy`|S74|f-_qWO8}#^yEF`!vZ&W&atQ69T|$?t{mrU|RopcF%@c^|%`>Ed!|;;ex1UaQ~hAJO;deOita21;pn zG-fNq5RW3QCr`7}5A&`ZwpNQ9zfcrdu=_rA6GMv) z&MRFJe%I2tuU&lHbe}ihDS6!QS!(CbNf^!uKco!)7R(1s-`kGtI4Qbm4N5Y2B;hTH z++=I~VY~)X9P25xYgis z^$6|>Msb*4b*6Y0tXbR<4o;f@3VHe1d-H`~QA`t z58&A@{Y^UB6- z@|h@Q^|@C+1N?;u4>T^)-5Y-`C_d&RX{WZz6t_z`>JCwI3D6XemM!7eF?VV)XwA@o z9Xjh06{`$eM8ie>&N=O0Q`-c!Y2G{3>2;>;l#)|IR6;w(-rYZoijft*`CaiB1|y-| zXnO=Y5Bc1qY1}l@>RQ;3Yzo-siMf4PwMz%UF3iubtu5Nd--@A)B(-^NhP17HXX@}J z%%Jb-n!B|a@8%adLUZOD0H+@4J?-2$wM0SYB+W#6_@Zlc2X>;SHHJu%rQ_v`=oX~i zw0DCe4_|hUEBZ{#=ml1?Y)N;ZS#?lW#Ro0c9S0$1$SuB*P3OqzgQ3?B%!_fpgW6mXC3F1FwD#m_?M^z*27Fio#r zIMH!J;cZz#*fw%!2zl_>|$ZZXX@xUuG5IugOBm?F})qr|n$iLxL=uqnJtasqNbDE(V`tFQQ=~Yx&7#&Ncq@ zaGIZpIR%-kuAKS>&5wzqOWqI>D=bOP&Zf9H;6?vI8J?ycY#(OkPMK~TMOU4tV5u0Cp{1YC1x1#J?Mk5C;-}mz2tOG)lXT6Ff6L1RHzuJu~+5~m_7@%PP!&t&z2!3Goimkw_(=Dzh2 zVdP^q;RD(z2`&IJ@@kY@HAxz?8nRE+lw|i`|)5|ExT$!aIIGe$cAQG)>|XC zPXK6NHXtoibG_)Hixps|3;*+(UCC)-i(kpsYJZ%iF-aD5#8b)SdJ6 zR9}XxB@d*c`bt4O(5hByRf5iHuP>80S8G$()n8m=IW=kR^6cBYqH`t5I;!gGJ_}R^&0+V@RE$O7bUU+&Vd!b~PS5)ZVC{v}E?yeb)a{Ix z&{KMSp_*l0p^qcOrQtW8K6YyhL-vDA*cZgw<;!dw&i<-?k_)=J>c0M&hAAT6PNVHuZ$jo-Mk%jcnt7>ne?*wE$f(h&5on3iWUF05ffY5ly3(k;pCPA3m*nNpgO~Z`{<4Dty5*^$hksw1jz%PL=S6PNQVD z%fH&=;={4D)GGdmY#vO2gEW=%-|pxnse4C55h3ivBpZOgiDcVOn7eb!-c%eGRy)@3 z4A>gBO7k`3*w8n^aECmrU7^TX<`VKe!Y+qznGdew)!2q`$1u#Vk2>-mcTxigq1QYB zr|PzCzBH91pk3#hYUk)(%YfrgWB!jjnSp0gE9Xigd|SP#DdB|WDj&F}@j;gsD*Oan zKE|ePGF%k4$e?l11B;8&iP_8bb}9dhA??m_XgW5 z(0+r|b!I)e58FOzUwb}EhxVP;V{ZgTp58iWg%Jp?sp{OH6nD56RwK{4M2K0VLLKUf z{%-93?qrKrNpUTO&>Z>Kok39oV1TvuhMYuUx5fMB$YC?HUWKYxL*E;<=^U(?`9H>? z_3KPZXqPAYRKtbQkg&C0i~H64tDPlZy!BY#buN$K*B+2hKlm1Wr-esM(g;vj)mI~T z_3A!kPndSd%hq($9Y(Mfa#wBK6w;Dj>}3AP{7D1fAurIULvi zbIbW|oz=JF1d1X4;mZJ+OFaRnFr(qR_g+5DAZ$rI;0$`8nev_HW#4N9htID1M~RmP zh&lF0cs3V7Yi;Zw>$JY;!*3{uz_pw11AQ#9qd&$+Ohu@01z7iM-Xk5P5hWRxU-H3I z8WS|tA@7EuQuUP>3`t*u5j(KpORv};dV}^k3L2ni3=znkJ<-6y! zoVTEZtj!r!&Pw|p9j5L!yOg{)5!rRzq38L+B*`;U|C77q%YEXqh|DtULJZXExGsZ~ z{q0QJZn0@(ryJ`e!g03dM0rzU+Krs!VTC$XD&$8+RUXXvq96=*W^H z`W6z=fdS3&^Ua74vbJ(`1W2DmJ*rs^eOk`KRumeq$f-kYj;+j`?|E{s;+{NZ!2W|B zkqXaaI(USCxIki3RD*}GkoM*BgmhIA+3+3|>&-KD*>I7Kv(F~3XMWcOt-%6CU<<5! z`ao5wu;QdNTSBi@jTYrO;?vxdhM$deY^3a^Glj-CW;N0mQqOBMFwwUCPV9MQC-?EW z+6yk$EV+^ZRND=)^4ucyU2E3)KCo2J@ewKD7I)ShPrn}y5f|2dWvj=|tQ*4b6u!Eb(7 z5r+#|%+>A+o(Sgl=9^18PB7P+?@nXGT>H2!_N*vfA7E1HSoc}N+B6b6i!mp_0h+;F zoDQ5yuF@^04Rgz1dS%n#H0s9llf$ad$Ju}NXlfU|II_K+x&VT}Zqo$}5^9du3Wcub z&;-rD%^-`h0R^QjO~m5M^e4#l7UM6z8nNK!olUFx*RSpNC2e~9+7o=6kcV;RcPg5Q z!Fx7QIA!&_0)`7XgR8RYj-!I_OqZV}{IRP95G`+t@^qSSgc}I=a0_l%I9PHDg2D>b#Q-QJ|8|r2 za(V;!{#?aB@e>FA!q&16+ENYQg1}v+YR9N->s}X}1+v9vu$&!yumJh`HhdSiaQjV< z=pY=S@RjAwxGgNj_(@m)f;`co=*lUhd85sQsDgsoUr!nbx77fT-)_Tp9grw098JP* z_xo$Er0v^BDM(`ba zLGns>BHK_%=(Sm&)$wP-yms9No<d9B@-)@frGM5i1%+&edmj*B49PmGc!l}G9(~i}p`P3WC1z(+SXMSWD z(yo3P1^67?Za81eXusPlHJbOcXoUE-rFjK)K;G~wmE3WDig#4+kSAcoGzOj8A`gz= zo(0CFaEkWW!M#{`JHYc8amCY3PXA8V-{aQnXVn1IA4_S}1m-da%S^uQR<%q}Ggvx+ zO0Q~x{31rNHQ6h_=&nP;tp;FOCi8zp3pkYrTca*zpEL2WF`J*d)?3x`ucNbSto%eo z3~ITN9kPsztKtN+xIZ6^_I=ysrjj^`UKwNh3&T;VL718cmT z9&;56T1O&?SqDRo;|I@Vhtcj!dp-94~m{4o#xa`AgIQy0graBZ0J(tGa?#AfV#|;tZm?F`9 zb$AB;=FQW)!0?5(qqUxi&niCk4{mOrC_)i9N<#T$%*bqmC%3rUj9)(kPcdRy!DFAJ z;b%(Rr`BW<`2blTZd_QfWr6Z;wOYaOaN!H_A=RNLH}(rNDWdjvpvdi!@v%3IovX{& z+a_&$O4&+|7?c8!gu0hmY-!8i`)&_kM}KkqtNiDG{x1M4u`Uir$uWX`Fh}iMsU*u^ z#Ef+me)9VF!SXGa#OJ8`%dgi3*M(*VP^dJv>+@Y!<`He6mBllGjX)-;-O#oh-k(uf ze0kJ=L{PwQVe4AXkk_fTdSF#4={xGI+2NU91suqrYIze~3%5Iz?*96>7oBnyxVQ zyX}=l*(y$x(8pNI^N2B_OGrnrNJ(Rxnb&U{i(>%DO0zsS=b*8mZ@Xk!^rMl*s9D%I zH4?@3n5)B!;dbM#DLF}-EgihU%`6uMyb_niK($?U+C0^K@g%AHWzPUrPiu(kXE3$ug6$_20jcy|=?`VbB)%z=~ zr$=Ah3ybZ`c+R(pXT+XlF)eZQRd$GCz0~50^{_DGkxYj!;2met1xcOe$!VyJD#RnA zFx9uf{ipU-k)mO);WCtXnA$N_T&~%jgVed)eR;BY^dy< z784mpp{PnV`{G%JzxrueJC7%Q&^<{2jVRRDrXu3U`Oxn{g%z{yVGA)38P{Os-fd7& z>^;zOV8Phz$=~vd2+e%^G^a(_UTtpnq&KlV3S}B>12Ze#cD{U=7xEeGP8L%jyn`OJ ztq%pT@o`sP?`)MG5#gev=+j(VY>EeJAv`XG(A3$b4xo2fZ}=GhVPxqby>HR4$l2dvF`kj$Us)%Ttp`(IbH=h> z??L~S8VRTXYemJUjxQnNs?L7hJlorRpe5!*Re0?3>LZ{RN;7|srE~u$q4t#?9^46O zJRsdp_1Ih(rN%CiqZ{YHD67jIX$M7xa4Al8Fwf*|2bKy^e^>PHP19FkPo#fGV@mTE zGL7;Z%$!5gF=I9BMOI-%sifdR@ZsvE`Q_oZ%urskBt^fQt&S3Tje`kZzp94#+;Amy zfB|+8RcH9j&M!w)_XSxKeN)LTazA=TX99VYPBn+}>iEKJu6-NBUO%VJvrX=J-dGz+yAo~nlC zgNDs^#=^xv8_yO+N=jHqo~#C?;At@sRHo{79;CSm0WK5gc}&~#ju=|@dQ8&~;743d zVLtXl5PN0Eqw!~fGk5N!Zl^)Ie&`z~_>ab|o*omJ8xD{?vA{+X*xDryYng?VI`7j& zi2`Nip}h0m%ajp$Pt=}S!Vb~$6Hj!Jo?nNs-;e3mZc07DOZVU^pPYf!n>3&y*8#4) z06=8n;>V)9&uhdIU0P#S(JHz_`OJiPt^EDi=QkFL>m6e4RTS69_ ziboaZ3JDB*(!&0oSi8jcR90(qsd!MzqiYX^h9 ztH@JI{9Z?S%j~v$|Lc(G)t>{CX~N#w3p1p{caJ4JTIOj)zP}7H5t3`)nWv<$QI*Ku z*ZZxD27#nF$B__ciNn~KYlM(XokmJ}2DJTn#fyH6q4lJIMoe$QL(vTDL1U+GvawTV z#iQvs``bFTu@RV+>N|*2x=jcrdkAgMP+yXTC6AM0t_Axnu4*Iqi(-va#%_`$mX-qq z+L!=8*^A5x2zlrq$&}`sEOI4%r7e6})kX2~_qcj*nmB{*lNie`Hb`e+)7yv}V}z;amtCeML^HK$^!jp z)(B7dVU7X~eg7K(poh(Pm%H0mwOU^-b@%8{uPV>7;NbNr*+VsZRio!SO&oLeT)TuP zp++m?bfn~(jazYGWNnv{p7*oAmviE}-1&*mf65bjt^t53Ajr5c9H`*9rQxQqrK}(M zUFXK3(;a}Vt>*UAFro*Tyf@3+?&2q$lO5ZR3G2DiXbm?}9a!Vd(}PLuN8B6w$Yo31 zb+d*=bhC9VZwxFskJSc0fR_PazthBtNGN+v{N_X}q_R{Xw zPkaoqvQ*kcf)7rbg*d-Dk&pU-O_dz~$WN_!tzNJKOkTMrS~BWkCpGXa4GU7iMG^_c zN{OR^Y~{n`xc;3UtKPY*Nx8Eem1OC(k|`_)bVC<~eX$zvFm!B~Cq!c+@!^X-N@`3o z^+@3)ciD??=RJ`b?YmO%IVoNZ+%-`iZ1zIbzVmA!)Sr(S%Igr=b=lb zdOq{pj7H1RL87)LE9`)i{r+*v`@e!Z_;CKcx7TJ=f3YtgA_6=c2q}4Gwyxk;4f3|+ zMX7(q;-RYU2h|Dx%c(_D0;G3&KZSR89`ahLsEhB1Xm%V_$PTXaH61U7uFBseABs8{ zlS@4)5C`nr6DLxcnI&Ny2da8v$&w}UI7JdU@}{cxgf4{{Uf-Q6wK2hZWie>sR@puO z`kqP-^sAuL2;Cx^VaMF?#qIei$nBo1B*=1yJR*X0!1P#@m?~}-m^LWq$R0G=*wYxY zRzZ(AUu^(1wVo8_K;5k$9`YalIg>R-U38q~1NT-)(Rhc~8LNN(pob^(wOXBZv?nz3 zq)T!BC4w)$WvCNJM6cw#N*gG(R^`3%-R4|a|2Ze0h^>*j{`3}+(7j2w$YUF3>l~1m z$LFANM(f#-=np1>j6+q4jWzG^4^$cKp?k}#PPsw^M9p(#8?X@+){)a0EgQ8M$&b?$~J}vHFq>7O$iPRA5>3uj^GsH3Y3Gb>x z6DuT@hRg=J-(8fnO=xjRb9!m`P(lXOl=WolRqkS(I*wmS7o8g76jRnosmQtzf4m~d zl)v+F@F?GU)quI1Au1`~w^*?i)on~Ayn1sV;RL>d(P$Y@jg&Mk+d{<8i+}G(co5NW zME3ig)%1v%hPR5B&eIVx^sP93>;{MRZ&@>a&u=eNQ&Z50dss*G_vS4G7ayOte7Xkd zJX;+*k3Jyd8hHqJYG{t(>M+f3Xb8NHTz z8wsp^8ArMd?pHlLyLU5G=nzfM{ezH`>mWd~>isLCB3`H7Y!~;e6XQ<@w?|~)vIVj* zTyNsY?yd;_VJ zaFpo1Ilu^-x6RTjFS@))Wi&No?>gkH-saaY`|iQUTpaw)E$h^pUR7=e9?nk(g7VXx z+!MysPm`dv=HW&XXD?kXz5jLs*@bQwq(}`Rcb3BUq58aq(bJB@Ela)si@o=ZifUQ< z#uZTzBq$Oj3J6G+oIz1UC5z-FIp>^3qLNf3XONuJFoXdC$vF;b81j&YArCNw|K^-~ z?sM-s=l`jKX+*S@#aCTt8*J1yL?PjIqTl@SN44@vOlm;bF3D=0^ldM0Ue9mxZbX^5(mk&?urY z{eIM%Ra?q9*SWoYFl~3 zgY5;5efD9|mAY%L;kTwJhEKjgYOAOx!Zq_z17FeT0h~*2P9h*8`Y@%ce{mafapr}w zdj*d2)+NzCpCutG&`>;!1eBXc71hcMqIc^2fyl-Bz|h^rgheP*Cj>5v2v{fLOVGO`f_U$7K4h!Doi?0upUepyA z+=iwI-6i%W%6ArL@C|oYw8lI4F0Gdq7W@>=0JK^xo(=w z5{efcPscqNy|Of*w~GvW?}`p3VZeDea`e7ILE(pKnA)Ya5)v-;E^z`w2=PxWvX`!!8@2SU* zkD#VLTMr-!lE*&dy8|nx6a~1SqoiJgnP>M_g>(pc8uXV#JCa50mid_x>f&eaK4O#K zqVI%xkeJY|dbypmsI27s6^uXGj zmX|?&I;hin+g-8`3KkxAdsLpt&QHUK^OUZrC#lJKn|D;!M40uyZS_E{`g>hX7i-*`r-z_FYt`0p?TwF}4TKbjfkk*`~a0&Sm2?9RMI@hPK2) z@2AA6e7TODZbL7$%{BqI4;^`FG-#-M`38f~f}WVW;(-Ix7&E<4g%LjVyH>=NvJ$cP z+&aPm*&H8P0?*Bn2$}nYMovs|+8yHHZ)%TRdrZDCjj%D=rAwP?=V$OKHq$TvaqClP zv~8bX(%V$dci`2=b%S+tXl*q&uILLv`UsA2&91f-lLNS%t|-Up<82jcyFoWO14)jg zr;p!(xvH<6Kl77(H7w1Oiwy)@v^e3Rmr-+fF3J~Es-?p&=_a$LpLjjZ-3u&}Rob^K zTQucIKv(XUhVz(pt<;mT>5_X%&8BQV&oxFb4TBx}j}VY26ELgrUTDQ`*SH{;VGAjK z8AS}QAOUBL!+D_0%pxC0njQVw1*kUCh2vJA2KZ>7@rS(EAlVTnUu8k^TN=jEAt%T> zYJFjl8BB5unq!-7`>Tkh+Ne6UeZ$#l9jDMWV&Z%7X1f3RDAH+-HOgUOZbHlUfO@FU~6rI@{J(s$=8|jCq}w=6xlfzZi>_h!B)bm z#aqHMg|uI-Oq7fwV(vB3LJnurFTu8G2}$JA59J+4M=`(R-NrsZnObgUCIZz0uIe_} z@FmA3?~*akhG(gfWk+B+(IPE0(?LPsQhckeaoF3YIZ@03Eomu3wxqil&i^gzeu~?! z>sOXaxToO4wEg~9PkjT&b3IG?rjxCJ0CG{X_V>H>PP>-AFe`QrQs31}Wp^m-=wWZB zr0w;caRdz_PRHr1MGOE1#zEH2_D+64fbvW!oWQ*y^BJz|p1zdFl8j%~Hz`4xg`^nC zp4C(wogZL_rlx{J)RarG%|2VFjulLngUyD^d6a5qv6U`Vp_E)uLg!@nO^jufcvGr> zW|!$Uw9&u2 zw}z1Dg?heJg*(E_GZPK5cX?#gp>eqb8`_!e2&D3E5%+968}a)|OI|wVrm_FXg#MW> z|8kWy@+OIMm%oCho)d4UL=Qe^bAblGBKmE?~Y?f1?{A^g0^cr>4a30XF*2L%5C;+;7fKhRCo(OxRN4cb~VEQTX`IjZ%u4_z_7ojMI1<_t?F01t~8imFpv#l{ejV>m$W%&$rk? zOA(D9(rpg~ZkXQc)1(KEucqh4I1y7?WL%LuO@mreY2CavEF2!1Y3=o^IdelEOAPo` zeoJCYv$|x=NK0#~=e_UzzyyO#y3h(q`z6A!2>%qN<9Z5td>X!Gr#r!T(BL_u(7wWz zI`eOjbiIkJ#f#EGjRP;9Wk~tYo|c^C9_ge#XI?mMQDOndq*0R`%AjbzraTwb?E)gQ zswPiZ!>yiS<8L^B3l7Jo;+yDp^C#VADfVu^LpmTSe3^=(Ce2BBm~spOWpL^?8We-7 zD6aH|r!`T-NreuP8mpv2v&QtUn_1c_dAQeo4o^B8fJ;)|io;=sdLP`+n5 z!81)ykW{Z*g7(^MwcJ}S3FR<;T-;n6{>k3+pU6i9VRrk6vnn`SDMxAk zJnh(R27Z{{ehKsFwGwy9Gx2*m=ZH})8n2B~zf#psOIy3Q!l!R`e<=?&Z2=9f~H@%t=dG@w{frCZ*FUKca+>=fTS_;!132q) zMFAdE-@Uc&+lhHG>k%r^CD?(G+t0uQrn59_S~m7FN-x5a&+=}N0*fo@>3waQq|{oQ z6^!kfv2n2Vr9>HNh(79qPeM=vON~<(bDaj(Qu1K$0Y*-G#7+Iav7}A>B}aT`fZ**H zTse^?yLB#BOKs>KtDg-4uXkB&-%}DvGJLezbOJT(>m`@Y^(Ggan_#%CWOVwONVk(<^k=6Oh>LRk8ucD)9;<)oX=BqTS6m&#?}0X*eT9PR zwLGtb-1+BpDCQ>EC+!0j_eqxoVpc+W$AzO@`^3@*Vnsi?YZw;;*wH+#0_n8yr(N!zkAHthO5m@nBcltd=Rgow?^{|3krLk+Y|Ky_jI8!8X2_t|efo zeA$sD#gHjzQ~q2@^Kz;6aDt3?Uk*RDuFkVoKVcsB2GfvZ8)y;K9&F8!aZqoh=`t|& z>(w6-i)XGj7GK{sNh>ph?tUjbMnsr*yrj?QvOL*)HcDm}?8+(m6DtOtJ0R$(RC?Io z*ANMx9)`@+`Dzr?mE;gF&&t^thI4i#ABS1^LRQw8aa4_qS;wb2)P&Z}X83{#OkG2$ez|zvgTF@Y=U>YpY~7 zRm{CmLzj7BI#1Y`<251TN0*)ZWEO=Jt`QJlfc`!Rvbcr%K5nxs7860u=**VL%#cl^ za2|uaV4LLvaD=RMYB0}#qQ-k{IEKT9DU<#=`^y=vh<`>5J_FC0z{VNuJBG76>(e>% z1U~i}T;91|^yc6!LjvU3U|(wqLEk2g8bX#l$GDZE{KS$xAll#C63};hn=UTQ(PQ}b zFHTIm`?n&+tCzD0Y@0k+9mKRQ7MREr;RFu^ThC4A;9EB`*E)I?6>O)!2W?8p|Cn)W zCK+)OU37# zJ|OvQ?(Co7zQ11v*(45M0zDn9n~gFB9@zWIB^XtRcySU?yln5hou2Ik^!y9 z&%4gIVf8Out>*QJ^3K(9?<(dy*w^WY1BrFS=zQ3E5(hks8)v^orOZ+w$4CYt+poCi zZCg%O-D;1-V9gvS#;W&A6Jvfp3#>zU(5~f9G-Eth6K(y($F5GG?$n%3gmusIeY1+e z1-)MFToAtC*?w3U{SQ2AY89}QHV|ZaLDpIIN`IpI_PZJf0xzit-9!sddtZY?3Dl>P zSlBwQty1mx80GNj^J{(!>&AFY7Yl1dGP*;n)9gW8Cy;rTq9wN_MCD$wtIA7AR4AlyUv!)+C>nn`~%Blm<{hikocW@H=?_ zh!=kiUgeX@SUsun<;Yw1SzqvLM3Z14NOj!8u<4rLP*q@;k!}#qsYD~knT+JL=6p_o za0Qz20kXx!Pk2su(<<#SUVx*@j!qMIjmSTJ`RF!t*X`QbjtxFn0h{?L?vLX1Wd%x8 z%r@sdf>2p0k-=Zx;W%z38i<&I@K5A>pY8~i)q8|_NZZ`wib|Q^OptYpcXJhrJez2k zJT#Oxzl|@lITKaxv*+~0FyQVUNEser9;>5rxu*J5+iu zpNW~h8I$}j4IZeyatG^zB?nv0=By0)cCCDUP+XQ+w7%Qx%*rE@Bddm2-Y6fBJ~a+m zx62aIM;Cs+VyTaGRbOVFKLx=bta$f6!d~f}h}YqaKG-Dk6`YfPSqt*6P*<6b*_p*n z9$0)Pt!mg=HqM1thpfH5sr}6X$*3`8pi2HAgXsb7PY*0-?hg*WU4_Uj?+*?-*xM}4 zNfZiEF=;tGA)TZQH)_0I>g<5c%RnlCf03PkoAtz&M8M3nft#RY#C3vBF0=LUGL3Q* z3^(L?P*iRXI-nUi z8IZnKCDD2CK0QN>LuBX?n<_cicC|c}du1fkxo|9Kxkaf&%Cl)=moLxv70}jxBVfkW zrD*#6?YFyczgAmNEXnmS*aiwsmm``}E%u2^RQDedzzj}MA+BY>3}beiuT$fumERsI zkLLapP#+!gj54NuoJo$ig`c~>nZ$`N4FD+-HW)2%c)D_RKTa1dDpO= z6*K!SoNL~|%(u~W$k^^@36Tkmc_ws!K%(IjwDaYnJ_xy(E@2r?Fi?MRt3hcgs?abz zba!sx*Vz*v0j7sf6cdEIBPk`A*@%btnlE!5Sz{gg2fA{6AS;0b?K@v&!aDIv5Otq( zrlQz^j1W6xVhOd*6r6_fl2moi(Q}e&E}00YxmckF*)%T^HCmG~|3%o4=Q@9VCfJ7Zw?S7MF;SLcfzS{ImSsa&3= zqTp}HXuYRp;5!N_fYsVV1+~X^fnclA)%P>$bQz>cZd6nC@#<-;33 z)aFR$JY1IKJj<#S>DWg=!WpyXK(p2KOQ#Nl_HhjkSyi+1a!)a~3$EA_SuL(wkQOL7 zc}?a6KOa8sVo%leTGB=xVRo*KIuVXct1@hI2tXWAp(eZA7#h8-3D-52w<;v=>k2(aZ}8*Xof>hYh=(gX5}6d|vX0l$YM0X2lq< zxHny%XJ-c!H_CGA-_L|?@Exvkla$6MXU8_cUMSf6-D8Piv1mf7)7$1qfvkKv04Y>J z6evYUz90(HC({~E^D#%>r*#VxW10DQOZsvA|6pf_TnhZrIrE|CE-fGUW{Cu5YTDqG ze|jSsgfjWc^HL^Ua|Oq@>3m|L1QuZY@f!4=Jc3{M@>rvV{; z=EE&h>GIObO*X!D<9lloy=NywXa-$|*?W6aa03L4M{omvNI-=wk z-E&)=E3K6odI;5{lb3v zICSkH5Liz|gKv;|;a=-Kp(Unho|%zK;CAWEXmg#+{X2)1SVv>?^CA}@r2K8ZgTmU8 z?>5bf1wQWsd>jnNFtc_!X^0(S&QB^lsm--rbF2-!b+B!7`o*bnmWWHW+x2I;%0Sep zV1n_Zc6|D&C)*2}8M{DU1~5X?d84%_WI6_o^gFbm!Y|h(Fdn8sTr8ksvc1~89l$`q z*s!#Oe&~eqiQkMoGWN?%oZ$98 zU0ZnM;7Cjpz4W*m$?-D1%@GKvD%Y!t98RitQ0PJ|5lu}}(BAV?lZ5#sQ4IhB@Hc4Qwo!rzzv&964% zc#L+sTRL@=$ztF{uIn0pseOO-G6`SN;VK`^21I&brGd`hHS`>1B*f9Rkis^ZM!bD_ zuUEqNOhiNGqg1*nNogA@Wbie)!@wt;1{t!o2TitF4z@0S%ijjfUfdF1>GGYel;cPN zX_Z2=Dq3Bq6+e=*b5tdWEhU`m)s~K~)&xe&?N!gV));j4bw6PduUhA^kP=or=QVPw z)=V1oO3ZbbTBR8w8{U-!Qn38vGRrp3U}byMMcUV0FYe@UTKhI9YBWVCqZO(~dgk$G zy|aPZ%)QN5E!(Zg?ayAt)dF`)ib9Hl&Jh=1>0pqfbO+VU-9Td_3rx=R3zD!# zMc!L3L5$}2C=Ge|ZxzVDK^n!Vo@G1-?#XuCD7mDn*`Bgzo*;oI%pLcsB_9a3v z`5*+4E^XiH6*zaem7ROfiHCm4Vc+R?iA zR7Vij#Vvfk%MS{o$FFY~kfqYNIs-SL!JM4v1R?29FpH0Un;@fbMS6bmXsDLPvI+_%mr6A1P1#CtIhqX8UlRgb#^Ove+?s z$d9o5&r6mtZe9MYcj;9p--^lXGL@3W0`m$E5M&YHO;?Qng zN|NyS9-CZ>92!OI12fNg0nugV-M6g8vt>WuRa-JH2(s23K1#>5PFA~N)0@lgw;HzG z#3B$;Cg-`kRI2&7M|T4Y)AdMwdFCHZK`Am^`g;sbqh#KUl`SgF6BXBN(!FIHptg>h z-vEEPN2mVo2KX`4hs%q(BQbHe{(8_{?I>`!s7dwJ)s>nH-J+GRpf#&-%KaXq7>4MP zoklP+3#s2lW}yrvuaXgS1kMGnUc_-Geb8n+PK8!PZ)^L1h*bVC-_7tDxDIagT#ioK zqgYu!(moz3(8_4Lex5G>>h{9I(RaDans@^6;;_+V={G{p=_;*h#E*w9+=~we+4iaD~%G>C$8Jx$(#;-)TZTN0yrSbSKG#Bu{$l zFJlXi#jMo&U(815?_P1CHNM}SfB;^(tQv7?Oi1Klzg<(|{`nk4MPVu5^LJtbAAdxuUhn-4lL z+dTnjFq|W$u6CltdNz)#bp2?`GrWt+t*ptsp1b*+=M+eNTLZr|9&Fm6tv-Y8M9fI< z4s_Aq)?;TCh_y#){l5p0SN*3&2DzZ>rp$vYx)3hBGx`p0VskUI6e!oE{USnQW zU$^xwT-eD-wG7y(*>24pzWP4*Gt?hJVV3IIk$*1wzE+Yo`lLMKH@D?g+L?K~X8UqR z*t26QV}mh!GRGY;c>i0Dp^(^7AW0-2kvF`PWESDC^!apuNB2P|*L!D;AMqx$54?;+ zXLcKP&%K-KrMdRmQgFT|fMw4+ei=!D+PkmiQIgG(&~tPSU8AgQAFJ`^OVxw!pP;&}G_8Ip> zEjO$?7FwBY%XF9FmTprFWtx}<6yf*2W!-#1x1q#v z-Ht0^Xh~>tu(c(ofwS9!Tl1z8*tRjlZpttT;pF4(=iaPC75H-i3&(FschCuzs}g@v zO?av#W=1CEU{|H>yW-gtr_`Wkp_7QJ03D!IP<~HZ;x{Fe_1x8k<9gqWUp~>gtl<>R zlz5RLzxS%gEs8__wEIPAX2&h&g~hKnaJkds@8?fPF3!Ajj5d4i6{F<`oatn!+87ua zV);ReCSnGs3kIBUev+euqC~PsZ*S@AhV@lrW>p7FY$cF>JdvWElE=1H#COX?)g2IQ zpEU{xR(t1lFeNdVSU9I=!rh#hh*vV^QW{jjBzdXcmtl4fP&w;uTJPIX=@(CC1Qez< zjOW;^3Cvok!?(hEUSQ`8EmiPzwt!NEZn$mm9KKYi!3Ga9ep58=xDzY9{{~K^v6#XR zXW86ON+#r@K3fk04eR(lZ0nn3Rr# z8{Uy{K8$0;8;~$d4%ykWy}RkINjR&nmShC8I7!1_MAw4CK8i{d>5bY*JCBH5h`9t&Swi3c$hp5ZTNjvY4bsw6P}plU89{pz zaeI+Djzv)+yaoikhk;vlN96wg-&S7cK`42gBB)e#s2txLz7p{Z-!Lhu&Wa+5v_GM?OoN0RM zE_I_-XG~d!7K1jogbxaU8ftP31F+h^;a^a=) zkHQUa6h0hCdT1{}WP4(40Gp_UvyU^bUyfhr!KwTowH-2?unX0|rPL}&t=}GHylt)N z0xJF7zsg^?xcANy$j;v%bd9|^uE|EzrCLa*OW0}5oUirM+)2yv<7#U9Rg-^K|7m9` zj|r|mAA0NYCG?_P^EB=_txI4I{gp=rJKLRbQ+ooJWY>7u`i~kk0UbbzD42)YX~^$& zl-z*3##Q^nc??6kS5N1+y zpWT-)yxY#tJ%y2FvpBA7<0w_MPK47u_J3x>^De-W#?tsG^{d%Px&aW@zreOmA(LSU zaEHq52Pg2jFySX~lvJ<7;eUAiI#=GjT+ueyS%+(Gn#NLp3Td6&TOK<{_DA)q$KS8f z{~YuJO%Ob=-f+ET955w{U+w0rVZXVW>KJlIXWjOn^N}kL+=f(b5)~D^dSsCX$*hY5tRdH0(Q)s z*{1&#rT#1NTlGe|EMGkudIywzvMbbh*~x?zc~wKov9Y@5Ki0YmdwLz9ocx-S0qJi{ zcy(1a>u&hm{QxsrV1QK(CZg~E81o-o0>=CMKZ~ZTQNykC7_aJo1>|0p$5MsxigMkx zpaz%_xs+4#|5LIGs1mtQf6e2x@OO!30D64VJjli67XxN58OAhv{XbSxd%DjA^gYoR zqxr3@7{A(8kB!)2$4^g}t^}8w+ZJH|e=01dd=2>2&7Y$hzY}*4;FsdBEFqbUsVjln z;z}gc{A0!crQlW)H_*2qJ-yy_)j6X8C`1N(R~8W^hfR6KuO$!5e=gZSxb#nU5eHxa z#Bp6qYx=Fg7sHoVKo15o2rE{96flEk?%ggw|0B^uK3CJ)1XYy%t;Ux^EYKs@%hW}e zVMzE&+B@ZR{v*2pgn9~m>iW)s+V2wf0_Z_fv8Hg>!tH7X8{~3t{BsTb54pb&AYfGv z=(`Vb6Lq@kY*BdCW1KyE>0Us`6~Bb_r?vkhyIy2m13rcSA+PNB>T!<%ex-)V*nfUn zbtRfpdb~8{e7 zc7t+F#d~LeVPa^g2AWmdpABNb=6-zpVl#ayaFmd08ER?xyg$V^4bc}NhT1>(x%>3m zb?i49ALi>_25DrYu3_QcFS^#^T9Ni33O`^L8@Cj=Ent%y>ymFKE`W)<6h6$0 z3USB%ZKrDiSO6jTKaJIXqru?%M{5HzW(H*^ENm!~dynw@zmWFdLH*lw{dcDRA-n$- zzke>3|I2Gi{bYYo>T)3lF#|_#gXX+-Lztez)t*+H1{GKr8?$eC#!1|V3 zw{a{6Pyv9TKmGU)1`z2}`cpzWK&l^0U;nttAkIpC56cs`xYA?S$V(S-y_4a)lND$&r6uGV0fWuaM3^+PeoxP5=YR zLoin*N$bMHFL?kdX%599f2H#3gLU}Cx(K_D-@mp1d|^SdPbTBt)#z5_9aH|6#^P&0 zJNBQimzl2KAj1s6rwL0?+p~vC014s?ngst!*Pk)?cU*q>0BCALJ%#rd*8Pc-0OqCv zU-N9Op!{Dn8d#wFHeS?W^%H?sbob9?t6f(J;V#{U;hzukQZR_yp%^6zB*Eji1qPaRTOsEg?T zMu7j+{ShP3G=fp*+28Gu|Ng8?71$S*gw>z_`{Tdcj$ge5nm&*Pef)dT{8ys?4^sSZ zO(Ot-=Z&(t`S-m1S04UXV6pxyu>Td<|3?tkbq^u%M=pT>qV4}Rv<>JXKlT}UM|Ix) zB6$Z!Bxt+Jp;K*Qxk88S{Q|(~&&nBY{gj|>?MRy{!4jKLLS(V;=Hcg^$ALtj=0zt% zME(_9|FlymKf;RfOR_^Z?bJhrb~hPB7zl3wsQcJ1pk&6@q;m^WRAUEnbEI3ljEb7C zf22r)^XWfA{m&luoei+kR#Ir1({*(%Q_>>!syMYG{k99WlBC4_l;8B1dEB$}+VdKp zI!*)7SRA+3miYOMsYtC7_l$25p^VZC2fc&5up3vy`d66$pZ~sJA$>(uQY04O8aeHX zTck198=wJLkd8M~hP>9ZfWu!+1IJ@?Xeke!I$}aFFswL27GkX9OK2 z`TmYcZ#3rjU#lXklegVM%Jti=pazk9^EuvZB2EBFR@d`vjCnN@31}5&`>&zC_>xuv;?Z{AlJuuM2W|Tv6ii zosMy&0B`O-_SHaf1ALFBI^#IB?t#}YG0m4%H14xJ|B<}+Yopv#s+SKo<8a(NYq((X ztzQ`dxm4qtk8($TCqRvt6s1l&53)(oHs1g&d{wRMxulf3>~~JrvZH;NL|xY2Lv@`a zQR2+%Q9n`5mv*YTK=skwWMWDIt9K$|rSlLD?dmSG{v^}pi_;=1^}^8Ri}8Gw?2qWa z)o?Yyf1o*dr!)Akv-z&^=k4bq)3s6;Ml~A~wf<^l`nzH#M1V~E#N*hBSB1Ikp4EY# z?YnLbI4g4WXlR?Z9Fl728p_3UMMl1@GE-3X1ggxvq_Q=^+p@U83dV*S_?_gW`kk&{ zP+h>stji!1f-^Q%L#7FdDL)%M_qT>+>1sZauuNB5j>->?>ZFRg&Z3_q22zn8(t<#bB_6$w5xKaCEEpUz^ED^Uy_XC>KI z`t=T2dJmgEsB-x%q&pV_&?2}|AHG40Fsa=Ryl^Y|iJ`P&sB(!maN`<-gz-#!!VxbtzTwOIYP>Tk*vTIp7S5nl ze+E~wBIqKu?ioSu($h^0|hS!j&5Q8kgg2DZO|-Qin^<$oZ3f z_K!eorRR_e%)z=b4y{K9>sVHz%uOysV_hlCR+U>Pje8I;t#cob+fEBkC|6rwD>fOI zu0_1QSAp-@Zl|YhzHBt@w#Tw(iEax!zN5HXuD!NAQKB<*f=IXDEUDFB zb7F7nlm585yVN=3iAW{y`SG*{khsj=Csj|bA9`t^(9+XP@w!HUWGT=mzw*($IWZ`{ zFV8Te)*g({1%CL|w&LsJ{jk&0$49i#sY2v*4IhM?ir?akL^$HF;&2U13oyX69*SQ% z*zf?Oh45Mg9wU}|cuH|)F`LvZAgW!a8p}8FZkNW31XiW{>~$Zt5lJ22E2uph%6zUM zp>IjbNQ_tw5cZx(*l~yZ){3p#rL3@fB_h(i2Ow_WrU$>!KeyTM7gDlvw#mc2nbpMp zh7(NYn5US!^_ji&No2Uf-`O3wWB@53L&7UoMPIQ>`!`kmj z?F3NWr8iKcOy5@~i>)5Y>vdp(&J8HPQKXU`Qe!pVvpSe=FLi#PI+?ZY#5SlGYdf4J zGf``AkSyWtW)wQy?C-xhRb_58WBk0GmH1FkrLe^n;&r&S5K0G{uCXR(5tscNg6{_a zY`mL-O?dq}w)$hhmj5vNfb^wB%Eo~{#2GPA^MKC`Os_Xfn|$Neo$_-uTxuRyeXIL5 z;5Gm$?>5x~>*gmx^~We>A=5jw;**V^vC5iG3-y4pJ_}E_hjFyk#X9a>O=xA)SM2i5{r}q*#qii)pBBdZVb!PQ$>rX6E^< zy$B4Z5NUB;Pcwp*-+gz{VAvL7r?j-Ck@rPD(@weJcrm=h8e00SiruAN+F38! zP+{d8X;;yR^gGP)QnZ3lcK$n2+jjCRm;lXBi!qipU)1Y)BWvbV;mxiaV~+N}w6#L3 zcVqx(`(Hrg3*bIV4QY9PwQXDn1nJtZ{3i@-;0d#I-y^Mtr6@71qn*KJH4VLSTJJ3$ zRm%mRnM%`Mn~@){1+6DI&~Ub*Vk7I)x?BOPu`XaQG-k6;aZ!B;lyZa504s7k3jYjh z;6HVx3&knv1M7WuZ_p6KQ8Vw={f$Y`bI(LI5eE0e^pEN2cO=_Xep;tyhWVWzY6wwJ zG+i7o5m^sq1W<)oQQHT%sZG6`lgxLo^wMUZ@3*su9I9Ik_V;o(&x*Qlr$DrG#H9e~ zgYjM(iisUf8Y43T3Gs9uRd_a^?S*6f()i4y`jdqQ4=(Jcs|#u@hFg)b`c-EAzm7<2 z=n1@^xNf`~#5(Yhax^};7M9hIU>kU6YrTz0UAn0BAJC=J_~Ky?Vw^gh10~Y=q$Y7`X82m@7;EC1xN!a@v*?oG+_6Mq;dFp-7}PEeTGKL zuMx7>!)`Za9+|iS9TT(9juhm5unk^{YNB_eZ>hnmmgB1XWe+W|OoIP-9W%CnfODl^ ziqSfr@=K`ybXbZMO8V$uwvMxpNcW$k3Dk0__io&FFh0SFAT1j6RYGY$Ji)2hkvNlT}Ib#3Uq>EP|4}q3}(xKhV#u zhc)lGiOfDrIuoy#u8zf;?J^T4|PK?b1PgMfWdJDyALjO=y_F!^6m2=95qQL`7mQC7oSZx<|!8e(r9 z%;8&W=sE^t9*~3Nj~XkCJAoO6m@RcgI@>pPrIjJ-A3R^OM{iAy5{RG2ec~&roRgaB zj@4a_Ny?Mq#rjq3ZIn4-P)F?d#|7gLsbsW#CP zM-KK~xY}G6^=!>uybU$>@VSG;^f?#4a7n~r+MbRq{06MvwW`S%qkVpQII0nO4zBbu zrX$8@_>&n){P3v*&9yd@D+su9AzuRn5TNK#qF}9S5Q(Cixc}W^b{?!Cbw8Sdr}cb6 zbHO7eS09Rp8zsCLmeR^)KXbb4vo@5On^slFe`xVe#04n?0W`8dOpx`WAGDVMPPz5* zbpA-gNZ{g2bA#uxFgtBT=jv4r+x5N3slr65vzp zung`*%EPIc=n%{uO6z5@*q}kwE=%V-2GOEl>xd~&WjhwzEUuDod7DCZl&1P*MXy0L zt|bsB`D3=QZM>eFW9R-rO^VA%I;&r2;pV$^oqfb0IvFXZAavTrXcxVgkNRvxSbDji zemMzX#zM1bplG}b0qK}Z8Ir5r(kn0D&5>y=i*rRG}Jy`KqH zF7Hv+lu9C8VnW%}UDk$LW^~sKfIxC9xygQxDJo@U@%KNkjbeD?$y{iP$ZI6U8gq^7 zFHSdoZ&=$uK$T65KOqKG!F^_#ixPQwSD@ivv{NHs&*^+>boXjXajvGcID^g+(!O*H ziWfJ|_ZAWqm?Uj_7!;xU_8lZ;Py|7Zzv)R@O{V}QTE**L+UlK&Y7HAz6zk`#*i`6U zL9Hg+Z--Q_Zw3WhXqOg#w7%K0;aZRe-Uy}~D-u7i@rWjsze6oNFSnza4Wl#cEJTCyj@jBcfrJ%I~O__Z)MtaS> zIYsSu(xHIN@zbRP>%ekM@$hsbV9d~8tHUnz>&#zLy}h4LB~ooS>8&Vn>(BcDPfY`#Qs?X ztWM;giYm|jj15@h?vo7L;y0sC?M4W0pHze41=DV7jsDee_c_l_{^Dn|R2|idZmI&` zbnNPwyq!9nZ4KbJ3%`A_S9K`)%zYXWHriUc1XxROB)t@1LAgH;)75Vd8CM>n$(!{t zJ?Yqe{{WbUe?#j<;FO{>)=1=PcG9l&Vb#fKur^aX-P9ptjo%J|wf0LXi%@}Blp4|d z*a^-bu3MAC?=A!eCZTKrh5D(KgQD=MBAH4jEWG?_c)fuK{qFY84Nn?iU+inCvHKu;vK$kLJG<_e4xeJbTEsxElvq>l z9|gR!>5{$-LMo&vy4XYwr88-JL6vr*SVAIeFYbb0-kAzQ#OoLiMf`>+*XJKQN+uH4 zC`TBepmBAbDbsj8vU+XP(-2x*zTaXI{)M?+D!{%c`-DsuU^fGBYINg6tKYA2wmNL6 zV^2k)Y*hybp>-|XuR(0iX_D6wLF2tuVW-rezk+{$T~7kIeQ@Sj1fYCJX{$6pr=}X9 zyAr8iqjt@H))C(Abq}Fy6}vu~*YND=T@L?YgR|ix#SlnSZW@1JutTNjD|9m+e!2 zastX}LZEeIiC;HUe9%2shwsmoRdaA5vIl-_)dlY5c4-zfAltQEHq3eUAh+65SMA6r zw2@0-SWiSKL`k5uF+}H8VF6_uATiW+b>*9y2!nB1NkF&nLLPHw?0W$_Y6E=JZ=Zb> zYJVyJXUi^w7yuUO1I;Vj_%Szd2s!sF_1+Oz$CAytn-9;G=URx>D#dn71MJ&Rp_+=QJ(5d9CQv2tBhnDF4V8g zmW_^@4VI3|-!F~KPbup;ReuRgS?BB*J_`dt;Vi$}vT426GKV&0NwGnI9+}bqZtXw_ z?lW3ix0*EMyUg2UzZT+S#tgH5Ct-eAM>>`@=lpE5J+%~%u>STlQ&6C`j9;!rdVPWP zGgx0DUmzj9fW$V2tuWMP%w2{D2MU}}H?D`|m*<|?PFLU7eIXI($|wCUe6!@+$h7%8 znJ+y)myK7t()xBjltRGZdb3bmBfN5>qIA<8F!TJX_LFi^Ucns-N&L6pX2uHMsScX^jjq5jPyMnTZAcjOjz z6ziEXYCI#CE{{~#6>#XC59?&6c)0}!PkKcfni>go6m=LxjcS8zEUk+xLM&58MVwcE zsMi66`pRj_23xe>*Db5xD9m-N_s1ZGYCH833ec_DZ-o3$R^si5B<($$oAv5lcn)>d zzhqZfkV;x?Av1E{zgprcLc7WcMF!7anXh8*c5@9IQ&o9~D7X~r5MNIPMWl8E*V^&T zacBvh;9wavf1t+etmsAEMF9@v&4d)7dkNajg3J38d&V{ov0+c{9s)&oz;A|Xt)T-4 zXh1=Ae!j3}TA42E%cZ_-{y9pf%m5)!yiTD8%X$`gEBEcWXs036F`SH3+WY5AUyb|D z4kh%rIwBsBbeKkq@4cF*Ky3sU4PMvleO6*Qn!AmT=%~B|HWVbV@01J8c`#Zyx_gcF zV`=B}!lkY>)<|j*-h%|-Hyw1x*AN1#X<)Xun(U=cmPxMcDj3R8&%XYvEPVVK=XSq* z;rlH8b;?%8frP~?Z;i>|Y5t}#Cc!oE^F@OUWXSdTn|Gs|6E*M3^dU~+>T&jUG<<+@ z{x9GJgau#&m_+i_ganxQr%3?tQ@%WH%cpb9#!5P{U9afDD&luh-tR~_OfGw(X)Je3 z;AUJP4iT5efI#7LzTZ>zL9N56e!C4*-}wNXmvOukM2n)JgR~h@{a_O|c2T2WxbVt+ zU>WgXL!Bf5Zo_C>^ifg}5Z{0>DGPw8DwrZo&&3`0??jY#9?ME(1!SFwQrm_AI`ir5c>l|1oLd+x!0g%WD^0-ne8&Y+L#d5X-;7gmpat^Y{JIcZkVCjfH1qxLO2@qi_>R7O zI=u_!zIJ=^yVyx_)c_t1-CGC~DaT38LR;uecC_S%P;V;P0b?^3*5Ty&A=Kaolz?r# zI4x}BkZj_<)g2nqu`$M}vVvJlK*c*Zi+xeBli~PtTt_+6Toa!?ywEXHU^Tyo5~n63 zV{0YefDoBTH!j9+;eR3zJ#^hD$O}2bLeG>+Ps^n^x{lwdU`uYT0&I|5w9^{3!sP28L8L-pbtV5P6ZEWlc`g-WE1N7o;DNr+ zd|LDQLSAKX0*Kgw+e5ecVfopEDyh&dGFOu4lbQ$>IB7eDZqcKf*3R-L>MwCg?+Ld9(z0f!lN=>?(_8Dwe;3>%^oZlrOWkgUO-Ew?KL6KktH7j0f^ z2je9J5H%uo@9H??UsbIDY#_>{_eq)PD)DBuVNvDnOK+FcAsl2lt5j_A05;J0r_zV{ zX{Gi=vO`9@(v}+O_cw)}DM%FXtLGbx5}lo9O63Q~s;POdv!wg*TByzVU!KD%s;bDt zRO?ljZn&=v(R+_;4rWVNm($v8u;xE~RLm-_8nz0}8VH`4@>q&Q<|fA(n{j8RE& zc&H!e>5uzyvK>!QOo`h2DL^({kin5+rD;cgE1KsZjWzz*FSNoA@3;E5fVJv&G-Zwn z39S(NHuRCQ+3W0hH$X?n_i&t1?h{U_?lV6Am)n4mOb&Lv`3cw*Ls4h>=oEE4c0|#M zC{z>yjG}rRA6lk%VBQlcG-pv?!I;0!Ct+cM9cxI(Z=pO?XjgY3hH4yj_X8H68V;05 z@;F1M?wL@Zd?IfHWBu1bPmD^&K>K;4~~lp4em0 zGPUP;nOMr-)a(s9cOL}& zcUFiL=O{9Kn@&3a#)72hUPT=61K&N0KTqDHtI6Xp+w@Pco$!MEHhD+ovRk9CReKc- z?lO-Rsz7wP_jln619hRE+2b2J;mnb5AMKNKg35AlnM)Vk^aRd+9s{{X;c6~CR?SadhrOu=626ta3$u?ld9vU&f1?7ew7 z)NS8CUP+2j3E5jIl9GK*N~LVs_gq2@#x`VZm87z@Az8DGWf<$&$B-gqWShZYNVXYc zh%t8Gb9%nd@3^j>=f02c|G)b<`e%-Y8RzF*-tX6T`jBhjmQtIBO0Nx~*t-iYz)@jAjU2J?Poea` zy5`%G8}2x1n9;rfY)-{1kqLaCTb4rb(Up(*Q?FsBmsMbnkFQo|AbMsQq_D8>?g8td z&!xt8reX}QharSRSH}@)pS7gjhXY6UXWI2^VcK|C&b?w#ikQWAe-rH0jXuAT`Yf=D zM~h`J%Xh~*)rb5CIyFBOkA5LL3HQnMJ&`Jj+_Bb1y zYaOSfM)GxPM)Zb5%_73GaUm@>NUCXH{;rpHt!e$GNN;u!?+8g9II*e2E z>grP=Z7PlEH^3f}mAMaDBr!{NoPS?jwZrb$B=M|Ix7_L4EG?1 ztbM!OwYTA0Ne@ks$Hvi#O+JQEGo9vSe|NCs-1|^K*OW=*rm@8<8A!is42NR3@X~rh zd`A&99YUh#s|Be`6ls3g+h=eNGTfjbzn<2Y-xRPOVHonXJ&r7H5Ud`GRh^%S zeN3qWK!85w+DOSq?-w%O?e&r942C`^HS-uHp3(aups-Gt2k@!aVb&ZhK;y$JXc(@%OTwVMln0w57i?$FBNYfr*|ckT5~y^1 zIZ;`kbf|W_%XFy-Mfz&+%*V(c2`4o(+BteAyPG68(r3&;Z@2rpQorEsssP%k1JdH7 zBU~rqfx}0K>xt~<53+m@g_^qZOw@>#ndo(Ut^2Gn3i z!ug&HcE~-zRQH;iS)R}vu;>USy7gqg5L(T(hs<{5^VfPVEI@d>Hny)c?STT>8nu*N`|_LVz#1z3@w)44ReCG zMHG81%-tmwmOvBFL`~?Ystm@P+s)RY6peB|nNFU`V~tlWen85Ya8UUZ>%Rpsp~Q21 zj$TDQlPajWO7}G%)zvaG@b^A6Iy9PY>}&q|Oi7r>in$ellHdT|seBl^U}^;3>nu2g(q zya7(ef`h334nxQLk@9po6YlDgm3FD(cggAi`lpbvVKuX}JV!OM)8m!{;e`~fiTiBm zs~z}#9_GFM;r5sbzVjA`DlNw9ZT$z&cnOKVHSUPX7uKog`hcH1mxSHuSgDky8woeISBj;}#U z(+%U{^C3GQU@dY0EXvauF_fV`0qP$Gh?JZ$D@Do-;`GSok^anfRT`RLhp+LSZtR@d zmtE2|2*X>p9-WyQlKioiMY*b|@Yz)`(Rv~v5))Tem6d$br1N+l+H+)xiJE5&=Fb`t z57Y@9C#%eNXGOX`j40uwla$wOzE5lWBOj3Fwibo|_p>kRQndyK+_7Mu$mPVAv@+9@ zYgd-o!b*CYUin~5`w8WWU=@L$6rk~L=^?4f`aZ7xB=fXGfYYv1z8YU$Di*rx&^Y>y zx;SSJZb{E#w)TzmH}5Y2o(nQq=HzBfHd1}?J)_ST%clM8;3axmdlj#*m&o!2d>vw1 z<4gxoc4!lQb#X$wWBQqg%zQl)Bl@-ZWyEaVhh4uv>tf-z!1Z5Rai$s;T7Le<0|1>T z-8b-0kBqOT+n#9ooX0TB(uuj+Iu=tJWf67uJ$`jX(Adra?a8&juKTom7Wr`DLVNLb z%(P$cwCYmt6##+zGV@E z1iOz6AMX1REa7Tvs``+MCOlDabVzqKB6tHhYVP@|*!{!)DO-`4*q6(k>JOa%1j-FF zK+h&{uauS0kKF1I#V(j2v2GrW;~=T*SyA~E*{sT6nz5Gq7BMu~EP5_zcc5C&icU)M zV7Em2B~)F&=r^2-S8?CrqZ7vngX$>zwR=xG-!Db>2NdjAgw`Wq?!7(t(?%}@%~%F) zlo$6%EFOD&lZoAC{@2F2#M#CaW&j9@U8()PI4O9k6JO~;>}%196ZIhHh~WF`j4)Nd zJeWYrO7$p^VNgGD$Q%rDWoJ8j(yD1m4(Hal*5M){d8(*jmxCVW zR|DV}zkAhrj?{V{@QmMC`Eb>n{_7ySdsa&Tz4C2`ed+|L5087rS2tOX?K|mwcC%Oh zS0fAe0O0sUOa1Bx0d?=)Qj)6d>wN#=B)^UMvWsrt`=!O@Pl+m1?;YpH!nrS08G=GH ze=ngn@Rs7GFRn{do#l2I_!mn#nv)y8a5f=;d+3T2HcYMs-Ox(6ddr>p}jG~u3@Sya$=$VhRO8S;XYX{ZaJNm7K(g1 zJsIT`_RantX-lqIW5eM?ky%x&x_7s$05XD=ApJqEtdb&+cIG6M%$DzzbcySgyJEMe zgn<>eFW3Dm0cbw(ltL$piqGOXgDrbjz?D4(g#gdiKd(j;_fiw@cuE{M?+>v-$I_ zNxX+`C`0||yppqd9)M+?Ki1ZZ(DS`Ld4Y57FIQ3nMhKYK7fsh~FsoZ1T0+9sXLGfK z_G}dK%j=Cd>;aHiS({A#!V^=Zne>C#^|@g?n9D7Zm(!}?77~M>_Mq|@HWtu3v|~%0 zD5>?!XCyB!#bRG!!6tDzWZtC;a5{Gnpy;)zhIKc}K&j)(?eh#Z9L&%&M_8gS&!{I)N_14+$M_Q@XcCwi=veX)|6v3iO2X}k*hG_339L?v-Afy(mQ$kSI(ee?Gb3J!ieWI=5af>yM>m8gr`+IB$}RhD&JsQU&r zYpKXL&aHKHaJh45^_HQRttm~6Hu+o3)*)Rr07xIqt=C~l^Wyo@gXm^1)zu3^bagBc zO|=L*s^X^S0n`cz?Xz{)w-gP&AEV6@&&gHeDwR%lwe*`M^| zxiuH3Hdq1zel*k#Z4*5Ol@Qin#_>!FcAm z>p59Vv?4TLPXg?Hj{k+vGu2T3%iTBF=4R8|*2k@K9stDyCcAyV3zQg?CSoJ?%{Y%A zFA9pWfckGGPM@Zj8=wz?sr(rjubX&2Wh|){>oF7S`0Wk=8M>I%r`qy9_L!hTr+Ngp zVMI63;v^~N58Ko4o4rE38HR`L4ViJPGn$Z0BtDEjK>i|PDrh}PO8 zk?cr8L1z2DK|RIAryk7SHlX93OL5|sT0tv1f#AhmApUwJb31t&j1s`=YMqJ`7S&#i zSqa@4Qk*y*_^12m$|vT86EWGRb`CdJ)*Im&Fda*ss~_FSR#+lOrVqjlqJ7dy7c=6} zP|KAK!X?58HG!fpy@_S(6fAOJq``t~((vp}JCmESQ!%Nj7(0Kjk&xRin{K&PF#nDI zSuJAYIb@N~;GlH+*bv7x-qldXlAm$h1Zf)Q%VJe5hptLbYzc8w)Zo=PpI24LP?W4j z&H9a2Q{QD3P7cLjOy`;iqor*2VG?v3ZZ2XCl1@z*#@8en>juq2r7<0&&dzN>B1Z)M}jjQoQ(ZU|qK(6KtQ2O&z1vN*At8;-%MLRK! zp_D+5`dd?}xqVM7*sxp5T~pFFKi|Qj7M^0{k)8F{^jvAo4~^4cx>o(ybd8MHTJaAX z4V)g-SEc?`*V|GDdMUk}M8L}Z7Ii)FFPs&$H&#!ktvlB9v_W@z{G6;V$@_vK-p4%M9Hl1b*)-|4Z;x(8=9Cq=8T|#JUM-5VL4WQ3knE` zLZBy_ed`lisCzI}-5J0s1+^v*;a)|IOwVUlKcgW$eLt4xQ`Lhi>GQT`wO^suLY~zh zgN$F2>Xmx?ZU-)mH3>wSO>Rg`TuG7O;J;A8gl3kvM5|co4+zuW6753;s*_3>uytJ{ zM;po%KfQVda?7UGDBS>b;JtBDw@Ay>|A}R011$6HVLg@VhRvC9cd6Wza>9kcF;^kg zMIlB$oLta~B8Y}MM#ns)d(d3T#h;ubaCX*HCS!H$rLPs>pUmg8WAL`E`@~=w#EBtm zov_|;2>n6>bZl|{7;aRSyto;rFY~iaAL`Lb%5e-*%_5`;I6yR-(C}TzfYmztV3*$1 z#n-*W13|RE)T?MIALN``&a2Kp3%c7iq4t#vRs3+(a-;n~N`I8CqZ@=Ih$TWgQXOs> z)KGW3s4dKno<`c1Kf5fxnxB8q>N4n11gcDGt6sH;i_N|3S4lKou97V102lDtqal?^?uTOab7FE@(G{+HPA@WZieI988==o=PD&fA(!H}+rdnZHpnU0;5NAwej%4} zgh8AK$`kU6Fe5p!OOAfg{M>L!C9q=DIYnUX%4R!sLK2>`+C z6RVWbpIQ_hy*L0xAjYhUuk$MOQ55p}QMSasjSWwzWRdT zoxLK&_m>=pcUe1xrXad@=7f&>mA@E0r6uh-hLqg`$TR%A^Kd&SAWNUqHcz7_^15=X zi%)Isdb^-U5{>&)OmWkSX%Fo_9Zu;d<4apFsGX6YUq0e;mSC4S>>iccp6RA1gmP%^ znoU>nq7P72f8zRlX-$s&X>(6|oUnnKOSnk?*00}4c4a~SkdfsvE5}e$z{=vN_y~6P zM6IHB6Ftq^V_v;8Fq+c$ayPevdqZWfP%YGLzHBl~xiv6#7CM|DVsoQNae0lt-L?hfSEoi6N%!9^psBY{*-h| zG+=g{`yg_8{RO5Sa%t7N;T!0@dj%HZ6o7370=I*9vDV1m4B5d^TX<;Ynm!ZPsvKJf zqPi$y8OwMLE|r-K!#5blC{Zr@ilK2o8}#5thLcaKT|6zl#1T-fsGxAYl&%_pzU2%v zAYeBF8Z;ts3N&*yr3L`a$pH9OLe(}M3DPW)H*Wq=iG_=-?Ipl3MXc|8a*=68`zIN< z*DPUdeQ1Ik-Pzl6Pyf*cN1oZHzgnWz(&oxxH&iDd&F9OLHh!trJy?C4KMnU{B(+*a zi92c6rouN^1k?kN=1Au(l#=SHY_&D~xMxO6!-<&No5M~n2!rRK!q zRwoEgt77i1fzrqeks10qM#u&WM6-xjiiP>ts^Ph7@>>>LK;635>64q^SM~&TI=N*i zT2j8qr&TgF8ES1AP60B~%d&@5fHJ^iI<-SL{wE}*4^Fn-0f6jYPZa2x5l7Hk)Huy; zuiMXBsjp`|ZV)Q>EWX??gb6t)DEGA`Mrc}{z7+%LR-DvMy|`f0z<(dlnN(_6SbL|#z&8l_q`}F`+981ff)098d?=kzBAS@ zg*L3^%Do{$daKE`4$U-YNoXMFrNw6MqyQfH(sDqTIwQLNmPE*!QXKNv77r{Kpf&S( zKDvFY^djr3O4a%5Q;xptDZQQiT0kRh#!+;3tSF%8mPC^0o&9d$e;vmb_Jh-zm)C|u zKl(%HXOrJQC*|(FZw^^l0!1TIvPl?UIhw7f!|eneWTcK+I5PI3S)&pMSc)+oQ3-nk z-t4y`K;bLL@WsIwn?_-=Cot5(z{`{$@3L1u=w3xemJp6Urv|LzP!w*q1tcy1RB@8B4aLdm1% zuo0~Mv8dF!?5+0ph}`00-_2#B*nlxkvpBI~%7t|3?tX)hJ~AVhWoHw&vTJbS~?OM@)Fxth0vYY(8RQ6!2&6i$BKdJTmuG<~dqg zhC^zE1Ao3&aBPXba+3a?)|+cEw%ML`*wjkNeb|I%!OJCe8kds_EJ?2?pZgA`k;){A zMWXW#()qjecW*NlYL!xqXRk}_3IrK&a$o*q;#vF{b7uYG>|;6M`~EOsTcVp_DU{LT zY?#XJ>(AcJZY+wL(>GdGWAm`J2RxYkc~m|F>#1{l2N%1v_7D(7mOxCjrwW;zxxALi zurj0&iqmJYwwqQ*2;NRMJZr1#7(2wDCY4w38rzT9v@X`7b{r}#DZiRO?xQEfly}-B z8Wj`Sx>PTjc_lYc2bZRZAI*moB&Q1(kx=!uyyfeK8-aw??Ul?&)>>7Bo^VQd!0=G) z2r^l*gHwk0FK0#ip3t8=`nq~J`E0d&bQXjWC#@xB=K-Le_f1B=L5`?QgE6B9dE+TDzM4X5PB`G!2c zjHuBKK{~M!u(-8eE^I+C`uY<{xuWL*+R?dyQAx)kN&Sa{n^NwqqFMk}@qR*)NPBp) zjBSExs}b~--MTTioG1^7o~kOh^@_Px^2hw+%58l8r;5ENT2=r+GKuMkR|ZrkJNboJ zUth0<^WExXxL}Q9mIvb zx}V^Diw+WDlH6UUXLmS2C&L+Ynq3&sDQEdgP!I1pb4B{bw6H8 zJ#nt4r$DUB;GOFihGR0D9(dL`oJ1tT; zt~cnFro@rIe5a((R(+I^(daZuBSL1I=odtYgEbh&qO+x;%t!)6v9b=QB#ySRIQzkB zCX5^JG5mdAnKBUFo|A5{-K|qEJJhh_gy^)c{(3GMQvlHHd;uh%piPkC>B1jBn+Xif z;h`$Y4a{w)H#SA9|D6T!2^zXS8ND^zrW`rvQRmsMA#XdOja?cf;3tE?H|NxvRpV%4fG{_D%3gi$9=-1l6L>rWS(863Loo- zp#TjJCoYtHTA+oiM__?@lI~Z2ZR1&M`U(dGfVo)CV;7IRA2wFXf`qIu&wlK1odW*5 z`IS3yHWweW9_0)Bb!%-=p+^xji%9;^l8BpBM=XZ**Y!Y10AW5C%no5U<1Ja2kFiBw za&NW*x=|o?lYO{wPe|3@{dk-wmmttg=O6TcBmJULhBWbFUAW)h9(Wz1Dc^~SS6w2y z9H@9}D4J7o_!kmitY0Y*y?E(j`=H++};xvd6-|P}M}8s5Yzdh<}aC z#jJF@_*1brYLMiBG5%sTVu5n%<@yA>`N3p_-M6lT8qGoEZ9Q(3BJ9&JXtvbk?Ju%1^$p1}`Go?%(U|nqB<(W*C*GhG^?yGH z3ytR4n;4iw+MnUnw@w}GgsYw?CCJTJT%D}ea}0=6QY?R3_r!_y+pM(eFc&)t1M^D@ z@Y8({qzW$9S$4M2GSzwdVRO>B2IKND^gCz1=-{ZXN2=&}Rf=CWqfewOn8ty+9Rtz# zO3geFd?kNj*9SnIg+HPEc9`{Ajo&vx+G87pw%s<{OAxOvy9G(!YG@S=dg>wWI0~37 z&-AeE8m2W`pcf%`jy{=BMTUDvDZob;Om4GQgldx4kR%c5WfO# zm&#U7P27aZgYFn9c$`bs0Uq({bUlaoQ=eL@@GD?;E*(Hgbtn>}|A&2<>A|%Xw*+z> zAmf^wzZ@s6dVIROKQ2a&{*?|%F2<&b)DTzlEjjq4{o$r0aza1;Gh50dKM#qs^r7VR zU7S9Gvw6yvF1j*$OFaEZ9wr$L68Bx&N9)FEs;=JYJ%+an`WaKIu-V@|YRsTrzae~&h$fwt_jqZnzf~P2?+`2I5+0>w4pe?6 zceeNIeq;GU^E}-+DHG#kS!2q16?so|B9_=WJ`HKHiTsT1KtB2eVK>6A{@|$ETN}Dy zet(qg0ax* zf=TDeKDt_8g17?m3O-#ZHc$6_W%w%V?hjH3!*+lyu#^escRp`3#$#Iymk9;RfY;VN z%H8tChdS!=uh0%-81gF>qvqg($IugHa71MMI-XMq^uGZ$jFOhmA}W3lz}2tRUhDi< zjFhUFt1WMs(8$Q4k6l<`u?UK!Y?$i+6`?*^kZ%0|m!j+m{rURTjoRtkm;}JY{ZSUcfP z@rK`40l4;N!ox)0i7V?5NyVY7Nw$p7nwSAJG@^yPHc~Mzn6GVgfGU(8+@_JPCe3@6 zGVDGCwwbDg!)HdZ5JIjr@{U->oB*)UwIRk<_b*5ZmrYN)|A!kH7@% zF63VF*tPI}ypvfTB8;7@SDQTsCUDdSqUo)>;ik;`(AvE;q91AAbu=0&k=}kaC}wQv z?b!{aZ@#Z!|9#|QhbhV&lf+v_wvo)nYerG_D94Ilc(Q5oCu4y)IdMZensla>yjtmkh?+dKk--t0p6_ zvJq~3q};rUgru3C7DK6sN?>EGpvl&{Ww`%e5ageWkd4O#_i=^ zgL#+t-{eEl!x+A!Hs)V8S~<)xzhg&)K2e6cH6y;lLuv!{OwW8m@p@>-8=0K=QtW!i zD}IR!GL(3*|CFsFYnwia1N;e}4+<%KGr6Fd$0Q3=gf4>Y2+TymO?#-==IdrtOx}*0(WD=O$7$6qW{FkOt0hZyHM*XwkH%IZI4a zea31k=EiE9*QMRRE=Eq39q2eyy&@E6tqPP5%9VIBeZ)J3z6rof-2U0OTqty$zEEWu zGFJH-x3S0f1&P#qRfWdZ8ws5vam}*rFCh-`M(OI%h9XOBT7Q8N-sso1`8Fi3Va?Mm zsJW}{V1xVwqh_hdneOIkSUf#gEU#XT6J-k-|8YhkWJL`B5WSvHM{}ZEcb3vdHhRK_ zTi3_4+xb_m?=vFlk&qb2zBY@uCICLhmYGJ zcakH{mHHnoH3U^^nhp7!2%hEqU;Oj#Pat7Az!i&=R-V^X#O5OxV0k? zeSw1EVHr|SeeC2zCE;)3c>n5amFHoq#WRX@M2Bc&i#l3xQlt|_wQKVR~KQ?2@jt}M?BJt z!ozj~9XGFS%;ySta(hFuKp_GlPK(tRQ-4+m>ZyM)l?hfw=<)!D=(e?p$(W!;yNtb|z#0#t6qHvRmyX%AdI>+IW+@9S#Q@|CWF z8uyV`DJSBv_sDDMqx(_4@|$8jAd2EzEaO;-)zAC!Hm3LTMe}PE=u@Dae~3b|UJwJ7 z?RBcbhIIB}n+-~SVkR7qV7y5C;#ysLu4X@XlJT?U0!K>|6#M& zG|nSr>P&xT%Q?o1F-R&12=?A?S&S(cN%%8K@;E>01}2 zgM2c(42A=$qK|Y67OywnhF)UrcIbqv{S-=vx7i6YT;0%mR&wRNDX-8@Z(BU`A)Tw# zu0VfM$4)6hV}00vegKD~U<}*>f&T0=gWS`!K37(hA6Y>-YDn51My^curBkErf`*t} z0FKH2>q@@HRPop$Qz{94JZmp@8lVQ)rN{Z;eo+3j6!vi`$!a^$3e*LRc?)0?w_4Z; zt0cAn;t=OHq0pY7`m>KDpf5AC6TF@i14J#!+d-E7meM628=TZtQB{}a5(4Kg$%*an z6xu*K2j37icLmM)p@`}!qh39lx2A#%t+SBG?F;gU!aXLYEz7Az2H29;QMk;4;*^{I z88eTpjfCWy){NK(ZXF3bPMXR&UH!zczKw}g`be9=j<#27)A+{Iv7y8q5Hc%O*Z}f{ zF1O?!9Kg`-$D|g0w{{ei=>DW z_%&eej-~-H?8S<+sSGZ!wA}PUeHlCml42PXAR=$)o??9D=*ekfc^xRb{QBXWsJyOs%f7O}kgT}b!PxhB*`sKt39ajoEYo=(-xAOOwxKB#v)6HiWU|C=m}>IeX;V)IJ%r4Eu(*48y@XoY|zU5BBn|w_j_u zX%--R#yV!&;p~bTC5|>lo+8#&-r50yba%4_;i~+(s`fV!H4oMSD|?5)0a|t_5r1qN zsPrlTu37UD{Rv{_z%*2b0tS3v;gqUnQ{*S>7+$LfT}BvJlMC`^tAD9Kdi28k38bhX zt;r=V(7EMU_U`26)H`0(jyE4xfv&ZB9ENiGXe@Ly$Phdo|0UpsB4%iXA30FWdsEEk z>j}?eD6g}H=L*R^Ik%ZbfpL;+gt}y$-AxYm*JxY%J==ul#JsBl^iO>jXu+_xCma_R z)GIPV+{XVpfP$UpT};ZPBC0@4RU7A;?-qB=vd7HgOHmt&e9P>mBJX*6>ft^UPaEPI zh_VUid!ep=z8W>hFgVhL-k#V1$9+I+RczEnU;zyJ`TE-;^alz#iMJ065dv8=pyH9i zyBY0t@|gV?CTf|SV*vg0Hxy>Y3hK>(nyxtu?=|=bQ3H6Jzvq7k16M|fq1-w0jp0ZA zvf{;+LvEFzkF6WG0r@GiQ@p>fX+^j20v0J~Nsz->Gc$nP*T$u`(D>C`1~XxD_LAR> zVGxj))ZZ%Imdw)xpuanih;&&rygH=UlnLMeOny)fYNvp@wqC}*b#$8*4O-}GjA!^1 zq}Ef|kjD5e7=PM{d!JhxHVG;&n)98wjr%e3_!8i8>;)9oacfwA+1=ybgf1s#I+yvC zOTa5)V|H5_xnMeNZ~{35B@EEE_B7Z&ce6na=W%2}qd6lhctVUeMN(zO7 zCVX;)ry5Wv^8t@Fc%CpjkCaB42SlUZER7rJ23-TGU~Y({X0h9G2Wec4K7gCcBE>=n z(ts8)#q-<33X=UGu-Qj#;tIbp;@W>n`K8G^y$pD-yyXEXX#h$!DhwQ7@|;i-3fx|s z9$EadHA>N7}3HJV_i>n&&pW}v`7f(AZ;N7wB4JE7?31t1N- z$F#YvyRow#6$TRdX*dtDV6eOF>igi9 z0sM;Q>KIE9kY>!iHP9%XJTamDRr?t;$NRv-`zU8uo|7A+(5gbEjBv z%uakgGGyffTEBppI)ADgn1~Do<8xuAQ#KRnt;%L2jTyUc5T3@Gj_bnf)~1rFz%z9x z-DG|d7&*pc%TqC)HLN@-7d?jLs^qZkOO&Z6c?d7^BNna_W_ecGnr z>R6)3^s`M)P^%8msZ}ITc66EbIaVOlk)S92@Q~Rk*2wMKu$ng17QHs|JfmxgS{2X| z?yXVh*QtYM>OS|QU|Bjq1b)8o*W=LuNmxexI z#?}(}qSfg}Om{kcupVUM)s2_7yuXk=>%0p?kmm|~pHm<^gH?sE%(;Rl(g9a@=XYPY z!c|cajM-ZHGfeJrFf$7~-ccPqzD9fCMD)!!bZhz)Z7v-d|Sb_=ku~?2in!T_P`Y)A<+D05u*@Z-6Fk|Owow)UTa^y)9sQq zYQFxh$C1ABt_o+rUUPmDf_{%HDquPLst@!u^8WRnUvF07(WtH$!PY?S4YK)WxZ*Rm z$mysvwsmk3y<`Qwt=qM~A{rcFr(#-86R^OV+fODG)9kS9Z7`m*4P&GxmT{mpYWFcj{52E{NjB+)eYhll!ya z{o98e1?CFd=b{v*D`1joO-#P{Z!@m(YU=(YX#DRluN+_+h8l1EI0W+cnGV0(WIykczYWOW-^^5v8Xg4S z=!+Mh(!RZiEM9{jFwZV;gZx=({{1WIg0ca1)Y%_s0Ht1oKVR3cEHMAye8Q{0Ws5I> z4^Tg_{ijFcA7gq6JSNAhrN_XRJH*UI7e5;HC!P0?_k%DNv_z9VScm^F0r`d3m`|X) zZ7K&mfgCVc=IobM|J|R_kl;(82Psdd&0eAQ~FB`Ngfj z2)a{X7m@=Ti(on@ZtdShyC+GfX%ZA3G{lYs;$GZxmtFJ#N%{Ki`~D=X{&v=67(V`J zfW2?9M@?-zgsFx>HMW!>Bsk`3rI`ce zh>iI%X`%o9Mws8@0edkkGt~U?#(z1Ghb(GX#kb@}VnGlwzt-d@Q-%MENj_u`(uqyQZK(6U24(n8 zd@R=IjLa=B+qSW}e-~=}gQH$$o~Lf=W9~5Ta2i37Hgrx*|M!aCf7q-2N!^5%s(MjB zj@sMdPb$#<%5JI|HC9XR+I{06bNG+tb7IfzIJ%`CHT90G*bMV*3uz^Pb?%U&^9iu) ziH|+)50kd{>`0Ubsm1q-E){|F5Q^*X6m%+6wFBMEE_Wc z@#u?3EfpHhG~1|JwTCLaO|aU1|3gvs_X(57s*x_&uM;NQEgsAW*GpFJ;FGqr>TB(2 zVy@8mGlq4}oYnzFI+d2mW|i8J{>-f7cr@kO3h1%+pAz~v%j~~r{_prmdu9B;*%SZ! ztv9cM&Ec?)!k=2?KeX`7m#>P!R^H%K_`jq+{<$B%dJf)tGTQymRD%Eh)V~eKad1Tu zC3w<;`+xbrf2>`wGaUwRy>@JH|G!>6|2+k+G=L3it-bW$9V7quOJ6w&-umKV88b2L zj}QFk%hj+I91HGE=1}vOHwnj&-!!xI;W}b^<d{55a^}&R?S6$2~=<1#Ajpp;^-;N{zQ$kPu%nfjDE_`qBMxusQ z+{kimPX2<8=N|V2*&qrM6x0U+_5-2bG+2saI71~;=EJ*#; zb*mZN#ljB~)JtcwjwyQDte0<#9%qhS=#Li?pQbf;)}BXFPDY*Y+21d=y%2f!sKUU# z@b5JCRgmEDl(fB4WwfiPtX(puhZq+bx|}5z0V3DM3xOWM0mK(lTBVMOmw0feKYe>S_liii?}|e)W`$jHn(P_Z!@DyPZ>@&jd)lz?9#5*j=q6!UhFek_wCkfd~3UM!fY z$i37m%mWa0oP)uI($7a604OcCV%w{!!xM)H6h?Mg4x&n11RVg{FNQq!j>flF6bQf{ zowo-WW*n{G@4QkX=Vk5Ls^Er(Z4jG*08)gBNzXKfE+v!Z!tgGKXE=7di-57WkKQm& zUpGma=}+W8cNaYH!`Cyu#hS=}WZucpT-qusv{6V4p#_#w?XAp@h%n z4$t?kw>AnB_7C-aHdFP7vx`{qwZ^NHI2gcW{qaFS}JTS%?V{|W+@i3p(bx}>t>wFmJy{t{^o7qCaw zy`*tBo8se3Q_jgAd=ht(7k9v#KFAz`-m}Y${inQe%F|E5+>$K>m-RSAiufOM$fu+V zE2Dxg_lPiO(%JG;rk%8#J~o$QRp@=j6P`usYu{Yf8+MgQW(iC-yq>RS29Gq$gspYh z4Ey4gU548dZL1fGKTenTcHZPP6(*R8CPV^|Tcdtb8d|Ce6S?^Ku`&t^EN}|`HcZ+r zRT+gTJ^XlMoq%m9{%UCn|J5eJCb&evZqpyT8-4M=<{oFN@OB`Y&BumYW?ORZnWhm< z#(t-zU_$W5zGqz^)<^YDic+cQl@aMZET;{{u^YelnyKt0(O8JEz}ctY_(VEdPskM& z6wb(f!MX~c8dnx3I3GtPiwYA!q%>rtb)P>Lx&waw!5}1m(jE7S>XpgS{@*Kw{mz%j z!B6ubSmrsASJdyjR*XNUAk#69Pn5TGR^dityZ@_L$m}W9F6T#aW|0G_QMR=`ULaZT z_uVfg@Tv0jtvR{Y_VLCRQSHXF%5ON4uA}?b7$7)bIQ7dM-+*6a^M#&{*GKPMd)SY( z<84@okcn>Z*Y~jrFye8ZQ*wUiO^UYFrTdyY-zX3yg2(W7is>!i1hM7Ob&2k^vk24j zOH(vtPfMqf%3X7t9kMxA($8j^ccB1@5|l`G=oNJR_;TU{@8GbD1JL!waLms^ZP{+$ zyB7Pn)IL7Jb zwM>PEsj7j6((4{Dw&cd5sf<#OKU7d6w0#YO4Hgka#!^_gl#b)O41#~~s03Bn(Yr@j z#Q*t7D8Tb1W8>3y#yjBc>%2m)YQcWENS(p)Qy|_2Qvwzk9`2t#5{-+TPvpON)>mIH z{Id9^oX5Urm7x!^_mQ@VGg+tP!!G|-dxyDTnsX?ZuJQj0Jv8|Rgbr-}lrVy7he3`M z%nW2j+<3bgM|UZ7XPd1~(2#ZPSD9116FPPNQ@ym1f!g9{FW|P10JN~$c1On+NIVhY zKk@(#6HPU5r~~Ba1eegAi(S3lFVpAd`TcJCOVu;atw@dKk0p332#kMim*blW_@j~= z<4EUhZ_?S%B*N*$!Pf;153`j~G~lXxxOaqk%Dw;Gj;dy#+*?q&DA4K6$;$`zIZwT* znvMYv#nENK)aM!}@~g6^j>G!lWA7(w&qf`q5-`C5qt|$c{kBiH$6}BG`|ZWgV#-%U zvlLTr)*4{LhL}rXM>D=)ZhPm&dO8^QDDW^nwcAd7A9ZE0pS&n|V7Xj6;6!@ot;_1d zgkv9$4S1c86eiH!81~!05+A;i{i7?fKg>yLJzHgJg_1fW1#CD+b&l0f5%o5sXK8kc|4$k z%olTcbTOP63?nz7Z_rB5NwgCTT`5oJ9IUYTEGrl;Ovozj+m|?1DmyPE+$})SI|T-1 zL~LiZbsUgoTvA09cUK2mH543o)3iMcD!qH{bvj-`=2k14W&98O-*oU%>^_rIx@LF+0ne=Ck2gj?O`?)Tka88Bcac1(DJ9s37VqTeQ0{+rot;0j` ziAcyIh%jgkxO55#1g2iJggVRibGmDLgAkfl>9P+>C}zaV0yB7Fnu7AbdMQ`5rFc zEzm8fy+7;DbGr_mN&vd&~qZu5cMX>sypnZr+;8&i_%Z({R!y z*cxS3CGFv#!#(zp`>IGQy4a-x7<}a#GMd8PX-@au-5K02x#^6K$8f&knc`4b;1^@&=VWL=3DGPrGR#9i|| z{?A>Sx8p_}e`&z_?#AlTy`$=8hO%RY!4(XiXMW)QaCyE|!noI6aZew-6}GYqvA!0*}~g=UV1DG5a;0^V<$c| z2qbejs99h$n-P;am!fR(k@??%?m_~tkF1&I$`N@y=n=Eac0>`nQW z8nogzf>qii{3B4*%6dn5bXFkL+$XOfx-y`$NHJR|u=U~YH3$DRl~@WQa9Vj?<^M4C z9_(=b(H3Y#v}j2LBM2fHqL=8M=q(~z^iCK|^fF4cXoDbnZ_)b@y^r378Bt=0PV~-w z{m(h~-f!R;@7}+)*IsKc3xNQy(S4!~k5@NIz(Z7c*5;6kaF@yF%hzsW_!vNeV64|yc^no?f{L+r9GVoUBr7-{$OYig+AN! z#rJOzYeq-uKy-p--)X>JNILWmw@at``{8BY9#{AU13*gPr0Xim?@Q~q+K;Krmn=Xt z>XwJ==>iBd^q63M2mrXL*P`3B+uJf9*C%b%2|1gc3|x)!ub8*mu6GvK0$J08bj<79#*38o`6h&d$XC;?y({A-H;6O7S;GC$ITs;YpYnghl zj6 z7nfI5*>2jG{N8@pa#fNBKZPAJ`@%{5{iOeAcuX@Ost+X~S;qJroVK2}#K!eRJN^6< zLfr|V6Y5}!&dK|Mg}~n-VGkr_bfx*Zq8`)T-v^*0?5Woj72OX%;OTRH%5mc@?#y`% zfA_aR&W3j~>F^#*^518NZE&jn`%e}*BwhDj4J3v|4~p}4V43RjRYH32PSg%QSRJ@O zVxT?JatPSXj^|s~lti+K`lDU%wfer-nSGt5Q+Yy&0dz84!eXQ1m)p93iFEM+A%vlQ zu6TKYYdlFkDrj{zh&bd&)0@97;6D!pV8W%qS z3{wpUTmycJZHAw)kcYcuU)4I&v~gYF?29rUP^5S`}R-Vtr1~ma%2e zYo^JE$DCR&;~ginBO$Zfk;D|i=I416OZi(xi2yc>_moO`I2QOj?V$zLiK3|ot$^q$ z(IM<;e$Q9H$%u{3L^_Me#*zPL(4MG-$4WYou;foyW5E88W`Mo7HK&GPT*wy~S&-sv zJB&Z{`zQz6im`t$7#^d$q4RlrMJdmBOL860P8L7V)z#L;o*MRy*H$cFt8QiG&l{tZ zQX22R6QtXgU(M(u5cQeM(UBMD2uw@R7s=OFI!79aNXsXrqFE$yP%X%T{Z8oQ6HL1_#xfm?&0R3y2I>oyp z+>5vJ!Ydw!GgbT`HaZB1-5B;w`TJ1^x%*9Cb3XdBL-DN(s=_NNuLyp#k|`^YQ5D+M{RR#IEtUFUebx~eOzO@2#njAx)e}Qx~Ud9Wdz*NFo zevoZkGoN~}OKp3BZ)=}R_IGvMZ|1G9yGF+M5Clw;*3%PE9m&B6F2Aa7zpY>-S$V1^ z^CeN^N>#%D%95vEHLF1Esj7By9C(@Yp{mO`xEj3>{rDKTH4gX7v7=BOv0yWm7r!GL zpln}7CHYMjEB74+V!0VlFC`6tm?qh)(17{-xW9mtNdjM)WK8Fk2iBUes3Afb! z^y5_sa$tpkkrzXU&Za}s7gpk#vYut$o@XXqgW+5J{7gp)V9#z_B#2T3jVJyuAY02- z*79t+!j}(TQ>meqJZrU+L;#LFt_KSfe93_<$kCm;(gHs&4+4b(vR>!;s z#z+gcI8l*%&^N;()r6=hy7shR-SX`YYR@XuomH{TjaOh9^L#D!n~SroRkmCtU25;1 zRx;h?Xzg1k<&CuS^TQDrk?PL#{0?wC3yuS%y-Pe<~sosZ*CmzWnjGkdT;$feAzi>+qZ9!f6(4LNpXPPP}l6(pcz87PgA>6ZQq^Hmf@v>{^p4(e7{W8 zF)qDiFBc@2U=qR;k44Rla%N^7Qeem$n*{xgR-?jZC#R4XBCgZP`jX4W9heG7K1lV0 zhnUHE@jh?fP<0IdZL>|JmgE}kv~>OJ-{VMo!X&qc-BF)E1B0||Azt9a14&U(vC~!V z**4I`^W}UpZ1M>%FjQH7w&Pqe;(ig&BW6Q3fT!c0QhSzS3)6q? z9g^lLZ=~<=BI0X=$pIDiz0Xgvc@Gl3B!8N9SDy5WEf5?i5w++TFv=8B*V3&J9ry>3 z(`?A&3uv3=K?3<^>>OWAf(17?9{L`?!o>5e zed#fUVX3{hR}hQ^W%;k@M!6RC55q?0N>V?p0Y)5xSoc0aDZs6=JS^1jpb zI~@wr&%dod`G-)XjHhe7?`1b{A}l(pRcAU;pSySHyV)hOun+H? z`REte@`bw?RWR4bV6LepH&Y})A;9zI7&}JMg*?q*-E_*a_jx>CHQ70?jJ=s4qA1Su z4y+fFw)a|L$T!7=83NpbuX5~@uG*md$%4dgX>XGw)iO7Z1wKDPx^gCCE`=`GO7OZD zdwWffBRrTxi`~d~M+sf$8m8F?()u4nQpbkYDjq1bDH$>>&Ak3>!cTjbzqWpk-&_LSns-SqOJyj{5Y(WO zoIR20)Jaf`g*tCs#4%mGp@waAKxHB5|k0|ZNrSTMriOP)+$MG zJnoQ+^C0%<#4Hd2`b%&tQmyopiRA-10wQNE#KTa=aEANeLhNy|CxY8wa@!^Ife?>dI&hL%9(y_HAqPXm9k@pR^D>B@WtpcS%%@;gp8eZAWaQRruqbz^hI& z`Nuo~>4a>xwu?i8=J^!i50%0a1)3ui30%e=pmA_L=pr94jvI0HX{!H-rf5#fD~%!l zF0i{1%J$MIiD8Co%-i~z67j$okRJ1Vi{mpjm0VV9wd`xl5&Bm<>ljs(U#$pHVBg+U z$4nkkSiJ&(FxS#%zR&f&pdQo2v)P)$=Cu3a*C*uGPtV0DYPfG@TS#Zl|C3a7bU@B3 zuhR|~*didmb_0Y0sdfkB65Naz$n&3Jc(d(GoL1KATaU|ZwzE}|zXo;yhaU6v&O7p0 zEa)x6xqp1BygDT6eQ_Z~vs7yyS0rAJs7}19g&OF8jCsBCb4L3Q(HjjX+xnx$KCDTG z7>Rhg>qk48>e@+w8M^Ar=SMzDxLk`3L_t$JI^Ztz;uMV13?4Y&7^& z>Morw)0+PalpCK2Kdt^T1d?e}xSds|tQB>peGR~4+g!2(A0r#awkGCL02@<#ZqUwT z5I4R!XtF8!XM`C8+aBzxOX#<0YEeR1OIoDpnB+5Bm7h`77sBl_-9~aPzA0o}BNwd? zzO|-=S@=?NQozPC*P`NJG@hAM@?*ZqS)Feaa>iVI)-DeKE@GnF!j}S`rDH<5@Aeuk z+LmhmRUF71NO5-o`sX+KifC@B#Vz){!A_yIG_vwOZHQTg3}^9^QckXx(EdlWB13S6 z>)K#Ycj8RO+{sTcw%*IPx1DCBn;&D-v)POx7W?$QFmR~KZI4>`_0ZPr`i!*&QmdoY z=DiP9AV0>&`O8VM%&b-wZ#84mPN{qf`u}T|?irY8O;}Lw@1{BA5xfl_C4Fy}@Fc!Q ztTB^WcxGT4Z5PUJtpbQnBBs>TC6t;ZjSu-BC}*;Rq?lxkE*mXQr&`?pG&p?1a6MPu zW@$OltBcZ~m*#k)+x&HSVf)R|Yn34@DME(PkzZC4pkok;cNmVk?Io8dZNBt2-|<2WTsOoUO)%8yY*cdKBHTF zwE7p@&B^|oc%J<^G48DUcyQ(Lg~x1I?M$&Z-EHJQ&krKysE9Gx^&*(!` zj`PS5$I@=8eye}Vm*vmG2V&MDRs`D488p98vq`e2FHMxmO+Ep+8U6^4)KlF|)69 z>XGB#rt}HP1XOj=O97GojAX_o^!^~(PVnb0hCkM;-*gaf);?OFf+Ffm>}Zj$lrVL@ z#xmOJaRHypwV&V%8_I)L2#xAxF~4hNDcg_4b)VYn=IJT008{~Ek`*l@=K%{!Q0wFS zvNzYP(k>Z{g#yc5yg?OHxy&8mlNs-BfWGwetNeYrBGhs%a%IiAm%51&Z#{CJ6E@qY zx|9+s_jJ^J4smHKxKNk4)M5?Hv5UR2I8Eh_Y=f3_$thstKBoC~MC(ab*!Z<;(@R*c zs!DmGTSmE%>L%%3&*m_TY2G@c*2Jfs5|uS&j4exBSRup{v4f2s7zAGJ)PmRSl(+SJ z?p_-?hJBk-!sX+`MeAF{K@lbf6LK9e*M10nLV`k+<-o3=(=_C*!HoN zH>t?V)ls2DRNJ^w37Vh?4`QFx%Fd1Zj|{~QQ7N|S6zSMngsjF`Pb$kD?g}6GE{`}H zq>3d9N9`scp9%GNgdB`I8`SqVp*)Lsca;`kCQ|nfB4g0G*DzP{dRGHY($rZ&G@`=D zvvi_2tZSyMnVajhJsr`Xli7SzHGCF&HYmMmuv7PF1e~XvHd_YyEWDWfyLPe4+C23D z(gC)b6)S=dIi#xOR7%oBK2A!Dh>8u{WOM0iTc-3r9)u2y?3XZ%o&#CE<@fpo31=Z2 z0_IO%=3!k336J;r~qdB{$?dtEuy z80h^S4Y#YHK^?kQ$kI}TU_Ao|)SAWbz4+kT>J`lGx_jwTX_lhpXpe1E(tk$FNPsIA z8DZOXFj^xVpDeXOMD3@3ff6tpNUGjt(G5+i-*M7%YnixDy-9ogsOM3KZO2_BSPgc+ z01h|lJQaA_;L=M1|D4w4sb-!L%x?SQ9rAi;>CCdjuT|yhVL|g8iX$l@%d_OB3D_7W zWUH%7Z2f3K5Md_Qg5pmm2Tukq0Lu#bwfe-L@L{)a+-m$ZEL zdp2O9p>;mA`D4##O@#Z?X5gY_=S0R@1A;)&65G|Wy~|0%6}OSj=ermZ<-Kk4?OCO! z8gr^WlUkPQQ=!bsHMU!yMZ2vk4hznM-ito4ez5*U36aB99vS$BMz3cFO?44jR6iSN ze6}F1)yylX7+7XqWaNlmoNcXBw_XcO%QwZ`0SUBDT^Rr*I!c&~W4${~Kx)`WO?<;Cv7iL};Cs?BD6#SN{cti4gzr7LH<}^!Eic&W0F?AK& zIlZ2}w-!WuY_=h@CVOgbV9fuw_Hsw~{n2A(byS@S6Ps6g(G|EA;hF=XGx=Op)Vv)E zJc}ve1EG7cwn=5my3_jDY5syg^D3SD*OZHTCRej=J$0%Fo3C_0jHYj_uw)v&GxL$g zdfXv2^h;w^v<+8cTH@3ZE|DWOt(=a++Pxj2xzPzBN9VGosNq;BTecn2RV!6_>k)Jfg89`PPTHokuYWol`gSuDV-L$Nf6Mdd;+ zHxnvYAZdc74y&qZCwnHr+^kWPjMo>COJGVzEnF7t&wU2 zNlQ${`ZPs`zgyKSu0I>BZ4}VNd46^?D8K;^^IGw?VKpI4YHHe7yl7CiT*;=3laA+x z&$chAj)gzb&iLYJ82xz{GbF8~!|o-^$0wZpMcHRa&b$fKmcq9u*3!zlRcRlB|Bz4Z znN`e~XDva2$zLI2SaSha&Q~;|{KoxqNc-vC-FO#@S*0hwH9JygY2_?`MF@RUvw5)N z=SQbmB@Bg+!{)3O|GIwFLOoWm@b{M;DVylkLy)N z88?)xu%k`F)g}M*qV2jp;PgEC-Ho`o_n%bZlxFC|F6a4+-N{8eO9)WjtEf>IHR1=V z=z5{U0qx&&O^~LS2yf{Ty?>Ec1D2Qb#;R)7h6Hi+Y`}B=@wcT8Z=`eU<3K#Zp%W`f z6@@wCMU=DbT<>Rf4Q5t=z26a9%P(4ooxqaWc+S%V#;VqS@|^oC@-P=~NKQ>;2$yqf zGw660l=?c+#TjrtO%(F<@j5f;d8hIlk@8|Eck+zOts}AB?aFuS>d5G}el>G%qIF>r zxdxQBDBfxVB0#1B^*xQOhn|b}Ub6F-<{Cqu5nwUP$1uW@U5sfgX)R<{RXrwNyh;6U z-^j6SGx2{#&Hsmc+R^^Y6IO066ST_ihs7!a>Wxo^oMZ#qzUS4d$F#TlEIRi292i_@ z{P@*LUtUjuw6FIFFE^Zeyo~U5dk4(xqUcRu)uT+`(-K+Bt+x6D#bc&jZgbs*$1>t1 zskI&MMeqe#8toZPB;THSEB4Qi9!HZh%F^xIvRoJxkWq+rovN+~ zjMlN=p?-bOWNVt2#t_6q#}x2_{!^c}xD%=kUc^@!*l06Tj}p{|w2%V}rw zD#C}0Y@a8;=>|m-1bUWSa`l?WTWg87=@9>-{6MwFV`Rd%Sx>l^Gs;J$`%=01Z_lnB zOGJra9eQ9+_;VlHj@Gau0$N)pS)evHdWmBZSydET%A<-jfULfw<&Sqw_cDjBO*?Ou zyr)i^W@@SieU+602o8Qv`Bq+vPNS&S;a^*|!NqY7ikYYvp5G0r&>X$M>Hkok-Y1L>?V^Zglaq9;4lqi z0zvO_NDOJwVe(>ZmuFMaek$okjc04k8`#DJ;tP3n6{#mHaEGaDw+9ND`<^P+<=ds+ zlN0xbi^43;3ag1RLK&$9s)KJC>A%xADcdW!BvUvRa7s0-3T`hMil+DAt_c*m1#(W zT#lh$71ui$HDV?=brkvPcRdS`q~MIdpZ%m{G7oFy8&^P>kWXrB`Q^c$$uH9V!{;Ru zu7EHKTsnr(8kaqPgN^4JLel;P7Tu9}k^a!3gwAI)l4(nD`#h&)8rzqX8vn3~j=2E) z4QE4Ye3@fgOHf^fJYBEk9Q zZZEeZbm*&1lb2n@#-kTA!lH&*bHt@}QqhU{h}J~bWs;9b7OUXC8+{!u%<5bM3cvmo zUd>Z;m7-BFpkm|QdoU_Vx>`9j25Fw_TL9oFWci7uJQW4b1;bO=ftrLVugGgnTsJ`k zd)8Twx6^m{ymi|#=HoPUUTaY^9&b^7Y9r3)(y=%?OWW>=CvN|8VOq& zUs2bDr3ns5Q@RG7sjmGsZSldJpy#>8V8wRCv`9|1`nQd9xkaxvD5+um(am zrfozalsZJUlx~orj}ol4P4T(fu-KRK)k+Ah;NwD)(ne~P;Vk3 zJ8}+15D4_Lvg+o4smC~4@BnGLx12|;{(!EatOWw-B?J6qu~L_T-BR2oFIkyA&94s> zI?zvb3H9JmuZ=c~3B<_UvEw79XnIPx4^*GX{SWzrnnZmT-jKMvP$ilo|4`F=xx4_HS&SbFw&2$yxGnW z__W?i`V^^tJ8|&MX+9-~S)V*hU3WOu(z~)gJsE_mHmO~E%-UAXTrAPf@c&u3HClC! z&Cp*(jeCp&#AG3E?$cJjt0@Ky`E-sT*GKNHh+coqAW6Lb$oE86vc2VRh_4K%Oi?ZP zIy7d2G=MzA?NZo*GwMr7V4d0zI}ppWGnB}%O&ajUYSWx*&409r7CY%nmo?w3F6kM5 zi#3Nkejx_ay7)i`$xYD&vLH071)s)$>)myDg&M(36p$xKuR%`5kPI3%EH)s zlRv^Cf^-JLEu&az1`j^5MmHcw*`&F6M5r(naQsbH{oQP$7g-yUAd{nyWofN*Bf0ss zl`J`I?HSX*gIowVc><;M(oXcLB$|-r+R5-Tg(^OT#JAORH@w_Zi&|Gnj$V2RDmJBXf81E_~Mmi<-d zTZ>DCbw6;}F222fSpo8n6o`9tPI8Tlc`dJ)bR|`;u?7+0Sup2e;G@sCwb^VyRR8Op zezV)$rn(?7jXYdFTGVSquakER*dSdspZ_XQbOx5+)?4cmt?FCyZD?)3>XWGwlB~&P zU531pt^a243`|NDLF3aBzbg*Tg(dSHQE+9aADFa(T!9I=W*kaGQ;s%r*>qYfzr)zwwLOw&Dw8C9pJp9)3w-{8{ZVbBwUXJz(JN>|C} zloJj&hELu$gWMyeQ}+!ig=r4(@iu|m6qK|AvKtn4Ji?sW07vKIX6nq-Qp6kuCVk)Z z8VI2Xixi5<{rjVix8OW=Z);Y*jPr-tVfBv2wF8ZjgTRh6`)CWiT?7a}UiL(LZcog6 zr}QnesFfiOeyuzz^+N4$d+^WAGjlF(xEn_1hD|Oj>ZE&Srx{s{2CpZZL$z+aD!DC6isqFn4eS&S0Ev$lCTf z(b+9M@uP&>d27;AhfY@@+{nG%y~-wfJ$pB`IYnCfM{C7g_-+&@9sOp25+y+$={|Og z>INGK%sRBW1$`IG+~u-aTr<2}ZBS!sK6H?PSJiqT>vodt+O%5!mhF~bY}+)e!?$E9 zUb6{2RTWNSEpISemvq&ByX0T?iRkra<$=+_y;S#oqCKle?fk`BBiPkvxBz9YkME0l5?oB{m+GS# zsKFd+Om^+;!pEuL$(&VQ_@h%U)`Y`%3g*waMtI|zipd5t1oFe$ydiU|ItGQ<`9MoA zd(KyuJ5(+!)g6OmG14y1n@jwiP_|i*C7FRipFzteS|M88uJtp;PplMpu=(aMsvycr!iL3HXS^|57c3j)VCcL4a@JXW&cG;=Gs?$Yt6Y@ z6PpX(F2ewrT5+K`g(Z->gib}RdZ+*JK?5XjQldX*e$8P0UPA-0Maz>r&eLJKIH=ot>#W?Ae- z)&||u`}L1aEz_As*~QCMX=k)YTy>s<1`FUHGf$dF4W}RTz9atB0~Dq9h^lK_yeauL zaxl>Ms04CcSnN7^y4Yu<-KDqwf}~^%K!gj)# z4=RQa%PUjUjcNH^QPSu5++IIJ`@8CKO!1yNuk9ZDH&O@yJSXD|#&019%+ozUQqoUC zJ;Q0}&ZUqzlopS|G0tb=DZv?2uY3!VwH6Uw8bg#5)p=C&gzr9XXMFBqZB9o>;K2 zh;+*0fn}-4OBIsXksN+YPr?0eGHgPN;@y~b=esIIy1?8*Y7?dxZsO{@5)#Zcg)Hog z`)np`_O`Sf8)lZ(khDhNBec{61#9+X0o+bmd9pc9j!>o1U!oOXKR$3WMOI<9;PA__ zp65wq^QAWo_^(0YQolyG<_wW)^z@n@{3sHiWHr`83qo~0`CSe4VOyWB;{KMvG0&(} zeL*sM3ekkz)CJcgO1I6lY&-5v)w04oofLeiQ>{6!(^G)>S}t~}uP}n!%}sY7bT|}8 z#(Cjb)Gm^j&s^tTy9<>o)6BFwRRBH~!K_}}_ttKe1TnQ;2hhSyDitnFr1L{v_D+>9 zo`CI4x_Atllw|@HA}*#Xekr9xi$k~eSniZ3H)Z&R{bmC{R@mWARv^hUbmzoc-1L3H zkN5yYPSfg0CdW5R!&s68-esMe;P>;6m<5^s1<@p9A&Xxk7P`h;CzM!wM#WpS#A|4U zdB5Vf40Oj6OpNB?N)UR-z_$>tQ&wTz-VvggK5rkP{1E9>ey5)e=6Ef4=7h^#E*-sp z8SfY*f6zM${E5KUx)s0t{g&b)Ip1Flzf~o4xSx{Mzb+CUP6vOQnd*_bCWNjUb|I?R^xG~%TwD+Ki=$4NVll*Jd>u9N|+Sj5X~ z92W+xGhmpq%G;h>um1ln%M~M$MBPj~GWimVnh5Bdy=?LEzqXlo{v2IkJH4#eIxCOL zj^5JD zJI0n~h77C%s?IMw{U^{=au7W>2&Hu#xM8h<)=pb*)5^{O9F}#N1D~rweI1N4f3dX! z)4&hw%~(x2AxE6`?G{zfMa~aSN9%2S&&mD1;b?@vL>_ytrBmt}*k%u?y>#2tZ5)6a zjzd-RO@dij4fSAQ-;7_yyXsnw=KiR<#tYY@eKmvln&phF(t4_5YX6BjH&=GQLlLdq zK#`xl?tP&4+l5O@MA{E*h8j}VA5UIuDDNCW5VEAkx&q!W(${~0Qe-AT@Of2Wg$z4k zXubhLO5ewL~axo9S!{(lgtlM}aw&M8-;C zm8yNm5b-6mtwgx|XZ;V@+;=9yJexM=BF_L+;gDp3fg9k9Y9Hby%+RRtvUvDj7*r1| zxLhr>(+$5KW(sE{a^kY~30o+|V$ei9L@q@VZRf*|_mvzpyzTWvEDz?KPh6`A^(+pk z)P{bWFDn{xb&&-MHt=Nke#sYeqz~ba2-9d;Y3tEi8`#8lE_mOz?SpkBo#Xvd$*V-{HI|NQDRm(k|oA@7NA(cpK1G%l~pw?5an^%LhAcI#f^lQ5-8UO6b$7KbJYJ#fz>nH`L~@yy!pE zwBX_y0i0pjm!sg{@|pgTCa+|KV?&#hRQh=7_nU%&f|!J@w<*d`6BL5?y!$Z)0DHZu zppSGVr%mOt8O$x)wLZ>T|Co1sRARg%?Z-n^tHA$P)`%R3_gRj>SVnU|LxfAOhbeE347rH8-@6fjcQx5q(-_H(`3>FI_BDHHm!Rb;u#qngI_Jy z(=NJZccFrW!BiOg!-H>cK34L6I&XrjRw$=xYKl!C__LXI;JVQt44lO|n{L?;e}Y2m zTKz{6JFJpU~ndNLJ_>VJ@aE0q$@F!Pwfdpdc)G-Afc$V>)vT7T<|}y)%>A%R_VCu+=02xWoZW!x~n3HM!BWzw@dANtEG|*wN%NnYJ!N$ z-aipz1I`9Irbv5DtJc_z=0lhMR7h3VnlRjM7kM6ZfIRVG#`X+R7dec>dSZWd!Y+9I zLjZKieNg$asKg1lMTmzx9Z%3X^`I@9t{0R(n@q3%hc*uwJL-yZiSiU2i=XQHawm0x z*7yPML*ozFWYNU;uT9&c#v<5X6Ldg?y7`XT0D|q&aw%gayp9x%B=)4OD(hWNmxbFk z>|bG`C7#bwxPIf^f@nLWEFdg(!EIvJ5=pz#6v;kdi940~QshRn39sPfj`Po%i41{9 zhqxuea`DY?@)pNW!pMa5t^QT-w0pGL1oQ0N!w7{m@W{BQ;NEZy`Yl{TEIFa*yzFKI z*%LLprYit5BlOxV<3?@pK-uqRAtsLd?$ElMnF@zW57cyCgl~Q^Cgs#^{8abiu>AXC z@dYjv&}dK5&jJpo7jRMViJ^w^^qz3vCFB(rZzYt1qK<&~6ZiO+#?Hr2LE!g{)%`)D z*xyzYOX%hKIgn+!52&Gdzf!wwc*>AR}4cC|JjE3t$wyniC zhA-PZTmM_}UcBPGbJr9Um5P=w_D}Xqt~JI?#}g8bWln|-pNRYBM*E!o3B~9DFnP;w z5Ug=APk)!;E$C3^Ufc3H?Gb-e4)pEZzM-CRM!`H~g<$BEHudQvH6c8%yz zRAzp2^TAF_Fyfnq#x)a;c&mG}&`-G<%q1<(38FW7TMl&cqsT(1%YY8LyuNnE z1nh*xBPne%RVMPpc}(LkHnDxluHI}&(_~~vbuHd^V?S`L4qg0VcNPpBQbqf#-jjgi z#EF~;=pbHNhrUKXJqYR%KB81Xo8n=0-uW)&S5h}D@<@fEMgr9P(9a>^h7L(Y$nqvf z@42}K*P#bO<>{CdJ!QZUVUYF*Lf-x9J~1KksakPPfdBl~-L{wbD+!h*JEZ%=LIg)6 zvqL~YMsoExGE}}Xzejv#A=Nlh;JD8jCWJR=XgMzuAE-e zxbZJ(KKL*Y{-`IZft?dy;i(l3KX}&uQ5U})kw>$%9HYeb(Iobo0T&hhDAX`GU4UM7 z2+?!kx$G$nrkN9bLgh5=YT#@|b`It;$47=tlY*AFJNB_=Uaa9ie11$GiXeb22h!e8 zQ^Wn9LE3iu&?#4@2O7W~1_^;sOKnmQ^!77l(ulCPT3b16deGHk8dYiQuo!DHl0?mp ziPZjC@>9hTElK|a76Ch#fRmnh=%TP0RB2vWQ{8#5_m?SXjli?IkM)}>Ua{ezv}41Z zQx`EN54VJRiq`5|XR2sdO&?S>1LF3&dMkw50e|R0{th+cZq--;QCRMO+v9E8nX6yg zcMXJNlaAG6gO#m4Qn-_ZKByT|z_#Ow&Aq}D{v7s*2kU&(k_vi263KIA{zNw2q()E3 z+Y+!v4Y5-%*Fa8UpnyHoJAP1`)5cuosX40&u3fFvp5$giM)m)U$@z-~r1Ydi;#MVe zgh!-D#8bw;g+#zZ=o{>r!9BiQlRS1c?ETK6tfJC;eQ&*Hos7w1&f&351kraYo5~9g z;xxNp?2J|cu|gy+o-9oLnGR|Z08oZUVwSeHIsXISzZD?v1SgP-;(|ND$(5tkRQ5ct zXZ|{kY}+?V+7^WhzT_Bd$%8$}W&@Z+f*Z%2S)cttoN)bRU&^$O@qFv%TROV%(j^(n zn#(pzM~FMSjo>)s5zFGzRw1#@C-HFXE`W#;V2=?i}iJ=3kHNL8&0d?8zKw z`pJnK#2r!?q?w6KA1hi4`x8>t14OHmYa4l5vR-_giOq_xohFFj`7L*6<$zrJ`}Pg; z!|enG6g4%@|F!&w6&9R5^%4G;L?^W^**RD68dbk^7Cl8RfPmql)h17Ooi* zfVH9PPO6A>jGWgcPc9#lY2`BND(`^nX?-~skiC`!+LMlOnvm2|w+EhiHI6;sUCNCK z4+++Ca z)@*#Tq?5l$=I4I`EcoKYgBn$+{{?VUpNP2#tkedx*Z<~0Ki=7^a!SCUsT@$>?yo+> ziu^X3+>UQbWcudeQ&t4K40l;$W5bWGMj!+f6A5~XztAP2t^UFZ3jU|Y!a_nwWbFDy z2-_n>ig3i^nHb)JzB#b+vXL~|W921+l8%@Q^G~SKlY+V)b2Z2LjP(h|g(R!G-VYal z7|&-i5DZTbQEqlA2HfH5AFRG6k|g#vUtSx1`4k-CV1}GcSBtZy!QNMxl>fak4okQ zFNE|B@#WDMFdP`-5#R|hf>({Lwc^BnmfGT?m3qy4P3iibYcEp3T35~yu|IGJtHDhDdAdj_$$kxx;k_sDx`sGSW7y%!5j+R;%qld=yOvgNL~X$yA5sE(FY! z{I+eQQIs);V6`N42yCp-dD3&<$!n*P?5)jqsemjlnK65VYNmTq8TmJ(+~dvkHF{m* zdQ)d^Q{9Sa4xq!$Q)T_K=yEuC6p2vkk_Eg34`nQ${fC@}pu^sy!ds=Y@&`Y6e_e`V zx)jFb(VIcy5;xA&=kv0j-@fz1BqdfXfw3v>%{hF!ZzU0VwDbLR z(t4us$rxmk;QM}P+HEBDUia&7!rEx~p4aiJxFSGSkk9-MbQsZnC`NZ4);gjab!Iv! z`0$sC!qNg@*X4kyL5@C*b|M7+HW>*=_;Fm@!>~@I>}4WTE8V&N1~6izdpU!0pd4*= z8_s10O-=^&u|3z%Pdob2WSIB8s9M;4jBl@hX_f#rqcH2qv?#T?&ySTh1jZ&JMLceL zk>UW%G3#jX|1%}Hk2eHrW%jAtqx(J$;LWjA-xpF#H6e=LHCO?574Bdz4Wr17DjbuF zcEC$Xo636-TD!E(dl_f#fOIT?LwxQDQYz|Qi-wz$aLG9Z}cC>DG; zxC_w1zXxl&$G6U7w;RB8Q!pRn+7=@zU^^dl@lWLb7wrDWk!-P?goez?me3{UWx8G- zx_4O$i$DYqoleHS`}DghQ&VOWSBjD0+RtVx?E!&f(pcrxpd*u&tb$V-npvg@C5DBnrI#^K{Wb(_%~0>AM%Hq6F=p1Z^q?1x z;V(VqicETW&ie^nHfx!l`aadbjdr1V@DyLz1^2xV*dtW#DyP$rsMD#G*Lx_Zz9mS+Cr-mOKY0p} z@g7JgM=I|L;Jl`dJe8ryQQ`7VnT9euQM~(Wn>w}8#A7Z&CNn@YBWkTbyZ_myN(zDJ{>8< z+1gTf*^CZAF9Zp}drf0V_K_UBIAJp=pv)-GF?a9J4cnd3zTNn5C&*(Mt>~~0k0hHN z4)S1E>7&8jp6FpoY#sx|K8O|o29~~avsW_`K5R{005tud?kulid+0vEFf}hNgT1tZMYg1~?L*?q3zbafyi&ds6&?5W z%{6|cx^F)fymIdLG&rJgJ>2hs z1c7URVU#bSSb`v_;F5oXQ{R6b#zz>v&I@!Q=LCKS*OD^8!yrI)n`f(b%kkM@vO?1u zRAOG=t)|wtrZZRw&G*A}Ws$ZoY+PbBMH3LQnMuhpkWHAZ_AW~qTQ@|9xy&YSD6^?D z+LkzFQf^nxKC;0!I<5AO`Qv2r{$45aebO##x%>+v#}M|}lP2JlMY%3sX+_Jw&v`4j zO`zZ1CM6Bx3CY+}hKB4f779jzCgGA*`-I&^hh;L|t%rljb?qS*3X~p}_|m_dL%=MqYMH6(8|$Eb z`t5IZyCi;cxX;?n1{K?mmW88+a1mz8^*}mf^E;)e&1F0`q^(p`fvFnwtIzBL>msk( z{WE7H-ZjfcuFt>R+82AGczLLBC`1+3qP&)y7E`U%7?UNevK!~E+KV_$O0OQ)a* zJ{?Gk$d7hW1o;{Z(09d%2)fxsv>Yi7#5A@yoy|;%n~W^v@W!yyP1^Zb@71%G{s}UQ z+No4-8l$&Y`yO4*%KApHs9!K16Ev_Xtta}o!Acst>F9AE<5eXiIw?=>>X%W|uJhpk z!`^#GHMwp3--;+83L;98rXo$cw9ru$l&YW<2~A3r-aCni2uc&_9YsLtozP1JloC*s zfRs>#fRq5C2f}Z~bN4;_+~dCc{QJJ+j=^Arkg}fjtTNY}-}#wqF{HukOhm{oNc5(% z` z$M_@1aD-i89hk6n!oOLpOz zgQENAU4|?}+tUTYy(02=b=;v_-vhJl0_sZARAQ#<_5}7XQw*GLdEW8i8gKHC`MAMq zV_|d@&2chwvHvJwK-XuzgIu?eV^n!Q1ZqiIU50okyZ3fejC?J(k=Sx=e)6aGfws0p z+{mKkvtf3<`?||6E|^{k!YLr(It7x8zuO!7YHfYJB=&BtFj;6!gaSqF^5fJ^09Dsd*MM$*d9 z3Y*L=1H6o7uM|e8$+&qv^3Vv4dy`1#QP+;SDEZ}~pQdimnl?kCrEIZ1_rMWZ%Aw)d zZ-dpeYJL&4YrBON=oj@?4gfbHD?TSkZpuS7K(n(QU5}%VfKVht-EKkf4TJ}EWJ+O6 z^6fN3l<$k4fN3lMwQ)lHpSm*|IW}U<{5}0Ldc%U>P(J^calyjV9}-(04q01~NKSA) zjvKawHZRvLOgVDxd{l1(9H)$}u%?B_D$QLL!EXhQGq9*V7DnL#VA7}filE2YW2zHq zd3*$HNC}X2CV`_UQpX;Ru^!o!E-1PM_SawmReun`P`ieard$SK0DdYas7q@p2=i7w z*XVlznxZ01;ReOD<)q%Qux5mSqV*`7L{p|Axdwi*IV0~ePn3a)<5}Cxz|A)!>y7_o z#PIX}SL08SVTO}#iP`9AAIQ+M>ei7q=;|ThyHz0=|f;YgGO_ zqwaki+fIO*SW|M&di6ji4f7<(TzS^d{ZN6q5`co`jMdlx$@yDk?h9d|b5Aznds|DuJKV`PZKN^APyg#}NYHc0|9QGO)ezAJW?`elWb8_WKe4T<_9rP;@qfc+!D4tW!PquAsKLFm(fZ5VTa#b` z4f_O0w>c<>ieBmO z>h#Y{dnQ$?@COUvv`9ms+mQ8qGOC>RCM-!LBrB1;y8gva&r8bO)ajIOa9p~#84_ep zXA_3z(10jq`93G%I9X<4WD#_9aRFW2r$Ep`lBu9Tc+5!J$0I_?df5y&fX0k3sEr7c4vQXcdc+2>E1_IDq zihArApg_2t)=~*jV#jzzB6D1p8e^xcF(btan&#z!-O%15K_|Tc? zvo#K5OQ_SDLJR=MS15B`5>ZZXLDAxUf**!R#P? z^^7|uhVvLVm=tYX*ZYOAg_tDYx@;O+25_;UA5fpwxj4YKLoTAe1a063{fuTK8zmN+ z-cj}}nwE(bne@8WsqnoAnB|c}?9RJ=KUP{Z8%{9=e$$#Xn%F_nzY0mq<2-ksIW0NI_efuN@UpL5HR&d*!a1psh z)_sO+%Ip~6_W@APa;oBoyr4amiySB%548IrQ*;!RJ@Oc7B>X2z- z0EG~n#BoUY&-VA0+0&V{CF$N!EIa1FFF<2xwi1UrP8&rF3(QhRufl6)BuO!)Q*zp| zB&Pp$&zO7G(!zluFFg=oTZQT!)L|M$*j-uFvjo3BGL$<_Ej4n^Oa} z$G4i8!7>!}T3uFihns8XrV&`5LYpe+Azu$RYnnr3npPt>zm+b;3Fx;0CU42gNA76K zYK6{WIWW&Z5RkH|YSa%=*dFQMYcOg$|!u!^Sch zlmI7J>?FX}MbMc|&F)QVgu??w?mCy6|S2%h7 zPuV8hBpAWAwK#I1$q}nyN{5ii(c)Z-7Ppxu_M;Jd+@LJx5pk{$64(GjJ0eZi%-hBz z5jYu-nUIWAUi{?uWsjRar&cNd0~dd4YXh4$;?RP4Rz_v*1sZqy6q__ zdp?VhKr^0ib!d!6t;36Y*XtleFVYr2i7!pizr zqo(d2Wsx4UQbGBx{e?2apWO@PSCSoP-$12^r02}J&xjdmDMkHsmSu*Kv=v_L${Ul* z4sY7Fja7Y2rCA?9IfjfAGSIwwl_c$k%P-)C9sPN_#N&u@@~8psGo=#q1N^(R`oX#j~6E$BUbu^Hn{r+Kr9CK$$A0s#ND%tO1+5L}6*$@zp|G zmL0E9{S9GfU(F$4P`$~%ICitc^1E_B$LoCMYZ$?7le_E=os6s7?Ji>#wZy z{hpzz)NS){ULlVdW&g}(y-f0?^*M25>B&pEt>jaxW;7owfpI`sB>?zU`=MAezSwmt zO8cB8MJM=}L+%;YX1e+{5)hfR-A%Soh`h$L+`x{!e>2^W&rwFHuy$z02j9aU+-XL1L#}hh zQlM>V3vM0bj_LATMPHq71_qi7KJ8FQf)Z(nI|?;3+8k<7~MKd!d9tAxl_wB zHU~y0Z_|^|mDYIg$m-s1)ThIFdqwoxQD{$prqES?!(^$&vgN{@DA#J4gO2#&I~37c zG_e)yj4o?Uu$hQSzlvuPq&+tXsV(G))6yUm#@q^JowUmycn z8(4{7j9ADdIqLbqIyTtw=g?BxD4T;M_Ndy;_&pSj<&9j3r1VL?S@vmvmwJcG9xx4(cH7$+WO&w(KIa2o(ztYx&~X$f9Im+DkEUwWygmo_F4 zR8?TVU!@?l_Jh7FTzGl^_(OK5H13FsV#A?_*^v|*qZCoCj5?4D6JpC}e_79fs;E=p zrv!jqkEVd4h9zY?hFR3psd;~s%|Pb8rq;3;)q`>OfKbA&p!tplG}+uE`k<-D)v>wE z^Z*#Tvs|>BY>YBP(j+hk-Jyr0r(^H+YF#PamA7nry7FE((9Q@RRtS~_rDy==;}14s zpf@ouMxBl&P{khcApyrnRC9U#;nkNS?B$dOE%?d-9oMO=du{ue8ziWQDp&Ff>JBYs z^=Mv{aA^xg(5I_RF1cjWGaBL7xdE&rP952qIDV{)0qQK3q&&lU!UP~fA_C6&s$5^O z5JXV)m0MA|C43_`1h?p%{*@2&mW52~}=P3ML*ws4~lR4IAP?L5Gx#OzX? zk(qwBaoSjvGA#yzHF{6nd;5MeJhg{Y+AV6VfFvc$zEZ%9au?N&+!9Wfg)yVk>}6nR zO?E6Li9|}6My(}V4N>Y!4id_@}kLz1%@ z2jKpfOicG%-7}&EAG@B^@!3FbD;bQ9Cl=K;3Yyevwusk3UsZ3b0?wOl)RZVp$CP3( zEHQo=BGW6Y^IaElz#ij&u6I6}JNE21NTKn5<64_UsH}uKuOQAfN+h|xX8sD;^AD2n z$fon|P{i^SGwPV8HKQXFCo{+B*WmbaZ}h7`B#(P;#j6n?adFGO%*L1L5=v4g0tzAx zUKz;`k|!kjgc9}x$3@(ADt31@6Pu=x=+sjdk6Kpi%?voPq$N$)qpME~qsp#jTxsSG z&%FQ4YIDzYmfuv0i*brnv5UU`c)EPIMm+((cHQiq#FlkI-TMQ|v_b6Hg8(DPn1d2c zrf*}ziYDp10ei7$zi8dIs5#7gUm>YVfC512(C%8(4WSq%T=OX>xP^v;w}~~QqL6cQ zgQK3sQEAI>i;bE#P}gz^TJQv(4^bfvP?OuzHJ9B!cUpM zJNT<506eco88knI?0D3=ImYB-Fma|LelQ>!btcb|BlJ}}u4G<%k}Ue0`e}^N{nj^I z$?6+Xj}v;|Pj z{l{(7yyD72fU%Ep^(@@)jW4(Gl%7eHi*d{;G{3qqusl5}5#^N@>A-wakc+IrF9n`l zy1;myORe)CHDF&*1W2^2Sh?oaIypc7S84RKS*BKzQWQ~lfCT_1K|#K8Z@1l6q|CU_ zoa-7n&ozWxg<-WGkhOhNiuQpY_d}=jIs|3eyG(C0GEd*Q-ps|HNal2}YT0I3-9wri zpA@A1J!4uM=FUvLU_kD+;lgwhk+K7!S`RM#0HaRMaYh_h{Xwb+KNHnOM9)- zEaBTF$qlj0M(-mlQg6vi3xv5nSflByI0~10{>B@ zYzq8g&!cKsYKeGkvXxi8Le(eUw{UF@K-Z>=6N<8fb}TG6RF2J4cS@*{@oEfNn zFe_C3*lOdI!_mE~$@;91)@QU~(OW}!sH>5acL$;Dgv&16pRoGb*KrG)E{j)o{~SJi zdHMb4vPdflQ&&eFD}#p>-!o{Aa6#<{Upr1&ZohUn3oD453^@Xn;l`0VvPKs1>vc1>pfo)D%eRr;~$z9pk zXRKi$_h2wI_i3X<=M|IokuHbt>gS?J`3~7L>r8>d&}Yj)v~gbx!!SkR#f;<5P(K64?a+HuiLc5WClqB??{NaSP;C z?Ar|~eh88{Z3~HT$#*l50YC}H%jsf|t#--fTuR*?5TK$(h^Amm#W=e-JCVmopWI^=# zE{Br=4xBHjD76W*={8*M&h&7(g^fmf{!gUR#N#7x+~pz@r9aV8Qx<>yEElx2{YX>m zcv;b>r5zCt3=@t4&&gF&TiracKuRVMFvFV@kjsb^*&G7;T+`B|0NKYA9i?7fZ7b+R z8|(#jr;|2uuCUvVNQ>`+j2KG=m{#9gp9Lmc6A3-8(@%e}92Wjlp=AMH+$;1OK->9=QkQ(EAfldY@zA&K*z5N!49EI0FF@`VnnuX%O zn)~}3R6`7C8m6DnqggphS82Dfu<|WvTB9@Bp8hJpl@BSdZC-S6t$uVcjyHQzP$as) zvf@~|U;m|V+;uJBhnN+TASgFm8iR8P1al81riBEkC!MZA@NPoF>AC^X<9D zW3|O5v=)w3>=J^~c2UI?g_1D6mJ%gN1!qXE@w|59zFGCTv`@T`vYhnPX_`NJ-C2n} z{>6Wz=C7TSAlhkB2Px(vd%ICwB(dUZP1oEgJ$UENY`PC5a>xvsc;slP$4mQ5fim7;v%IUHy?Zp+eN3rLaI1ITtKF0_xn3dc zTCy_DbpU~a3SX)U2`sq{tKy|Vd) z8Pgv;I8Rj5gL)g@lSUS9herzCc}jbU&-pSQDtCU{N;}%ndW`KvksQbF=fLfOOwt*$ zMg7`2$)P2Gz~jpGy3@NSoqbfdS3;E))}bH)-!bcvs?yt$nTpE^V<&`eQ#sb#Hlc>Q zHrEPoIx+TK9r^02J*>aAXMj;sthP(9Ywfb-0s=^K&Scu#77=h05wqop>P3mzLrGyT z6ZsC`k`QQ9Beg^<3%xF=nvM zQ4hJD_zBOT&MvMs?zx0SyW8$Qbrr#@bt<#%W*6N%Dop)KT;|S-hEzDgZR#D-^VQ#~8#C;Q#5=>s zv5aojJGMOQyPZnRhE|EP1IDd;o3RoR zHL=&VJ9!8OGsz|1{^r_iK=6e{Gcu1jNXR~MS?ZiUS6!z7H(tpEP7ldkPUfQqi3eQ% zTZegX-Pv+&h?>5V%pH9G{H<5kH=g{sl+69^`c;*d$NX2#PThHR{te~P^_vtgu78r{ zyZVHkQhAM#)d}h-F(!d7GM%0e-wr zD7D70^7;}(Jl&z5kj72tJcMCY1Rnm#4sxDtRa+2V%`$`#5#-X53cl~S@7^(!UCbKO zIL}9j!Q3CjoxQDc_~@Dc`6~-g?cwX99o9P9Q#Jb{*IJlcZNTL%WUWf*j0jPK>|+nG zw%@%k@x)&3i2k)ihWNP6*$T1pggfuc#IMBPsd^-M3`3a~AtYMOBG--sxs2F`G?{1+ z^u%6#D;V`Ma^b9VIKJ;8{;RAA0u*(_**x>rdZ$ynVMMCgHa*h~>va5DCoEWEYHzH; zh%fIJ$srC!^u1~l#d2f$u!4lOwe&Tp+-};;07Kq9d+U5Pe^u{0+a~iU+=KALb^#fm z2Ln3W)npgR<>}({Sb2b!%*5D5`;bm(Sf%(Ike(X(Wsu#fto^){(rf}g-6cUqB5GX6 zyaWdybu#|QW^P|}*Jqe|Y(4P37CB`L_gZYy<@*DdUhmeu?z{Y1dWX|Z`Q>$uw>PCP zUn~{5>SXM@=HVaLVXNbDF8$EEiwq`viyS)vt|nDZ)3R^J88CMpEOh4YF98)a8lm)k zchqLV-RTD|zN7Y%*WQF{MXXnol1AhqHr=4D1H8-;w;!49ApCTLQk7^@V=%pj? zWJhr3c-px12B7L;liW+2jiH7bDLCCr2UeVpvjevD_%UyvN6*)-R|C-Vffcu3mG{Td z9xSH>qw;Un&Uy^njz?Rr94GXiLSrWf`rRC)YgXSW>(INh9yXPJ0$HXC;%|Lu((1XJ z-tIZQ#Dt5akJuY?kH0!8Z*06%&eVJm!+q@ORM?zf@WNn|#B9tse`;#_;2=zAOY~$h zy}7r`kn7I(PI;amy4@Nzq6r}%?lM2r)l|4ZcUCQwhEmQW%JBj#x@!1P;WI~krExysr5>wIL@E-_}_l5 z(+7#1ET*BL8K?GqV71PD0Y6k`HLdS^>mkJ~Pa^b+=mqUtfMcb8k9yMG>DzajG&roljnIYXqc ztoNN)R83`%?6+f_f$N{U-q_qb<`YvpK$cE-xp{D&-wx+q4{w#?u3`Or-yyDpT$tdp zE_1NGoKGodr-89mlfB0Mylhf;f}j%fk?(53_HYtC@PAL)3Pw+V+<0*B5K~yI)T9`Z zQ@x|cAf>*1@|^bHGV@VOabJGpPH%R%F-sDjR?<`vyx?BLan9fo&*Mg? z#WrO8VXf<%Q!F5a#0EG>6@^ZJ5D<6EV2@&$~wS7f%d9_<-6cIsD9rtE}0 z!YzqO7AEzYj2c*R;!w^hFZ(un%j4$8U3XYf2HibIQhDAcBLYpFxC;0cwmW;XRKtkj zfZ+oUWnr!vC8xFZo%f)JW>5m$I@A7^an40vUxgV_@m9H&=b#eaQX}uBUhNeazyE1i zF55%j{REqCN7)<~n^zc+-70lelz4l=#A?}1EqZ`dH&W_Q{Byq3u&9qCQ#W|wK6l1+ zImVi27LgX80*l%tZWV|Ob0oh0u%~FO{#ZsiDFI>5u0CB}+tmrfp2hMApDgy>YqaO1 zjLOt5kLl;L=6(~tM8xQvs8Lep$*kX9T!dY5G=UMSnzxrbecvg*iC0LuvvK$4!=h2Y zI#ayhZ^kZvmJ0UN+?R=6psS__VjssFQ7*3@hqyc!!-FcDB@JrE#%=c3PHAv-c7)w( z!z;@(q{>jSK2@q+b1tjSJFk4|5BM;#l-qLEze*{A$o;D2O!Z=Y?p@y# zt>7+QK$PhpVY3%R+Ol3#n@z`6xHK@cDHo8Fy|SRbjl#z&ZLn4WMO6$Ko01&7sjf?} ztENjAB0!`m_`bVr-iSzj-x;bh2PNEDc!!C78Kr!>{@mNsCia<%A}B}uOi|O~MYw;k z{cOgp0<@rt3Cd_>4kQHeQS>YlU()H0rj^KwMzKopVm)9~n4ZW6AL+VE1L8nzEUM2b zGcNjOlPDX__xt{$wCKT4Y6)NX^BQN{1_r(spC}fCQ?N=cU)Rzbsv&D7w`A zNsU_9H(FU)mS@HHk;F;PQ))JcH%SHb#S!J&29GwD+oN^qV2YBm4T(p;RSrKp`B6PT znqBGqiS9OiHCc%*H*p}sk8TXyr8ZTIs2NORPH`J3ibQ5``?7sHTdvW5wS6cybn-s|Tj zJj3)5iLF#zccI=uX4r7Tedf9Ja++%gYkdDxQ2x#1^9qm~G)GqDo0BU$6|}jV@wk|g z6=5Lw7fVs~jO`aqS|%8@O(00b>C)-;fo?;WVAr8*v`apGxIxu@rH|v}kOL&z9SS zHImfnkeTtR%WHtTnWoi5LIcZ>uIP1-ctHC8LSi;k*pwIT3_Vfo?CYcf*{*xOLp`rf z_fAnS#nJLvdaLIqp|ZWdboot{yub&mi0NY(7RKmLa`cNEi8R9>f6lvyxCb!F%ZoiA zEoAnznw}`$;pCs*4_=ffilt^Y3^9GASW(5W>d7^G?{PaH_*M)3=Gm$=kq1`(5|Lu1fI-wHYy`Pm7=4ER)icZe*#Gwu)L{ zfmWD5ZKm`uV>mByt`g$xuC7dLgB1nIzT46};x|GMw_%4slpQg1)i0pOv1me01SP&l z4!O_L=*mMs)Fv1g`xKth^zL+Icw+AP?cS;-C-s#t3e{-p;_2#Se5&kg8r=Z{=VbWc z^TUqb$1oA394jj2ihxYAj)k-QN~Q!suBN7)j2u zfVh%ZQ6EH{f@cgAr?Ug@+GV$T%JFSU)zjHCP%>jHSffjP>@=ji!cL$@2 z1-~(i6eG~c6%eFZ>rXj7YP0mipErcSl|K65gVfcZ=tM32B^N>l%0xJvv->U^G;{@3 zMFr!av_mNKSzl02XJA={FUTl!1ffTldL|p!M+b1{qC35I({r+`y1|K{50CivK}>|U zSjNYMX_COIyVXkkt&zvye?VC$ ziBtmhkI7ZQ4e#*wSX~#Kw05X!vsd#!eV=iyDo-49*~V$$^l)5>;$kVvE{dIp-Imf( zC|cWh7RVr8uT}S$GytB(Jx+Jn`rPMx7tCQtF%8VwuV^M8pq}=JxuG9TONfa&3LOpr zKG>tAa7R#}^b-gFb5rMq#fg+VP3(LiHX2})NUpxvqJVw0Fb4zBCHpquc{Lig2DqjZ zNyd`tc%9Ngv>KTGP3(=%1a_X5|@1uBS_`N_^wlp6mC+*(}gzAQX$ohY~y* zvv&q$G;n*41$VbQhbQ`_(0lx1ZQCnC(6O?Py$*+iI3a6AQCef>G*1T}v2-c2$;7?7k|zzU6Any0T--dCF-h+mGn#9}%{% zVQ@dW79PFbHPImC9#ACVjBwq0>(YwtR+ma_#Ip@645mh9j9-}88ae4G?k7`>dg!gz z$gB>{vl*t5ppoi6XXP($1Gfuan765u6|t)tBPm=^*qr@ZN_rsiOkesy^3wPZ`sp>< zA``Zaz0g8-;(KFbulwT2Tzyo>a9<0R@x#F0Vids&IjD3dQ+Yq=)}*(wtZx*tpu)5J z8evNAuht(DH+lWxhBzZ9pItV6!lSV)Qqgl|N1?K$Y1hs|(m_tt6H1oDoUkvdG6*o* zauk1SeWUHZhN}L!7eIZ|;+qfPoTq^vufq3c<3e%0L6?sNVgVd^O?{Oqyq`FCB}rU~ z-`7^X%_Ky7En1nh-Eh}+^fq@+n{nb!oHMv*$mG2QmqfR(Proh>09j22USiTHO?d}+ z@;_-R=J8~?c1j&nYf#Gq(?EB|om=8E5x7GgW*X(>k+YH16{Qz_qLgy(Dkr!w4c=GTn+BU6kH5{(XPwR#+x0+^Y+?7Z%8c-<2_9Gly{% z4^U6mHp`Bvfjh3sknXf?>?~|8>Le35nlX{Gp;Pay2ibCtMLDQaJ?$=+EyJB-pyfx@ zeJe9gcImpr*w0aio+u?8|CW8fnSi00jAG86eJwTVX)OO^_xX;(rv?KiXkPaF5^SJP zlCoe4bdY7Ecg}fMi?rZ`THC4ZPOzVK&#q`8B^tXlub!58#wa6j5HL?{RCc{@M68*n zXkELrKui?VL)-C?@voGGjt zN=Y8@S`aMeVnyGn;$5{J@Awj}7faGR2|xi*!8gpt9KFSmEd(s{Dj^jm&JCC_#1>+TK;%&L><6U8(e ztT$2;-b4{^H<$vAy&yO!f-7rz+dBdgG|18Q^j)p8S z4LT)S9TkuuSs6Yuoqz|-U2#d>W_>eo9GfCCKK*j|@kV&i7CBN51UrJ#F)~qXO{mJ# zDgi}{Uf{GryO&sP8;K;51#`T*8EMWbecf{wU<=sjoK9wD{jB@m@iNobfd?w1<15m| zm>7mntFUUwRLcHrMTW3}VPOXfbg%{%*QL&~HUS~&@eQPx>BA-3& zO| z&dnMJwm2l*d9PAoPZ~+Lv$|FrBk`269DQ_^W!A@UJ@Wk|`LKMDDkhwny5CoSqM%%1 zwfNTLn@(O_>sCCLg)=EuPP*wJb6i?nfi&B>^#NgAIPM^vd)L^j@7}SHKts0CHO z+0cQ(m_9xBTbWLY#E6SF%Vq!oSyTl~OZ^6(m)Sy|LW*4G2yj*>_*Qr4(|)i)?yn^_ zrzPf!J}XFPfac*-$N98=u$VhmefyGU(#Un>dj=D@Rx~bs8LCyqi3LCs*#ss?w^$hsvWsSdSQgjRWKm^pT}tIyru>9G&?!uKT_emdHThHJnaN_dt$m_Z-=hiCZ4tF%O>@F zQ3XQ@WpIUUHaa=h=e046`bdStOO;oTllJ+BNZ*)Le{xO+&Ljy;^3~|{U~Dd}Tpr%7 zu+2OOSqx-pZMr_Yo$au`Yc|Z@Y11l|8D4s@7|Ms^ptk)q$g|C!v0>#yN`Dk28_zmf zPdF~|EORVle-v(O0kL2BsUwMr>Q!TfrPHyb!-?ZFGZRs&HYk$p4;mc%QGYH1oDvW~z8v<)bR^MquJqwYLxa{RI!7@f%quE)#eyL|69F~63?9=RH#LuPo##xHz(;AohOU{=Sye%qV~vH!@H!s>#}8bq;$S4v$Q2=w$=Q)O6~5@Hi>_v z5m-3S`U02TSLgFbY>#4CN`>J};U{S~t$?uE+3=QQH6xgjV3S9XvjxcMaJ6hn=du)E zE8L@DaYca0@;%RD7Nr0mrK7EM@{6aE^s)+XB!X?!*F0D8yoGMG;1ip!?12;pXaz^x z?&oZE+*#o-Xt6Z)_g7lhkCsWoja_=BsY_((2Hfu$=dmRSS4)1hw~t!zFjW)FjEhug zB<8%IY#!zxAEFLPW=y)$q1r9c8*oRBjw^8C?TQQ2<-7$(kL9K>Sq%-_Kmw=~?O8P8 z=f*U_5g&q(vCe6sdHv|RNAs@T2ES7V-(4l*T~km8i^DF_^^xxc!Oa&M>-c5l&~9 z^uziOGIVHrI!Sk>A1F#U)oehXHB0j2Z!=`-I?p3jeAwmhf4~fydRSDCPbl1sni&DE zdYzLPa5QD9>Qlf+tec%rrBdP)Jg~a|0Ml}_{oNs40rgDhhRkj$GE&u#2qSW?7<6o^?nJUrL#YC?9Ort** zwuhN2=b$xtZ7Rg^oPc=@uxwH@Wf~iHc;ruZcP}K0%I**2NuJk``yual8WuWX1ecND z+tDgP)s!cSM^3MK{xOEKsHi<)E`bMv`bTC^@A*}BR)QS0x*L~nOjq0?aD_UTh(kor zVvlT(9{uAT|7xYoO;Q}gDDKg^{nI~7Sto(i!4eCLLT3pPm|X+XZlAzpSSs(V=mEU` zwdKswl-t2ggQ+_W{}v(p6*XIDJsiBCM7Xzm^}ntmOO*EQq^n`#@lMZ!0^X*uH1fR-+%rLz#mUE>J|Bh-_Yg?7(uR9d#t-)=3Wlv0jfu0s0U2b@o`&5*{N7oU zrD6h_??|&#_eWd$k5JahBROS!??cv~J)bOQ&U^N#$VUjW@VK=5cyJrWfcDB4JLMQ-f8pDd!! z4M8B*U0EbuRFeEZJQlk`be^w;Q5T3xih1;9cpiD?{Qmb}rp+jZbUK&AruVNm7OH$c;b80IutLujha8(iC0`moZ5VnZLRne~QBPhk@(jwkyv5eP{l8c=Stx0hoKI z?!xa!{GU5GNDW*U+Z}g~|KO#$G%Qe=$S)@a{<=s1Xq)6ka9v?33x8_=U%g3E8{FDQ zaZdj|by+gS|Yy41cx)&KSB-;If^N8r|KXM3prxnKUG36a#`y57vn{Rc1o zzae|{|Ay@G{~NMr9{%4d`+uwK?f);WvW%IKfqGRmP z?P;@Xw)2MF!(sa+ z+{CgDd;k|*Oi3$Q;oC%=;Q^$M@Hf`Sy6)j83#?QpPe}AC6q-}4Cr|7m@bEMI%*$a5 za9?)f>%aegN=zJ0rspO@-ZziCn79yw$NgTk@XtXJ#K~>p zvJ|$!=`L2s{l`cA)e!GjK6;|~WHAvJgU|bqKG@M^%!*FU`}#k>@Ar>(!Dy{&^*m5m z+yDBvjj#e;af^@h7XALK|Jm`1YQGxM$sVyB_IKkM%%))b;02QJ z590gZ4d?sR4Zt62xj0ldnUiRCyaFv}p9IVBZPO4eI`fR4Yy81*)7}R_U}GUuy}Hz) zUc)x11_Ii|cQJkUC=fFwuXG8P+%+IGV%h-n%hY#~r0c0mDzn0I!{n)lI5$DFX`RNw>-E_nhqVEVgw%G~iFGC9QoTGReZEVbCzs2!t-$Kurp>9iMFVXgYGD%}km1PiBy-2R{YhUobZ`7y|JZR5C2X znA|Ws8m)9WsXYJ(EAaCLyMQIoqLug+*K;ib`QjwFkRER<5X7b>=iqzeU*R*UPfrJt@_N528K;x)rxe)2m6ewX_nUbSQh)^ts|N4KcaHz=u%9IID|rZL zBAbtPo{;GI1+fqV6*fZJnM{NVL2(1iukY?y#@t|fROTR&xs6jkNXC=1>NCIeqGhlF zz>RH2y=abj#Bs71{0aO_jx|*i7hg^g(}7R@7tXETx$2ui;P=6ax^~M6M$hAE{>!zN zK)vi-CW*;6G_nj~>htboENR@luhixDz4B3f4PvpZv+(lm&vPXC`lV_U1)ZCLG$uqDr1z4qF-sYos@b519QaNyL;&RHyX^do z>BEhIld#_|`gNoc4V;%!vChB?|0ThHL zyMkd%kta-Wq%%sv(Ah;hdDka!wcDKJc7CsB!#N0~fr*U*h`8{nCNew+$OVeq3B3VN zwj#Onfcy}Xa&`UftynTG<{TM_gab;NY-aNS@gB(mt=>_Nnr~Sx>Rf?mnC?G(-Qrkg z3UpnTvD(rCN@JCs9=6+`bm6DTxSXVmlaG(ky{mOZ2U-i2?PCx2%^_rlp{n!QIm7=N zPXR>}DIw&lvMC6$b5KL^-T&Ti|LH||C(xfUA?Nf~BKX|3Yh7_2YQA4UuuVA=n{sCe z8UTChg0M4Xg-*W^?QDlB5t5ZUq2P*f5deV1d$8v*xZN%a|BMsbQ`w*egh4jnndd-G zf^65I6+v3~EZ5@XiX`Zrk)PGr$Qf-C2s}Ah9k5Yg?pVgP`kc+VK|Bp4hwiXr$WcRz zduJRJRVT>hB0LoM?X?b6@?N9u0Q%8e>HN#30rBS=hpWC5@y%R13acLilH(2T3%HD1 z-$iN%k@ziK99>L3M{Ag%`fpxb;agu9mJVKc6BhmN%U6(FQ29j4`w?LNu~WbJh1CM- zZbf!BYATFhdq6Ai^~p@P{-OerS1IWmwR&xdq|p=(XbD*8cKH2g7i_G>uNt~8j{^db z%-&DK=AZ718;!Lo0#$wNl%ryE$ zqX*9$2I%nL3|xAzRA&g3_DYXD1u7j8tZdg4i5sZKt?^Xl+2rdXRtI^wIP5-_|l%gd;rixT}M6}ng>b+fZVg7+V^1j-r3t# z_lvw_`g}o>^4a{}V4U=R8*|f3QE7*v(l7H9=V}e~8mdw3;|`e}O62<8mOV-0_jv9J zG6yrB;;(E8G` zA*V*08_Dpl-ED(ic^<|Baj~#@Y6-0Yx*q{Dn{foGG33@Qj3RT3x~z)ZU4{Dx5tM^Q zR*@@P%?FAHEj=gAPvpxg>3}jVbyty`y_*n{Y*cNvW=Jqt-3xBG?0}@c(tJi5o>UqI zD=S5GYUPw~Bo4w=*4My=n;F_pF7O<;ynk#{-0|s#YABs{W*5q%MBgyxYk&%8OKqf% zWu+7bDgoq&bd&YieJ2}^{BZJq72jDjcENuFa%sR~Gguh~hZtjU(0Y(+D&jj>Z%vM(_h`_9<6 zv3t*P-PirR*IixR&%f{I{l}*me&_EzkK;Ix<$HXOl1Tsql~53M6EjW^xhgxxe6zK! zxrBiZ!#4fC8!zm3UCP2*o6m!vs+cEajSDsPC=atsGK$7HGJ1oX!+{sMk-_VA)f05Y za%1jImXK0jc?Pj5VHGcev#+c_6I*K*2*^ru z&z5@t0n)2Fif>W(D`Bk*V=~;RT&clxz;Srh`qcWUt&lj=@~x+G|+IT`jA z#b6T~vy11YI0zsyZN&kEc=f9r*3F`;puO-$ds>mUvA#PlLo#eUe~+)#1y6QU?e&u$ zp7v-N$r?dS3X}u=@R2yUeb=`6$H$*E5nD~APSMJX9b>6%9f*rm!dv8Vjcu8y5vo$6 z6y6W2z~ARF$%1#l*lJanj zJSWgr0j;EX;D>3%GmB>=rm3=NQ&xMkS;?(oVfiIb$Kxp*&-GY?4&QAJJVexJaiOq- z<{ipblZ1KTWk~zeV?5SyVl=%+^Q3#L=(MJD=NW=ia z@&W9vwQ#{!jR`6fGCm?+9@Qr;dGg*j*#$BsM?8o0j0;^8UZfSRnUs`zS*@pY8NupLr)NJ=z77bu=Q{fc0i+GS$fQ0MNxLb+@T`N)0&}Fn_elv4_XQ zhJx)(6<;9r0N{p-^`fpxcs9A5CO?Nbj$dp80QL~&f>g9K%jY2qt;g-@_7|ebDJ&*W ziuJeOw*Yj9t;Zn}Cm(O`>+Ug}g}?t^BN~b6p-ntLV_xm%1S}}bx}y=cK!%t_$@ScC z<7-@s#&=F~dnc#Y2#T*R*!q;UG!lP|IFQI^jM8m@_FFy~x6w$E{L}NPR|1g41XA{a zM@wzMKV|<202NWrSW<-U+oAa82uX*DhCOPc$(WWMGg3SG0V0 zzBE|4FQ*fD?1wcww51r=fGe!`|kZ^vJ4(1@yh3+v_R zmb2yjnN5k4kz_@XlGC^)XoqpRlxI2Jn9S_@(2dIcY;H(sDc`I9SwQI4qfAIz`qjx> zS7Q~8Z##>r$KUU4Wv$fiRBv$&Yvbqj#LlnYN?$>4gM>XiIwVRV@2RFwpG=hV|g9-S@i0s z#VifZl)cYvI4O&0u@64CNEyABC~!V|OFQ--=AKVGfI_Urypgr|qRC zrC2k&!i${j9+vc8Dx#B}1Xr2q*h|==2H(@Q`&Pj-W<-|#Csn%cS0@y2HA90ko!2E^ zSL*nbsB+xfJX>|>R46{3h_b{yaToDWIcq){V>MMhgG2?)#T2 z5)KgWoIK;4KS|1O)>oHb;)vNdc;w46S<_XwH*im&MzpMVOe&*|dYHYk?(yfKK(^XY zyFG)Hou}P0wc$atMud+Q#6FAmKAx$xHch9CKY>pidMuRp(i097#d1k`{iXc%V=x$K6=X-m4H29d=GZyM0W8(>ds1?*520FAQ%KIGM z!!xX#sJioX)a`xRR+0OA-MQXWOjE_paCr+p*dBp6GpH5riYOZ|0h9C^0SWzU@wK;VQQ7o)E4x=(PK~YAhMt#b8xfSJ zt3N-i>7QYR!}Cw!qcN1_79d1;&>d@8OQrKMJ4Ic0IYPWvrsNVdqV{?NkF{ptq^m>; z5sN4lsYsnMEAPV;!!z}6m0MC0^_44SLMmN~L$@xzK^9&nnXDzvHfEh3-S28;2v)22 zRV2-0g+hlQ#QpygGI=0ml21;0B?CU+^7?yXJ8z}0%n~SZB`pU^`sNI!*Bw9bdlT)( zxp|Uvm(|zDb2&h^pCgQF`sSG1!O1%w?^oz6z6Ty28#ht3)u3h9JLtG5&5JQ|60DHy zlE0hdM85oJX~;?UXRV+oBZ<-QZ`aj>6zwfG#G~2I?BntEx>5B`rK)sm=NuFjfjOa3}QE!Zq_ls$_IFL0nXrXOFj_}NN&+|;2OVUN8+6OEOU?<2^zjY zk!!CXY{YEca{ck*lG6>*Vd<_xDy8nMr6#YVP_0ZcwNI-4_=e;96oS@ zNCea;u+pm4vP2(F^-B{t(MlB1vyCc*F*4|oIytz5;GeK60%O@ijv#$Q8fiT4Y9`kH zdU{(@ULkD#L0Xz#KVRC`TCMv%hFe;13h$4JC%zL*%zj4TtI2YQjXzk@^W>K(4mthw~s~cTG=c z++ELJuQZ>EX8YUA8}c`^(q?s$TYYpTQgYP_?K)PTl}nz};%-{EHdA}gAc8JSEuJDc zan4@q^2d;nl-CZ2d3^6~?CY9b;FRXF;5wK;dyii+K9ql>&2)L>aAoR&V3S{r?$V5MYi z$?s8ZAPU-N4Y&%#5ci$gkd&$te1~UN?8_$~vobihjNho@IDw9QuUbr3EC8Ayvu9~8 zwJ5t>pktA$V(*mSp!6Pojs41xo5c?4q!=7!JhP26EnqBf1HR9W ze|D{sGzJtFM@3;QmxQ1OKV++SkTSq`V)ZRKW;pN3ZCw@qMF+qLwS^ez$Ca2hSZ&zY;u)48#cYe$8jL43(J`Tk!_x6FPcBqh#h?(CT*A_--xc z5j$!2Z06b{YJV(fgg9cDvEOL4wzo6lLz$(Fn8jO1A4+Iz?@R#t%h@~iMhe-Uy%)@L zk5c*Fd|i5WEl(qBuUrZZ$-fl&#>m8_UmSS}DiE;I56jix0lJ;C&5GxCcT1r!#6^pJ+l-K?U3sC}AFu6^fuu#M0_t+Vt<+wH-$cu2mif0nXRw@@M5t zrWni)n)B-#B(i&pitoz{x0-${1qa`P(pCp1um4lgX$)}2urg2zOZfhja1|-YzSzxP zhBiI=ZYp-&pIBTRWfqD7^E9NY8dSAp5&j*hY9BC!RP(vs_UXRExQDGsd^XA(1(oflT9ZJ{q2g=Qrr z_wKjeSpXD5LWlLFVL_9kfj-w`_QzkStJZE`0QcRJa$8|x5fwD7wNZK{K-~)TfZ1so zF(va3tt#;)CZ~e{^(Wc9{1Gt&dUhGp(8dS-ba0S%WL85K^x{30@;wXBq}76Er9N#8 zAU@(WHP=P{X$t2mkP(YMpxIg=3^eKMr_UYWvqNX!hS%l6K_{i(xhKKz(@d__)!v^^ zWPoOMHBl)XUrikJIo$W_n6QAoa4VHO5v`W=)~zG9G`F|28vvND?Y7jVA`a)Qddd6x!*zZMB!lZfo~2&*BRl<`@R#_|XWZkgN|$KhuyJkO zFtuiA-qm)-KW*N420l%EwdnRpg3y#=ih`Y0?MUes#fSVP34Fd@i(+i?45IIFJ?xzO zb$q@qkf{ywV=XP^pTgh3x(YdaULl%)$Slmqs z6&}~STS1^&dI-Y1AQpyBR`ZbVk7EnwA^Xg{DL>LSQ6l~%jCfV=~ zO?wz=?to-pOjuoLTb9;onrr#r)s<>vRx$YQ}CT6C>~6on-^Gro6^kXrY(q)Qm4weXatSJ0GBrJ9biQQh7EE=}!x`h!w&@1b1p zjU26vnl2TMYZ`6aZzuaHp#>5PLmo?H0rU=co&W-YOzD+xhsmJuwbz^L-br$*5C8!2 z`RXU%!AA+#sION!!RvT64_0m)M+%t=c5Xj=s}m4mZgovIS7(a#6_{vzXQ zyB`|SVHWwtMinp(*whuhL7YT{iOs#Q-hlUNgBniuYPp0D$ljlj7te%q`NM`{u$EB6 zAnTE8KQP#@@V1>mvuO0Ala#|;LrKm(x>{5hy58i2Nf#}$mGVhv_nP zqUEIlIXN;~s=Kq--?VnOthIlPa;_2- zFs4*HJ}|>48b^d0E9%M5&${Dh^cZlnN!8~y^D)p3bM=up=EoEv2`3+Idt{%yPAHzZ z>EE#vER@V|syNAg$?7fnEi0_oSRiou;QIzF)1$WGg`Wu$)!!;%GG!|Mm6A{d2E7V3 zYaf|J)I|omd)smW4WQN<1z#3LMZi_R+igY%=0*lD3Y|ggwfBW-O%~5-YNAo+J>oA+ zuB~AwK5m$zOibm@dQF4$O0YO)-8Zup1XWzW83Wh7>(~G9h*-bmV!ReQi;(lZ{5>MS)}+E2pG8 z)AFV~4vOvSt#8AfiNrv~O9v`ZWnHK#!f<`&b!V?h0rq^qH%MgV)#?H4 zY3@Qb(;NKBZ{BR~1%J1!4KGSK-KE}${aB#lJ&=y=y7{z5^B&DI;5wgjTV?pwCVaIaHN6{!bbEo!^>F14nLd0|bN`z~J{DJPPd^S)> zG3(x0xe2mY^LKXwt~a%Sn&3k)J0PdI_Ukw9{QzxO67-(`b3++?fpzb}Hh0DFTas5k z^XVC3TgFK~MEyS^1^jx5=0M`>5b#EvVNZJU$W#NW;I`hOaGcHns$T=V6x)J~^8Oux=+shH)D>Um zmv?e`shX->z9*=S*3sDpCv2OmD7I4e*Sd9&2R*O_OiwEhML-ckQQ^JzMUIj#b36Tu zB2>bL1H)rjsl^IH{45wFB4?{-`nlz+ia{OqE6z4SEZ5u4z2^p1%YhdE$Dz|s-<=O` zeLK9QRy3O#uWfKu+va`w@;3%CO}qVg{8{hbI++xD;m{;v+kDMwu5nAE7zFw0n7Jk# z4iMklfmvQ!QkPi-sstdg+FA0>@D5KydTNk|_khJW7(&2^m7J&8{MJjgA?Y-V5YRbz zu_=tYSjV$@pv!6G4n%V4%PKIavl3%YH^y*0-LN3tQw+=aQDjck<+(EP|Ejd!^#F87 z1oo@b$llHfo?O0|_ABvLZw}vZ^E4T|d#sXtet$oWv&qR7sJ0{+d+{(U(dAUL*LQ6J zl#NmY`Ukh>n4dc!7rJ#+_KE=&03tr3U<+0wJQiZ@oZ;-6DNg)6w4fps%4MNiO^K@j zrUh%S{3^Vrh&JstP3k7Tc$9y~l?Yufnl^LwAw8WRgXveAyVMYc=Aatq0kf5h0#oHG z3RC#h@Ai9j`PFVqqJ_w+3Q(n6m7^s?(7;jnnj~N#OYMOao$QD4%$%-J@vRm*Q8O>$ z{|fKSXiJkYILv&FaM?4u;376HHZ3P#lIfq(D5Q4=F?;Mwk-?NRFDwL9EOH*``%ZJ< z?!_*zPlru|?$b4y(!@&l#H_2})lU2ELA85wXI?q>5XP!8hM zhu7`{iaWyE)uGy`&NCT9GO^?Fj?VMXv<9w(DFj~%Kcv6zUfw(Bl?5(=YK&5H~?FX?h1aG&7Pm0)$Cp2O8MA8$<1EY>*!m1#(oaU&3yLFeDxD7 zB5SXgNr>U>MCf@E$8EJoSWt;>X>wYD_RlPo1Lhy%DUPcLZFq>)p&3L~8Dy<~CkliXb^&RP5Wk_LNAh>^H+UZ6y5qjh&20AwVXM8!O} zmQh$T!{jmdiy5y)r#kc3tls+lp>!?pwg{+QLFkQFLbeg4J)-0qO7duX<=5xyBEPXs zqzKYN3wUn+fj&+u)>%?S(^3qETjwO7pL0|NEKtMt7HLpn(;NuQlOmz*y~=qEm;gvG50W!X zQ*84eyl>sz9y50nqvPX@pDT1S=MeIy;Cp%qm?u8Czf!SC5Es2@zHy@Qn$pYGwtD=y zj_j1AjZaY7p6=HcMQu=Yauvu+#4nEzbrgQ{?>dEV{ zXj?lS&G=}2FO^!;R?N*_eTvCp??I*YeIMo$cX8_CE4su96Hn|LK_x zw9Pmj_E?|7cpX10EP07{x4|QW#oJ@E&y?yVVI-gTMz_uy`6X!Bl|n|~qiQuU#3Y|9W%$x1c*)(2WG} zZr1f5cXR$7C;tMq=ymUCm%|u3z3G1p6#kAunfVj@RI%{Z+2;o{`1g;hrGy=6G%ioJ zKkT=CJ{6#G27vC0844D2e^l4MuY8^FC=!x#xwC8k;|2QntPLO}J3^o#jeGWghuQU$ z0u4+6FIi7+A^qDfs&%2GMGUz#msb7g*Z+Ob+v|_;lDoYu3-v$4f&CA>2f$5-{#*nm zR2Qf7_jmb^{RRKsd3%&(VG>W@7y0cXFn@wJF?`qq&cAQy58@=l^r!q72NW{>wm-=| z{%8@l;%0+}zm=c=FU0?n?*FwAQXu>L95&p&e`A+1UBchX8gJa_i3n43&xBr5`2J@+l>YuplOK;4Eo z4F6U$@n#1QI)XVdzwg1*|5GVUN#bpP-(47ar1CKg)KWiI;QmufoMMlJH-^EgGW>UT zhePdX75XmFt%Toxw%zo|Te$?^zpN%HOn8P--}WWIv#3tsGrk96pDW@e?B295R7_0$I(XJk3MTzW)XrK0`@p zVP0V%^v*d*Q2SJ}p-Ij46je_#>D#u{Z==0@vkct1_cjg`zF3Eae3K3xb>1$v#3z`% zO}0M%lVG)fA?Bd)9?_+q_9$ta!aiR>8^8mW^2*T3#5`r#)a5dmZ4;??#ZqfD887`A zJUafl?B{@gk|>#_v#71sfY03&Qj9$i`&he~R>)>(q6_bCQT0j;l)d~;n2G!?Q zY;VV9$xC?Hf7kf0$oBrcRb+C{ZPk?ckmpvd8Hkuxw5L_-G5v}7QnOP z)@>X1xxfXH}ptJRq@^+XbxVpG%ozc@CT$3XpEqd#I6?t%Vc2Ym&Q&yQiENnD>V(|y0U zQqOXR>B8qv^Hr_pxC$}my=6f7+J1&*pc1lahGb;FZsTxLXU|b)Yu<{*(;_u#xTM-R zyPo0J;?En*AL2*uf;1obcwNY8JVyAfW2>mvYydEA`^!p8$C>)T+bi7wt|pH(zm%KH z=g6}vC|4QOM(r%ixEn;6k!X0W(bsMU-gkZG<3dGe;U~e$&6=J z+>B%{NnC#hb2$(Ro=I0Z({g$Ftz~pN=BHOriYOr%&+Q_z@|E%n$Rftu+5vDpDZryT zzXdaVECaV~CwVuLWYLjvO)ZY#_5y&C?W)J9%6j za_$s&?@W0mi4U0Ymqgrqa~Bn{o!F-Ec&e3q+Iz{*%kXe5fwG~w`HUi)dAzWV>*8fW zZtvm(&!7frv#f^Pcv%^1Y+$gMWU;0moxp9Lw{I`UyFMppayL=qk+|mVMYi-ktBQCc zI+ozB(mA)o&z&2>d!FTCRn;ESBoo6-CrpyFFGr9}inVbb=)4-Hq0v|=n7DV6+4mUX ze}0M7GWz=RoCDwY7>l}uj1?435WdSt+R7Ixm0akSDH%*iO@rBmYci;GzWKO`19q+-}A1H%ZKL^ zp)dXc*(&yt3{Mt%br$MT#@^He-EaA<10(GGsI3;aIDS}m1+{r7@Gjs#mxo{SH)>;bbqPGRI1*8+zfy zjjC-F4ZRrzdBZoL@1i+J*$ewAbmtjWab5NwKO?q&Y*Eb#jT&Qe?Yz9aoh zsxJ>%ezHw}1j$r+@0%KJ6IMCb8PsR?QWK;@M90;#tzU zfEVr+JMQ{xS7DepSM%ND?_{fl4{1JDd!Nx|r(;s!!C$ZK+&JBjDY)(3VS(-1sHcEC z_q)fR8p?^PWic>r%rUf*Jw`xuR^~sy_~nz{OP11a1q4Us5n%eIfCHFXKjk&0>~QKV zlzrM!bsc|P-cO0pMCj-8FNnJXZjdX&$e7_3@Z^A)%P8cW_34_b?(2I@^&}ZMf}17w z@-k9}y2ugt#20B4UbL@?bB^b8-JlDm6mqp@jN}SCWqFZG)z*hNJ>}!O8Wg7*N51&0XT@2Q7I6*V4X=gCxi3;jikIo`(O2j?Z>KL2cFKS0 z*4YW@>22+_8_e#l=RMuPM7#V#xNIs}k7%;ce_d-SHGP3H@#+5La{}E`p2It*KZo@= z8uYQvtg{}{h3`6_dg4(Ra^r^2-QCC7dkV+|$+kuD4bf~}HAbncZ>eXb-*0MEQ8Wzt zbTA1Oo@$I&BILKcFLUhy(u}5DYt}IR1v^#%XNj!akYplGX!jn|Wnp!d#+4C}kWBVV z6W4n0*$vlU&A+`rSg^lT2o+V!`b1&N=6q5b`O%nj4_dD9pQmtiGJdP)X1cP%n&XAr zMBSE#DojDU&!i(uYn&QTHqs5$%seAr>QZHZ)GbKze?~?Np%_b;FT79cy~2S@xD-gA zo6PunJ4cZTiYaY4^ps|X6k7Iu)`bX^%}U+WtrQ*6G}P%nyA_AHnP=C{=`dXN$%wBtv2UKonOd+)fVupAjLmOhe=Hrl8B@`$Dz(|4J#d))KLq7L|m=yi@_rWhvo0OX6z zpel$z*1cOU^Gs*x3&D8Bp-SwK5Qo3miOD&OtF2+DJJ$!a@7hqU+9t+w33jbgaEADM zI7!q+dhi&W`$0MI$CBbnWaVxbe`P?g!hK@`vGL~kBHSias zyRDBI(3{w{j;B+hrh-D`iuPYu-&%%*k%?)|8g%)`99g2pS1*3Nnee86lHCq;=QTCQ z3M8K11Ji3GLCO@d$5R(espvZ*mdZ$-ILImk1pmTG1Sz6ILB6-=%?b2HGlTb36|ft3 zyyquUoNVHl0;AbbNDCzQ*`gGeW?yL5j?l;WRtV&=+eoh(GaWZ7RN~5N0deI;nPkLh z;q!c(0vH59F2c4x(qeM1KtxIMilCe>r@5-m`l zAp+A&c7CbN2D4-66SC0SA*NLSYGB(jg8S}5jLQqO#6lS0?u;2)-N+u~a~$<-+=Mo< zO--eil7f&h3b~-oViPrHu+S5m%IO&IFw`TgYOmouC>lM|-x`Y;-O6#dqJ-1qEL|q^ zMKr&^U7Zuh{AjcBV#zGzm!TA+SZp(xkcjPpa~XPVM9mk3X$yCpRRdPy#m&pWetSp@ zK7|335q=I?lwPypRmzA|hI=7Z*7jWW9mUF{*iek`{Ia!rNT(cbQZD*IruZz#aq$=Ojp(-V3BWc%j1yp~5AKRk-Psy;OjWENUkQ zFhM$T$fS)7Jt}M68#3|g`)tl{=B-h?;UdsT~z)G#~iuJGjH z4@Omkj=eBl22RU+&vCK1pLr1{nbjT`b!Thk+l}6`7_O`+w8kK-$-&_CfZ$7fpZi=u z^1cxyrFBOERXm9L%hhXGApKRXwpB-M4aghAj1Gjw4U4-5n!$aF(`eoaw2Q4vScl%x9?M~+F+aDAGBN6VGpug6EvYcFSP1AFGRFT^o9+Uw9$RuZ8_w_ z`7=|~tRZtf(bKtfmy0?#qk^EW^3rpkC#uQT8n(kiTyoySwEdXR z3*NMqn9}bdu+qmb_cun{Zo%&8bXVna%Y^pKdn3&PH9Nd3eI6n-QW;8ewdx^Jq)x$|)jAr2*kbjpfF8jx>jmRn?fwz>?Tg`#^#ST*hqD)YNG#=C3pYzPYj)0a zqZqTWnun@rm!bUWC709T)?||}1fQx`1e&Ah?K1zsokDP*Ts)M2zq)%+bz%~wow^Gx z&_52-hhU`oE?~6n8T;mYU470RMF+ciW;HlNrv(@!tu$5JxW3z~@1y1;=X( z)`>mho{1K?OIiJTT%Wlcik9jV!yzVb7lA@7nW<@(J;-uBRLOE>N>AO;de~K0e;$hN zxY_`3lPk&>`RaI&s#~G*7hd)l@yC95(15-Q%G#phI=Ke=U~(QMjg%)Un2!2XTU{^> ztEBrn$AQUwxF%tgB+7fKsdja)Ic%~`{ata^#liS8)|m@CQB*wdA95OgOyK+(Gkv^^CZ$_ zTGWTiIf-rGeJkV^p6YljXVLm-XVHQaux?YBK4DV+Vz?e=C+?|g2N{SQ7}fcd1gVzR ze%!mYhx4U$5$6mTA0cWg{n9%J+8uja(?e9~tkApRAvBjS>J8f!;zX0;m|pV*rIDbetxqYxvgvM( zXli$A1~>>_WhDhB6l>in|) z?Wy9?Uu~RR+#jDdT1&xs-UCj*GLNu2+>)e+ByC8 zEjq@f?Hm?nV&~N|TaiB8q43omb#2G(`87zMVvlX#l@_`l*Gz$2otzg5p1a3szXqsK zmedt39PWxG);X(+uPl?Rv(49Y=CW ze_gm>yR8?d*s$-qXQqZgA}I0F=2&O455z^z+t^v7tlAO z8xJ0~i5S#4>oPQoWhz>>9{j@7DX#|bJ1#t?$d6&VHIWNHx6RMmQ>L1T)7XxIQLosh zQ;i3U)1i@ae^XFdL}#!RVW4lRiEb=)u*@Jsz-f1+$A|1Q*T|Rj+`F?K#%a7JX74V& zf@@fF^P{{S#?Hj9_B}2CQg?_I%Zl^dsB2lBL0RN4XHB{d%T;c7)sQqu`jg1pY%V;; zr$l7`vi5c7p#cj96PQkfy)`>SMk;R2@I-?1`}*Wqt|G|;DdcSOVJ1xN@zkAEK?Ix- z6{dX*GU1hTVmQnE7-L^0nrZa`M+M~ctDsW|{RnA6ipGbuzG3a&x|e*~UOjK4aSLf^ zYwE#j_G_r8*Cfr&j*TC-M-Cl#(ziUF45tW7(9Fm74_)N+NgZ{_x{}H~oO!Bv)5npJ zUl~1yyuMeJHKkbeGS>C8KP<icBiLmF6=^F&v}|0tXTkF9fXS9bm_tF ze_nd^3qSKLlOHz(*}zv%&k92$oK>EDJ*UtBy3VMRBOId@+12`I-SB zxKd>y=)ipTwRo$jvdYZ&N@%jFg+I)d%rduCH_EA~kTYL4YY%x5W+!gJfj(m(VdUuy>_zU4}H~vIP~|$l~ag? zJyUyNnDV9Ce-R8-5>j5d_c~QJK#aWtfY>Jjxezaxh(#b7=ic9|aV~7%nL3x-v?|>r zp1Ps@cs(j9Q9OEgE$9qFywHXRPAh!PX;33n^cJ~QWp2Sf&Y5mO!w*y8^X8*n>)-{w#bfqEQvaO)IR_C}SuR;fp?J3{A6hEZ$W3T;=l2x3=RXJ@a#E^0O8Z$_7 zJ}*G_6l(cF-qQ6k_UvDo^X|^UXBIp2kp>#*fT0wawNJ$rX7L;4$n1$-!Iu=tD&ngW z2FZrIS2Um7;Ed78wc_?Q+qP38-Mv0D>oc2!Rfp#ztB~Eo{Z`zIN`;>>+3&bHimN5^ z`z{QiXEi4_TlRg5EC$zb_Wm$P!A_Pkf$m3X_ZzOK>);eY2PgHrTKjO-DFfcngS=g>n}z zrloGAQmyu0_Q#r2SFDvEIP9gS&Mk%8R`D83??~99gWMCD{Y#l5aDABs#k19eK#LX@ z4|8LN->AkMjCg*Gj=rL?SkbZ1Icfm%2TWiJ+@I;1xh!xh8}W#&{c85BrI|>P(H!f7 za#W5=>^=@;${Lp=oE4Yv!2`VyKYykgW8$W07*8fi2z(^o6ZgC~3+B8s^5vU8@)Ed*49W!W#rcFoF+kL`qk263q&Prn=n_XVq*tZUC zU$}nmDScHn`u2v6->UceQ9H7$daLFv5vQ!(LUDWliMtk0u|8q6yvf%NhG>jGT)oQg z(ks|X+r605)X?~b;LsiFGHw1KHDpB3WSu)TmJOO_;)9QWReGh5UnJxmzO3>9*5wS5 zbG+MsF|pJA`HPW_8*i=O-OSN4k4f(!%J&uZF0)E2~JwUj96Q1F4Iv zMCV0On=o_h>zEn#K0tZoN8L8ljdwvBlk+j7ui z7*cROu#%hvQtdqPcEs@vA*cnk(#Kqe2*@pV3Kn@R#z+wG)Ht6x{!IVpMiguq=WXWu z{@4e%uyiLjqYd=Mv|bud$SG1nhnMGb^0&~#i5lHGS{g&BwYi3_Mp2w3H@0}@0-_&( zGyUz+i#u&_=hCJ7S<{O}7J0@qmIJOVs8I2%?6-e;TT$OxN?;aOoAl-ko1U(X;`AWD`X zt{i4omy0PdC>CHA@ID`Vpi!+WzEcT8$t~?~8rIe#MCc^hXCXhgS|Dxdag+I+KNfA~ zb(y#A?YOz_9WULgMSkm{&yuM{=H`QsbG7u!!mjh9kW%hiK3SQWcYu@C`fz-@Ic7Su z)j^e|-o=XjP$a8Lv%~9Jx{v3cliTAVwA*mZ4V1U{oRu4_wY+?sscMc;6s09F?Pz18 zrmlX2TlKZP-NJs#pPA4TkkcojyEZbF(8NRPqyq*nS9M<3$W|B}WshQX@9O!TDlEdShK=8k0)d;kH?S(We z#$~Y)lM${RS!~g%ru}h{*~hB?P4VDRBv`azPDubvs~GcfZs)ZSw~3B6(!^{j`f+YW z!+s+!7gP ze8Y=UjU#CZx%`tt9X`|}Wqxg5Q*@EB$=65v3Pxb{i@x!uhPm}VkP_>9UAc|%@!{@M zuwBhh&K78GAsY;fbglu`^L{5#^Sa8tJZe*HYw%O{9#wAI?igy@(!zF^DjQ}{@Z!e{ z$PlYP{Fet0e&E|i4Du7m#&IP^8eN&9n+tmUC>`Op52(}g5B!)E>7WqmX`bEtNpT{w zJvKvg>%E!Fi(cO!I#>)ZKGNz6v-o5UPp>IrSi_W(IpE%twieE9_Qfg7dEd(NpX@16 zCAGfe>q7~$xPSba#jVl)NdfPubcFv>Jx%!PBD8JC^3}bAbtV1yk`nrlT~-*{mJnyL zg~nd+?mY3uOOaD#*dS#rLmSdqC-Wo7wpnWDULnJN?_A5OU0a{@=6MRUee~ZyZZ{!f zQ417hi-d3dd7m2n;+{DQ%b7%6qQ`>4g8hS#Y@+}i^6W8u;cLoZ%T`B)xUX;D|n$QX_lR7Ht<3jx9k{z z@GxGolKYjR!`GPhc)(|I?6(ig@r5JJBQ35chWtFs`maAUeEKYO_uyQ|O$zWpiVK60 z5e#;f?;%yuIPxe@t{P`HpXvd|pI`AuTd!#VNLCwnt+>{}Bq$GQ{ioRG<`iM&N7jSo z_GMk8-wPG(#a}&Fwf%=h80DTk3tgge;n9-^Yp|91FQtSCE#)KQ)TRL{?h(&Fd=|hL zZ%+L4%O>Mrc8{P#5-`KUR4*Pq$nQ7OzXXb;-afb1+myhAl;n;!mEJpR_}o z7d(fT>M0hFD)`@?IKCLm^Bc)Bs3t>XN!!H}c@9IwUi#iqJLf*=UM0)76P^0{8R>*c zz`+GH+>px(wpz}HQb~H;lK3lo2ds_^8zpMC%Gh-B1qj8drtj7ZadY+!+KWfsH(JT9 zY9ec^eVmBv5x=)=;h5ix--@7~wT)@yYOt&-`PT7j6mThldUf9m8<4Xe!d z>EHvqqYDjfXsYaYJ>;KxhA@?YOo}A{n_lV= zV!n9d-}dN74R|AOwBNJfu;G}NxLZ+Z>q^rb!hGF=(VK8+1{F5-?Pc*}aY>)m)tjB4 zTpUzhF)Vc8^JofmbXGsFm;dWYp1jvRI*R#M2Srt+%b134?l3r})4%I_Q7~1s#H6q8 z)IOzX@UF{WHL*;_%%|vk$#g0^6YrpSk!s*B?>FW1;1Mw<<)3)}L3fx(#Qm0+`&|>$ zWKTXLJ*yY+@HRN6E2z**=RJSv(cl&RylQnOnU5-$Ue%s`$;W|DqANDOj5>OLQ)F|B z)5rCcRP}=rXKT`=&47esXVUy_e|b^=^#i|CXPLp15xx)W*#7$7FL&H;2IvG4xylWd9^WM_Q&vaC9J4*PBs9zy0u8fKiGY5!;y=q5G$6|7iPC z2*FK4ir_MOYft*y4>Okn5ER>KgsaJ8d7u9OVxzazQq1%Ovvi!X=+%cyja5p1_nu-` zb*4`JlW%l%A~NT|3rAf;sq`2!U*N0TKK0kG{Ynx%c|N&~yJQ7?i*wa34aAywy_Pz3 zl*j#tNd55Nl#}4ZI1xdY7(Ji=Rum$uj^t)Lj34n++xNFWaDnAWExs;~aQ${;Q}&M3 zqRA)Hp7{44#xMCP_VNo7!=HiB{;q?Qyhp1zNDJor`wxD00&?J*2K5I%iLKvm_gM~~ zqgAXjnL-JEcQ$7^ZXIdz%h4L0pFQ_)-vbv2eibo?9OM6`m=K}m&QMhTJZ}HLm)2-_ zw2D0i8l7KB(f`Ot;E}oHdGutN>Yo(u^(8`>ux*s<6nA7>)xNGbq?mHpD2ZOI$$#0)n?P!6vt`^=mq>>xrc4r{nO zOWo*4->pc*>-LAkV|HtQ+qS>S9`oy7!qHS`9IM!!Dv*Vg?Js;S^Jw^DMeZMjH!H%} zst$NGq#?`&RR(hdRHH?>FaLrb{Im1v$z#;zPvJH}oD~zZxxjP0%z48tY}SDPbnvcu zQt%TGr0nuoNX&KXCtr<@Eaq?TIN6a58b_0Xgze7#WpW2hiUws`*E;_P;3o(GKcPtT z1fx&n8L8Q=bmYr&H@wI<@YOv2C-q=vAwoPEGu^fxJmIz;xR#!#LZKpCy+jz~+`mkh zH!?@lJ%wp-YKk2k%N zBq!+p!FN7J@E^YBIj|D|nDZN_b{d$^|I2$G5sSb_&hxeKc!8(+R{97c!pjQ9_XdL` zM?0hBeEGC=lm5W{>Mp!+ff>a!Q~cHSf^RY{>|kV2gjTTOdsX$HXCdS`1i>Y_=|a{ z0rjYpC${V|`;y}|+XI(7R3!x-MGss;+?a0Fz5TG+A8LHjv}u_lKRwQ@XNdyNBA8?8 zRvt!Y+*nT$fcTYBGzH7&InEfcCD3l|75*`RH(XTv_ zZMZ~HyDC{PKD-c($$G4~U`Y_`b(btltkN_00kS|KvvI1v;}_cJYY5(Ff5&7-=RP=s zAu+thyRjNW%+&H7*QDgV3QTp>T0JFY^9x0Gx4Uxcy%;QS)xBS@+`cUQz6+Jx96nW~ zvCib91EHfeZWNXc2>q4Wwx?o7g>td8=P=`6$NW#Jxc{|>dg^ggM6&5OztYMTlw(&= zZ-JBHIsWL@khFKFuV=o){LggB6GXXQmcpk&^F8J|FHMo zK~1+?-|sDophyz|0RaI4=_0)=MN|Ytr1vhpNevLCOGlbgMd>B<&_Q}9^Z)@uZy|ID z5X$?*``*v9_c`0W_jAs?^Uj$$Gx>uVAh~k=uCms5eb!pzRI#-n^_XEI$Za#&ypYc5 z=5AlL(vmBxhV6|vEcYe#V+g#V06`b~OyKI!lM6Q3i2=IQrW?OI(e`NxCLEn8fb;oH zd+22K*t*2HhqVT!Wma4-)aSh%RBHbO<$5hsvHrsddyqhWr3LO%2VwQ+REnsx^-S3m zeXlb0{h}%ASaz$)SNYYL!L?2k+Z}4v68*@t|NEBx>%>2V{LyqUbFi|WNd~N1*UQ}w zz*Q>H2!m3ca|sSrYAa3brd*~DVjO3(*1|$mRnfvUh}(2Ex-8)VqQUtMmUI8vBO?@mNlsXzhgkDkF( zi^eMD#e+X|)Lww36xzA^l;MfB&NnV42A zx`eEESMn?AuYJiC8Q%*Y10tK>Qxed>*#dvyoKpaEj@e6ho4MQr+<%HSEhhPGiD&X= z!cP~Gk-6+Lkwfn*{L!IE=f!r*uccb~@m#Uu#YXSK7Yzijr>t8Oe6$yBNYt!K%%UpR za5x*ApH|woO@MAg!_~L61GcA-POZ|m)C7?hsg#KWwYM?p5IL#5CPFL%HKrG0K4@Q zAULIH!a`>PFGVEzzv$!b@soz@$#BK#rB`bb-p|8v$ouGODJMo_gtz4!`*A9Yy^!YFig;tm(m%teM{=?gA-W9mJO&&W$d!na(mglXMV zd8HS5AIlXr&R}HuT~t9oi`WJK5sJLVY|Qv;87sGSCxVai=Y=)*GK@g(WiOW| ztcFc4MsSR5jwJQB=#PaJ^tGbUZ@G|QCxNv|#zt)f=k>^GW)J)fC$**6Lrc*Bx7C}j z{aDG)*b=1w%Zb9r2T5=T!g%EX#NH|-cZJ{l} z7Hr7MCLd=D`7}QhbjL>t08Um)Z#w4R!C1lHeX&tnwyn77b?R|Eih|m6HdUZCWZ-2` zlcddsXM<3I#tGtECk^GpTEi!&Ohe_94Gso^RxalsH27NegItPOu8J-Pt&$65?Sgv6 zeq$T_aYYIcRIzK80|}bIty-V?OPiB_)~cSrUH=6B3VP)DIWVV?NqQuBT0$ySf~9=f z$??iIl6A`|FIj;`S1MCgDRLw?+cwcQf87;<5yiz&6fdJgX z5od8)tdqUpAL~g?qC5sF((4oRcPS$4L4_Ka_bjBDc72=-as-VH9*XwowHB^VvX_D? zdx&jp4U(Ft@*n`JJ-}M77{{uV%N=P&jsc2%+LEK~Q&p#LL@>c<=ybvFEeS0|cRIZ{ z%G5*<+6!a)Qex9zeWs7UU4#f!LDxEYHg9{Myw`!9h!+wG4HB30%%MKl!b{;g$i7&& zMr0u>SR-0Ypw3lCE}RYHS@&Bj^GMFtS)Cub2 zox!Bujp^Ny3@Q)Mdn?3CPuI;a7!f8u1#@mqPL!a1oC%R7D_*5lJVwt91cY+WWG{n* z05adIuCp+aHRyVED7eVv#C>W{tgYE79|vkR`wq=asDJU}ijAcoN~5tqK1j0rb4y}Y zCx^wIf&xhcnKuNUJOdR8_Tmsjm!eu%sM;ggh-LG%Wua|7D&`_#?oT4Q$l3rgG66Mr zwnSu-xpuA8u(+A3xi21br&TFP>O?aQ=0z7eVSC|jp9){tu25GB>)<5fG>Sixu&3SZ zbpAyn)5{hp(>4^T$+&rY29YhwE6LLVG|bcdLQKBFHXhC#+yM@SdfOo1p>fX`nqyA< zt|d|XgaxkJ<>&A&=|^h(b`64WJWz0uK;<*<&eEtd-z~rJq__HS_;@e$Xlkqbq{iut z<=Aj;$XI!}xLC#YiW?e#|mkJ|L^&ya=*0#cad1Ts$4(Wo@lMkDXGo zpwIV(TCKjbU9YTBItc4!1YjTu>-=%Odc}(g>i1cnp%n#Otrb?LMYEpsL(@+1-d7gd zwmL1M0-UP#@20r5irG7yPi&GrvD$jp9s$~#We(W)gh<$CEDQG8*Xv@FXA`b_r)H{< zks+5XYl>bN!96Hoxo)IJ*nMS(rEQ)`iO0mF4v&n_L;_S3L(YR=EvVJRQYzUIo()8+w0N*15F*qf-XzlI0 z4$v#PT0z8bU7=Hss9Q}gW1G{Z#^~$SE{pFbpnUwQd05$V4?FPMSZ+O**RCkd+69xs z6V7qyrG9)i9=AeSn}&X^>u}cUzosNtjZRAZ-qSGS7&n5<&hqZHPJ(Vl3D8tN4^iKt z9VxY(Ih6gi=v)6fX2!=r<`!1WTbt6O5Tn{V*fAjc#=5Xx}Q&SP|B zKC+DDJXf_I08iIJ=Rz&j*>@yH%bNs3ZVgWZQOQw3zweXxQ)aw#we@q-4+xFO*8v1v z5RC~EJ#$m(%QCFY9p{RI9u%8cx+>Me+#_-|Aw816y{*p4ayFU{KnC3L8WujB#QLJo zp=KNGcl427=8ZVRwjHP&=v^U5X#WbGzMQsPK_wbOk5+TE?I66kuh7of9Zx1u98;B~h{$R^c>usmYF?+2?|6?V*TFHaCC3l7!B07m0@3d8aY8SUi zvAk?$Q6P#HDeRA+xLVuf!ilkh^`=g%b-ayJh-BAla{(?kM8c2qkPFtFYqyRSI2E{^_@y#Y zHzP+50+QZ6!bYg?QV5`(qgjV|B0XHQ`NG{CuNC~xR?1>W@k_Y2I(gl;eo}{4L)sZ{2-7*)An~GKi1*IVg zLovA&QIR~M`lPnjAo?QIXPw$IkO0*{%^u50X zuSTDh_S@WcBsCH7z#s3wTu&cN)Onhm1*Y_NR6C!<&3{jenyFbXt)Rqvo6z64cTsv% z3a%#Fchmt;!9d{O8wTQ&0X~qxR1C=D%Hpj=X}McHb$u}z)VSCwpz123ss|gqFC6c1 zVM%Bs|IW}_HCeggTc8r9{%4NBL%n>X<0pi(EorcgG^fRrN}1t;M%S!AiC_y4@H@g> zdNbQKnEGPp5}Ay(S(uoR9+6Fyl(%P{FUq5FrE_2>-TIXFw{QXg>K+z(a}luqs3f#lj~=CgxUEd{MKO#nyD4?Krexh1dF zwP2(4EApn?pV51G4uOnOZ*>4>z*+BG)lC2*`XL^IU7+*tn( z)N9a2;Ot6OD#i8pmA}#E=mD*3j}l|pjtzDd&O76r_Y(;*ZwWiTo1*yAAl5#Jdfj}f zn|I$d)8mdiCMb_HJA-?onaVFH77_Bv?&N=~1@LxmY}1QJl?A0eMS&A3BBqxo_b31l zE_hI@_ER3pnL>SDFi5ovIGmR1VzUKFv<=F2z(^*ieC`=BoR*w$riySuLtH9(%xG0N zJ=}lG0X%>8u^Vs$0>_B;JR|lD?YuSxjurExuYUY6<=AiOB%OV@bn+7*NNTNLgIxOa zGV(LkqG?5!Dl0VoP&@Q603Pby6*Zd?^hJq>`1|~#u0=j@z23m?DwVKXB#9!j2Dq)u zZrbI4nTaKh^`pt|R240R2GrZ>)B`BzD+IFwd|9-~+0?-no03c3j$C_-gi7uyTpebX zD8Qe}nrW~$j~}m@5-anQyAH4Azgub9;rw1QWUS^H6n92&^l-=aW`d+nr!Dy)c)Iar zI>|W1xu^Wq*FEcqWXRK#M*i246%yjC3eUXb(AWB9YBIW(^zucGypMJ$9AHNb9a=rL z>Z4v9V*L@7^yHcX@0|$~rlArF93>Ss)8a7U@{rTLR$p%?z#LMv0YS4}a^{nJ`b$*O zV8hgl2+#Skx-8d74Zx4Nm|eM7?P`^?e!^3;S*5lhloJh>f<_)#jzx;}J4?Msp5|@1 zhp~xC5&rgQ;>BfGb)W@~SdUgz>1pJF(mU^AD(_5-m58PDVt_UUY;T49c0vL@Osq*n z)YYUdl+A_r^t0-t=;;2$DdzNB7zI~RmTif)x5k*^)mXa2twWcl{;EjKX~vrd(WTz09Q zO15Fts>kbFG)Q>VZp7MGrD9#hmRVQoCqmP#a_TnyE_tB*Rb2WFJ;ifL5&mhHqqlRe zo&?cc05}Zie6=~msJ8x&`3Oe6?UOy{TpP&dlz+X15=A{Er>2Xj-o)Nln9}f}t3nTez+2RJLkEW0VBQ!kZo``Yn?-dZ7qHXWMYQeD=zP|H6h7*6&QY?gLJ1 zC~mWz^CdPsId-65B?|vKb2{Lynu5KsQj1uy#$w=4utxtP7hzUU<_T4-0cLCx6 z-zhpNw;-D6a&b6Q zN|-)BGqWoeWdFYLWtGNdp2IKbQ{=Ht;=6olDEopumV$^|f;hx+!HF<;D>aT8(2M|( znAW_cN)h3`;HYK>)>AkZPPy#`w<8Q}8LM(twnqs|9jRoInb#mVTP61feo2sgna6{$ zO@};Z0}-a_>CAzA+@BWja4Q9p@(@`YhgN$6*L*ylLIIFi5ZA-K?9s6>8pA~$AEY50 zw52+QeIZ&{iMuMeDy@r$b~WRqEoQ{v2O^7Q*AJ3mzvYW7Md>e{_i4wuhD%hX)`VeA zpZ-j^CpSZ~&N8pgE3p48(zVhRJ(gM=|Yz{}jvbVx1q9|Hc+a3jQ5i?6v+U zTU<3Uk&SK$Upz+faF<^!MbI|XcI;@Nqe|UF19X~L8m;=&ArHK zXyuzPibccx8UUD`zONSg&3xRizII!nDuTJZ!N|}ausDYGJ-%h$fY`eqs%f2~wv@oA z(L6T$DG!(QhBRm7aH&s^poQ3F9BJ{7OJ_Rb9@&eX3B8NzLM39!^Sb?dL9WA@pDa}~ zH0!!#zdPK&iC??TTcr;*j?=~TKD=?=Z%8wH#AkiIiKwrSNk3r;TmWBsd9_qX#v1hs zVBP;ppmf=6i`P9v_9ZMSGTG4x*(2F3rm-2$$iwQ^rUQ8E}hCvtM+& z4i#d=&dkG6zLAlasLO0{PDa|Lt)lk+2C4$#w|nSTYqnlln<5ZHkJizv*)nKuDoue^K=qxl`HeVFmK*}l)VMH*qKjyd{LW5FsKu^OL&#PT+(Xm6*1jRI&cb~)^1}i zQ|&t-;>d~E=s4yTLhv&vdMd6`fvNDJ{cuKlfoAQ~^YL#>QPf5RrG5j@a#u#M|T5Pw|y!OCy4!qlP2E>+c$a=ZjbDps%x%H6Mb z_(NR4F|c5|Zgj0gac&x$)3P|!Fx{4yMGv$H)qde;Ew)_gLbJH3LY8bfiY^mK3OV&x z!s{utNV`25^~VJeOY?dDXH@4u;hZn?_P?I4CDaHyJBw&$Pe26{X;AMc<4SC&pn8J9 zE&=j6DU-&;Qf)gRue7RtVnzz|6{*K^Ggp)gsLU?~$g6)opnrqZI)9WUfOz-6z_33D zP)?e}KO>mMkAqFo6o5Q zz7R5vhj^=ZHxaabMtK%xS%y=EOfpCEjcE! zYqxbR%&*s5-nO;EeJd#(WQ1qd2H9pvz^iZHnviM&_0AFZ!*m zcez%;H|zLKBEpjR3~J~HpW2CG--2B~>obtBIQ*5l^LYE{hw1iWVPBv3-~pb>i4T~Ucqn5Wq>GKN#~d#0_3vJ{{{M7u(Ug;{xvt z^W`wZWCEuD#mfET%EgUW7rQhbPV*q8j+%c&hc8mq9v^m&mH$0D%urPWR$d!D9xz>e zxSM)umWAHC@Ac^)nXP|B3Xk;ei`N~34Au;s2uQT$!RMEI^4|ivHy90v0~`75)4k5o zuw5WKhvQWZ$$llKx~YfYiR+z2 zKmXYO7kWwB;#c%9AIzl*`EmCbvdev;(oX*G|CsUG<*oYv1E80?<$o&xTJsqfE>_AH z>OS=!pteWKzsO{(iV*x>%!oLwLV& zwEoMWeQta?1k?k%^C{7Pbp>3G@960zRXa(%5GDCf2KWzO_Q~yEXfNx|_R845yaj;q z{UrW%I{4fT+W)tF@n_9n!272lsmh4o&FbH#(&rb~d)OkJLHrM6`zQYw)%t4)FT_u) zUH;vSZTnrGPZjj-4Bmg6?|=F)-4BX=P_7#Ly_P{Y|p4L8xAuW{`#hZ&zWA94-`m( zsUH#fvOS52`p*pO4~oP-mnl2?`jeHlw>HK`S0u7PU7U|Le|S8eM^6wn#Uv0LPi_Y{ z{mO&jeQ@;K%;w97_aN}+D)CC!B8>7SrbVpN)=x<>Oli0$gQ5!DYx=d&x+Lu+yTx?i z#_0f~*P~12CnyqchUssQ{hvMS8%z$v;EwKY!lb1^j{cYkQ3+u}fVSlvvuwH47A$AJ zLBzdwsC>5U0uFz<=hArhDF1nxroZNPp83&gQ*?iBmXrgHwRQ(V++J+{heD5O)EG9! zI;_F$-T$X(;kN^0nJ8JP1#X5J`Wydr_It|k4w08`OWn>R-=$<-(L~RaYMxr^mhDba zy7^w71bX*1D9ewH)qbv-2R(b5t0r(rcTuBdijMfepFjm33P*Afggq$Peso(XXT-EFh{@EPj-amySDO- zBZaYrcaHTgWKIv{@yvcUWrB#v5ewbmiXwP0=PA?uY}z{`4jH>h`xjf=DfBoeCIr#v zXup1>BC|xpcMMYJY+46i_zo%CkQ%-~_v1~njyuF2^4{hic3OP<#gi;A`lwA?KPQaA z?X4|4EOMn*>gIEaGcmjFZ&Ty;;>NHLx|Pck#j9;s)+WUtMyAHPZ<2aB9%~N5?sKOs zKlp25zfQ;bAs-o^BIedT+vLYAAW+c?hnnbASS{TXvYq4?ST*KxB3Ja>rkRzc&dQU4#?uk1y?CWR>~Tv=OHGe=m->;sT-xOhKC!ci z{-F{l0H);@(pJ)q0492->X)C$#AJg4O6%?pWM3)qEatuHoaw>F@uNlQD+Zb~AYz|w zJafk-LJUdViEX@|eE%oT$Dwlf2*;b+BkPGsIVGAH#w6EIdwxV%BRnpH zS<1r45@6|vt7QY7%}i32^`ppo7d@`HRWo{;+ZaQ>1w5fX~kOBcMRuS8%WsZkW9P|d52BpI9iM*ln+I~7wZW-guVLMsw*xq<1@lt^sFhmwTXX2LZ00|@Q z!JiTaK4SfP3v>;qFr0DoGq6=s#wyIqaO)r6!MS_PS$rVHhmIb3s=)&G2}(?+$MqrBYYiAt8Z2AD{eU zVP?7%#&(_J)Xv_E9n!conqBWQy<3yk?KuNf+d{mbbdJYce4j$jAkl|iYx^Rt7Y2aZN9F_+p^Gt|vtWd( z<*RoY1<|s&+VffT#{#{D>sl+LpEn&`Hfj2@xdrs@i|?QZ*S#fQmD8I&K@}ya{CM^P zmMYQ4K7BS|<7r1Q$Wyb*n5*Ty1yPZAKnIbMrbz;|Hl;VK79#3mCL+CAl#*AEe|)P; zaaXkjj3^HDkHQh5%OVEuf3j%+P9n7yIm(^H`RETfb~9-{KUS*((|svCJNW@Qo2<5co#!7C zdNwRVzu$UpS1Oeh#LqtU6{c~05vV*^jq?AtKUFjf-e;?GYqMd?Yh0S}yPVs)>~5g4 z0ky6a#_Wl{-kqpV7E3Q>&Kha!w8ed`#q8xGf6eb1w)}hAN4UE&&7VfqCl(Sq-Nuvk ze5c(mR{l^2NSXKQK>A~#=a+14U)}lSnW?Gi^8{|aU1;2* zB2az->5b8w(VjZgy*OGRK3-0;Uj({@#d_>5i&TR91mK;;MlCO;RW=%yfr9?@3UG*C zrc#P%+ol1j*pxF&Lg{&<`;Kw;dL1K#3QY|-m!`L^v884`$rCiLTVof(8HIYau8)nH z{p;wjF^^3TAlw0aw?ih{`E5BM_*4r2xt_<%4oa%8P*rl?_ai3mX63-yZF%O%o>1s3 zLRVM^ba+3hQiP*7v7RCP!?`e^CReDayxDQYY)z^7i_Mm6smYX4Lh(l&Rm)xXNff`8 zUWd!DWOrg{GNgS`@1RQ+5?=uiUy`dxrPbq4gOLPKR^=yky$?n`)XM0+wm-h#80U3L z$T&(4ZaUy;JY~dgsJhqJPfh8TSfM7$EEEt>TeI`iI7iM*bX(0GwS zV;%kBI59s^q{nzLH`D z5q4#)HM1Wsz$^%8!h`lVWXbu_DK*ZOV}-?~F+S+>us6%-p7~ zV2UDYa@2R|B{)h?pkg-8cDd&EttK2i`;ro%mYq&Vro@lWVHUOYs3ebyh`FHoLyPV2 zK;3QKiw3qAZ51fY#YPHlvfAij2b}gL2{|cmac%KcZ&!x#km>2^bM%-+C5-!#3aL($ zg%CwMs9W{bHBxd*i*po+8#L}LjOkDD72DQHBNkEu4hy#q+J5_@iq)2~iY`nxzaO=b z+AP7|onw8($rqjRme|U?ph|JG0S)tm?e6_bii3wgo*YtI_=uVKo9srGL_+6hCiVB0wNBpVp7Et-SIaMtOQ#nMW0d`g zPJn8-$*OQr5REe}MjUI}5YC`$zaEX-zk`3Zsa-T}t3H*$Q*2D|BFLF~FXh-NL4J4c z6t&=}h;9A~wcM!wj5XzMmZ=(w=0%cQ$w!!oSMHTO2L+Xkk2kx>bX+xw_Gv@X(xM(w z%nQO2YuCln+LyAVgiIls5n<_#rzyxeC7;H^H;rm*sI^-B;18FtSiX;M0<6VdNQFqn zfVQzW5kSuhtNKEz^P`qd4#nr@yC#%3c_oco@v*=S7w)h~z*+pkWn;W#tTemriqzS@ z>b#2*WD@8K%U5lx=Wi|jS+$*5>NILGPXAqcK!IWs<3$sjgKDNzm@;dJ3qHC2^Qz?| zphYGEI_1=}`1aa#f!9j<6wv8`1uY9A)lWTL;nL>srIG#cgf>N>MSW;EgQm2}$+ddDM8gGEhd?z|(Nx(lh5^El& zPY=s93r7pXy>cDr^2tvcDUZw%%VgC>bV+;a{3D@NQ$ZO>BRyC~b*@ zCpF?ZK@)riOShZEBq=|BkSy&RQte07+Xr}Wc^6;U#eM30(#Uv=3kMH6Bdz9I!WTvu zy|x*->uuP(xG)~sS+VD&1_i+rJ33Z&J%R~n+kp4eoI%6+V5QrnHpyCL0oma{Uea4OBFYqzrY{m4q4`Pt176%`yMUSGj3GCz^w!o=&b-UFgF_dmgXFI7t6%f!owzMw_xg0yCvT>-kXAGroOt@!tyP=G zrJO{v*LI+e65(;H55d?k-y+Hvu1LbS#qJ{Jlr_e)XAG!9Eyf;0sX|XFR98TCv;D$V6F9jRo|zNGj7f^lSPRUqHSVoRvRdtMjfna@aCITu`lA8?%L zfi=45tL*{PjO`<#9707NcIT@b@YiX95qLhZ>qipe=*G0uLq0*j9Yl{kE11WWOOnlO zv!-vwpOUSy^_YK((&c&O(;N-&743eD4H7vfIGXVobINe75Q_pS_0eeK{O@ z_DADhzZm)uVPAQ1x*|1dw)64POl&34$981=9Jo(dd_{1CW}1Sh0&DP4`X>`Uoy zF&0#$B8wF){sP9HlkJi8_CNzrrQ7S29|gyO=C3LKLo@G(74v2Oh~e-E7Z}42dfV6% zyS;vj-K^cps{|U$^t(=4vWj7*oC!(!Y!BwXa5H)Fs8!JkSjBRcwBGKr^e0m0v*_rI zWZeV{EkEom^@2hvAc10=BFZQQh)m-2M{!@>Y6pJ$~Mo89_ldCGtYq!g_`3CC) zY_oz4s{Q+iVI{FXN$f`1dQFMD2}}Z04s=m(v#UQ)uLYXH$2=Ma&VPrhf|(@JkEs$M z^&rI7;1BuF!}U~Z25Pp9IJY55_yr-hZ-5`lc3xJ+JETnWd7*e=%NyP>;`&CZjA<6h+uP!-O@mTlHh|2!k$GCNG1xjMZa$mLHZ7_|CmSVpM`RNKJICZbu zAt5gs=r2>BFr>Wd@jPN@_H0OTk5S#HCl>x%vU%6y99*WM`yi!HPV}1ZVPXD8l1gI24CML`_5uY3s_3w}hBAYmZ3tD{uT;MB zkh?EtV%VU!*4Wdl7Uzy&*jAB(cpRInL2GyfpX=nH%#ze6D(IlpO(~w-L+Rb;hb@hC zUlpA4o$2O9nl&b+se)?}wf8A?O!lc-BgpCr@8WUVJUL1m#ZF)77JxTV$-L+9C@EBn z-OUQQk4@%1@0|2jNe)j0G&DKJHW^b+QWnjW2feFe-GryvKbXJ0!ocXHk9Xk~6Y6=F zvFng{IY9E{s!4#L$RuU6A^uYEgN!S|0ZC?FL?LZXjAY3I)v5bg%q!B1`A#M5NH80L zQHX0sy$OLYjWdDsoC@sigFTwP8;tC_^wZUkwcdSJLsoH$N4o9FJ=MI6-8;G`ZP0f0 zo{V@SIH)^=eyMWgTzjL&h#u!GfbQwSBBk@Effv_8jwdxHR+zGS4Z_IUADK|3$2=q= z02$CpFf=~AQuOxZW;4I9uFafiSW|wD#w0IH?ZFI$b4s(je}j&^W-q&kN2fZXM-OP;jj|KMPQCUG<^Ewg$~cGZFs`^0MfZj44&OLq`!+l zCQH+_syc#&^KySb_UaSwJngURy{k-vcIyr${}k0L*>CXOB(Bn$o635>X`xnaqOs1) zhi9Ebmrwq_`D53eo90iYlPJ`DrrFS)yp9*dD)NTMt&n5fr)wvBv{1x;m%PE#cgP=| zzVyP#Z95;%+1xPR#@1I_!G3>)1vtt!%D9`VTzy8bW7E%$$%8Qy1PdoRL3Si#4}TJQ zhwU~0I;~BJ*2+vWNtXi7pMlMiBb?7q$4;4Ef_I}X!X5lVx5~K|OsFo<@8EgelzNLD zOpQCIGXp&9OuBq-0`JB5fd`Rr{2e#!yrZs7x9j`o;xD0|7d=>J47HA-zRhM0Y$b8H z4r!d(oBffmBOCF-mhh{!Rz|xqepmpg=LAVbJEgVGx0GaA}ePP@7S1&trfvmS?&u5CY}1?ts%AI$}g&gJcB z&www^(15484&a)iyF@pgS~?L?&63XmpfOVZaqpZ@_)Ee#n&&~5&`t=UaTsh ztZNpb+(JZ3oeS?c$yF_jjsrGi^y2q$*css4+G3{NlCXrIVT z(6^%0d#^G-k;JU)+YE*BqG9wOm?z*U2ii`dG`ACSqh{U{I_K^wXY5tg ziC4-`nh#zfaTA&U0LQl9ENWsIdMFo6xVfCUvk0m04C)0NjNn4O=q*?2JAN8 z&Rc2!?Y5e(mbpLAV`EKD-5}AJ+N66k6#+MS)UVI4>PN274>5hwE#A4K{NBH;silwG zvx4!)r%(sCNRU^i%uwL2M^t#urz2{D`qN6%NON)8lHsw!Qm*M*Zrfmz7_U8Z?u<70 zEQ5q?JL9$15At;q!xXYZ3%XC(My+o&(UlN-ljRadOogj@9BQj zIeAx$gX~AuGoP{dj{NwF!MOB9J=NQv!6fwEw_K)v)-&#WXs4kd#cdL|Ew+fpozV(D zTd|w<9zVu2DY^Dttixol^qFqJ0~mc zesbD8U6CwRu$*W_q2kEgUH`$Q`l9(J8h;i@@Ix&4D#zzG3ax|LDQWeMnjOjY+Qi7G z*TiKXg;^WS=iW)(^}sbbb%=CdZYRB?`OPUgbTBsP$SpVYw4@FG)XSnl!oH<@QQ{sY z&v(tz1&KV^U z@thvxzqzq^du!#W?h%YvvWf*xbVizfRGzTw%;Efp^HXuSO1}ut3Z(-t_)-5mq~S*D~iNLmhO@Wn_>+pGQI@p;MkRN`jIb)}1p zwAYeL8HkX_YcLR~ey&}&)wl8yrYx-!-@+q_v2|BR4RE_ksUOq56KmB4su9dTeMAxc zNc}FsYtd=2!7*WIA-6N-O5EeL>;3oA?5;vb-5_RmXh(2^MDS6`*Ne>+(BsTyaO4Y< z7UQQBf}MXIci*Z>AF5S7+tzWLc8NjA#G*#?H4X}|H<3pl!lW+vn+1VhN~6%7b{aSd zUds*l%K7Qg;&4_Tk9a?ZFr*7y&vn8qfjNnUh1AzC#bf!a>#(8_GY+$~3WJVyVZ{cj zs8Olz4YN=<2uDVd`{JdxyGwKL#kEbTu8G?!j1-NEFKaQDyz2J@}Mi9|AfK zJW+*|A&+E@#rdn{H>s58#@D-fC56ta-_D)*V1gw91^Y9}@(8i=lHt?>g^rEUrDj%G zv!3@U=#jC{Bk@_x3}{PMxZ!Zpnru*NW1;?w!}LJuPU?&s(mSTdw*Fu&&`rpgf9B|} zZFnU%(HipAYXx`E{pdoKg`ho-QB6o0C4u90Y4yh2fCe=DzBY0B=B3I1J*puDWeo|AKA^l@F| z253meHoK(`FS?w&`GB_J=tC65<=}k?<%1Cx&UVc0^-e*5Z}DmZs<{pxFM$O7qk01O z+&6BUSLSGpm<65E%1G|}t32BeCRACdTG{m_mnOiF>gd9y7p{>OC#-yE!wRGIl(f>r zjGF~IMzdj2C=dtc8=%#MYJP#Lda2;h4g1$fF)>eOMTR%V^rSvo(TwlBLr(*a=x8e4 zWDCasB9JPaEf}3~Cmq*_n#W?Y^z{RrI#i@53-XA#s*+_vT$2QR)GtliO1-OMp=Eo} zC(1e#i1#oR>mKi%@}_XyWx*RCvwyX2(!?aX9m;JpB+u*5B;B5kb|l7A?mQMw1_`q? z5Mj5*vmWn=5@B1!_7>02cF$NOcm|#!K=0fcneU(?{WDoJ1YE-}>;eMt@xy44I??#y z?g819iTO>gjAOqXo!$pzfpq&kzP~|T9u?V+Z>odR^B>Ka zKz#TCEpa+s+lAEr+HFt4So1*6G+ zd7mU7m!-emnM>U6W=(ZBo@Wk&KTHku|3pM_O`{gTsa}y1`Jp%9u?p`j*W)ObWt#A# zMb9*i3$O&6Xg|-?8hUsS^yv zD)G+MFu436k|kS(7a7c}ovr5=vCN#W)f}J^LR$Dut~cP8qDvPNn+mj|?~8!|sv1mX z$pAE3oO|PWm7P^Hdm|hE^Q!(VcEGqecndV?SQD#y{sGPgEb^x|PYc?H@$5&-8C)4W zjoM^!oO0)JgZ_I<-f0$~Qw|2#!C8)GR#R2n>lnNkKD1G+2jk5yZ1%+y`B6tOr}2q+ zh2FR|H@+{Ht}j&0$}?nkBlqcpLbT+(lSdUy#;28Ax_H;H`pyCaKk<(nS`mhtc>$tM z^>`91p7E8s4>^KQ+pcYD8ZuW}Z8Q3hs&AHrW>Yf6?ris$-v7D4)_2xHv7X3W+S(D| zdE1k6YiC@Vs?8sDa`<)J&*|q(+-Pe4&Ow*kR7ZU@Y7*J(`^V&st=@7AYp?Jl=eu|| z`HFQMET0{G*rXLmnn`xQWZ#?+Ywc#ebWV0z9;*Aw@!fudqp-QN_X8;Fa<8@fB2gAo4}5s>C9*a5dW2l<_{!>B9%QOhk;g813du z!ra3c>=>QeDF`4H9(32!V;qKqCEWEaCg{PZ(e7#s(IG(sb9sKYrCltC00l6?5OmLY zaYPA`o1L2IpT(jfsNd8SasytH&7a<80$Xs9+**9avcVru0U@35%6#?Q#eYGXLK?CV zUEe|^_Lg3qGGdgK{D_1AuFL9vI=`flV|By;89H}okUE<6Q=Q)9uH7)^B>Fj=yuGUR ztl!xw&19c+Qb6-^Lz#8VU;O-dHNT}X2u0x;+173hn2zhuTCY$r75{-_UflDT!tZ`f z*}EsrE)?l&jo~9#!eY$gwc084-Vaifi=OQd=kGzuNfQ}OPB#sfx#@3@rmdU_1jmy!xS za>{8>{hA(8;h}n4J#jlN(;=K&@63^axbhRe)Maka8CP5;K?SqM+}{(=EoMV_!~xW#j3ojg4n0s z@Vy5I<$btMxgJk`E&{PQ;iKyY?x@=N1MR#3$0z)MR8f{0Gu~Kh;Uo-Gl?({9UiP6*M%v*e(Q)O^>hW zFSqUc-n(YxKc^?5fsIbhV}wR2e8pA69|-tt%mMq4@D|N*uyhgM;`GBpzLC zw6}_MoL(|L%i^NYH6dQvcl2T{*h{i+unhJK{@Hfx=^dlky5ZpFCOhEvdQjw)t(0<` z2N}<$6R7thMTX9%If|@X6xdFQ3#mRQmIy%2jCqZmOWqeV7Mn{eDR&6R4>zm>_>2ju zi(}Y+?kMs`+4*h{58_h)#h*5k*AotOzFFVV?2>M>{W(jq8ncgsbMn)dfcqVO!D2Rx zvP-<H^vi{;6 z`yzEe=ca&U;OpVr5NkuWP@XXQ$)I!PBaf3^%j}f+k#Nc8?|!6A&oqGsGaL1o8HM(j zT5omZ9una20V{s!Ta)XA-&st6=#|qcTJuVsh-u_xxQ$fUQJ?<#YMHhIn!m$l z%=>?__uf%WuG_olQc;4afM`JJMN#P>AYJK-2r8Y>#fY>3QbQ35MXAy|0tzS)dhelk zkP>PjbO;ba3!VGnT5F$m_uc!f^*jIFG0s03Uor?^dEYtbGoSg)neFQqlELSWZ;D__ zq~TABJ||fqEnC*g-h|S%&9*mWQ&Or3NK#5UWitti9Rkw}0X3-~`aBc$R@>v?uH*NBIKhCo_ zdD2w2#Y0+6s4nwo#DqRmKSQ!IOul)`@D;3tSKy2Of@4Z{DE}3Ze&Dz2VOjkdyG_L* zx9UzG3q%T+F=xc*Th{lBdSE?r^(Gwr!H;<#AKV`=bzd%H(saARGe0|w!L=v*Kdudu#8C`BLo|R7erXqWE znJ$=v;z(~Y{zyVh+GEMk^l0?3p@Z7uB6j}*@fF0pefsdw=XR~HR9vKp7`;-=N)Cr# zl4?K*p}GZI*-%b6C}f;I`OwC4O!#pbybJ{0W?g>r4-D9J!ZQj5)heq3nzzFxKX{Sc z3+zFE&H`90wv^hJjp7i+_Kc8qV-6WL8CcGoN2E#S2tO3J7g(G41(c1Wk=dd6b2RUB0$2uHt=dfRe~5x(*n5qu0Jw-yLI z_icy`Q0Mpv3JwiGJF_(Ci6S@v#B7mUU2;UMJt+o$1akuP-Jo^7fI-~Rk`*Qe6o&@= z27OGoAD@?MLM?+>g}>d9jHp9#JV*%A064G zofIT19iB?Ur>_Qq9V_8M&~FK9SV7>Bg&H@z07tVjkR4C z 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 =dgVG9t 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