AnsweredAssumed Answered

Graded LTI response returns a NoPOXDataException

Question asked by dl0054917 on Sep 11, 2017
Latest reply on Sep 12, 2017 by dl0054917

Been trying to return a grade back to an LTI assessment.

I have to mention this same LTI is working on Canvas and Moodle so I know the request should be valid.

 

Here's the info

 

  1. tool_consumer_info_product_family_code:
    Blackboard Learn
  2. resource_link_title:
    test quiz 2
  3. context_title:
    ilos
  4. roles:
    urn:lti:role:ims/lis/Learner
  5. lis_person_name_family:
    student
  6. tool_consumer_instance_name:
    Blackboard, Inc.
  7. tool_consumer_instance_guid:
    e56405b710524cc9b236e310843db3ef
  8. resource_link_id:
    _31_1
  9. oauth_signature_method:
    HMAC-SHA1
  10. oauth_version:
    1.0
  11. custom_caliper_profile_url:
  12. launch_presentation_return_url:
  13. ext_launch_id:
    16775750-30ce-4d7c-97ac-b11452ce3793
  14. ext_lms:
    bb-3100.0.0-rel.107+401e22b
  15. lti_version:
    LTI-1p0
  16. lis_person_contact_email_primary:
  17. oauth_signature:
    JXi7rouu4zrECbx5IQ87ygUqNFg=
  18. oauth_consumer_key:
    tOTBiHMP6aLqW2oHYFDf
  19. launch_presentation_locale:
    en-US
  20. custom_caliper_federated_session_id:
  21. oauth_timestamp:
    1505162602
  22. lis_person_name_full:
    student student
  23. tool_consumer_instance_contact_email:
    dev@bbdn.local
  24. lis_result_sourcedid:
    bbgc7gi6
  25. lis_outcome_service_url:
  26. lis_person_name_given:
    student
  27. custom_tc_profile_url:
  28. oauth_nonce:
    354823421260496
  29. lti_message_type:
    basic-lti-launch-request
  30. user_id:
    25def018edf74efb82348cb576bf0b28
  31. oauth_callback:
    about:blank
  32. tool_consumer_info_version:
    3100.0.0-rel.107+401e22b
  33. context_id:
    82dd9f15ed0a4291a01bff29456c0440
  34. context_label:
    1
  35. launch_presentation_document_target:
    frame
  36. ext_launch_presentation_css_url:

The lis_outcome_service_url is there, the user_id is there. AFAIK everything we need is there

Next the POX (as you can see the sourcedId is there

              <?xml version = "1.0" encoding = "UTF-8"?>                 <imsx_POXEnvelopeRequest xmlns = "http://www.imsglobal.org/lis/oms1p0/pox">                   <imsx_POXHeader>                     <imsx_POXRequestHeaderInfo>                       <imsx_version>V1.0</imsx_version>                       <imsx_messageIdentifier>59b6f6cacbc57</imsx_messageIdentifier>                     </imsx_POXRequestHeaderInfo>                   </imsx_POXHeader>                   <imsx_POXBody>                     <replaceResultRequest>                       <resultRecord>                         <sourcedGUID>                           <sourcedId>bbgc7gi6</sourcedId>                         </sourcedGUID>                         <result>                           <resultScore>                             <language>en</language>                             <textString>1</textString>                           </resultScore>                         </result>                       </resultRecord>                     </replaceResultRequest>                   </imsx_POXBody>                 </imsx_POXEnvelopeRequest>

Next comes the post request, the body_hash is there along with all the other information.

 

Trying 198.36.213.26... * connected

* Connected to blackboarddemo.ddns.net (198.36.213.26) port 9877 (#0)

* skipping SSL peer certificate verification

* SSL connection using TLS_RSA_WITH_AES_128_CBC_SHA

* Server certificate:

* subject: CN=dev.bbdn.local

* start date: Dec 05 00:00:00 2016 GMT

* expire date: Dec 05 00:00:00 2018 GMT

* common name: dev.bbdn.local

* issuer: CN=dev.bbdn.local

> POST /webapps/gradebook/lti11grade HTTP/1.1

User-Agent: GuzzleHttp/6.2.1 curl/7.19.7 PHP/7.1.3

Host: blackboarddemo.ddns.net:9877

Content-Type: application/xml

Authorization: OAuth oauth_body_hash="yhtMQzlHB%2Ba3QcLQqYBkxNtFEwI%3D", oauth_consumer_key="tOTBiHMP6aLqW2oHYFDf", oauth_nonce="70f3eef1600adcd91298d31dda3b3086edb8f5c2", oauth_signature="UoMnRAZEBo52KMKSmYeGAD8uC1I%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1505162954", oauth_version="1.0"

Content-Length: 1128

 

I know the signature is correct because I have tried the same in other LMSes

 

But here's the response

 

< HTTP/1.1 500

< P3P: CP="CAO PSA OUR"

< X-Blackboard-appserver: dev.bbdn.local

< X-Blackboard-product: Blackboard Learn &#8482; 3100.0.0-rel.107+401e22b

< Pragma: private

< Cache-Control: private

< Cache-Control: max-age=0

< Cache-Control: no-store

< Cache-Control: must-revalidate

< Last-Modified: Thu, 11 Sep 1997 20:49:15 GMT

< Expires: Sun, 11 Sep 2016 20:49:15 GMT

< X-Frame-Options: SAMEORIGIN

< Content-Security-Policy: frame-ancestors 'self'

< Set-Cookie: JSESSIONID=2DC137AC47F7A2A73B99EFBC1C6509CF;path=/webapps/gradebook;Secure

< X-Blackboard-errorid: 259fd686-22b8-461a-ae59-4d80aea9b3ee

< Content-Type: text/html;charset=UTF-8

< Content-Language: en-US

< Transfer-Encoding: chunked

< Vary: Accept-Encoding

< Date: Mon, 11 Sep 2017 20:49:15 GMT

< Connection: close


Here's the trace

 

<!--log_error\n

blackboard.blti.outcomes.NoPOXDataException: //lti:sourcedId\n

\tat blackboard.blti.outcomes.POXDocument.throwIfEmpty(Unknown Source)\n

\tat blackboard.blti.outcomes.POXDocument.getXPathValue(Unknown Source)\n

\tat blackboard.blti.outcomes.POXDocument.getTagValue(Unknown Source)\n

\tat blackboard.blti.outcomes.consumer.POXRequest.getSourcedID(Unknown Source)\n

\tat blackboard.blti.outcomes.consumer.POXOutcomesRequestHandler.handle(Unknown Source)\n

\tat blackboard.webapps.gradebook2.lti.LTI11GradingEndPointServlet.doPost(LTI11GradingEndPointServlet.java:26)\n

\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:648)\n

\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:729)\n

\tat sun.reflect.GeneratedMethodAccessor811.invoke(Unknown Source)\n

\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n

\tat java.lang.reflect.Method.invoke(Method.java:498)\n

\tat org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:282)\n

\tat org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:279)\n

\tat java.security.AccessController.doPrivileged(Native Method)\n

\tat javax.security.auth.Subject.doAsPrivileged(Subject.java:549)\n

\tat org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:314)\n

\tat org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:170)\n

\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:224)\n

\tat org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:46)\n

\tat org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:148)\n

\tat org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:144)\n

\tat java.security.AccessController.doPrivileged(Native Method)\n

\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:143)\n

\tat blackboard.platform.servlet.DevNonceFilter.doFilter(DevNonceFilter.java:68)\n

\tat sun.reflect.GeneratedMethodAccessor805.invoke(Unknown Source)\n

\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n

\tat java.lang.reflect.Method.invoke(Method.java:498)\n

\tat org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:282)\n

\tat org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:279)\n

\tat java.security.AccessController.doPrivileged(Native Method)\n

\tat javax.security.auth.Subject.doAsPrivileged(Subject.java:549)\n

\tat org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:314)\n

\tat org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:253)\n

\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\n

\tat org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:46)\n

\tat org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:148)\n

\tat org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:144)\n

\tat java.security.AccessController.doPrivileged(Native Method)\n

\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:143)\n

\tat blackboard.platform.servlet.B2ContextFilter.doFilter(B2ContextFilter.java:137)\n

\tat sun.reflect.GeneratedMethodAccessor805.invoke(Unknown Source)\n

\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n

\tat java.lang.reflect.Method.invoke(Method.java:498)\n

\tat org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:282)\n

\tat org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:279)\n

\tat java.security.AccessController.doPrivileged(Native Method)\n

\tat javax.security.auth.Subject.doAsPrivileged(Subject.java:549)\n

\tat org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:314)\n

\tat org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:253)\n

\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\n

\tat org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:46)\n

\tat org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:148)\n

\tat org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:144)\n

\tat java.security.AccessController.doPrivileged(Native Method)\n

\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:143)\n

\tat blackboard.platform.servlet.ContentTypeFilter.doFilter(ContentTypeFilter.java:53)\n

\tat sun.reflect.GeneratedMethodAccessor805.invoke(Unknown Source)\n

\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n

\tat java.lang.reflect.Method.invoke(Method.java:498)\n

\tat org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:282)\n

\tat org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:279)\n

\tat java.security.AccessController.doPrivileged(Native Method)\n

\tat javax.security.auth.Subject.doAsPrivileged(Subject.java:549)\n

\tat org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:314)\n

\tat org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:253)\n

\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\n

\tat org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:46)\n

\tat org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:148)\n

\tat org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:144)\n

\tat java.security.AccessController.doPrivileged(Native Method)\n

\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:143)\n

\tat blackboard.platform.servlet.XssServletFilter.doFilter(XssServletFilter.java:48)\n

\tat sun.reflect.GeneratedMethodAccessor805.invoke(Unknown Source)\n

\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n

\tat java.lang.reflect.Method.invoke(Method.java:498)\n

\tat org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:282)\n

\tat org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:279)\n

\tat java.security.AccessController.doPrivileged(Native Method)\n

\tat javax.security.auth.Subject.doAsPrivileged(Subject.java:549)\n

\tat org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:314)\n

\tat org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:253)\n

\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\n

\tat org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:46)\n

\tat org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:148)\n

\tat org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:144)\n

\tat java.security.AccessController.doPrivileged(Native Method)\n

\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:143)\n

\tat blackboard.platform.servlet.XssInputValidationFilter.doFilter(XssInputValidationFilter.java:40)\n

\tat sun.reflect.GeneratedMethodAccessor805.invoke(Unknown Source)\n

\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n

\tat java.lang.reflect.Method.invoke(Method.java:498)\n

\tat org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:282)\n

\tat org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:279)\n

\tat java.security.AccessController.doPrivileged(Native Method)\n

\tat javax.security.auth.Subject.doAsPrivileged(Subject.java:549)\n

\tat org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:314)\n

\tat org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:253)\n

\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\n

\tat org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:46)\n

\tat org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:148)\n

\tat org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:144)\n

\tat java.security.AccessController.doPrivileged(Native Method)\n

\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:143)\n

\tat blackboard.platform.servlet.ContentIsolationFilter.doFilter(ContentIsolationFilter.java:83)\n

\tat sun.reflect.GeneratedMethodAccessor805.invoke(Unknown Source)\n

\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n

\tat java.lang.reflect.Method.invoke(Method.java:498)\n

\tat org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:282)\n

\tat org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:279)\n

\tat java.security.AccessController.doPrivileged(Native Method)\n

\tat javax.security.auth.Subject.doAsPrivileged(Subject.java:549)\n

\tat org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:314)\n

\tat org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:253)\n

\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\n

\tat org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:46)\n

\tat org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:148)\n

\tat org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:144)\n

\tat java.security.AccessController.doPrivileged(Native Method)\n

\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:143)\n

\tat blackboard.platform.servlet.RequestSessionFilter.doFilter(RequestSessionFilter.java:198)\n

\tat sun.reflect.GeneratedMethodAccessor805.invoke(Unknown Source)\n

\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n

\tat java.lang.reflect.Method.invoke(Method.java:498)\n

\tat org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:282)\n

\tat org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:279)\n

\tat java.security.AccessController.doPrivileged(Native Method)\n

\tat javax.security.auth.Subject.doAsPrivileged(Subject.java:549)\n

\tat org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:314)\n

\tat org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:253)\n

\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\n

\tat org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:46)\n

\tat org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:148)\n

\tat org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:144)\n

\tat java.security.AccessController.doPrivileged(Native Method)\n

\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:143)\n

\tat blackboard.platform.servlet.RequestSecurityFilter.doFilter(RequestSecurityFilter.java:77)\n

\tat sun.reflect.GeneratedMethodAccessor805.invoke(Unknown Source)\n

\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n

\tat java.lang.reflect.Method.invoke(Method.java:498)\n

\tat org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:282)\n

\tat org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:279)\n

\tat java.security.AccessController.doPrivileged(Native Method)\n

\tat javax.security.auth.Subject.doAsPrivileged(Subject.java:549)\n

\tat org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:314)\n

\tat org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:253)\n

\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\n

\tat org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:46)\n

\tat org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:148)\n

\tat org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:144)\n

\tat java.security.AccessController.doPrivileged(Native Method)\n

\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:143)\n

\tat blackboard.platform.servlet.RequestClassParamFilter.doFilter(RequestClassParamFilter.java:42)\n

\tat sun.reflect.GeneratedMethodAccessor805.invoke(Unknown Source)\n

\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n

\tat java.lang.reflect.Method.invoke(Method.java:498)\n

\tat org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:282)\n

\tat org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:279)\n

\tat java.security.AccessController.doPrivileged(Native Method)\n

\tat javax.security.auth.Subject.doAsPrivileged(Subject.java:549)\n

\tat org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:314)\n

\tat org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:253)\n

\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)\n

\tat org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:46)\n

\tat org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:148)\n

\tat org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:144)\n

\tat java.security.AccessController.doPrivileged(Native Method)\n

\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:143)\n

\tat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)\n

\tat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108)\n

\tat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)\n

\tat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)\n

\tat org.apache.catalina.valves.StuckThreadDetectionValve.invoke(StuckThreadDetectionValve.java:206)\n

\tat org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)\n

\tat org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:677)\n

\tat blackboard.tomcat.valves.LoggingRemoteIpValve.invoke(LoggingRemoteIpValve.java:44)\n

\tat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)\n

\tat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)\n

\tat org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:1110)\n

\tat org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)\n

\tat org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:785)\n

\tat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1425)\n

\tat org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n

\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)\n

\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)\n

\tat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n

\tat java.lang.Thread.run(Thread.java:745)\n

 

What could I be missing?

 

Thanks!

Outcomes